fix(agent): 空转回合注入续跑指令,复用空响应重试次数
模型有时一整轮只输出思考、既不给正文也不调工具,harness 视为自然结束 (end_turn 且无 tool_use),直接以 completed + 空总结收场,一条未完成的意图 断在半路,表现为「任务正常结束但没有文字总结」。五层 LLM 重试均够不着它 (非错误路径),SDK 空响应重试也够不着(以是否 yield 过事件判空,而思考增量 本身就是事件)。 work 的 Stop 钩子现识别这种回合并注入一条续跑指令,让模型带着已有思考继续 执行下一步——不选原样重发,因这类空转由提示词与上下文形状决定,是稳定行为 而非随机抽风。次数复用 LLM 页「空响应重试次数」(默认 2、-1 关闭),是一条 意图的总量闸而非连续次数(harness 已限死连续空转只推一次)。
This commit is contained in:
1 parent
eb5290039a
commit
3c2a60fba7
4 files changed
+255
-4
No files matched your search
@@ -4,6 +4,13 @@
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Agent
|
||||
|
||||
#### 修复的问题
|
||||
|
||||
- 修复 work 因**空转回合**提前中断的问题:模型有时会用一整轮只输出思考,既不给正文也不调工具,此时 harness 看到的是一次自然结束(`end_turn` 且无 `tool_use`),直接以 `completed` + 空总结收场——一条还没做完的意图就断在半路,表现为「任务正常结束但没有任何文字总结」。五层 LLM 重试一层都够不着它:它不是错误,同 provider 安全窗口重试的入口是"流失败",熔断在 `err == nil` 时直接判成功,意图重跑只认 `model_error`;SDK 的空响应重试也够不着,因为那层以"有没有 yield 过事件"判空,而思考增量本身就是事件。现在 work 的 Stop 钩子会识别这种回合并注入一条续跑指令,让模型带着已经产出的思考继续执行下一步——刻意不选"原样重发",因为这类空转通常由提示词与上下文形状决定,是稳定行为而非随机抽风,重发只会让模型再想一遍。
|
||||
- 次数复用 LLM 页「重试与退避」里的**空响应重试次数**(两者都在回答"模型完成了却没产出实质内容",只是判据与手段不同),默认 2 次,填 `-1` 即关掉、退回原先"空转即收场"的行为。它是一条意图的**总量**上限而非连续次数:harness 自身已限死连续空转只推一次,只有真正发生过工具回合配额才刷新,所以这个数挡的是「工具 → 空转 → 推 → 工具 → 空转」这类循环把意图预算耗光。触发时日志记 `[work <worker> · #<意图>] 空转回合…注入续跑指令 (n/N)`。设计见 `docs/LLM重试设计.md` §1.1。
|
||||
|
||||
## [0.3.8] - 2026-09-09
|
||||
|
||||
### LLM
|
||||
|
||||
Reference in new issue
Block a user