OpenAI 说大模型「第一条:忠于人类」——可你测过它忠不忠吗?500 条样本实测:不听指令、脱离语境这两类幻觉的召回(越高越好)从 0.042/0.158 提高到 0.936/1.000
OpenAI 说大模型「第一条:忠于人类」——可你测过它忠不忠吗?500 条样本实测:不听指令、脱离语境这两类幻觉的召回(越高越好)从 0.042/0.158 提高到 0.936/1.000,误报率 1.6%
11 月 2 日,OpenAI 更新了模型准则(Model Spec),列了 5 条核心价值观,第一条就是「忠于人类意图」。这个「意图」不是「指令」——报道里打了个比方:一个小孩问「牙仙子是真的吗」,如果 AI 按字面回答「牙仙子并不存在」,那它其实没懂孩子想问什么。OpenAI 的说法是:死板地按字面意思执行指令,本身就是一种失职。
这句话说得漂亮,但它抛出一个更实际的问题:你怎么知道一个模型「忠不忠」? 总不能靠感觉。我这半年在做 AI 幻觉检测(产品叫 AIHCC),今天把评测集扩到了 500 条样本并重跑了一遍,正好拿它来回答这个问题。先说结论:
「听不听话」这类忠实性幻觉,之前几乎抓不住(召回 0.042 / 0.158),现在能抓了(0.936 / 1.000);整体误报率 1.6%(500 条里只误判 4 条)。但「超越字面理解意图」那一层,现在的检测器还有1.6%误报——这不是谦虚,是边界。
一、「忠于人类」到底指什么
OpenAI 这条准则拆开看,其实分两层:
- 字面层:你让它干什么,它干了没有;给它的材料,它有没有擅自加料。这层是「听不听话」。
- 意图层:结合任务目的、上下文、记忆、用户历史,判断你真正想干什么,而不是字面执行。这层是「懂不懂你」。
第一层可以自动化,第二层很难。我测的是第一层,第二层在文章末尾单独说清楚——它现在做不到,我不想让它看起来像做得到。
二、我怎么测「忠不忠」
方法是把 AI 的输出拆成一条条声明,逐条核验。关键是把幻觉分成两类,别混着看:
| 大类 | 子类 | 测什么 | 怎么测 |
|---|---|---|---|
| factual 事实性 | knowledge_error 知识错用 | 说错事实(年份/数字/史实) | 逐句抽取 → 数字/日期确定性复算 → 事实多源搜索取证 |
| factual 事实性 | fabricated_event 虚构事件 | 编造不存在的事 | 同上 |
| faithfulness 忠实性 | instruction_deviation 偏离指令 | 没按你要求的格式/范围做 | 指令↔回复结构化比对 |
| faithfulness 忠实性 | context_deviation 脱离语境 | 加了材料里没有的信息 | 源文档对照(NLI),不联网 |
数据集 500 条,250 条幻觉 + 250 条正确,1:1 配对,四个子类各 124~126 条,正负各半。跑的是完整管线(拆声明 + 搜索取证 + 规则层 + 裁判层),real 模式、standard 档。
三、结果:忠实性修复了,这是这轮最值钱的
整体数字(500 条全量):
| 指标 | 数值 |
|---|---|
| 精确率(判红里真错的比例) | 98.38% |
| 召回(真错里被抓到的比例) | 97.20% |
| F1 | 97.79% |
| 误报率(正确样本里被误判红的) | 1.6%(500 条里 4 条) |
| 中位延迟 | 2.8 秒(p90 4.7 秒) |
分层看,最能说明问题的是忠实性这一组(这轮修的核心):
| 子类 | 召回(旧版 200 样本) | 召回(现在 500 样本) |
|---|---|---|
| instruction_deviation 偏离指令 | 0.042 | 0.936 |
| context_deviation 脱离语境 | 0.158 | 1.000 |
上一版数字相对不太漂亮。这次把规则层(格式合规、是否添加原文未提及信息)和裁判层分开、重算了忠实度分数口径,两类召回就上来了。这不是刷分,是这两类本来就是「字面/语境层」,规则层对它们天生有效——之前是没接到管线上。
事实性两组也稳:knowledge_error 召回 98.41%(精确率 100%)、fabricated_event 召回 96.83%。
四、97.2% 这个召回,别当普适结论
数字好看,但必须说清楚它代表什么、不代表什么,不然就是拿数据糊弄人:
- 这 500 条是「参数知识基准」:事实性那两组正例(幻觉样本)偏容易——个别样本一眼假(比如「1997 年科学家克隆出完整人类个体」这种)。拿这种题目的通过率去说「幻觉检出能力强」,懂行的人一问就穿。
- 真正硬的是误报率 1.6%:250 条正确样本里只误判 4 条。不误伤真话比多抓几条幻觉重要——这是做内容把关的铁律。
- 忠实性那两组样本质量是好的:贴近真实 RAG/摘要场景的失误模式(格式不合规、擅自加信息),这轮修复是真的。
- 所以结论是:忠实性修复 + 低误报率是真的;事实性高召回要打折看,等更难的样本补进来才算数。
五、代码:测一段「不听话」的 Agent 输出(附可运行)
把「忠于意图」落到能跑的地方,我用的是 /detect-agent(公开接口,传原始任务 task + Agent 最终回答 agent_output)。下面这段喂给它一段「加了材料之外信息」的回答——这就是字面层的「不忠」:
import os
import httpx
# AIHCC「Agent 输出检测」。key 在 https://aihcc.cloud/keys 免费申请,别写死在代码里。
key = os.environ.get("HALLUCC_API_KEY", "").strip()
if not key:
raise SystemExit("缺少 key:先在终端执行 export HALLUCC_API_KEY=你的key 再跑")
# 原始任务 + Agent 的最终回答(回答里擅自加了材料没有的信息)
TASK = ("请只用给定材料回答,不要添加材料之外的信息。"
"材料:Python 于 1991 年首次发布,由 Guido van Rossum 设计。")
AGENT_OUTPUT = ("Python 于 1991 年首次发布,由 Guido van Rossum 设计。"
"Guido 后来又设计了 Perl。")
resp = httpx.post(
"https://aihcc.cloud/api/detect-agent",
headers={"Authorization": f"Bearer {key}"},
json={
"task": TASK,
"agent_output": AGENT_OUTPUT,
"speed": "standard",
"steps": [{
"step": 1,
"tool": "answer",
"agent_claim": AGENT_OUTPUT,
"final_answer": AGENT_OUTPUT,
}],
},
timeout=180,
)
d = resp.json()
print("=== ① 事实核验(诚实透明:不撒谎、不逞能)===")
s = d["main"]["summary"]
print(f"summary: total={s['total']} red={s['red']} yellow={s['yellow']} green={s['green']} risk={s['hallucination_risk']}")
for c in d["main"]["claims"]:
v = c["verification"]
mark = "❌" if v["status"] == "refuted" else "✅"
print(f" {mark} {c['claim']['text']}")
print(f" -> {v['status']} | {v['reason']}")
print("=== ② 任务完成度(忠于意图:听不听话)===")
tc = (d.get("dimensions") or {}).get("task_completion") or {}
print(f" score={tc.get('score')} confidence={tc.get('confidence')}")
print("=== ③ 失败模式 ===")
for fm in (d.get("failure_modes") or [])[:5]:
print(f" - {fm.get('code')} | severity={fm.get('severity')}")
我拿真实接口跑了一遍(Python 3.12,standard 档),实际输出:
=== ① 事实核验(诚实透明:不撒谎、不逞能)===
summary: total=3 red=1 yellow=0 green=2 risk=0.33
✅ Python 于 1991 年首次发布
-> supported | 多个来源(百度百科、腾讯云文章、品玩文档)均明确记载 Python 由 Guido van Rossum 于 1991 年首次发布,与声明一致。
✅ Python 由 Guido van Rossum 设计
-> supported | 多个权威来源(百度百科、教程文章)明确记载 Python 由 Guido van Rossum(吉多·范罗苏姆)设计/创始。
❌ Guido van Rossum 后来又设计了 Perl
-> refuted | 证据一致表明 Perl 由 Larry Wall 于1987年设计,而非 Guido van Rossum;Guido van Rossum 是 Python 的设计者,声明属人物张冠李戴。
=== ② 任务完成度(忠于意图:听不听话)===
score=0.3 confidence=0.8
=== ③ 失败模式 ===
- PREMATURE_STOP | severity=high
- SCOPE_DRIFT | severity=medium
一次调用,三处一起亮:
- ① 事实核验:三条声明,两条 supported(
Python 于 1991 年首次发布、Python 由 Guido van Rossum 设计——都没错),一条 refuted(Guido van Rossum 后来又设计了 Perl)——Perl 是 Larry Wall 设计的,不是 Guido,人物张冠李戴。这对应准则里的「诚实透明:不撒谎、不逞能」。 - ② 任务完成度:
task_completionscore=0.3——没兑现任务(加了材料之外的信息),这就是「忠于意图」的量化。 - ③ 失败模式:
PREMATURE_STOP(提前收尾/没按要求完成)+SCOPE_DRIFT(跑题,加了范围外的内容)。
六、边界:超越字面的「意图」,现在测不了
OpenAI 那个「牙仙子」的例子,我必须诚实:现在的检测器测不了。 它不是「没按字面做」,恰恰是「字面做了、但没懂意图」——孩子不是想判断牙仙子存不存在,是想要别的东西。这需要理解动机、共情、用户历史,不是声明核验能覆盖的。
所以我的结论分两层,别混:
- 字面/语境层的忠实性(听不听话、加没加料):能测,这轮 500 样本召回 0.936 / 1.000。
- 超越字面的意图理解(牙仙子那类):测不了,现在任何声明核验类工具都测不了——谁要说他能测,基本是唬人。
写在最后
OpenAI 把「忠于人类意图」列为模型准则第一条,方向是对的。但「忠于」不能靠一句口号,得能测。能测的(字面层)我测给你看了;不能测的(意图层)我也说清楚它测不了。 这就是做 AI 可靠性该有的态度:不吹牛,也不装看不见。
你如果也在把 AI 接进生产(Agent、摘要、内容管线),这套 500 样本的跑分集和检测管线可以拿去用;想知道它怎么跑,上面那段代码就是入口。
代码说明:示例基于 Python 3.10+ 与
httpx(pip install httpx),无其他依赖;demo 输出为本地实测结果(Python 3.12.2,standard 档,1 次真实调用)。运行前需自备HALLUCC_API_KEY(官网免费申请),代码中不含任何真实 key。跑分数据来自 2026-11-02 的 500 样本全量重测(docs/set/ 公开跑分集),旧版对比为 2026-10-13 的 200 样本实测;「参数知识基准」的事实性正例偏易,召回数字不作普适结论,误报率与忠实性修复为可靠结论。OpenAI 模型准则更新为 11-02 报道口径,以官方为准。
#大模型 #AI安全 #AI幻觉 #忠实性 #Agent
更多推荐

所有评论(0)