fix: natural follow-up conversation flow
- Grader: separate followup hint from scoring feedback - Interviewer: use followup hint directly without prefix/suffix - Restored standard and choice question presentation paths
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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');
|
||||
});
|
||||
|
||||
|
||||
@@ -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}`
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user