SKILL.md
readonly只读
name
agentic-eval
description
评估和改进AI智能体输出的模式与技术。使用此技能的场景: - 实现自我批评与反思循环 - 构建评估器-优化器流水线以进行质量关键型生成 - 创建测试驱动的代码优化工作流 - 设计基于评分标准或LLM作为评判的评估系统 - 为智能体输出(代码、报告、分析)添加迭代改进 - 衡量并提升智能体响应质量
智能体评估模式
通过迭代评估与优化实现自我改进的模式。
概述
评估模式使智能体能够评估和改进自身输出,从单次生成转向迭代优化循环。
生成 → 评估 → 批评 → 优化 → 输出
↑ │
└──────────────────────────────┘
使用时机
- 质量关键型生成:需要高准确性的代码、报告、分析
- 具有明确评估标准的任务:存在定义的成功指标
- 需要特定标准的内容:风格指南、合规性、格式要求
模式1:基础反思
智能体通过自我批评评估和改进自身输出。
def reflect_and_refine(task: str, criteria: list[str], max_iterations: int = 3) -> str:
"""带反思循环的生成。"""
output = llm(f"完成此任务:\n{task}")
for i in range(max_iterations):
# 自我批评
critique = llm(f"""
根据标准评估此输出:{criteria}
输出:{output}
对每项评分:PASS/FAIL,并附上反馈,以JSON格式返回。
""")
critique_data = json.loads(critique)
all_pass = all(c["status"] == "PASS" for c in critique_data.values())
if all_pass:
return output
# 根据批评进行优化
failed = {k: v["feedback"] for k, v in critique_data.items() if v["status"] == "FAIL"}
output = llm(f"改进以解决:{failed}\n原始:{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"完成:{task}")
def evaluate(self, output: str, task: str) -> dict:
return json.loads(llm(f"""
评估任务输出:{task}
输出:{output}
返回JSON:{{"overall_score": 0-1, "dimensions": {{"accuracy": ..., "clarity": ...}}}}
"""))
def optimize(self, output: str, feedback: dict) -> str:
return llm(f"根据反馈改进:{feedback}\n输出:{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"为以下规格编写Python代码:{spec}")
tests = llm(f"为以下规格生成pytest测试:{spec}\n代码:{code}")
for _ in range(max_iterations):
result = run_tests(code, tests)
if result["success"]:
return code
code = llm(f"修复错误:{result['error']}\n代码:{code}")
return code
评估策略
基于结果
评估输出是否达到预期结果。
def evaluate_outcome(task: str, output: str, expected: str) -> str:
return llm(f"输出是否达到预期结果?任务:{task},预期:{expected},输出:{output}")
LLM作为评判
使用LLM比较和排序输出。
def llm_judge(output_a: str, output_b: str, criteria: str) -> str:
return llm(f"比较输出A和B,依据{criteria}。哪个更好,为什么?")
基于评分标准
根据加权维度对输出评分。
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"对每个维度评分1-5:{list(rubric.keys())}\n输出:{output}"))
return sum(scores[d] * rubric[d]["weight"] for d in rubric) / 5
最佳实践
| 实践 | 理由 |
|---|---|
| 明确的标准 | 预先定义具体、可衡量的评估标准 |
| 迭代限制 | 设置最大迭代次数(3-5次)以防止无限循环 |
| 收敛检查 | 如果输出分数在迭代间没有提升则停止 |
| 记录历史 | 保留完整轨迹以便调试和分析 |
| 结构化输出 | 使用JSON以可靠解析评估结果 |
快速入门清单
## 评估实施清单
### 设置
- [ ] 定义评估标准/评分标准
- [ ] 设置“足够好”的分数阈值
- [ ] 配置最大迭代次数(默认:3)
### 实施
- [ ] 实现generate()函数
- [ ] 实现evaluate()函数,输出结构化结果
- [ ] 实现optimize()函数
- [ ] 连接优化循环
### 安全
- [ ] 添加收敛检测
- [ ] 记录所有迭代以便调试
- [ ] 优雅处理评估解析失败






