feat(pipeline): add adversarial loop schema models

Add ReviewIssue, ReviewFeedback, AdversarialState models and extend
PipelineStage with verifier, max_adversarial_rounds, feedback_mode,
and escalate_on_exhaust fields for Worker-Verifier adversarial loop.
This commit is contained in:
chiguyong 2026-06-12 09:35:01 +08:00
parent 2110c84fb6
commit b733b3a732
1 changed files with 32 additions and 1 deletions

View File

@ -3,7 +3,7 @@
from enum import Enum
from typing import Any
from pydantic import BaseModel
from pydantic import BaseModel, Field
from agentkit.orchestrator.retry import StepRetryPolicy
@ -16,6 +16,31 @@ class StageStatus(str, Enum):
SKIPPED = "skipped"
class ReviewIssue(BaseModel):
"""单条审查问题"""
severity: str = Field(description="问题严重程度: critical/major/minor")
category: str = Field(description="问题类别: logic_error/security/style/test_failure/architecture")
description: str = Field(description="问题描述")
location: str | None = Field(default=None, description="文件路径/行号")
suggestion: str | None = Field(default=None, description="修复建议")
class ReviewFeedback(BaseModel):
"""Verifier 返回的结构化审查反馈"""
passed: bool = Field(description="是否通过审查")
issues: list[ReviewIssue] = Field(default_factory=list, description="问题列表")
summary: str = Field(description="自然语言审查报告")
score: float = Field(description="质量评分 (0-1)")
class AdversarialState(BaseModel):
"""对抗轮次状态追踪"""
current_round: int = Field(default=0, description="当前对抗轮次")
max_rounds: int = Field(default=3, description="最大对抗轮次")
feedback_history: list[ReviewFeedback] = Field(default_factory=list, description="反馈历史")
last_feedback: ReviewFeedback | None = Field(default=None, description="最后一次反馈")
class PipelineStage(BaseModel):
name: str
agent: str
@ -29,6 +54,12 @@ class PipelineStage(BaseModel):
condition: str | None = None
retry_policy: StepRetryPolicy | None = None
compensate: str | None = None
# 对抗闭环相关字段
verifier: str | None = Field(default=None, description="Verifier Agent 名称,配置后启用对抗模式")
max_adversarial_rounds: int = Field(default=3, description="最大对抗轮次")
feedback_mode: str = Field(default="structured+natural", description="反馈模式: structured+natural / structured / natural")
escalate_on_exhaust: str | None = Field(default=None, description="对抗轮次耗尽后的升级目标")
model_config = {"arbitrary_types_allowed": True}