十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

OpenOcta 1.0.7 实测:工具调用偶发 400 报错(assistant tool_calls 未配对)排查记录

OpenOcta 1.0.7 实测:工具调用偶发 400 报错(assistant tool_calls 未配对)排查记录 OpenOcta 1.0.7 实测工具调用偶发 400 报错assistant tool_calls 未配对排查记录适用平台CSDN / 掘金技术版 状态待发布## 背景OpenOcta八爪鱼是国内开源的桌面级 AI 智能体Go 单二进制内置 Control UI定位是双击即用的个人 Agent。近期在 1.0.7 版本上实测发现一个会影响工具类任务可用性的 BugAgent 调用工具后偶发 400 报错且出错后会话直接报废。本文记录完整的复现步骤与排查过程。## 环境- OpenOcta 1.0.7Windows 11 桌面版- 模型deepseek-chatOpenAI 兼容模式https://api.deepseek.com/v1- 配置目录%APPDATA%\openocta\openocta.json## 现象新建会话后让 Agent 执行需要调用工具的任务记忆搜索、MCP 调用等Agent 回复文本并发出 tool_call 后下一次模型请求报[NodeRunError] error, status code: 400, status: 400 Bad Request, message:An assistant message with tool_calls must be followed by tool messages responding to each tool_call_id,The following tool_call_ids did not have response messages: call_00_xxxxxxxxxxxxnode path: [node_1, ChatModel]## 复现步骤1. 打开「消息」新建会话2. 让 Agent 执行需要调用工具的任务如检查你的工具库里有没有 XX 工具会触发 memory_search / MCP 调用3. Agent 发出 tool_call 后报 400对话中断。## 排查发现1.偶发非必现有时连续两次工具调用正常tool_result 正常记录第三次就出现未配对的 tool_call_id。2.会话记录缺失出错时会话转录jsonl中新增的 tool_call 没有对应的 tool_result 条目。3.会话报废一旦出过一次 400该会话之后任何新消息都会先命中同一条 400只能开新会话恢复。4.官方修复历史v1.0.5、v1.0.6 的 changelog 均有相关修复“keep sequential assistant/tool pairs when normalizing history”但 1.0.7 上仍可复现疑似历史规整逻辑存在未覆盖路径如 assistant 消息混排 a2ui 内容块与 tool_call 时。## 影响Agent 无法可靠使用任何工具记忆搜索、MCP、技能工具类任务随机中断。DeepSeek 对 tool_calls 消息序列要求严格assistant 含 tool_calls 时下一条必须是对应全部 tool_call_id 的响应消息在该模型下问题尤为明显。## 建议1. 排查历史规整逻辑中 tool_call 与 tool_result 的配对完整性重点覆盖「assistant 消息混排 a2ui tool_call」场景2. 工具执行失败/超时/进程未启动时应写入错误 tool_result 兜底或回滚该 tool_call保证消息序列始终成对3. 建议提供会话自愈机制检测到历史中存在未配对 tool_call 时自动清理而不是让会话永久报废。## 附MCP 配置参考官方文档确认的格式json{ mcp: { servers: { my-server: { command: node, args: [D:\\path\\to\\server.js], enabled: true } } }}—本文为个人实测记录版本信息以官方发布为准。如有错误欢迎指正。
返回列表