关于 agentic-eval
介绍 Agent 评估并迭代改进生成结果的模式,涵盖自我反思、评估器与生成器分工、代码测试循环及评分标准评估。
主要功能
- 01自我批评与迭代改进循环
- 02评估器与生成器分工
- 03测试驱动的代码改进
- 04结果、评审与评分标准评估
- 05迭代上限与收敛检查
适用场景
- 01改进对准确性要求高的报告
- 02按风格标准检查输出
- 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