fischer-agentkit/docs/plans/2026-06-12-020-feat-pipelin...

405 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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 中,可通过日志和状态管理查询