mcpField
A
agentic-eval

agentic-eval

github.com/githubAgent 工作流40.5k10.2k 次安装1 天前更新
代码仓库

关于 agentic-eval

介绍 Agent 评估并迭代改进生成结果的模式,涵盖自我反思、评估器与生成器分工、代码测试循环及评分标准评估。

主要功能

  1. 01自我批评与迭代改进循环
  2. 02评估器与生成器分工
  3. 03测试驱动的代码改进
  4. 04结果、评审与评分标准评估
  5. 05迭代上限与收敛检查

适用场景

  1. 01改进对准确性要求高的报告
  2. 02按风格标准检查输出
  3. 03结合测试迭代改进生成代码

安装

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

$npx skills add https://github.com/github/awesome-copilot --skill agentic-eval

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

详细介绍

Agentic 评估模式

通过迭代评估与优化实现自我改进的模式。

概述

评估模式使 Agent 能够评估并改进自身的输出,从单次生成迈向迭代优化循环。

Generate → Evaluate → Critique → Refine → Output
    ↑                              │
    └──────────────────────────────┘

何时使用

  • 质量关键的生成:需要高准确性的代码、报告、分析
  • 具有明确评估标准的任务:存在已定义的成功指标
  • 需要特定标准的内容:风格指南、合规性、格式

模式 1:基础反思

Agent 通过自我批判来评估并改进自身的输出。

def reflect_and_refine(task: str, criteria: list[str], max_iterations: int = 3) -> str:
    """Generate with reflection loop."""
    output = llm(f"Complete this task:\n{task}")
    
    for i in range(max_iterations):
        # Self-critique
        critique = llm(f"""
        Evaluate this output against criteria: {criteria}
        Output: {output}
        Rate each: PASS/FAIL with feedback as JSON.
        """)
        
        critique_data = json.loads(critique)
        all_pass = all(c["status"] == "PASS" for c in critique_data.values())
        if all_pass:
            return output
        
        # Refine based on critique
        failed = {k: v["feedback"] for k, v in critique_data.items() if v["status"] == "FAIL"}
        output = llm(f"Improve to address: {failed}\nOriginal: {output}")
    
    return output

关键洞察:使用结构化 JSON 输出,以便可靠地解析批判结果。


模式 2:评估器-优化器

将生成与评估拆分为不同组件,使职责更清晰。

class EvaluatorOptimizer:
    def __init__(self, score_threshold: float = 0.8):
        self.score_threshold = score_threshold
    
    def generate(self, task: str) -> str:
        return llm(f"Complete: {task}")
    
    def evaluate(self, output: str, task: str) -> dict:
        return json.loads(llm(f"""
        Evaluate output for task: {task}
        Output: {output}
        Return JSON: {{"overall_score": 0-1, "dimensions": {{"accuracy": ..., "clarity": ...}}}}
        """))
    
    def optimize(self, output: str, feedback: dict) -> str:
        return llm(f"Improve based on feedback: {feedback}\nOutput: {output}")
    
    def run(self, task: str, max_iterations: int = 3) -> str:
        output = self.generate(task)
        for _ in range(max_iterations):
            evaluation = self.evaluate(output, task)
            if evaluation["overall_score"] >= self.score_threshold:
                break
            output = self.optimize(output, evaluation)
        return output

模式 3:代码专用反思

面向代码生成的测试驱动优化循环。

class CodeReflector:
    def reflect_and_fix(self, spec: str, max_iterations: int = 3) -> str:
        code = llm(f"Write Python code for: {spec}")
        tests = llm(f"Generate pytest tests for: {spec}\nCode: {code}")
        
        for _ in range(max_iterations):
            result = run_tests(code, tests)
            if result["success"]:
                return code
            code = llm(f"Fix error: {result['error']}\nCode: {code}")
        return code

评估策略

基于结果

评估输出是否达到预期结果。

def evaluate_outcome(task: str, output: str, expected: str) -> str:
    return llm(f"Does output achieve expected outcome? Task: {task}, Expected: {expected}, Output: {output}")
大模型作为评判者

使用大模型对输出进行比较和排序。

def llm_judge(output_a: str, output_b: str, criteria: str) -> str:
    return llm(f"Compare outputs A and B for {criteria}. Which is better and why?")
基于评分细则

根据加权维度对输出评分。

RUBRIC = {
    "accuracy": {"weight": 0.4},
    "clarity": {"weight": 0.3},
    "completeness": {"weight": 0.3}
}

def evaluate_with_rubric(output: str, rubric: dict) -> float:
    scores = json.loads(llm(f"Rate 1-5 for each dimension: {list(rubric.keys())}\nOutput: {output}"))
    return sum(scores[d] * rubric[d]["weight"] for d in rubric) / 5

最佳实践

实践理由
明确标准预先定义具体、可衡量的评估标准
迭代上限设置最大迭代次数(3-5)以防止无限循环
收敛检查如果输出分数在迭代之间没有提升,则停止
日志历史保留完整轨迹以便调试和分析
结构化输出使用 JSON 以便可靠地解析评估结果

快速开始检查清单

## Evaluation Implementation Checklist

### Setup
- [ ] Define evaluation criteria/rubric
- [ ] Set score threshold for "good enough"
- [ ] Configure max iterations (default: 3)

### Implementation
- [ ] Implement generate() function
- [ ] Implement evaluate() function with structured output
- [ ] Implement optimize() function
- [ ] Wire up the refinement loop

### Safety
- [ ] Add convergence detection
- [ ] Log all iterations for debugging
- [ ] Handle evaluation parse failures gracefully

评论

支持 Markdown