@kangthink/q-engine
Version:
A question-answer generation engine that stimulates thinking
129 lines • 6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MockLLMProvider = void 0;
class MockLLMProvider {
constructor() {
this.responses = new Map();
this.defaultResponse = 'Generated response based on the prompt.';
}
async generateResponse(prompt) {
// Check if we have a predefined response for this prompt
const response = this.responses.get(prompt);
if (response) {
return response;
}
// Simple mock response generation based on prompt content
if (prompt.includes('5W1H') || prompt.includes('육하원칙')) {
return this.generate5W1HResponse(prompt);
}
else if (prompt.includes('Socratic') || prompt.includes('소크라테스')) {
return this.generateSocraticResponse(prompt);
}
else if (prompt.includes('Matrix') || prompt.includes('방법')) {
return this.generateMatrixResponse(prompt);
}
else if (prompt.includes('답변을') || prompt.includes('answer')) {
return this.generateAnswerResponse(prompt);
}
return this.defaultResponse;
}
setResponse(prompt, response) {
this.responses.set(prompt, response);
}
generate5W1HResponse(prompt) {
const content = this.extractContent(prompt);
const count = this.extractCount(prompt);
if (count > 1) {
const questions = [
`누가 "${content}"와 관련이 있나요?`,
`"${content}"의 핵심은 무엇인가요?`,
`"${content}"는 언제 일어나나요?`,
`"${content}"는 어디서 발생하나요?`,
`"${content}"는 왜 중요한가요?`,
`"${content}"는 어떻게 작동하나요?`
];
return questions.slice(0, count).join('\n');
}
return `"${content}"에 대한 육하원칙(5W1H) 분석:
- 누가(Who): 관련된 주요 이해관계자들
- 무엇을(What): 핵심 주제나 내용
- 언제(When): 관련 시간적 맥락
- 어디서(Where): 상황이나 위치적 맥락
- 왜(Why): 근본적인 이유나 동기
- 어떻게(How): 방법이나 과정`;
}
generateSocraticResponse(prompt) {
const content = this.extractContent(prompt);
const count = this.extractCount(prompt);
if (count > 1) {
const questions = [
`"${content}"에 대해 어떤 가정을 하고 계신가요?`,
`다른 관점에서 "${content}"를 어떻게 볼 수 있을까요?`,
`"${content}"의 정의가 명확한가요?`,
`"${content}"에 대한 증거는 무엇인가요?`,
`"${content}"의 한계는 무엇일까요?`
];
return questions.slice(0, count).join('\n');
}
return `"${content}"에 대해 어떤 가정을 하고 계신가요?
다른 관점들도 고려해보셨나요?
당신의 이해를 뒷받침하는 증거는 무엇인가요?
이 개념의 정의가 명확한가요?`;
}
generateMatrixResponse(prompt) {
const content = this.extractContent(prompt);
const level = this.extractLevel(prompt);
const direction = this.extractDirection(prompt);
const count = this.extractCount(prompt);
if (count > 1) {
const questions = [
`"${content}"의 핵심 요소는 무엇인가요?`,
`"${content}"와 관련된 다른 개념들은 무엇인가요?`,
`"${content}"를 다른 분야에 어떻게 적용할 수 있나요?`,
`"${content}"의 한계와 대안은 무엇인가요?`,
`"${content}"에 대한 비판적 관점은 무엇인가요?`
];
return questions.slice(0, count).join('\n');
}
return `"${content}"에 대한 Matrix 분석 (레벨: ${level}, 방향: ${direction}):
이 주제를 다각도에서 더 깊이 탐구해보세요.
- 현재 레벨에서 어떤 새로운 관점을 발견할 수 있나요?
- 이 방향으로 사고를 확장하면 어떤 통찰을 얻을 수 있을까요?`;
}
extractContent(prompt) {
const match = prompt.match(/"([^"]+)"/);
return match ? match[1] : 'the given content';
}
extractLevel(prompt) {
const match = prompt.match(/Level:\s*(\d+)/);
return match ? match[1] : '2';
}
extractDirection(prompt) {
const match = prompt.match(/Direction:\s*(\w+)/);
return match ? match[1] : 'FOCUSED';
}
generateAnswerResponse(prompt) {
const content = this.extractContent(prompt);
const count = this.extractCount(prompt);
if (count > 1) {
const answers = [
`"${content}"에 대한 첫 번째 답변입니다. Mock 답변으로 실제 내용과 다를 수 있습니다.`,
`"${content}"에 대한 두 번째 관점의 답변입니다. 다른 접근 방식을 제시합니다.`,
`"${content}"에 대한 세 번째 답변으로, 추가적인 시각을 제공합니다.`,
`"${content}"에 대한 네 번째 답변이며, 보완적인 설명을 포함합니다.`,
`"${content}"에 대한 다섯 번째 답변으로, 종합적인 관점을 제시합니다.`
];
return answers.slice(0, count).join('\n');
}
return `"${content}"에 대한 Mock 답변입니다. 실제 AI 서비스를 사용하면 더 정확하고 유용한 답변을 받을 수 있습니다. 이는 테스트를 위한 가상의 응답입니다.`;
}
extractCount(prompt) {
const match = prompt.match(/질문\s*(\d+)개|답변\s*(\d+)개|\s(\d+)개의/);
if (match) {
return parseInt(match[1] || match[2] || match[3]);
}
return 1;
}
}
exports.MockLLMProvider = MockLLMProvider;
//# sourceMappingURL=MockLLMProvider.js.map