AI 内容核查怎么做:智能内容 AI 核查系统实践

1. AI 内容核查怎么做:智能内容 AI 核查系统实践

[!abstract] 速览
文章聚焦百度 AI 内容核查系统的构建实践,指出 AIGC 内容事实错误隐蔽、难以覆盖的核心问题。
作者提出五条核查原则:主张是最小核查单位、证据以权威性为第一排序因素、搜索与推理交替、不同类型内容走不同路径、模型判关系规则做决策。
系统采用多阶段小模型流水线,将原本数百行的 Prompt 拆分为六个窄任务,降低成本并提升可维护性。
实践表明,系统在知识百科、内容问答等业务中有效降低了核查成本,提升了准确率。

百度内容核查团队的一手实践:把 AIGC 内容拆成最小可验证主张、按权威性排序证据、搜索与推理交替、由规则下结论。
五条核查原则 + 多阶段小模型流水线(数百行 Prompt 拆成六个窄任务,DSPy 优化 + 蒸馏 + 样本回流),已在五类业务降本落地,做事实核查的团队可直接借鉴。

1.1. 主要内容

要点 说明
AI 内容核查的核心难点在于事实错误隐蔽且难以批量覆盖 文章指出,AIGC 内容的错误往往藏在局部、限定条件或多个数字之间的关系里,单看每一句都有出处,人工抽查无法覆盖大量数据,简单规则也无法识别。
构建五条核查原则确保系统方法论的科学性 主张最小化、证据权威化、搜索推理交替、类型分流、模型判关系规则决策五条原则,为后续系统设计和实现提供了清晰指导。
多阶段小模型流水线显著降低核查成本 将原本数百行的 Prompt 拆分为六个窄任务,每个阶段交给小模型或规则处理,既降低了 token 消耗,又便于问题归因和针对性优化。
DSPy 和模型训练技术驱动持续迭代提升 通过 DSPy 自动优化 Prompt、模型蒸馏生成训练数据、强化学习实现自主检索学习,以及样本回流闭环,实现了系统效果的持续改进。
系统通过配置化和多核查器支持不同业务场景 支持快速核查、专业核查、近线核查三种核查器,实现“快速核查 → 专业核查”漏斗和海量数据的近线处理,满足不同准确率、延时和成本需求。
文章头图:AI 内容核查怎么做,智能内容 AI 核查系统实践,蓝色渐变背景上的文档、AI 标识、放大镜与盾牌图标

AIGC 内容里的事实错误越来越隐蔽:前几段都对,最后一句张冠李戴;检索结果里对的错的都有,模型挑了不权威的那条。
我们建设了一套内容 AI 核查系统,核心做法是把内容拆成最小的可验证主张,以权威证据为准逐条判断,让模型只判断证据与主张的关系,由规则给出结论。
在此基础上,我们用多阶段小模型流水线把核查成本降下来,覆盖海量批量数据。
系统已在知识百科、内容问答等五类业务落地。

全文 4682 字,预计阅读时间 6 分钟

1.2. 核查难在哪

先看几个线上真实出现过的错误:

五类线上事实错误案例表:张冠李戴、劣币驱良、生搬硬套、以偏概全、逻辑矛盾,以及每类错误对应的核查能力

△ 五类线上事实错误案例,以及核查每类错误所需的能力

这些错误有个共同点:单看每一句都“有出处”,错误藏在局部、藏在限定条件里、藏在多个数字之间的关系里。
人工抽查覆盖不了这么大的量,简单规则也识别不出来。

业界常见的做法有两类。
一类依赖模型自身知识,比如多次采样看一致性、看输出的不确定性,但模型不知道的事实就验证不了,多次调用成本也高。
另一类结合检索做验证,引入了外部证据,可搜索排在前面的结果是“和问题最相关”的,不一定是“权威且正确”的。
开源框架方面,通用 RAG 框架缺少多轮“搜索 + 推理”的能力,专门的研究项目大多维护不活跃,没有能直接用到生产的方案。

除了效果,还有工程上的约束:成本要撑得住海量且持续增长的数据,效果提升不能只靠换更大的模型,系统还要留出持续迭代的空间。

