--- title: "feat: Pipeline 级别对抗闭环(Coding Harness)" status: active created: 2026-06-12 origin: 头脑风暴对话 - Worker ↔ Verifier 对抗闭环改进方案 type: feat --- # feat: Pipeline 级别对抗闭环(Coding Harness) ## 问题框架 当前 Pipeline Engine 的 `retry_count` 和 `retry_policy` 实现的是**盲目重试**(指数退避重跑相同逻辑),`QualityGate` 是**单向验证**(validate → pass/fail)。Worker 产出失败后不知道具体哪里有问题,重试时无法定向修复。 **目标:** 实现 Worker → Verifier → 带反馈打回 Worker → 定向修复 → 再次审查的对抗闭环,通过 Pipeline YAML 配置即可启用。 --- ## 高层技术设计 ### 对抗流转状态机 ```mermaid stateDiagram-v2 [*] --> Worker: 执行 Stage Worker --> Verifier: 产出完成 Verifier --> [*]: 审查通过 (passed=true) Verifier --> Worker: 审查不通过 (round < max) Worker --> Verifier: 根据反馈修复 Verifier --> Escalate: 轮次耗尽 (round >= max) Escalate --> [*]: 转人工或标记失败 ``` ### 反馈数据结构 ``` ReviewFeedback ├── passed: bool ├── score: float (0-1) ├── summary: str (自然语言审查报告) └── issues: list[ReviewIssue] ├── severity: critical/major/minor ├── category: logic_error/security/style/test_failure/architecture ├── description: str ├── location: str? (文件路径/行号) └── suggestion: str? ``` ### 配置扩展 在 `PipelineStage` 新增 4 个字段: - `verifier`: str | None — Verifier Agent 名称 - `max_adversarial_rounds`: int — 最大对抗轮次(默认 3) - `feedback_mode`: str — 反馈模式(structured+natural / structured / natural) - `escalate_on_exhaust`: str | None — 轮次耗尽后的升级目标 --- ## 实施单元 ### U1. 扩展 Pipeline Schema — 对抗字段和反馈数据模型 **Goal:** 在 `pipeline_schema.py` 中新增对抗闭环所需的数据模型和字段 **Requirements:** - PipelineStage 支持配置 Verifier 和对抗参数 - 提供结构化的 ReviewFeedback 和 ReviewIssue 数据模型 - 提供 AdversarialState 用于追踪对抗轮次 **Dependencies:** 无 **Files:** - `src/agentkit/orchestrator/pipeline_schema.py` (修改) - `tests/unit/test_pipeline_schema.py` (修改) **Approach:** 1. 新增 `ReviewIssue` Pydantic 模型(severity, category, description, location, suggestion) 2. 新增 `ReviewFeedback` Pydantic 模型(passed, issues, summary, score) 3. 新增 `AdversarialState` Pydantic 模型(current_round, max_rounds, feedback_history, last_feedback) 4. 在 `PipelineStage` 新增 4 个字段: - `verifier: str | None = None` - `max_adversarial_rounds: int = 3` - `feedback_mode: str = "structured+natural"` - `escalate_on_exhaust: str | None = None` **Test scenarios:** 1. **Happy path:** 创建带 verifier 字段的 PipelineStage,验证字段默认值正确 2. **Happy path:** 创建 ReviewFeedback 对象,验证序列化和反序列化正常 3. **Edge case:** verifier=None 时,PipelineStage 正常创建(向后兼容) 4. **Edge case:** max_adversarial_rounds=0 时正常创建 --- ### U2. Pipeline Engine 增强 — 对抗流转执行逻辑 **Goal:** 在 `PipelineEngine` 中实现 `_execute_stage_with_adversarial` 方法,处理 Worker ↔ Verifier 对抗循环 **Requirements:** - 当 Stage 配置了 verifier 时自动进入对抗模式 - Verifier 审查不通过时,带反馈打回 Worker 重做 - 超过最大轮次后执行升级处理 - 保持与现有 `_execute_stage` 的向后兼容 **Dependencies:** U1 **Files:** - `src/agentkit/orchestrator/pipeline_engine.py` (修改) - `tests/unit/test_pipeline_adversarial.py` (新增) **Approach:** 1. **新增 `_execute_stage_with_adversarial` 方法:** - 检查 `stage.verifier` 是否存在,不存在则走原有逻辑 - 初始化 `AdversarialState` - 进入对抗循环(1 到 max_adversarial_rounds): - 执行 Worker Agent - 执行 Verifier 审查 Worker 产出 - 如果通过:返回成功结果 - 如果不通过: - 记录反馈到 feedback_history - 如果轮次耗尽:调用 `_escalate` 处理 - 否则:调用 `_execute_agent_with_feedback` 打回 Worker 2. **新增 `_execute_agent_with_feedback` 方法:** - 构建反馈上下文(previous_attempt_failed, review_feedback, instruction) - 合并到原有上下文 - 调用 Dispatcher 执行 Agent 3. **新增 `_execute_verifier` 方法:** - 调用 Verifier Agent 执行审查 - 解析返回结果为 ReviewFeedback 对象 - 记录审查日志 4. **新增 `_escalate` 方法:** - 如果配置了 `escalate_on_exhaust`:转发到升级目标(如 human_approval) - 否则:返回失败结果,附带审查历史 5. **修改 `_execute_stage` 方法:** - 检查是否配置了 verifier - 如果配置了,路由到 `_execute_stage_with_adversarial` - 否则保持原有逻辑 **Test scenarios:** 1. **Happy path:** Stage 无 verifier → 走原有逻辑,正常完成 2. **Happy path:** Stage 有 verifier,审查通过 → 一次完成 3. **Happy path:** Stage 有 verifier,审查不通过 → 打回 Worker → 修复后通过 4. **Edge case:** 超过 max_adversarial_rounds → 触发 escalate_on_exhaust 5. **Edge case:** escalate_on_exhaust=None → 返回失败,附带审查历史 6. **Error path:** Verifier 执行异常 → 记录错误,返回失败 7. **Error path:** Worker 重试时再次异常 → 继续下一轮或轮次耗尽 8. **Integration:** 完整对抗流程的状态追踪正确(feedback_history 长度=实际轮次) --- ### U3. 反馈上下文构建和注入机制 **Goal:** 实现结构化的反馈上下文构建,让 Worker Agent 能理解审查反馈并定向修复 **Requirements:** - 反馈上下文包含结构化问题列表和自然语言审查报告 - Worker 能根据反馈上下文调整生成策略 - 支持 feedback_mode 配置(structured+natural / structured / natural) **Dependencies:** U2 **Files:** - `src/agentkit/orchestrator/pipeline_engine.py` (修改,续 U2) - `tests/unit/test_pipeline_adversarial.py` (修改,续 U2) **Approach:** 1. **构建反馈上下文字典:** ```python feedback_context = { "previous_attempt_failed": True, "review_feedback": { "summary": feedback.summary, "issues": [ { "severity": issue.severity, "category": issue.category, "description": issue.description, "suggestion": issue.suggestion, } for issue in feedback.issues ], "previous_score": feedback.score, }, "instruction": ( "Your previous output did not pass review. " "Please fix the issues listed above and regenerate." ), } ``` 2. **根据 feedback_mode 调整上下文:** - `structured+natural`: 包含完整 issues 列表和 summary - `structured`: 只包含 issues 列表 - `natural`: 只包含 summary 和 instruction 3. **合并到原有上下文:** - `merged_context = {**context, **feedback_context}` - 传递给 Agent 执行 **Test scenarios:** 1. **Happy path:** feedback_mode="structured+natural" → 上下文包含 issues 和 summary 2. **Happy path:** feedback_mode="structured" → 上下文只包含 issues 3. **Happy path:** feedback_mode="natural" → 上下文只包含 summary 4. **Edge case:** feedback.feedback_history 有多轮记录 → 合并所有历史反馈 --- ### U4. 创建 code_reviewer Skill 配置示例 **Goal:** 创建代码审查 Verifier Agent 的 Skill 配置,作为对抗模式的的标准 Verifier 模板 **Requirements:** - 配置为 direct 执行模式 - system_prompt 定义严格的代码审查角色和检查维度 - 配置 output_schema 确保返回结构化的 ReviewFeedback 格式 **Dependencies:** U1(需要 ReviewFeedback schema 存在) **Files:** - `configs/skills/code_reviewer.yaml` (新增) **Approach:** 1. 创建 `code_reviewer.yaml`: - name: code_reviewer - execution_mode: direct - intent_match: "code.*review|review.*code" - system_prompt: 定义代码审查角色、检查维度(逻辑正确性、安全漏洞、架构设计、测试覆盖、代码风格) - tools: [shell_tool](用于运行测试用例) - quality_gate: 配置 required_fields 和 output_schema 2. output_schema 定义: - passed: boolean - issues: array of {severity, category, description, location?, suggestion?} - summary: string - score: number (0-1) **Test expectation:** none — 这是配置文件,通过 YAML 加载测试验证格式正确性 --- ### U5. 创建 coding_harness Pipeline 配置示例 **Goal:** 创建完整的编码对抗 Pipeline 配置示例,展示如何使用对抗闭环功能 **Requirements:** - 包含 develop → test → review(对抗模式) → archive 四个阶段 - review 阶段配置 verifier、max_adversarial_rounds、escalate_on_exhaust - 使用变量引用传递阶段间产出 **Dependencies:** U4 **Files:** - `configs/pipelines/coding_harness.yaml` (新增) **Approach:** 1. 创建 `coding_harness.yaml`: - name: coding_harness, version: "1.0" - 阶段 1 (develop): developer_agent 实现功能 - 阶段 2 (test): tester_agent 运行测试,依赖 develop - 阶段 3 (review): developer_agent 修复问题,verifier=code_reviewer, max_adversarial_rounds=3, escalate_on_exhaust=human_approval - 阶段 4 (archive): archiver_agent 提交代码,依赖 review 2. 配置变量引用: - test 阶段输入: code="{{develop.code}}", test_files="{{develop.test_files}}" - review 阶段输入: code="{{develop.code}}", test_results="{{test.test_results}}" - archive 阶段输入: code="{{review.final_code}}" **Test expectation:** none — 这是配置文件,通过 YAML 加载测试验证格式和引用正确性 --- ### U6. 编写单元测试 — 对抗流转和反馈注入 **Goal:** 为对抗闭环功能编写完整的单元测试覆盖 **Requirements:** - 覆盖 U1-U3 定义的所有测试场景 - 使用 mock 模拟 Dispatcher 和 Agent 执行 - 验证对抗流转逻辑正确性 **Dependencies:** U1, U2, U3 **Files:** - `tests/unit/test_pipeline_adversarial.py` (新增) **Approach:** 创建以下测试类: 1. **TestPipelineSchemaAdversarial:** - test_stage_with_verifier - test_stage_without_verifier_backward_compat - test_review_feedback_serialization - test_adversarial_state_tracking 2. **TestAdversarialExecution:** - test_no_verifier_passthrough - test_verifier_passes_first_round - test_verifier_fails_then_worker_fixes - test_max_rounds_exhausted_escalate - test_max_rounds_exhausted_no_escalate - test_verifier_execution_error - test_worker_retry_error 3. **TestFeedbackContext:** - test_structured_and_natural_mode - test_structured_only_mode - test_natural_only_mode - test_multiple_rounds_feedback_merge 4. **TestEscalation:** - test_escalate_to_human_approval - test_escalate_to_fallback_agent - test_no_escalation_configured **Test scenarios:** 见各测试类定义 --- ### U7. 编写集成测试 — 完整 Coding Harness Pipeline **Goal:** 编写集成测试验证完整的 Coding Harness Pipeline 端到端流程 **Requirements:** - 加载 coding_harness.yaml 配置 - 模拟完整的 develop → test → review → archive 流程 - 验证对抗闭环在 review 阶段正常工作 **Dependencies:** U4, U5, U6 **Files:** - `tests/integration/test_coding_harness_pipeline.py` (新增) **Approach:** 1. 创建集成测试: - 使用 MockDispatcher 模拟 Agent 执行 - 模拟 develop 阶段产出代码 - 模拟 test 阶段运行测试 - 模拟 review 阶段:第一次审查不通过 → 打回修复 → 第二次审查通过 - 模拟 archive 阶段提交代码 2. 验证点: - Pipeline 最终状态为 COMPLETED - review 阶段经历了 2 轮对抗 - feedback_history 记录了审查反馈 - 各阶段输出变量正确传递 **Test scenarios:** 1. **Happy path:** 完整 Pipeline 执行,review 阶段 2 轮对抗后通过 2. **Edge case:** review 阶段 3 轮对抗后仍不通过 → escalate 到 human_approval 3. **Error path:** test 阶段失败 → Pipeline 中止,不进入 review --- ## 范围边界 **包含:** - Pipeline Schema 扩展(对抗字段和反馈数据模型) - Pipeline Engine 对抗流转执行逻辑 - 反馈上下文构建和注入 - code_reviewer Skill 配置示例 - coding_harness Pipeline 配置示例 - 单元测试和集成测试 **不包含(延期到后续工作):** - 任务复杂度评估器(自动判断是否启用对抗团队) - IM 异步秒级响应(Leader 立即回执 + 后台异步调度) - 多路并行调研对抗(多路 Researcher + 独立 Verifier) - 对抗成本监控(Token 消耗、时间、修复成功率记录) - Verifier 多角色拆分(LogicReviewer / SecurityReviewer / StyleReviewer 并行审查) --- ## 风险和依赖 ### 风险 1. **Agent 反馈理解能力:** Worker Agent 可能无法完全理解结构化反馈并定向修复。缓解措施:使用 feedback_mode="structured+natural" 提供自然语言说明。 2. **Verifier 审查质量:** code_reviewer 的审查质量取决于 system_prompt 和 LLM 能力。缓解措施:提供高质量的 system_prompt 模板,支持后续优化。 3. **Token 消耗:** 多轮对抗可能消耗大量 Token。缓解措施:max_adversarial_rounds 默认 3,可配置。 ### 依赖 - 现有 Pipeline Engine 基础设施(DAG 拓扑排序、并行执行、变量解析) - 现有 Dispatcher 接口(dispatch、get_task_status) - 现有 Agent 配置系统(ConfigDrivenAgent、SkillConfig) --- ## 系统级影响 - **向后兼容:** PipelineStage 新增字段都有默认值,现有 Pipeline 配置无需修改 - **性能影响:** 无 verifier 配置的 Stage 走原有逻辑,无性能影响;有 verifier 的 Stage 可能增加执行时间(多轮对抗) - **可观测性:** 对抗轮次和审查结果记录在 StageResult 的 output_data 中,可通过日志和状态管理查询