@kangthink/q-engine
Version:
A question-answer generation engine that stimulates thinking
90 lines • 4.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MatrixTransform = void 0;
const types_1 = require("../types");
const BaseTransform_1 = require("./BaseTransform");
class MatrixTransform extends BaseTransform_1.BaseTransform {
constructor() {
super(...arguments);
this.mode = types_1.TransformMode.MATRIX;
}
async transform(context) {
const { sourceNode, options } = context;
// Extract matrix-specific options
const matrixOptions = options?.matrixOptions || {
level: types_1.MatrixLevel.UNDERSTAND_EXPLAIN,
direction: types_1.MatrixDirection.FOCUSED,
};
// Matrix method typically generates questions
const targetNodeType = options?.targetNodeType || this.defaultTargetType;
// Get or create prompt template
const promptTemplate = this.promptManager.getPrompt(this.mode) ||
this.promptManager.getDefaultPrompt(this.mode);
// Build prompt with variables
const targetTypeKorean = targetNodeType === types_1.NodeType.QUESTION ? '질문' : '답변';
const count = options?.count ? ` ${options.count}` : '';
const prompt = this.buildPrompt(promptTemplate.template, {
content: sourceNode.content,
targetType: targetTypeKorean,
count: count,
level: matrixOptions.level,
levelDescription: this.getLevelDescription(matrixOptions.level),
direction: matrixOptions.direction,
directionDescription: this.getDirectionDescription(matrixOptions.direction),
});
// Generate content using LLM
const generatedContent = await this.generateContent(prompt);
// Parse content to extract single result (first item if multiple)
const parsedContent = this.extractSingleResult(generatedContent);
// Create and return transform result with matrix metadata
const result = this.createTransformResult(sourceNode, parsedContent, targetNodeType);
result.edge.metadata = {
...result.edge.metadata,
matrixLevel: matrixOptions.level,
matrixDirection: matrixOptions.direction,
};
return result;
}
getLevelDescription(level) {
const descriptions = {
[types_1.MatrixLevel.FACT_CHECK]: '사실 확인: 표면적 정보(무엇, 언제, 누가) 묻기',
[types_1.MatrixLevel.UNDERSTAND_EXPLAIN]: '이해·설명: 왜, 어떻게 등 개념·원리 묻기',
[types_1.MatrixLevel.CAUSE_CONTEXT]: '원인·맥락 파악: 배경·상호관계·역사적 맥락 묻기',
[types_1.MatrixLevel.APPLY_COMPARE]: '적용·비교: 다른 상황·사례에 적용하거나 유사 대상을 비교',
[types_1.MatrixLevel.EVALUATE_CREATE_CRITIQUE]: '평가·창의·비판: 가정·한계·대안 제시, 비판적 관점으로 질문',
};
return descriptions[level];
}
getDirectionDescription(direction) {
const descriptions = {
[types_1.MatrixDirection.FOCUSED]: '직진: 본문·대상 내부에 깊이 파고드는 질문',
[types_1.MatrixDirection.CONTEXT]: '확장: 주변 문맥·관련 주제·유사 사례로 시야 확장',
[types_1.MatrixDirection.APPLIED]: '응용: 배운 개념을 새로운 상황·분야에 적용',
[types_1.MatrixDirection.CRITICAL]: '비판: 한계·문제점·대안을 비판적 관점에서 제기',
};
return descriptions[direction];
}
buildMultiplePrompt(template, variables) {
const matrixOptions = variables.matrixOptions || {
level: variables.level || types_1.MatrixLevel.UNDERSTAND_EXPLAIN,
direction: variables.direction || types_1.MatrixDirection.FOCUSED,
};
const extendedVariables = {
...variables,
level: matrixOptions.level,
levelDescription: this.getLevelDescription(matrixOptions.level),
direction: matrixOptions.direction,
directionDescription: this.getDirectionDescription(matrixOptions.direction),
};
return this.buildPrompt(template, extendedVariables);
}
/**
* 다중 결과에서 첫 번째 결과만 추출
*/
extractSingleResult(content) {
const parsedResults = this.parseMultipleResults(content);
return parsedResults.length > 0 ? parsedResults[0] : content.trim();
}
}
exports.MatrixTransform = MatrixTransform;
//# sourceMappingURL=MatrixTransform.js.map