1.3. 核查思路:五条原则

我们的核查方法可以归结为五条原则。

1.3.1. 主张是最小核查单位

长文本里的错误通常只出现在局部,整段判断容易被前文的正确内容“带过去”。
我们先按文档结构拆段,再把每段拆成原子主张:一条主张只讲一个事实,主体完整,时间、地点补全。
例如“它于 2019 年发布”要补全成“某型号手机于 2019 年发布”。
每条主张独立检索、独立判断。

主张粒度还有一个好处:相同或高度相似的主张可以复用结果,热点事实不用反复核查。

1.3.2. 证据以权威性为第一排序因素

核查的依据是外部证据,模型自身的知识只做辅助。
证据的质量决定了核查的上限,而质量的第一指标是权威性。

数据源按权威程度分成多个等级,从政府官网这类绝对权威的来源,到主流媒体,再到无权威性的来源。
每个垂类维护自己的权威站点表。
检索时先查高权威源,不够再逐级放宽。
来源之间冲突时高权威优先,低权威来源只做风险提示。
同一内容被多个不同域名转载,会被当作互证信号。

1.3.3. 搜索与推理交替

很多事实要多跳才能确认。
“某城市最高楼有多高”,要先确定最高的建筑是哪座,再查它的高度。
我们参考 Search-R1 和 ReAct 的思路,让模型在推理中发现知识缺口时主动检索,拿到结果后继续推理,直到不再需要外部知识。

检索 Query 也不直接用原句。
主张会先被改写成适合检索的 Query,并单独处理时间限定这类容易召回失败的信息。

1.3.4. 不同类型的内容走不同的路

不是所有内容都需要最贵的通用链路。
主张会先按垂类分流:通用事实走多轮搜索,电话号码查权威库,歌词和章节做结构化匹配,链接做有效性校验。
纯观点、主观评价这类没有可核查事实的内容,在入口就被过滤掉。

1.3.5. 模型判关系,规则做决策

早期让模型直接输出“正确 / 错误 / 不确定”,遇到两个问题。
一是同一输入多次运行结果不一致,结果会“闪烁”。
二是不同业务对“正确”的标准不一样:医疗要求权威来源,旅游可以接受多方印证,模型分不清该用哪套标准。

改造后,模型只判断证据和主张之间的关系,在支持、部分支持、矛盾、无关、信息不足五类里选一个。
业务结论交给规则映射:

模型判出的关系叠加证据条件后的映射表:支持加权威来源映射为支持(权威),支持加多个一般来源互证映射为支持,部分支持加权威来源映射为部分支持,矛盾加权威来源直接否定映射为矛盾,无关或无证据映射为无法验证或证据不足

△ 模型判出的关系叠加证据条件,再映射为业务结果

规则再结合来源等级、证据数量、是否高风险领域,输出正确 / 错误 / 争议 / 无权威来源的业务标签。
这样业务之间的差异变成了配置差异,判定也更稳定。
原来写在 Prompt 里、靠模型“自觉”遵守的要求也变成了代码里的硬规则。

[!warning] 高风险领域的判定兜底
例如灾害伤亡、医疗、法律、金融等高风险领域,模型判“矛盾”但置信度不高时,不直接判错,而是降级为“无法验证”并进入复核队列。

判定改造前后对比图:改造前大模型用数百行 Prompt 一次判断,直接输出正确、错误或不确定,存在结果闪烁和业务标准不清的问题;改造后小模型只判断五类关系,再由规则引擎结合来源等级、证据数量和高风险领域映射为业务标签

△ 改造前模型直接给结论;改造后模型只判断证据与主张的关系,由规则引擎映射成业务标签

1.4. 系统全貌

智能内容 AI 核查流程图:待核查内容依次经过解析、校验、判定三段,每段标注对应的核查原则,底部是效果迭代闭环

△ 一次核查请求经过解析、校验、判定三段,每段上方标出对应的核查原则,底部是效果迭代闭环

一次核查请求依次经过三段,上面五条原则落在各段里:

