UNPKG

@kangthink/q-engine

Version:

A question-answer generation engine that stimulates thinking

90 lines 4.6 kB
"use strict"; 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