mcpField
V
verification-loops

verification-loops

github.com/itallstartedwithaidea测试与质量4477 次安装28 周前更新
代码仓库

关于 verification-loops

用于为 Agent 输出设计分阶段验证的技能,结合多类型评分器、置信度评估和 pass@k 筛选,适用于重视正确性、审计记录或质量关卡的工作流。

主要功能

  1. 01阶段检查与持续验证
  2. 02确定性、LLM 和人工评分
  3. 03置信度评分
  4. 04pass@k 候选排序
  5. 05基于反馈重新生成

适用场景

  1. 01验证工作流各阶段的输出
  2. 02提交或部署前检查生成代码
  3. 03审计 AI 内容是否合规
  4. 04衡量 Agent 准确率变化

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/itallstartedwithaidea/agent-skills --skill verification-loops

安装后在 Claude Code 中输入/verification-loops确认已加载。

详细介绍

验证循环

Agent Skills™ 的一部分,由 googleadsagent.ai™ 提供

描述

验证循环是一种系统化评估流水线,可在执行的每个阶段验证 Agent 的输出。自主 Agent 面临的根本挑战是信任——如何确定 Agent 做对了?验证循环通过在 Agent 的执行流水线中嵌入检查点评估、持续断言和多阶段审核关卡来解决这一问题。本技能借鉴了 googleadsagent.ai™ 在生产环境中采用的评估方法:Buddy™ 会在向用户展示每项 Google Ads 建议前,根据历史数据、预算限制和领域规则进行验证。

检查点验证与持续验证之间的区别至关重要。检查点验证会在指定的阶段边界(提交前、分析后、部署前)评估输出。持续验证则在生成过程中实时运行断言,在偏差和幻觉扩散之前将其捕获。两种方法都可结合 pass@k 指标:生成多个候选输出,并根据评估器共识选出最佳结果。

生产环境中的验证系统会采用类型化评估器:用于验证架构和约束的确定性评估器、用于评估语义质量的 LLM-as-judge 评估器,以及用于高风险决策的人机协同评估器。这些方法结合起来形成分层验证网,能在流水线中最早、成本最低的环节捕获错误。

适用场景

  • Agent 输出会直接影响业务决策或面向用户的内容
  • 监管或合规要求需要为 AI 生成的内容保留审计记录
  • 多步骤工作流需要在阶段之间设置质量关卡
  • 你需要衡量并持续提升 Agent 的准确率(pass@k 基准测试)
  • 生成的代码必须通过测试后才能提交或部署
  • 分析结果必须根据真实情况或业务规则进行验证

工作原理

graph TD
    A[Agent Output] --> B[Stage 1: Deterministic Grader]
    B -->|Pass| C[Stage 2: LLM-as-Judge]
    B -->|Fail| D[Reject + Feedback Loop]
    C -->|Pass| E[Stage 3: Confidence Scoring]
    C -->|Fail| D
    E -->|High Confidence| F[Accept Output]
    E -->|Low Confidence| G{pass@k Available?}
    G -->|Yes| H[Generate k Candidates]
    H --> I[Rank by Grader Consensus]
    I --> F
    G -->|No| J[Human-in-the-Loop Review]
    J --> F
    D --> K[Error Context Injection]
    K --> L[Re-generation with Feedback]
    L --> B

验证流水线会通过三个阶段处理每项 Agent 输出。阶段 1 应用确定性评估器——架构验证、约束检查、类型验证——这些评估快速且成本低。阶段 2 调用 LLM-as-judge,评估语义正确性、完整性和连贯性。阶段 3 根据各评估器的综合信号计算置信度分数。低置信度输出会触发 pass@k 生成,即生成多个候选结果,并根据评估器共识进行排序。被拒绝的输出会收到具体错误反馈,并将其注入重新生成提示词。

实现

多阶段验证流水线:

interface Grader {
  name: string;
  type: "deterministic" | "llm_judge" | "human";
  evaluate(output: string, context: VerificationContext): Promise<GradeResult>;
}

interface GradeResult {
  pass: boolean;
  score: number;
  feedback: string;
}

class VerificationPipeline {
  private stages: Grader[][] = [];

  addStage(graders: Grader[]): void {
    this.stages.push(graders);
  }

  async verify(output: string, context: VerificationContext): Promise<VerificationResult> {
    const stageResults: StageResult[] = [];

    for (const [idx, graders] of this.stages.entries()) {
      const grades = await Promise.all(
        graders.map(g => g.evaluate(output, context))
      );
      const stagePassed = grades.every(g => g.pass);
      const stageScore = grades.reduce((sum, g) => sum + g.score, 0) / grades.length;

      stageResults.push({ stage: idx, grades, passed: stagePassed, score: stageScore });

      if (!stagePassed) {
        return {
          accepted: false,
          stageResults,
          feedback: grades.filter(g => !g.pass).map(g => g.feedback).join("\n"),
        };
      }
    }

    const confidence = stageResults.reduce((sum, s) => sum + s.score, 0) / stageResults.length;
    return { accepted: true, stageResults, confidence };
  }
}