阶段 做什么
解析 过滤不需要核查的内容,按垂类把文本拆成原子主张,再复核一遍,去掉主体错位、信息丢失的主张。
校验 把主张改写成检索 Query,按权威等级逐级检索,证据按内容去重后按来源等级取最相关的几条。
判定 模型判断证据与主张的关系,规则输出业务标签。

判定结果会进入右侧的迭代闭环:抽样分析、按阶段归因、针对性优化,新版本上线后开始下一轮(见第五节)。

1.4.1. 三种核查器,按场景组合

不同业务对准确率、延时和成本的要求不同,系统提供三种核查器,它们对外接口一致,可以自由组合:

三种核查器按场景组合图:交互式与业务流量走快速核查再升级专业核查的漏斗,海量批量数据走近线核查的小模型流水线

△ 交互式与业务流量走“快速核查 → 专业核查”漏斗,海量批量数据走近线核查

三种核查器对比表:专业核查用大模型多轮搜索加推理、逐步归纳证据后总结判定,适合准确率要求最高的深度复核与多跳事实;快速核查用大模型一次推理、读入原文和全部证据后一次输出全部结论,适合交互式入口;近线核查用多阶段流水线、每阶段交给小模型或规则并跑在闲时 GPU 上,适合 AIGC 批量数据与存量巡检

△ 专业核查、快速核查、近线核查的做法与适用场景

线上常见的组合是“漏斗”:先走快速核查,只有出现矛盾标签的内容才升级到专业核查做深度复核。
大部分没有问题的内容在第一层就结束,成本集中花在真正有疑点的数据上。
海量批量数据则交给近线核查。

这三种形态也是系统一路演进过来的。
专业核查准确率高,但多轮交互的 token 随轮数近似平方增长,长尾延时偏高;快速核查链路短,但把所有判断压在一次超大模型推理里,成本撑不起大规模数据。
近线核查就是为了解决规模问题而做的,下一节展开。

1.5. 规模化:从一个大 Prompt 到小模型流水线

1.5.1. 一次推理做六七件事的问题

快速核查的 Prompt 有数百行,写满了权威来源表、证据数量门槛、同名实体处理、时效性降级等规则,等于要求模型在一次推理里同时完成六七件事。
这带来三个问题:

问题 表现
只能用最大的模型 换成小模型,效果断崖式下降。
错了不知道错在哪 主张没拆对、Query 没搜到、证据被截断、判别本身出错,最后都只表现为“结论错了”。
改一处坏一片 调整一条规则要动整个大 Prompt,经常按下葫芦浮起瓢。

1.5.2. 拆成六个窄任务

大模型的能力没法让小模型直接替代,但大模型做的那件“大事”可以拆成若干件小模型能做好的“小事”,其中能确定化的部分再下沉为代码。

从一个大 Prompt 拆成六个窄任务的示意图:改造前由超大模型用数百行 Prompt 一次推理输出全部结论,改造后拆成免审判断、分垂类拆主张、主张复核、Query 泛化、权威检索、打分判别六个阶段

△ 一个数百行 Prompt 拆成六个窄任务,每个阶段交给小模型、规则或两者组合

六个窄任务分工表:免审判断由小模型过滤纯观点与无可核查事实的内容,分垂类拆主张由小模型按垂类抽取原子主张,主张复核由小模型过滤主体错位与信息丢失的主张,Query 泛化由小模型加代码兜底改写检索词,权威检索由规则与向量服务执行,打分判别由小模型判关系、规则做决策

△ 六个窄任务各自做什么,分别交给谁

“模型判关系,规则做决策”在这里发挥了关键作用:判别 Prompt 从数百行缩到十几行,输出只有标签、分数和理由,数 B 参数的小模型也能稳定遵循。
证据也先压缩再判别,每条主张只取最相关的几条证据,既省 token 又降噪声。

1.5.3. 用闲时 GPU 承接主力流量

[!tip] 用闲时 GPU 承接主力流量
核查是典型的“量大、可延迟”任务。AIGC 数据成批到达,存量内容需要全量巡检,一批实验数据就可能有百万量级。
这类任务不需要秒级返回,但需要高吞吐和低单价。
搜索系统有大量推理卡在低峰期是空闲的,只要每个阶段的模型能压到数 B 参数,就能用这些资源承接主要流量。

