如何评估OpenAI助手
OpenAI最近发布了一个助手API,简化了消息状态和工具使用的处理。它还启用了代码解释器和知识检索功能,抽象了一些实现RAG架构的繁琐工作。
测试驱动开发允许你在测量改进并避免无法解释的回归的同时,比较提示、模型和工具。这是系统迭代与试错的一个例子。
本指南将引导你使用promptfoo,通过OpenAI的助手API选择最佳的提示、模型和工具。假设你已经设置了promptfoo。
第一步:创建一个助手
使用OpenAI playground创建一个助手。评估将使用这个助手,并使用不同的指令和模型。
添加你想要的函数,并根据需要启用代码解释器和检索功能。
创建助手后,记录其ID。它看起来类似于asst_fEhNN3MClMamLfKLkIaoIpgB
。
第二步:设置评估
一个评估配置有几个关键组件:
prompts
:你想要测试的用户聊天消息providers
:你想要测试的助手和/或LLM APItests
:要尝试的单个测试用例
让我们设置一个基本的promptfooconfig.yaml
:
prompts:
- '帮我解决这个问题:{{message}}'
providers:
- openai:assistant:asst_fEhNN3MClMamLfKLkIaoIpgB
tests:
- vars:
message: 写一条关于香蕉的推文
- vars:
message: 38.293和30300300的平方根之和是多少
- vars:
message: 反转字符串“all dogs go to heaven”
第三步:运行评估
现在我们已经设置好了配置,在命令行上运行评估:
npx promptfoo@latest eval
这将生成一个简单的助手输出视图。请注意,它会记录对话,以及代码解释器、函数和检索的输入和输出:
这是一个基本视图,但现在我们准备真正认真地进行评估。在接下来的部分中,我们将学习如何比较不同的助手或同一助手的不同版本。
比较多个助手
要比较不同的助手,请在promptfooconfig.yaml
的providers
部分引用它们。例如:
providers:
- openai:assistant:asst_fEhNN3MClMamLfKLkIaoIpgB
- openai:assistant:asst_another_assistant_id_123
这将针对两个助手运行相同的测试,并允许你比较它们的性能。
比较同一助手的不同版本
如果你想为特定测试覆盖助手的配置,可以在测试的options
部分进行。例如:
providers:
- id: openai:assistant:asst_fEhNN3MClMamLfKLkIaoIpgB
config:
model: gpt-4o
instructions: '在这里输入系统级指令的替代内容'
tools:
- type: code_interpreter
- type: retrieval
thread:
messages:
- role: user
content: '这些消息在每个测试用例的提示之前包含。'
- role: assistant
content: '好的'
在这个例子中,助手API使用上述参数调用。
以下是一个比较保存的助手设置与新潜在设置的例子:
providers:
# 原始
- id: openai:assistant:asst_fEhNN3MClMamLfKLkIaoIpgB
# 修改
- id: openai:assistant:asst_fEhNN3MClMamLfKLkIaoIpgB
config:
model: gpt-4o
instructions: '总是像海盗一样说话'
这个评估将测试助手的两个版本,并并排显示结果。
添加指标和断言
指标和断言允许你自动评估助手的性能。你可以在测试的assert
部分添加它们。例如:
tests:
- vars:
message: 写一条关于香蕉的推文
assert:
- type: contains
value: '香蕉'
- type: similar
value: '我喜欢香蕉!'
threshold: 0.6
在这个例子中,contains
断言检查助手的响应是否包含单词'香蕉'。similar
断言检查助手的响应在语义上是否与'我喜欢香蕉!'相似,余弦相似度阈值为0.6。
有许多不同的断言可以考虑,从简单的指标(如字符串匹配)到复杂的指标(如模型评级的评估)。我强烈建议你设置适合你用例的断言。 基于这些断言,promptfoo 将自动为你的助手的不同版本评分,以便你可以选择表现最佳的那个。
下一步
既然你已经设置了一个基本的评估集,你可能还会对评估检索代理的具体技术感兴趣。