fischer-agentkit/docs/brainstorms/2026-07-02-complex-task-qua...

20 KiB
Raw Blame History

date topic
2026-07-02 complex-task-quality-loop

复杂任务质量闭环verify → reflect → evolve

Summary

围绕"单次任务做对 + 失败学习"主线,把 agentkit 已有但未接通的 verification / reflexion / evolution 串成闭环复杂任务PLAN_EXEC/TEAM_COLLAB跑完先 verify不过就 reflexion 反思重试,任务结束自动 trigger evolution 记 pitfall + 优化 prompt。地基补结构化编辑工具和"keep working until done"偏置。


Problem Frame

agentkit 在复杂任务上"压根无法达到预期"——失败形态包括跑不了、走几步就错、直接说没能力。根因不是缺机制,而是机制"声明了但没接通"

  • verification_enabled 默认 Falsesrc/agentkit/core/react.py:165VERIFICATION 阶段不强制测试
  • write_file_DEFAULT_CORE_TOOLS 但无实现类(src/agentkit/core/react.py:150-156LLM 调用会失败
  • reflexion 只在 _fallback_chain.py 的 Recovery 层兜底,不在主流程
  • evolution 只能手动 trigger/api/v1/evolution/trigger),任务后不自动跑
  • REWOO/REFLEXION/TEAM_COLLAB fall back to REACTsrc/agentkit/server/routes/chat.py:1336AGENTS.md 说的"抛 not yet supported"已过时
  • max_steps=10 硬上限,无"keep working until done"偏置,达到即返回 partial

上述症状分三类:(1) 未接通——reflexion 仅 fallback、evolution 仅手动、REWOO/REFLEXION/TEAM_COLLAB fall back to REACT(2) bug——write_file 无实现类;(3) 缺特性——keep-working 偏置缺失、max_steps=10 硬上限。Approach B 仅直接解决第一类(组装闭环),后两类为附带修复。

用户感受是系统性失效:没有尝试机制、没有自我进化。单点修复不解决——需要把独立零件组装成闭环。


Key Decisions

  • 选闭环主线Approach B而非逐项接通A或全新 Task RuntimeC A 不形成闭环体验仍碎C 太重且浪费现有 plan_exec 基础B 复用现有机制组装闭环。
  • reflexion 仅复杂任务走。 PLAN_EXEC/TEAM_COLLAB 启用任务中反思DIRECT_CHAT/REACT 不走,避免简单任务被拖慢。
  • step 预算从单一 max_steps 改成阶段配额。 think/verify/reflect 三阶段共用 10 步不够,需分阶段配额。
  • evolution 自动触发而非手动。 任务结束(无论成败)自动 trigger失败必跑成功按采样率跑。

