第 25 页 / 共 100 页 / 飞书修订版 10

5.Model based grading(基于模型的评分)

此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)

邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org

==================================================

TWilbckjFo8aUvx2i0AcFG8InUh.bin

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

Types of Graders

image1.png

对模型输出进行评分主要有三种方法:

  • 代码评分器 - 使用自定义逻辑以编程方式评估输出
  • 模型评分器 - 使用另一个AI模型来评估质量
  • 人工评分器 - 让人员手动审查和评分输出

Code Graders

代码评分器让你可以实现任何你能想象到的编程检查。常见用途包括:

  • 检查输出长度
  • 验证输出是否包含或不包含特定词汇
  • 对JSON、Python或正则表达式进行语法验证
  • Readability scores

唯一的要求是你的代码返回一些可用的信号——通常是1到10之间的数字。

Model Graders

模型评分器将您的原始输出输入到另一个API调用中进行评估。这种方法为评估以下方面提供了极大的灵活性:

  • Response quality
  • 指令遵循的质量
  • Completeness
  • Helpfulness
  • Safety

Human Graders

人工评分器提供了最大的灵活性,但耗时且繁琐。它们适用于评估:

  • 整体响应质量
  • Comprehensiveness
  • Depth
  • Conciseness
  • Relevance

定义评估标准

image2.png

在实施任何评分器之前,您需要明确的评估标准。对于代码生成提示,您可能会关注:

  • 格式 - 应该只返回Python、JSON或正则表达式,不需要解释
  • 有效语法 - 生成的代码应该具有有效的语法
  • 任务遵循 - 响应应该直接解决用户的任务,并提供准确的代码
image3.png

前两个标准适合使用代码评分器,而任务遵循由于其灵活性更适合使用模型评分器。

实现模型评分器

以下是构建模型评分器函数的方法:

def grade_by_model(test_case, output):

# 创建评估提示

eval_prompt = """

你是一位专业的代码审查专家。请评估这个AI生成的解决方案。

任务:{task}

解决方案:{solution}

请以结构化的JSON对象形式提供你的评估,包含:

- "strengths": An array of 1-3 key strengths

- "weaknesses": An array of 1-3 key areas for improvement

- "reasoning": A concise explanation of your assessment

- "score": A number between 1-10

"""

messages = []

add_user_message(messages, eval_prompt)

add_assistant_message(messages, "```json")

eval_text = chat(messages, stop_sequences=["```"])

return json.loads(eval_text)

关键洞察是在评分的同时要求提供优势、劣势和推理过程。如果没有这些上下文信息,模型往往会默认给出6分左右的中等分数。

将评分集成到您的工作流程中

更新您的测试用例运行器以调用评分器:

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

}

最后,计算所有测试用例的平均分数:

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

这为您提供了一个客观的指标,可以在迭代优化提示词时进行跟踪。虽然模型评分器可能会有些反复无常,但它们为衡量改进效果提供了一致的基准线。

==================================================



此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)
邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org