4.Running the eval
此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)
邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org
==================================================
现在我们的评估数据集已经准备就绪,是时候构建核心评估管道了。这包括获取每个测试用例,将其与我们的提示词合并,输入给Claude,然后对结果进行评分。

评估过程遵循一个清晰的工作流程:我们获取测试用例数据集,将每个用例与我们的提示词模板结合,发送给Claude进行处理,然后使用评分系统对输出结果进行评估。
构建核心函数
评估管道由三个主要函数组成,每个函数都有特定的职责。让我们从最简单的一个开始——处理单个提示词的函数。
run_prompt 函数
这个函数接收一个测试用例并将其与我们的提示词模板合并:
def run_prompt(test_case):
"""合并提示词和测试用例输入,然后返回结果"""
prompt = f"""
请解决以下任务:
{test_case["task"]}
"""
messages = []
add_user_message(messages, prompt)
output = chat(messages)
return output
目前,我们将提示词保持得极其简单。我们没有包含任何格式化指令,所以Claude可能会返回比我们需要的更冗长的输出。我们将在后续迭代提示词设计时完善这一点。
run_test_case函数
该函数负责协调运行单个测试用例并对结果进行评分:
def run_test_case(test_case):
"""调用run_prompt,然后对结果进行评分"""
output = run_prompt(test_case)
# TODO - 评分
score = 10
return {
"output": output,
"test_case": test_case,
"score": score
}
目前,我们使用硬编码的分数10。评分逻辑是我们在接下来的章节中会花费大量时间的地方,但这个占位符让我们可以测试整个流水线。
run_eval 函数
这个函数协调整个评估过程:
def run_eval(dataset):
"""加载数据集并对每个案例调用 run_test_case"""
results = []
for test_case in dataset:
result = run_test_case(test_case)
results.append(result)
return results
这个函数处理数据集中的每个测试案例,并将所有结果收集到一个列表中。
运行评估
要执行我们的评估流水线,我们需要加载数据集并通过我们的函数运行它:
with open("dataset.json", "r") as f:
dataset = json.load(f)
results = run_eval(dataset)
第一次运行时,预计需要一些时间 - 即使使用 Claude Haiku,处理完整数据集也可能需要大约30秒。我们稍后会介绍优化技术。
检查结果
评估返回一个结构化的 JSON 数组,其中每个对象代表一个测试用例结果:
print(json.dumps(results, indent=2))

每个结果包含三个关键信息:
- output:来自 Claude 的完整响应
- test_case:被处理的原始测试用例
- score:评估分数(目前是硬编码的)
正如您在输出中看到的,Claude 生成的响应相当冗长,因为我们还没有提供具体的格式化指令。这正是我们在完善提示词时需要解决的问题类型。

我们已经完成的工作
到目前为止,我们已经成功构建了核心评估管道。我们可以获取数据集,通过 Claude 进行处理,并收集结构化结果。主要缺失的部分是评分系统——那个硬编码的分数 10 需要被实际的评估逻辑所替代。
这个管道代表了大多数 AI 评估系统的基础。虽然看起来很简单,但您刚刚构建了评估管道实际功能的大部分内容。复杂性体现在细节中——更好的提示词、复杂的评分机制和性能优化。
接下来,我们将深入探讨评分器这一关键主题,它将把我们的硬编码分数转换为对 Claude 性能的有意义评估。
==================================================
此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)
邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org