我们对拆分后的几类任务分别做了模型横评,规律很清晰:任务越窄,能胜任的模型越小。
垂类识别这类分类任务,数 B 参数的模型就能完全识别正确;句子切分用中等尺寸的模型效果最好,Thinking 类模型更慢,效果却没有明显优势;推理判别难度最高,是小模型化的主要攻坚点。

目前小模型已在近线 GPU 上正式部署,承接免审、拆主张、Query 泛化、判别等阶段的主力流量。
在线大模型仍然保留,但换了位置:作为蒸馏小模型的教师、评测时的对照组,以及疑难样本的复核者。

1.5.4. 拆完之后,问题能归因了

拆分还有一个比省成本更重要的收益:每条 bad case 都能定位到具体阶段。
下面是某一轮人工抽样的问题分布:

人工抽样问题分布表:打分判别约占一半,典型问题是注意力分散、张冠李戴、分析过程对但结论错;主张提取约占三分之一,典型问题是同名电影或电视剧丢失主体、HTML 页面里的可核查内容没抽出来;Query 泛化较少,典型问题是带年份召回不到、去掉年份又召回别的年份;证据截断个例,原因是证据池参数设置不当

△ 某一轮人工抽样的问题分布:打分判别约一半、主张提取约三分之一、Query 泛化较少、证据截断个例

在原来的黑盒方案里,这些问题只能笼统地记成“判错了”。
有了归因,后面的优化才能有的放矢。

1.6. 效果迭代:让核查越用越准

核查效果没法一次做到位,靠的是持续迭代。
我们按成本从低到高用三种手段:先做 Prompt 自动优化,到顶后再训练模型,两者所需的数据都来自样本回流闭环。
这套方法对小模型尤其重要,因为小模型的单点能力弱,需要持续把效果追上来。

1.6.1. DSPy:把 Prompt 从“手写”变成“编译”

多个垂类乘以多个阶段,每个组合都要一套 Prompt。
手工调 Prompt 改一处常常影响别处,在大模型上调好的 Prompt 换到小模型上效果也难以预期。

DSPy 换了一种思路:只声明任务的输入输出,给定标注数据和评估指标,由优化器自动搜索指令措辞和示例。
我们在一个“规则藏在数据里”的分类任务上对比了几种优化器(推理模型都是数 B 参数的小模型):

DSPy 优化器对比表:COPRO 只改指令措辞,基本无提升;MIPROv2 改写指令加自动挑选示例,有明显提升;GEPA 由小模型自己反思,读答错的样例、反思错因、把隐藏规则写回指令,大幅提升;GEPA 交给强思考模型反思,推理仍用小模型,提升最大,测试集上几乎没有错例

△ 几种优化器在分类任务上的效果对比

这组实验规模不大,但趋势和业务上的观察一致:

  • MIPROv2 容易把训练集里的个别样例写进指令,泛化差;GEPA 通过反思错例总结出能泛化的判定规则。
  • 反思模型和推理模型可以分开选。线上推理用小模型控制成本,离线反思用最强的模型挖规则,等于把大模型的能力“编译”进了小模型的 Prompt。

目前 GEPA 已覆盖免审判断、分垂类主张提取、主张复核、Query 泛化四个阶段。
以 Query 泛化为例,难点在时间信息:带上年份经常召回不到,去掉年份又可能召回到别的年份。
这类取舍很难用一条手写规则覆盖,交给 GEPA 从错例中归纳,再由代码兜底,检索不到证据的 Query 比例显著下降。

1.6.2. 模型训练:Prompt 到顶之后

对调用量大、任务边界清晰的阶段,我们训练专用小模型:

方向 做法与作用
垂类分类模型 识别主张属于哪个垂类并分流(见第二节原则 4)。结合主张解析的整体优化,主张识别准确率相比基线大幅提升。
Query 改写模型 提升多跳、隐式事实的召回,训练数据来自业务反馈。
大模型蒸馏 用大模型离线生成各阶段的训练样本,人工修正复合句拆分、同名实体、时间数字细节等高频错误,再加入“不要从证据中扩展主张”这类负例。
强化学习 基于 VERL 复现了 Search-R1 的训练流程,让模型自己学会何时搜、搜什么。

