← 博客

计划标题纠错与确认流可信输出

Agent:计划标题纠错与确认流可信输出

记录日期:2026-04-02

1. 问题背景

神秘人对话里,create_plan 常在用户先说需求、再说「直接创建」等多轮场景下,把元指令写进 plan_title(例如计划名叫「直接创建」),或与 SSE 混排时出现重复解析正文 JSON、并发 waitForAuthToken 打满 token 接口等问题。目标是:服务端 execute 与 App 确认前双端一致纠错确认结果优先走结构化 TOOL_CALL_RESULT,并与 Expo Tabs 路由名对齐,减少无意义警告。

2. 问题列表

2.1 问题一:plan_title 被填成「直接创建」等元指令

根因 why1:模型把用户最后一轮口头禅当作计划标题 → why2:最后一轮用户话经常是「直接创建」→ why3:enrich 若只取「最近一条用户话」整条当锚点,会把元指令规范化进 plan_title

方案

采纳方案 长远方案:shenmiren-agent/agent/tool_calls_util.py 中扩展 _META_PLAN_TITLE_OR_REPLYenrich_create_plan_calls_from_messageszhiyuxing-app/src/lib/agent-chat.tsisMetaPlanInstructionUserLine + enrichCreatePlanArgsFromRecentUserMessages

补充用例

2.2 问题二:工具确认后展示依赖正文里「捞 JSON」,易误解析

根因 why1:确认接口返回的 SSE 同时累积了 resultContent 与结构化 TOOL_CALL_RESULT → why2:UI 只对 contentJSON.parse → why3:大段文本里若含 {} 片段,可能误匹配解析失败,与真实工具结果不一致。

方案

采纳方案 长远方案:ConfirmToolCallsResultformatConfirmedToolResultsForUseragent-chat.tsx 确认成功后优先结构化展示。

补充用例

2.3 问题三:多处并发 waitForAuthToken 重复刷新

根因 why1:多个模块在首屏并行调 RDB/云函数 → why2:各自 await waitForAuthToken() → why3:循环内反复 getAccessToken(),放大 SDK 与日志压力。

方案

采纳方案 长远方案:zhiyuxing-app/src/lib/cloudbase.ts 中 in-flight 合并。

补充用例

2.4 问题四:Expo Tabs Tabs.Screenname 与子路由不一致

根因 why1:zhixing 为目录,index.tsx 为默认子路由 → why2:部分版本下注册名应为 zhi/indexxing/index → why3:使用 name="zhi" 时出现「路由不存在」类警告。

方案

采纳方案 长远方案:已改 _layout.tsxTabs.Screenname

补充用例

3. 小结

计划在后端 enrich + 前端确认前 enrich两层对齐元指令与实质性主题;确认结果优先结构化 payload,减少对正文的启发式 JSON 解析;token 等待单飞降低并发刷 token;Tabs 注册名与目录索引对齐。本地验证:pytest 覆盖计划标题用例;前端对改动文件 read_lints 干净;全仓 tsc 若有历史基线错误,以与应用相关的增量自检为准。