示例成品 · 平台演示,按左边这组点选真跑出来的
直接照这个流程做,能出结论。
## 1. 测试集准备
表格就四列:
| id | 问题 | 标准答案 | 关键点 |
|---|---|---|---|
| 1 | 为什么太阳会发光? | 太阳核心发生核聚变,氢聚变为氦释放能量,以光/电磁辐射发出 | 核聚变;释放能量;光/电磁辐射 |
要求:
- 100-200条,随机抽,别挑顺手的。
- 每条标准答案拆1-3个核心关键点,别抠字眼。
- 标准答案、关键点绝对不能写进A/B提示词,只在评分阶段用。
- 你调试提示词时用过的例子,不要放进测试集。
## 2. 跑测试
固定条件:
- 同一GPT系列模型,比如都用 `gpt-4o`。
- 参数固定:`temperature=0`。
- 用户消息统一为:`问题:{question}`
- A/B提示词分别作为系统提示词。
版本A系统提示词:
```text
请根据用户问题给出简洁准确的回答,避免冗余信息。
```
版本B系统提示词:
```text
请以清晰、完整的方式回答用户问题,确保信息全面。
```
每条问题分别用A、B各跑一次,记录:
| id | question | answer_A | answer_B |
|---|---|---|---|
## 3. 裁判打分
把标准答案、关键点和AI回答交给GPT裁判。裁判提示词直接用这个:
```text
你是严格阅卷员。根据下面的【标准答案】和【关键点】判断【待评回答】。
规则:
1. 命中:覆盖全部关键点,且没有与标准答案冲突的事实错误。
2. 跑偏:出现与标准答案冲突的事实错误,或答非所问。
3. 漏答:没有覆盖全部关键点,但没有事实错误。
注意:多余的正确内容不影响命中;多余的冲突内容算跑偏。
只输出JSON,格式如下:
{"命中": true/false, "跑偏": true/false, "理由": "一句话"}
【问题】
{问题}
【标准答案】
{标准答案}
【关键点】
{关键点}
【待评回答】
{AI回答}
```
裁判跑完后,表格变成:
| id | question | answer_A命中 | answer_A跑偏 | answer_B命中 | answer_B跑偏 |
|---|---|---|---|---|---|
## 4. 结果计算
```text
A命中率 = A命中数 / 总条数
B命中率 = B命中数 / 总条数
A跑偏率 = A跑偏数 / 总条数
B跑偏率 = B跑偏数 / 总条数
```
## 5. 怎么判
按这个优先级:
1. 先看跑偏率,跑偏率低的赢。
2. 再看命中率,命中率高的赢。
3. 如果命中率差距不到5个百分点,100-200条规模下别当强结论,可能只是波动。
4. 如果命中率、跑偏率都接近,选A,因为更简洁。
## 6. 示例:为什么太阳会发光?
假设标准答案关键点是:
1. 核聚变
2. 氢聚变为氦释放能量
3. 以光/电磁辐射发出
A回答:
```text
因为太阳内部发生核聚变。
```
裁判结果:
```json
{"命中": false, "跑偏": false, "理由": "只覆盖核聚变,漏掉释放能量和光辐射两个关键点"}
```
B回答:
```text
太阳核心在高温高压下发生氢聚变为氦的反应,释放巨大能量,并以光辐射形式发出。
```
裁判结果:
```json
{"命中": true, "跑偏": false, "理由": "覆盖全部三个关键点"}
```
这只是示例,不代表真实结果。
## 7. 几个避坑点
- 别只测顺手的case,测试集要随机。
- 别用30条下最终结论,30条可以预实验,最终看100-200条全量。
- 测试集泄漏进prompt是最容易犯的错,标准答案和关键点只能出现在裁判阶段。
- 如果裁判明显乱判,把关键点拆粗一点,比如每条只留1-2个核心事实点。
## 8. 预判
从设计上看:
- A更可能少跑偏,但可能漏关键点。
- B更可能覆盖全,但可能加戏甚至跑偏。
最终选谁,看数据:跑偏率低、命中率高者赢。
点左边「开工 · 直接出成品」,出一份你自己的版本(文字免费)