feat:记录会话,按顺序记录AI和用户的会话

- 包含工具调用等
This commit is contained in:
Roe-xin
2025-12-25 15:13:15 +08:00
parent ef83016b7f
commit 25a8ea5aa4
2 changed files with 51 additions and 0 deletions

View File

@ -333,6 +333,24 @@ export class ChatHistoryManager {
await this.saveConversation(messages); await this.saveConversation(messages);
} }
/**
* 添加工具执行结果消息
*/
public async addToolExecutionResult(id: string, toolName: string, result: string): Promise<void> {
await this.ensureCurrentTask();
const messages = await this.loadConversation();
const toolResultMessage: ToolExecutionResultMessage = {
type: MessageType.TOOL_EXECUTION_RESULT,
id,
toolName,
text: result
};
messages.push(toolResultMessage);
await this.saveConversation(messages);
}
/** /**
* 记录对话轮次元数据 * 记录对话轮次元数据
*/ */

View File

@ -170,6 +170,39 @@ async function handleUserMessageWithBackend(
}); });
console.log('[MessageHandler] postMessage 返回值:', result); console.log('[MessageHandler] postMessage 返回值:', result);
// 按照 segments 顺序保存AI响应到历史记录
try {
// 遍历 segments按顺序保存每个段落
for (const segment of segments) {
if (segment.type === 'text' && segment.content) {
// 保存文本消息
await historyManager.addAiMessage(segment.content);
} else if (segment.type === 'tool') {
// 保存工具调用请求作为AI消息的一部分
const toolRequest = {
id: segment.askId || `tool_${Date.now()}`,
name: segment.toolName || '',
arguments: ''
};
await historyManager.addAiMessage('', [toolRequest]);
// 如果有工具执行结果,保存工具执行结果
if (segment.toolResult) {
await historyManager.addToolExecutionResult(
toolRequest.id,
segment.toolName || '',
segment.toolResult
);
}
} else if (segment.type === 'question') {
// 保存问题作为AI消息
await historyManager.addAiMessage(segment.question || '');
}
}
} catch (error) {
console.warn("保存AI响应历史失败:", error);
}
resolve(); resolve();
}, },