Rectification turns no longer spend a model call reading the case (issue #136, BUG-1491)
Step 0 of every turn could only call rectification-read-case with the default projection, a result the server can compute. The runner now runs the agent's own read-case tool after the Skill is bound (same tool, receipts and projection), passes the call and result to the model as the turn's opening, and gives step 0 the full tool set. Synthetic chunks go through the same loop (case.loaded, activity and Skill receipt once each) but not into step timings. The synthetic call carries a short reasoning line: thinking-mode DeepSeek rejects a prior tool call without reasoning_content (checked live). read-case stays callable for resume / full_diagnostics. Agents without listTools keep the step-0 read. The Skill package has no "read first" text; prompts updated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
a614895a2b
commit
699e353887
@@ -20370,3 +20370,18 @@
|
||||
- 修复版本:分支 `codex/upstream-sync9-20261028`。
|
||||
|
||||
> 第九轮同步(issue #141)原用 BUG-1472~1479,与同日另一会话合入 staging 的编号冲突,合并时整体顺延 11 号为 BUG-1483~1490;分支上的提交信息仍写旧号。
|
||||
|
||||
## BUG-1491 | 生时校正每一轮先白调一次模型,只为读一下案例
|
||||
|
||||
- 状态:resolved(代码 + 回归测试;待部署)
|
||||
- 首次发现 / 最近更新:2026-10-28 / 2026-10-28(issue #118 代码体检第 7 条 → #136;09-26 记为 D6「另议」,产品 10-28 同意)
|
||||
- 影响面:生时校正每一轮;`frontend/src/lib/rectification-agentic/v9/agent-run-attempt.ts`、新模块 `agent-run-opening-read.ts`、`agent-run-messages.ts`、`frontend/src/mastra/agentic-rectification.ts`、`frontend/src/mastra/rectification-v9-tools.ts`(read-case 的工具说明)。
|
||||
- 现象:每一轮都固定先发一次模型请求,第 0 步只允许调 `rectification-read-case`,模型唯一能做的就是读案例;读完再发下一次请求才开始真正的回应。估每轮多 3~8 秒(体检估计)。
|
||||
- 触发条件:任何一轮生时校正(开场、证据、选择题等)。
|
||||
- 根因:「第一步必须读案例」用模型的第 0 步来保证,而默认读取(`turn_decision` 投影、不恢复)的结果服务器自己就能算。
|
||||
- 修复:运行器在绑定 Skill 之后、调模型之前,直接执行同一个 read-case 工具(同一个工具对象、同一份回执、同一个投影),把这次调用和结果作为对话开头交给模型;模型从第 1 步起就是真正的回应,第 0 步也拿到全部工具。read-case 仍可再调:暂停的 Case 要按用户意思恢复(`resume=true`)、最终报告要 `full_diagnostics` 时由模型再调。服务器读取的 `tool-call` / `tool-result` 走原来同一条处理路径,所以 `case.loaded`、工具活动、Skill 回执各只出现一次;它们不计入模型步数和步耗时。思考模式下 DeepSeek 要求历史里的工具调用带回思考内容,空的会被丢掉、缺了会 HTTP 400,所以合成的那次调用带一句「服务器已读取本轮案例。」。服务器读取失败时本次 attempt 记为 `case_not_loaded`、不调模型(与以前模型第 0 步读失败的结果相同)。拿不到 read-case 工具的 agent(测试里的假 agent)保持原来的第 0 步读取。提示词三处同步:系统引导、两套 agent 指令的第 1 条、read-case 的工具说明。Skill 包本身没有「第一步读案例」的原文(只把 read-case 列为可用工具),版本不变。
|
||||
- 验证:`frontend/tests/rectification-v9-agent.test.ts` 新增 3 条:服务器只读一次、用默认投影;第 0 步已有全部工具且仍含 read-case;交给模型的历史里有带思考内容的合成调用和原样投影;引导语换成「本轮案例已由服务器读取」;read-case 的工具活动「started」与 `case.loaded` 各 1 次。服务器读取失败 → `case_not_loaded`、不调模型。没有 `listTools` 的 agent 仍走第 0 步读取、仍是原引导语。另用真实 Mastra `Agent` 验证 `listTools()` 拿到的工具能直接执行;用产品同一通道(Mastra OpenAI 兼容通道 + `deepseek-flash` 思考模式)实测带合成调用的请求被接受并按读取结果作答。全量前端测试与 staging 逐条比对(本机让 `python3` 指向项目 venv,见 ERR-117):只多出新增的 3 条,没有新失败(合盘全档案那条在本分支上失败,是 BUG-1482 的线程问题,staging `a614895a` 已修,合入后消失)。
|
||||
- 防复发:上述测试。服务器能确定的工具调用不要让模型花一步去做。
|
||||
- 关联:BUG-282 / BUG-937(思考模式与工具选择)、BUG-368(重复工具调用)。
|
||||
- 复发自:无
|
||||
- 修复版本:分支 `codex/rectification-preread-case-20261028`。
|
||||
|
||||
@@ -46,3 +46,9 @@
|
||||
22. 在档案页按刷新:列表和以前一样;改一个人的资料、添加一个人后,列表马上是新的。
|
||||
23. 在合盘页按刷新:选人区、余额、历史报告照常;合盘服务关着时仍只显示「合盘服务暂未开放」,不闪选人区。
|
||||
|
||||
## #136 生时校正每一轮少等一次模型(BUG-1491)
|
||||
|
||||
24. 从首页进入生时校正,走完开场:开场的话和第一道题照常出来,比以前快一截(以前出字前会多停几秒)。
|
||||
25. 说一件人生大事(带年月):照常回「记下了」并出下一题;进度、选项都正常。
|
||||
26. 先说「先这样」暂停,再回来说「继续」:能接着校正,不会卡在「已暂停」。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user