1.6.3. 样本回流:闭环怎么转起来

样本回流闭环图:核查结果经自动抽样分析、人工复核后按阶段归因到主张、Query、检索、判别、代码,再分三路优化——代码问题直接修复、Prompt 问题用 DSPy GEPA 自动优化、高频模型问题用 SFT 蒸馏或 RL 探索,新版本双跑对比后上线,下一轮继续抽样

△ 核查结果经抽样分析和人工复核后按阶段归因,分三路优化,新版本双跑对比后上线,再开始下一轮

这条闭环能转起来,靠的是阶段拆分。
没有归因,样本只能标“对 / 错”,没法分发到具体阶段的训练集。

几轮迭代下来,我们还发现问题分布会转移。
第一轮主张提取是主要矛盾,引入 DSPy、按垂类拆分之后,判别阶段成了新的瓶颈。
每一轮的投入方向都跟着数据走。

1.7. 工程实现

1.7.1. 多轮搜索:让模型持有状态,而不是历史

专业核查的多轮“搜索 + 推理”准确率最高,但每一轮都把之前所有的检索结果重新喂给模型,输入 token 随轮数近似平方增长。
我们做了三处改造:

[!note] 多轮搜索的三处改造

  • 模型持有状态,而不是历史全文。模型的输入是“目标 / 已确认事实 / 待解决问题 / 下一步动作”这样的状态,不再是每轮的原始检索结果。
  • 能并行的意图一起检索。比如第一轮分析出要验证 A、B、C 三个论点,把三者一起检索,比串行执行时模型反复看到 A、B 的结果要省得多。减少轮数同时降低成本和延时。
  • 检索结果进入上下文前先精简。单轮检索结果按句子裁剪,多轮历史做摘要,下一轮只带结论不带原文。

改造后多轮累积 token 从随轮数平方增长降到线性增长;单轮裁剪后 token 明显下降,准确率无损。

1.7.2. 性能治理

性能治理表:核查长尾延时过长用服务框架改造加 GPU 加速,P90 延时降低一半以上;语义向量计算长尾从 CPU 迁到 GPU 批量推理,长尾从分钟级降到秒级;交互式入口首 token 慢用流式输出、主张和结论逐条推送,首 token 时延降低一个数量级;资源占用经以上优化叠加,计算资源缩容约一半

△ 性能治理的四类问题、做法与效果

1.7.3. 配置化与多模态

系统从早期按功能拼接的脚本,改造成了可配置的阶段编排:每个业务一份配置,声明用哪些阶段、什么模型和 Prompt,阶段实现在业务之间共享。
新业务接入主要是写配置和 Prompt,不用改主流程代码。

1.8. 业务落地

五类业务落地效果表:知识百科高优先级数据分钟级完成核查,整体准确率处于较高水平、核查人力投入大幅下降,已接入 AIGC 数据;内容问答:问答干预稳定落地、每周持续核查,抽样中大部分被拦截的内容经核查后可以解封;数据筛选在保持准确率的前提下召回明显高于业务原有系统;内容质量评估大批量实验数据完成核查,正在与业务对齐判定标准;交互式核查平台可视化平台上线,支持实时内容同步

△ 知识百科、内容问答、数据筛选、内容质量评估、交互式核查平台五类业务的落地效果

1.9. 几点体会

[!important] 几点体会

  • 核查的依据是证据,模型自身的知识只做辅助。证据的权威性决定了核查的上限,所以权威分级和检索策略要放在和模型同等重要的位置。
  • 以主张为单位核查。长文里的错误大多是局部的,拆到最小主张逐条判断,才不会被正确内容掩盖。
  • 模型给特征,规则做决策。一个设计同时解决了结果闪烁和多业务标准不一致两个问题。
  • 小模型能不能用,先看任务够不够窄。把能确定化的业务规则从 Prompt 挪进代码,模型只做语义判断,小模型就能胜任。
  • 能归因,才能迭代。阶段拆分让每个 bad case 都有明确的去处,Prompt 优化和模型训练才有针对性的数据。