UNPKG

@kangthink/q-engine

Version:

A question-answer generation engine that stimulates thinking

88 lines 4.01 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AnswerTransform = void 0; const BaseTransform_1 = require("./BaseTransform"); const types_1 = require("../types"); class AnswerTransform extends BaseTransform_1.BaseTransform { constructor() { super(...arguments); this.mode = types_1.TransformMode.ANSWER; this.defaultTargetType = types_1.NodeType.ANSWER; } async transform(context) { const { sourceNode, options } = context; const answerOptions = options?.answerOptions || { length: types_1.AnswerLength.MEDIUM, tone: 'formal' }; // Get or create prompt template const promptTemplate = this.promptManager.getPrompt(this.mode) || this.promptManager.getDefaultPrompt(this.mode); // Build prompt with answer-specific variables const lengthGuidance = this.getLengthGuidance(answerOptions.length); const toneGuidance = this.getToneGuidance(answerOptions.tone || 'formal'); const exampleGuidance = answerOptions.includeExamples ? '구체적인 예시를 포함하여' : ''; const prompt = this.buildPrompt(promptTemplate.template, { content: sourceNode.content, lengthGuidance, toneGuidance, exampleGuidance, targetType: '답변' }); // Generate answer using LLM const generatedContent = await this.generateContent(prompt); // Validate answer length and adjust if necessary const adjustedContent = this.adjustAnswerLength(generatedContent, answerOptions.length); return this.createTransformResult(sourceNode, adjustedContent, types_1.NodeType.ANSWER); } getLengthGuidance(length) { switch (length) { case types_1.AnswerLength.SHORT: return '1-2문장으로 간단하고 핵심적으로'; case types_1.AnswerLength.MEDIUM: return '3-5문장으로 적절한 설명과 함께'; case types_1.AnswerLength.LONG: return '6-10문장으로 충분한 설명과 배경 정보를 포함하여'; case types_1.AnswerLength.DETAILED: return '10문장 이상으로 매우 상세하고 포괄적으로'; default: return '3-5문장으로 적절한 설명과 함께'; } } getToneGuidance(tone) { switch (tone) { case 'formal': return '정중하고 격식 있는 어조로'; case 'casual': return '친근하고 편안한 어조로'; case 'academic': return '학술적이고 전문적인 어조로'; case 'simple': return '쉽고 이해하기 쉬운 어조로'; default: return '정중하고 격식 있는 어조로'; } } adjustAnswerLength(content, targetLength) { const sentences = content.split(/[.!?]+/).filter(s => s.trim().length > 0); switch (targetLength) { case types_1.AnswerLength.SHORT: return sentences.slice(0, 2).join('. ') + '.'; case types_1.AnswerLength.MEDIUM: return sentences.slice(0, 5).join('. ') + '.'; case types_1.AnswerLength.LONG: return sentences.slice(0, 10).join('. ') + '.'; case types_1.AnswerLength.DETAILED: return content; // 원본 그대로 반환 default: return sentences.slice(0, 5).join('. ') + '.'; } } buildMultiplePrompt(template, variables) { const count = variables.count || 3; const modifiedTemplate = template.replace('{{lengthGuidance}}', `${variables.lengthGuidance} ${count}개의 서로 다른 관점에서`); return this.buildPrompt(modifiedTemplate, variables); } } exports.AnswerTransform = AnswerTransform; //# sourceMappingURL=AnswerTransform.js.map