From aa90769a3dfcad40af5504edda2b4b79ac97ff3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AC=E6=98=8E?= <83812544+Ed1s0nZ@users.noreply.github.com> Date: Wed, 24 Dec 2025 15:32:30 +0800 Subject: [PATCH] Add files via upload --- internal/agent/agent.go | 7 +++++++ internal/handler/agent.go | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/internal/agent/agent.go b/internal/agent/agent.go index edaca12d..7b24d7c3 100644 --- a/internal/agent/agent.go +++ b/internal/agent/agent.go @@ -1377,6 +1377,13 @@ func (a *Agent) handleToolRoleError(errMsg string, messages *[]ChatMessage) bool return true } +// RepairOrphanToolMessages 清理失去配对的tool消息和未完成的tool_calls,避免OpenAI报错 +// 同时确保历史消息中的tool_calls只作为上下文记忆,不会触发重新执行 +// 这是一个公开方法,可以在恢复历史消息时调用 +func (a *Agent) RepairOrphanToolMessages(messages *[]ChatMessage) bool { + return a.repairOrphanToolMessages(messages) +} + // repairOrphanToolMessages 清理失去配对的tool消息和未完成的tool_calls,避免OpenAI报错 // 同时确保历史消息中的tool_calls只作为上下文记忆,不会触发重新执行 func (a *Agent) repairOrphanToolMessages(messages *[]ChatMessage) bool { diff --git a/internal/handler/agent.go b/internal/handler/agent.go index 36a8eb67..0374acea 100644 --- a/internal/handler/agent.go +++ b/internal/handler/agent.go @@ -831,6 +831,16 @@ func (h *AgentHandler) loadHistoryFromReActData(conversationID string) ([]agent. return nil, fmt.Errorf("从ReAct数据解析的消息为空") } + // 修复可能存在的失配tool消息,避免OpenAI报错 + // 这可以防止出现"messages with role 'tool' must be a response to a preceeding message with 'tool_calls'"错误 + if h.agent != nil { + if fixed := h.agent.RepairOrphanToolMessages(&agentMessages); fixed { + h.logger.Info("修复了从ReAct数据恢复的历史消息中的失配tool消息", + zap.String("conversationId", conversationID), + ) + } + } + h.logger.Info("从ReAct数据恢复历史消息完成", zap.String("conversationId", conversationID), zap.String("dataSource", dataSource),