agentic-eval

agentic-eval

热门

评估和改进AI智能体输出的模式与技术。使用此技能的场景: - 实现自我批评与反思循环 - 构建评估器-优化器流水线以进行质量关键型生成 - 创建测试驱动的代码优化工作流 - 设计基于评分标准或LLM作为评判的评估系统 - 为智能体输出(代码、报告、分析)添加迭代改进 - 衡量并提升智能体响应质量

3.6万Star
0Fork
更新于 2026/7/11
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()函数
- [ ] 连接优化循环

### 安全
- [ ] 添加收敛检测
- [ ] 记录所有迭代以便调试
- [ ] 优雅处理评估解析失败