diff --git a/server/src/assessment/graph/nodes/grader.node.ts b/server/src/assessment/graph/nodes/grader.node.ts index 3a07579..dc7b032 100644 --- a/server/src/assessment/graph/nodes/grader.node.ts +++ b/server/src/assessment/graph/nodes/grader.node.ts @@ -252,10 +252,15 @@ Format your response as JSON: shouldFollowUp = false; } + let followupHintMsg: AIMessage | null = null; if (shouldFollowUp && followupHints.length > 0) { const hint = followupHints[Math.min(currentFollowUpCount, followupHints.length - 1)]; - const hintLabel = isZh ? '追问方向' : isJa ? '追加の方向性' : 'Follow-up hint'; - enhancedFeedback = `${result.feedback}\n\n${hintLabel}: ${hint}`; + const hintLabel = isZh + ? `让我帮你完善一下:${hint}` + : isJa + ? `もう少し詳しく伺います:${hint}` + : `Let me help you elaborate: ${hint}`; + followupHintMsg = new AIMessage(hintLabel); } const feedbackMessage = new AIMessage( @@ -271,8 +276,12 @@ Format your response as JSON: saysIDontKnow, }); + const feedbackHistoryMessages = followupHintMsg + ? [feedbackMessage, followupHintMsg] + : [feedbackMessage]; + return { - feedbackHistory: [feedbackMessage], + feedbackHistory: feedbackHistoryMessages, scores: newScores, shouldFollowUp: shouldFollowUp, followUpCount: shouldFollowUp ? currentFollowUpCount + 1 : 0, diff --git a/server/src/assessment/graph/nodes/interviewer.node.spec.ts b/server/src/assessment/graph/nodes/interviewer.node.spec.ts index aad2c71..e6194f0 100644 --- a/server/src/assessment/graph/nodes/interviewer.node.spec.ts +++ b/server/src/assessment/graph/nodes/interviewer.node.spec.ts @@ -81,14 +81,13 @@ describe('interviewerNode', () => { }); describe('follow-up mode', () => { - it('should include feedback in follow-up prompt', async () => { + it('should use last feedbackHistory message content as follow-up prompt', async () => { const state = baseState({ shouldFollowUp: true, - feedbackHistory: [new AIMessage('Feedback: You need more details')], + feedbackHistory: [new AIMessage('You need more details')], }); const result = await interviewerNode(state); const msg = (result.messages as any)[0].content as string; - expect(msg).toContain('Follow-up'); expect(msg).toContain('You need more details'); }); diff --git a/server/src/assessment/graph/nodes/interviewer.node.ts b/server/src/assessment/graph/nodes/interviewer.node.ts index 10ef79b..3be8d7a 100644 --- a/server/src/assessment/graph/nodes/interviewer.node.ts +++ b/server/src/assessment/graph/nodes/interviewer.node.ts @@ -49,27 +49,7 @@ export const interviewerNode = async ( ) { const lastFeedbackMsg = state.feedbackHistory[state.feedbackHistory.length - 1]; - const feedbackText = lastFeedbackMsg.content.toString(); - - const feedbackMatch = feedbackText.match( - /(?:Feedback|反馈|フィードバック): ([\s\S]*)/i, - ); - const specificFeedback = feedbackMatch - ? feedbackMatch[1].trim() - : feedbackText; - - const followUpLabel = isZh - ? '补充追问' - : isJa - ? '追加の質問' - : 'Follow-up Clarification'; - const followUpInstruction = isZh - ? '根据以上反馈,请补充更具体的信息:' - : isJa - ? '上記のフィードバックに基づき、より具体的な情報を追加してください:' - : 'Based on the feedback above, please provide more specific details:'; - - prompt = `${followUpLabel}\n\n${specificFeedback}\n\n${followUpInstruction}`; + prompt = lastFeedbackMsg.content.toString(); } else if (currentQuestion.questionType === 'MULTIPLE_CHOICE' && currentQuestion.options?.length > 0) { const label = isZh ? `问题 ${currentQuestionIndex + 1}` diff --git a/server/test-output.txt b/server/test-output.txt new file mode 100644 index 0000000..101ba1f Binary files /dev/null and b/server/test-output.txt differ