14 KiB
| title | status | created | origin | type |
|---|---|---|---|---|
| feat: Pipeline 级别对抗闭环(Coding Harness) | active | 2026-06-12 | 头脑风暴对话 - Worker ↔ Verifier 对抗闭环改进方案 | feat |
feat: Pipeline 级别对抗闭环(Coding Harness)
问题框架
当前 Pipeline Engine 的 retry_count 和 retry_policy 实现的是盲目重试(指数退避重跑相同逻辑),QualityGate 是单向验证(validate → pass/fail)。Worker 产出失败后不知道具体哪里有问题,重试时无法定向修复。
目标: 实现 Worker → Verifier → 带反馈打回 Worker → 定向修复 → 再次审查的对抗闭环,通过 Pipeline YAML 配置即可启用。
高层技术设计
对抗流转状态机
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:
- 新增
ReviewIssuePydantic 模型(severity, category, description, location, suggestion) - 新增
ReviewFeedbackPydantic 模型(passed, issues, summary, score) - 新增
AdversarialStatePydantic 模型(current_round, max_rounds, feedback_history, last_feedback) - 在
PipelineStage新增 4 个字段:verifier: str | None = Nonemax_adversarial_rounds: int = 3feedback_mode: str = "structured+natural"escalate_on_exhaust: str | None = None
Test scenarios:
- Happy path: 创建带 verifier 字段的 PipelineStage,验证字段默认值正确
- Happy path: 创建 ReviewFeedback 对象,验证序列化和反序列化正常
- Edge case: verifier=None 时,PipelineStage 正常创建(向后兼容)
- 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:
-
新增
_execute_stage_with_adversarial方法:- 检查
stage.verifier是否存在,不存在则走原有逻辑 - 初始化
AdversarialState - 进入对抗循环(1 到 max_adversarial_rounds):
- 执行 Worker Agent
- 执行 Verifier 审查 Worker 产出
- 如果通过:返回成功结果
- 如果不通过:
- 记录反馈到 feedback_history
- 如果轮次耗尽:调用
_escalate处理 - 否则:调用
_execute_agent_with_feedback打回 Worker
- 检查
-
新增
_execute_agent_with_feedback方法:- 构建反馈上下文(previous_attempt_failed, review_feedback, instruction)
- 合并到原有上下文
- 调用 Dispatcher 执行 Agent
-
新增
_execute_verifier方法:- 调用 Verifier Agent 执行审查
- 解析返回结果为 ReviewFeedback 对象
- 记录审查日志
-
新增
_escalate方法:- 如果配置了
escalate_on_exhaust:转发到升级目标(如 human_approval) - 否则:返回失败结果,附带审查历史
- 如果配置了
-
修改
_execute_stage方法:- 检查是否配置了 verifier
- 如果配置了,路由到
_execute_stage_with_adversarial - 否则保持原有逻辑
Test scenarios:
- Happy path: Stage 无 verifier → 走原有逻辑,正常完成
- Happy path: Stage 有 verifier,审查通过 → 一次完成
- Happy path: Stage 有 verifier,审查不通过 → 打回 Worker → 修复后通过
- Edge case: 超过 max_adversarial_rounds → 触发 escalate_on_exhaust
- Edge case: escalate_on_exhaust=None → 返回失败,附带审查历史
- Error path: Verifier 执行异常 → 记录错误,返回失败
- Error path: Worker 重试时再次异常 → 继续下一轮或轮次耗尽
- 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:
- 构建反馈上下文字典:
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."
),
}
-
根据 feedback_mode 调整上下文:
structured+natural: 包含完整 issues 列表和 summarystructured: 只包含 issues 列表natural: 只包含 summary 和 instruction
-
合并到原有上下文:
merged_context = {**context, **feedback_context}- 传递给 Agent 执行
Test scenarios:
- Happy path: feedback_mode="structured+natural" → 上下文包含 issues 和 summary
- Happy path: feedback_mode="structured" → 上下文只包含 issues
- Happy path: feedback_mode="natural" → 上下文只包含 summary
- 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:
-
创建
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
-
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:
-
创建
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
-
配置变量引用:
- 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:
创建以下测试类:
-
TestPipelineSchemaAdversarial:
- test_stage_with_verifier
- test_stage_without_verifier_backward_compat
- test_review_feedback_serialization
- test_adversarial_state_tracking
-
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
-
TestFeedbackContext:
- test_structured_and_natural_mode
- test_structured_only_mode
- test_natural_only_mode
- test_multiple_rounds_feedback_merge
-
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:
-
创建集成测试:
- 使用 MockDispatcher 模拟 Agent 执行
- 模拟 develop 阶段产出代码
- 模拟 test 阶段运行测试
- 模拟 review 阶段:第一次审查不通过 → 打回修复 → 第二次审查通过
- 模拟 archive 阶段提交代码
-
验证点:
- Pipeline 最终状态为 COMPLETED
- review 阶段经历了 2 轮对抗
- feedback_history 记录了审查反馈
- 各阶段输出变量正确传递
Test scenarios:
- Happy path: 完整 Pipeline 执行,review 阶段 2 轮对抗后通过
- Edge case: review 阶段 3 轮对抗后仍不通过 → escalate 到 human_approval
- Error path: test 阶段失败 → Pipeline 中止,不进入 review
范围边界
包含:
- Pipeline Schema 扩展(对抗字段和反馈数据模型)
- Pipeline Engine 对抗流转执行逻辑
- 反馈上下文构建和注入
- code_reviewer Skill 配置示例
- coding_harness Pipeline 配置示例
- 单元测试和集成测试
不包含(延期到后续工作):
- 任务复杂度评估器(自动判断是否启用对抗团队)
- IM 异步秒级响应(Leader 立即回执 + 后台异步调度)
- 多路并行调研对抗(多路 Researcher + 独立 Verifier)
- 对抗成本监控(Token 消耗、时间、修复成功率记录)
- Verifier 多角色拆分(LogicReviewer / SecurityReviewer / StyleReviewer 并行审查)
风险和依赖
风险
-
Agent 反馈理解能力: Worker Agent 可能无法完全理解结构化反馈并定向修复。缓解措施:使用 feedback_mode="structured+natural" 提供自然语言说明。
-
Verifier 审查质量: code_reviewer 的审查质量取决于 system_prompt 和 LLM 能力。缓解措施:提供高质量的 system_prompt 模板,支持后续优化。
-
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 中,可通过日志和状态管理查询