Pass@k 候选项选择:

async def pass_at_k(task, generator, verifier, k=5):
    """Generate k candidates and select the best by verification score."""
    candidates = await asyncio.gather(*[
        generator.generate(task) for _ in range(k)
    ])

    scored = []
    for candidate in candidates:
        result = await verifier.verify(candidate, task.context)
        scored.append({
            "output": candidate,
            "accepted": result.accepted,
            "confidence": result.confidence,
            "feedback": result.feedback,
        })

    accepted = [s for s in scored if s["accepted"]]
    if accepted:
        return max(accepted, key=lambda s: s["confidence"])

    return max(scored, key=lambda s: s["confidence"])

LLM-as-Judge 评估器:

class LLMJudgeGrader:
    JUDGE_PROMPT = """You are an expert evaluator. Assess the following agent output
against the given task requirements.

Task: {task}
Output: {output}
Criteria: {criteria}

Respond with JSON:
{{"pass": true/false, "score": 0.0-1.0, "feedback": "specific feedback"}}"""

    def __init__(self, judge_model, criteria):
        self.judge_model = judge_model
        self.criteria = criteria

    async def evaluate(self, output, context):
        prompt = self.JUDGE_PROMPT.format(
            task=context.task_description,
            output=output,
            criteria=self.criteria,
        )
        response = await self.judge_model.generate(prompt, temperature=0.0)
        return json.loads(response)

确定性架构评估器:

class SchemaGrader:
    def __init__(self, schema: dict):
        self.schema = schema

    async def evaluate(self, output, context):
        try:
            parsed = json.loads(output)
            jsonschema.validate(parsed, self.schema)
            return {"pass": True, "score": 1.0, "feedback": "Schema valid"}
        except jsonschema.ValidationError as e:
            return {"pass": False, "score": 0.0, "feedback": f"Schema violation: {e.message}"}
        except json.JSONDecodeError:
            return {"pass": False, "score": 0.0, "feedback": "Invalid JSON"}

最佳实践

  1. 按成本排列评估器——先运行确定性(免费)评估器,再运行 LLM-as-judge(昂贵)评估器;大多数失败都能以较低成本捕获。
  2. 让反馈具有可操作性——注入重新生成提示词的评估器反馈必须足够具体,以便指导修正(“缺少字段 X”,而不是“输出有误”)。
  3. 跟踪各评估器的通过率——从不失败的评估器只会增加延迟而毫无价值;总是失败的评估器则表明提示词或模型存在问题。
  4. 有策略地使用 pass@k——生成 5 个候选项会消耗 5 倍 Token;仅在准确性值得其成本的高价值输出中使用 pass@k。
  5. 将验证模型与生成模型分开——使用不同的模型作为评判者,可减少相关错误,即同一模型犯下并忽略同一个错误的情况。
  6. 实现验证缓存——相同任务的相同输出应直接返回缓存的验证结果,无需重新评估。
  7. 针对不同用例设置置信度阈值——代码生成可能需要 0.95 的置信度;创意写作可能接受 0.7。

平台兼容性

功能Claude CodeCursorCodexGemini CLI
确定性评分器✅ 完整✅ 完整✅ 完整✅ 完整
LLM 作为评判者✅ 完整✅ 通过 API✅ 通过 API✅ 通过 API
pass@k 生成✅ 完整✅ 子 Agent✅ 完整✅ 完整
提交前钩子✅ 原生钩子✅ Git 钩子✅ Git 钩子✅ Git 钩子
置信度评分✅ 完整✅ 完整✅ 完整✅ 完整

Mythos Preview 参考

Anthropic 的 Mythos Preview 流程以第二轮 Agent 审核收尾,其工作是分类,而非发现:他们会提示类似 “我收到以下错误报告。请确认这是否是真实且值得关注的问题?” 的内容,以筛除属实但影响较低的问题,保留严重且具有广泛相关性的问题。

将其用作验证 Agent模式:主 Agent 生成发现后,启动一次全新的审核,并提供相关产物、明确的质疑态度,以及针对“真实”“重要”和“可采取行动”的判断标准。来源:Mythos Preview。

相关技能

  • 自我修复 Agent - 验证循环拒绝 Agent 输出时触发的错误恢复
  • Agent 本能系统 - 在采取行动前进行验证,避免出现需要验证才能发现的错误
  • 提示词架构 - 在提示词设计中强制执行架构,从而降低验证失败率

关键词

verification-loops, evaluation, graders, pass-at-k, llm-as-judge, confidence-scoring, checkpoint-verification, continuous-evaluation, quality-gates, agent-skills


© 2026 googleadsagent.ai™ | Agent Skills™ | MIT License

评论

支持 Markdown