在构建提示评估工作流程时,评分系统提供了关于输出质量的客观信号。评分器(grader)接收模型输出并返回某种可衡量的反馈——通常是1到10之间的数字,其中10代表高质量,1代表低质量。
评分器的类型

评估模型输出主要有三种方法:
- 代码评分器 - 使用自定义代码以编程方式评估输出
- 模型评分器 - 使用另一个AI模型来评估质量
- 人工评分器 - 让人工手动审查并评分输出
代码评分器
代码评分器让您能够实现任何您能想到的程序化检查。常见用途包括:
- 检查输出长度
- 验证输出是否包含或不包含某些词语
- 对JSON、Python或正则表达式进行语法验证
- 可读性评分,以确保适当的阅读难度
模型评分器
模型评分器通过使用额外的API调用来评估输出,提供了极大的灵活性。它们适用于评估:
- 响应质量
- 指令遵循的质量
- 完整性
- 有帮助性
- 安全性
人工评分器
人工评分器提供了最大的灵活性,但也伴随着显著的缺点。虽然人类可以针对任何可想到的标准评估响应,但这个过程既耗时又繁琐。
定义评估标准

在实施任何评分器之前,您需要明确的评估标准。对于代码生成提示,您可能会关注以下方面:
- 格式 - 应仅返回Python、JSON或正则表达式,不附带解释
- 有效语法 - 生成的代码应具有有效的语法
- 任务遵循 - 响应应直接针对用户的任务,并提供准确的代码

前两项标准非常适合代码评分器,而任务遵循则更适合模型评分器,因为它们具有更高的灵活性。
实现模型评分器
模型评分器通常是最容易实现的。以下是一个基本结构:
python
def grade_by_model(test_case, output):
messages = []
add_user_message(messages, eval_prompt)
add_assistant_message(messages, "```json")
eval_text = chat(messages, stop_sequences=["```"])
return json.loads(eval_text)
评分提示应该全面,并包括:
- 评分器的明确角色定义
- 原始任务
- 待评估的AI生成解决方案
- 具体的输出格式要求
不要只要求一个分数。要求在数字分数之外同时提供优点、缺点和推理过程。这可以防止模型默认给出像6这样的中庸分数,并促使其进行更深思熟虑的评估。
将评分器集成到您的工作流程中
一旦您有了评分器函数,就将其集成到您的测试用例运行器中:
python
def run_test_case(test_case):
output = run_prompt(test_case)
# 调用模型评分器
model_grade = grade_by_model(test_case, output)
score = model_grade["score"]
reasoning = model_grade["reasoning"]
return {
"output": output,
"test_case": test_case,
"score": score,
"reasoning": reasoning
}运行完所有测试用例后,计算平均分数,以获得您提示性能的客观指标:
python
from statistics import mean
def run_eval(dataset):
results = []
for test_case in dataset:
result = run_test_case(test_case)
results.append(result)
average_score = mean([result["score"] for result in results])
print(f"Average score: {average_score}")
return results这为您提供了一个具体的数字,可以作为改进的重点。虽然模型评分器可能有些不稳定,并且可能需要更好的指导,但它们为客观评估提供了一个起点,您可以在此基础上进行迭代和改进。