Resolved Questions原 OQ1-OQ4ce-doc-review 阶段研究解决)

  • RQ1原 OQ1step 阶段配额think=7 / verify=2 / reflect=1总预算 10向后兼容当前 max_steps=10 依据1 step = 1 个 Think→Act→Observe 循环(含 1 次 LLM 调用 + N 次并行工具);当前 verify 通过 max_reinjections=1 额外消耗 1 stepreflexion 的 evaluate/reflect LLM 调用不消耗 step 只消耗 token。三者独立计数不共享think 耗尽→强制 verifyverify 耗尽→返回最佳结果reflect 耗尽→不再反思。预算辩护: 总预算保持 10 是向后兼容约束Problem Frame 所述 max_steps=10 不足问题通过阶段配额重新分配解决——当前 verify 通过 max_reinjections=1 额外消耗 1 stepRQ1 将其显式化为 verify=2 配额,释放出 think=7 连续推理预算(此前 think 与 verify 共享 10 导致 verify 消耗压缩 think。若 planning 验证发现 10 步仍不足,复杂任务可 opt-in 提高总预算(向后兼容:未设时行为同今天)。
  • RQ2原 OQ2evolution 成功任务采样率 = 0.1(折中 0.15)。 依据:默认 RuleBasedReflector 是 0 LLM 调用且只在 outcome=="failure" and quality<0.3 时生成 suggestions成功任务几乎不产生 suggestions进化流程早退BootstrapPromptOptimizer.min_examples=310% 采样下约 30 次成功任务凑够优化样本。新增 EvolutionConfig.success_sample_rate: float = 0.1,在 on_task_complete 入口用 random.random() < rate 门控,镜像 alignment.py:115audit_sample_rate 范式。失败任务保持 100% 反思不变。已知限制: (1) 默认 RuleBasedReflector 仅在 outcome=='failure' 时生成 suggestions成功任务采样路径在默认 reflector 下 100% 早退——成功采样需升级到能在成功任务上产生学习信号的 reflector 实现,或移除成功采样路径仅保留失败路径。(2) 0.1 采样率假设约 30 次成功任务凑够 min_examples=3,实际激活时间取决于任务吞吐量;success_sample_rate 已设为可配置(EvolutionConfig.success_sample_rate: float),应按观察到的实际吞吐量校准。
  • RQ3原 OQ3reflexion 最大重试:主路径 2 次Recovery 层保持 1 次。 依据:主路径当前硬编码 max_reflections=3config_driven.py:1047,835无法配置Recovery 层 max_reflections=1_fallback_chain.py:118。改为 2 拉开梯度(第 1 次最有效,第 2 次兜底并改为可从配置读取。reflexion attempt 次数由 max_reflections=2 配置独立限制,不消耗 step 配额think 配额(7) 由所有 attempt 的 ReAct 循环共享evaluate/reflect 的 LLM 调用不计 step 配额只计 token。
  • RQ4原 OQ4新增 spec_review_request 事件,不复用 confirmation_request 依据:①前端连接的是 portal.py/api/v1/portal/ws),但 confirmation 协议只在 chat.py 实现portal.py 完全无 confirmation——复用度极低SpecManager.confirm 是同步数据层方法,只通过 REST API/specs/{spec_id}/confirm)调用,不接入 chat 流程;③plan_exec_engine.py:277 生成 Spec 后立即执行,无暂停点;④语义差异大:工具确认是单条命令批准/拒绝5min 超时Spec 确认是完整计划审核confirm/reject/edit拒绝后触发重新规划parked 状态 + resume-on-return。新增 spec_review_request(携带 spec_id/goal/stepsspec_review_reply(携带 decision在 PlanExecEngine 新增 spec_review_handler 参数。

Requirements

地基(所有任务受益)

  • R1. 修复 write_file 占位符,提供结构化文件编辑工具(str_replace_editor 语义create / str_replace / insert_at_line取代 shell sed/cat 改文件。 安全要求: 所有路径参数必须 resolve 后前缀校验限制在 workspace root 内,拒绝符号链接逃逸;与现有 6 层终端安全范式对齐。
  • R2. verification_enabled 默认改为 True
  • R3. VERIFICATION 阶段强制运行项目测试pytest / ruff而非仅白名单允许 shell。

闭环主线(复杂任务)

  • R4. reflexion 从 fallback 兜底升级为复杂任务PLAN_EXEC/TEAM_COLLAB的主流程反思循环verify 不过 → 反思 → 重试。
  • R5. 任务结束(无论成败)自动 trigger evolutionReflector 记录 + PitfallDetector 检测 + PromptOptimizer 优化。 质量门: pitfall 入库前设 confidence 阈值(低置信丢弃或标记 observe-onlyPromptOptimizer 消费 pitfall 前需通过消费门控(如样本数 ≥ min_examples 且 confidence 达标observe-only 模式下只记录不喂 optimizer避免噪声退化 prompt。
  • R6. evolution 触发阈值:失败必跑;成功按采样率跑。 完整性/授权: evolution 产物pitfall / optimized prompt跨任务共享前需标注 actor哪个 agent / expert 产生),跨任务共享的信任边界由 planning 定义(默认同 workspace 共享,跨 workspace 需显式 opt-in

能力接通

  • R7. TEAM_COLLAB 不再 fall back to REACT真正接入对应执行模式REWOO/REFLEXION-as-mode 推迟到 Deferred理由见 Scope Boundaries
  • R8. Spec 确认闸门接入 chat 流程:首次生成 Spec 后通过新增 spec_review_request 事件暂停等人确认,确认后(spec_review_reply)才执行。

偏置与预算

  • R10. 复杂任务启用"keep working until done"偏置:达到 step 预算前不因单次 verify 失败放弃,自动进入反思重试。
  • R11. step 预算改成阶段配额think / verify / reflect取代单一 max_steps
  • R12. pitfall 检索/注入:任务规划阶段从 PitfallDetector 库按 goal/skill 相似度检索历史 pitfall 并注入 prompt 上下文。

Key Flows

  • F1. 复杂任务质量闭环

    • Trigger: PLAN_EXEC / TEAM_COLLAB 任务执行
    • Actors: ReActEngine, VerificationLoop, ReflexionEngine, evolution 模块
    • Steps: 任务执行 → verify → 不过 → reflexion 反思 → 重试(受阶段配额约束)→ 任务结束 → evolution 自动 trigger失败必跑 / 成功采样)
    • Covered by: R2, R3, R4, R5, R6, R10, R11
  • F2. Spec 确认闸门

    • Trigger: PLAN_EXEC 生成 Spec
    • Actors: SpecManager, chat handler, user
    • Steps: Spec 生成 → 暂停 → 用户确认confirm / reject→ 确认后执行 / 拒绝后重新规划
    • Covered by: R8

Visualizations

flowchart TB
    A[复杂任务启动] --> B[执行: think/act/observe]
    B --> C{verify}
    C -->|通过| D[标记完成]
    C -->|不过| E{阶段配额?}
    E -->|有剩余| F[reflexion 反思]
    F --> B
    E -->|耗尽| G[标记失败]
    D --> H[evolution 自动 trigger]
    G --> H
    H --> I[Reflector 记录]
    I --> J[PitfallDetector 检测]
    J --> K[PromptOptimizer 优化]

Acceptance Examples

  • AE1. 复杂任务 verify 失败后反思重试

    • Covers R2, R4, R10.
    • Given: PLAN_EXEC 任务执行完成verify 运行 pytest 失败
    • When: reflexion 触发,反思错误,生成修正方案
    • Then: 在阶段配额内重试;若仍失败,标记任务失败并 trigger evolution
  • AE2. 简单任务不走 reflexion

    • Covers R4.
    • Given: DIRECT_CHAT 模式执行简单任务
    • When: 任务完成
    • Then: 不触发 reflexion 反思循环,直接返回结果
  • AE3. 任务失败后 evolution 自动记录

    • Covers R5, R6.
    • Given: 复杂任务最终失败verify 不过且重试用尽)
    • When: 任务结束
    • Then: evolution 自动 triggerReflector 记录失败原因PitfallDetector 检测模式
  • AE4. Spec 确认闸门

    • Covers R8.
    • Given: PLAN_EXEC 生成 Spec
    • When: Spec 首次生成
    • Then: 暂停执行等待用户确认;用户确认后才继续执行

Success Criteria

  • 复杂任务"半完成就停"消失verify 不过自动反思重试,而非直接返回 partial。
  • 复杂任务结果可信任verify 通过才标记完成。
  • 失败有沉淀:每次失败触发 evolution 记录pitfall 不重犯。
  • 简单任务不受影响DIRECT_CHAT / REACT 不走 reflexion响应不拖慢。

Scope Boundaries

Deferred for later

  • 分级沙箱read-only / workspace-write / danger——P2 优先级本次最低沙箱层级workspace-write, no network作为 R3/R10 前置拉入 scope完整分级留后续。
  • REWOO/REFLEXION-as-mode作为独立执行模式接入——R7 缩窄为仅 TEAM_COLLAB 后推迟理由当前无目标服务RV10且与 reflexion-as-retry-mechanism 概念混淆RV20
  • R9 coding_harnessWorker-Verifier 对抗)接入 PLAN_EXEC DELIVERY 阶段——推迟理由R3+R4 已满足目标RV114 阶段 pipeline 到单阶段 PLAN_EXEC phase 映射未定义RV12且 R8/R9 无独立成功标准RV13信任边界: coding_harness 执行不受信任代码需在沙箱内运行,依赖最低沙箱层级前置。
  • 模型自主 compaction——现有阈值方案能用。
  • 三层嵌套循环submission / handler / turn——收益不抵成本。
  • Spec 输出人类可读 markdown——本次先用现有 YAML Spec + 确认闸门markdown 化留后续。

Outside this product's identity

  • 工具极简主义(砍到 Bash + apply_patch——agentkit 走技能 / 专家团队方向25 个工具是业务需要。
  • 全新 Task Runtime 概念——已有 plan_exec 基础,不引入新概念。

Dependencies / Assumptions

  • evolution 模块Reflector / PitfallDetector / PromptOptimizer / ABTester已实现本次只做接入。
  • ReflexionEngine 已实现,本次升级其在主流程的角色。
  • VerificationLoop 已实现,本次改默认值 + 强制约束。
  • SpecManager.confirm 已实现REST API本次新增 spec_review_request/spec_review_reply 事件接入 chat 流程。
  • coding_harness.yaml 已配置,本次接入 DELIVERY 阶段。
  • 假设step 配额重设计不破坏现有 DIRECT_CHAT / REACT 语义。

Outstanding Questions

Resolved见 Key Decisions → Resolved Questions

  • OQ1-OQ4 已在 ce-doc-review 阶段研究解决,决策见 Resolved QuestionsRQ1-RQ4

Newce-doc-review 研究阶段发现)

  • OQ5. DIRECT_CHAT 模式chat.py:1245直接调 llm_gateway.chat(),绕过 BaseAgent —— 是否需要为 DIRECT_CHAT 补接 evolution 触发?还是接受"DIRECT_CHAT 不进化"(简单任务进化价值低)?
  • OQ6. execute_stream()config_driven.py:686绕过 on_task_complete/on_task_failed 钩子 —— R5 的自动触发在流式路径下不生效。是在 execute_stream 末尾补接钩子,还是改为异步 fire-and-forgetasyncio.create_task)避免阻塞流式返回?

From 2026-07-02 review

以下来自 ce-doc-review5 personacoherence / feasibility / product-lens / scope-guardian / adversarial。17 个可操作发现 + 5 个 FYI 观察,全部留 planning 处理。

P1 — 必须在 planning 解决(阻塞实现)

  • RV1. R11 阶段配额是 R4/R10/AE1 的隐藏前置但值推迟到 OQ1product-lens, 100。F1 闭环无法端到端验证直到 OQ1 解决。处理: planning 必须先定阶段配额 v0 值,或 descope R4/R10 直到 R11 决定。
  • RV2. R2 全局 verification_enabled=True 与简单任务性能目标冲突scope-guardian, 100。REACT 非代码任务(翻译/研究)在 final-answer 会跑 pytest/ruff。处理: R2 限定 PLAN_EXEC/TEAM_COLLAB 默认 TrueDIRECT_CHAT/REACT 保持 False
  • RV3. Sandbox 推迟到 P2但 R3+R10 增加不受信任代码执行product-lens, 75。安全态势相对当前"早停"是倒退。处理: 将最低沙箱层级workspace-write, no network拉入本 scope 作为 R3/R10 前置,或新增 reflexion 重试的 workspace-bounded 约束。
  • RV4. R4 假设 ReflexionEngine 能驱动 PLAN_EXEC但缺 phase_policy 支持adversarial, 75reflexion.py:88-92 实例化 vanilla ReActEngine 无 phase_policy。处理: R4 加依赖说明——ReflexionEngine 需重构转发 phase_policy或在 ReActEngine 内实现 verify→reflect→retry已持有 phase_policy
  • RV5. R11"不破坏 DIRECT_CHAT/REACT 语义"假设 load-bearing 且未验证adversarial, 75。DIRECT_CHAT/REACT 用同一 ReActEnginemax_steps=10无 verify/reflect 阶段。处理: R11 明确兼容契约——max_steps 保留为总预算;阶段配额是复杂任务 opt-in 参数;未设时行为同今天
  • RV6. R1-R3 bug 修复与闭环架构捆绑延迟即时价值product-lens, 75处理: 考虑拆 R1/R2/R3 为 ship-first 切片独立验收R4-R11 作为第二阶段。
  • RV7. "Pitfall 不重犯"目标半服务——只记录不检索product-lens, 75。R5/R6 只覆盖记录,无检索/注入。处理: 新增 pitfall 检索注入要求,或 descope"不重犯"条款。

P2 — 应在 planning 解决(影响正确性)

  • RV8. R3 强制 pytest/ruff 但无要求处理无测试/非 Python 项目product-lens+adversarial, 100。非代码任务会错误失败或空真。处理: 限定 R3 为 coding 任务;非 coding 由 Spec 声明验证命令。
  • RV9. Mermaid 将 reflexion 门控在配额检查之后,与 F1/AE1/Summary 矛盾coherence, 75处理: 重排 mermaid——verify 失败→reflexion→配额决策。
  • RV10. R7 拉入 REWOO/REFLEXION 模式但未绑定任何目标scope-guardian, 75。REFLEXION 独立与 R4 冗余REWOO 无目标服务。处理: 缩窄 R7 为仅 TEAM_COLLAB。
  • RV11. R9 adversarial harness 与 R3 重叠但无目标级理由scope-guardian, 75。R3+R4 已满足目标。处理: 从本 requirements 移除 R9 或单独论证。
  • RV12. R9 将 4 阶段 pipeline 映射到单阶段 PLAN_EXEC phase无映射定义adversarial, 75处理: 替换 R9 为具体集成契约或推迟 planning。
  • RV13. R8/R9 是孤立需求——无成功标准product-lens+scope-guardian, 100处理: 为 R8/R9 加成功标准或移 R9 到 Deferred。
  • RV14. R5/R6 自动触发 evolution 无输出质量门product-lens+adversarial, 100。噪声 pitfall 喂 PromptOptimizer 会退化 prompt。处理: 新增 pitfall confidence 阈值 + PromptOptimizer 消费门控 + observe-only 模式。
  • RV15. R4/R10 忽略 ReActEngine 已实现 verify→reinject→retryadversarial, 75react.py:1278-1308 已有 reinjection仅 max_reinjections=1 门控。处理: R4 加决策说明为何选 reflexion 而非提升 max_reinjections。
  • RV16. R8 Spec 确认闸门假设同步用户可用性无异步回退adversarial, 75。现有 5 分钟超时PLAN_EXEC 长任务用户离开即超时。处理: R8 加超时策略 + resume-on-returnparked 非 failed
  • RV17. 成功标准可能全过但"半完成就停"仍存在adversarial, 75。预算值推迟 OQ1。处理: 加定量成功标准——参考任务至少一次 green run。

FYI 观察无需决策planning 知悉即可)

  • RV18. R10 使用"step 预算"一词但 R11 明确替换它coherence, 50。术语不一致。
  • RV19. R8 Spec gate 在每次 PLAN_EXEC 加摩擦定位转移未承认product-lens, 50
  • RV20. R7/R4 混淆 REFLEXION-as-mode 与 reflexion-as-retry-mechanismadversarial, 50
  • RV21. MVP 路径(仅 R1+R2+R3未在承诺 Approach B 前评估adversarial, 50
  • RV22. R10"keep working"与 ReActEngine 循环检测器threshold=2冲突adversarial, 50。重试相同 fix 会触循环检测中断。

Residual concerns新信号非发现重述

  • R7 TEAM_COLLAB 可能与 ExpertTeamRouter 路径重叠feasibility
  • ReWOOAgent/ReflexionEngine 是否暴露 streaming 接口兼容 chat WebSocketfeasibility
  • SpecManager.confirm 同步签名 vs 异步握手——是否需新 awaitable gatefeasibility
  • "keep working" + 阶段配额可能烧 token 不收敛product-lens
  • str_replace_editor/coding_harness 的 buy-vs-build 未考虑——OpenHands/Aider 有成熟替代product-lens
  • evolution 模块运行时正确性未验证——文件存在≠端到端正确adversarial
  • ReflexionEngine 默认值quality_threshold=0.7, max_reflections=3继承未论证adversarial
  • PLAN_EXEC vs TEAM_COLLAB 集成面不同——后者用 TeamOrchestrator+SharedWorkspaceadversarial
  • evolution 模块是否在真实失败上端到端跑过adversarial

Sources / Research

  • 6 维架构调研(带行号):src/agentkit/core/react.pysrc/agentkit/core/verification_loop.pysrc/agentkit/core/phase.pysrc/agentkit/core/spec_manager.pysrc/agentkit/core/plan_exec_engine.pysrc/agentkit/server/_fallback_chain.pysrc/agentkit/evolution/src/agentkit/server/routes/chat.py
  • AGENTS.md 与代码不一致点:src/agentkit/server/routes/chat.py:1336 REWOO/REFLEXION/TEAM_COLLAB 实际 fall back to REACT非"抛 not yet supported"。
  • write_file 占位符:src/agentkit/core/react.py:150-156_DEFAULT_CORE_TOOLSwrite_file 但无实现类。
  • 业界参照Codex agent loop单线程 ReAct + 强制 verify、Qoder QuestSpec → Code → Verify 闭环 + 自动 evolution、Trae SOLO Spec mode确认闸门