神秘人 Agent 计划标题纠错与确认流可信输出
双端一致纠错元指令标题、NoSQL 会话读写、确认流图拓扑、SSE payload 补丁等 11 个子问题
1. 问题背景
神秘人对话里,create_plan 常在用户先说需求、再说「直接创建」等多轮场景下,把元指令写进 plan_title(例如计划名叫「直接创建」),或与 SSE 混排时出现重复解析正文 JSON、并发 waitForAuthToken 打满 token 接口等问题。目标是:服务端 execute 与 App 确认前双端一致纠错,确认结果优先走结构化 TOOL_CALL_RESULT。
2. 问题列表
2.1 plan_title 被填成「直接创建」等元指令
根因:模型把用户最后一轮口头禅当作计划标题;最后一轮用户话经常是「好的,直接创建」等元指令;enrich 若只取最近一条用户话整条当锚点,会把元指令规范化进 plan_title。
采纳方案:在 execute_tools 前 enrich_create_plan_calls_from_messages:按时间倒序收集用户话,跳过 _is_meta_plan_instruction,取第一条实质性用户句作 anchor。App 侧 enrichCreatePlanArgsFromRecentUserMessages 用同一套元指令规则,在确认前修补。
补充用例:test_is_meta_direct_create、test_enrich_prefers_substantive_over_meta_last_turn、test_enrich_meta_title_empty_args_uses_substantive。
2.2 工具确认后展示依赖正文里「捞 JSON」,易误解析
根因:确认接口返回的 SSE 同时累积了 resultContent 与结构化 TOOL_CALL_RESULT;UI 只对 content 做 JSON.parse,大段文本里若含 {...} 片段可能误匹配或解析失败。
采纳方案:confirmToolCalls 返回 structuredToolResults(与 ParsedSseResult 一致),UI 用 formatConfirmedToolResultsForUser 优先渲染;无结构化结果时再回退正文 + JSON 解析。
2.3 多处并发 waitForAuthToken 重复刷新
根因:多个模块在首屏并行调 RDB/云函数,各自 await waitForAuthToken(),循环内反复 getAccessToken(),放大 SDK 与日志压力。
采纳方案:模块级 waitForAuthTokenInFlight,并发合并为单次 Promise,finally 清空。
2.4 Expo Tabs Tabs.Screen 的 name 与子路由不一致
根因:zhi、xing 为目录,index.tsx 为默认子路由,部分版本下注册名应为 zhi/index、xing/index。
采纳方案:app/(tabs)/_layout.tsx 中 zhi/index、xing/index 与文件结构一致。
3. 小结
计划在后端 enrich + 前端确认前 enrich 两层对齐元指令与实质性主题;确认结果优先结构化 payload,减少对正文的启发式 JSON 解析;token 等待单飞降低并发刷 token;Tabs 注册名与目录索引对齐。