大模型生成虚假新闻,问题不在它故意说谎,而在于它太擅长把不完整信息补成一篇看起来像模像样的报道。新闻场景对事实准确度要求极高,一旦模型凭语言习惯补齐一个不存在的地名、一个未经证实的伤亡数字,就构成虚假内容。控制幻觉有两条主线:一是检索增强生成,让模型在生成前先查资料;二是事实对齐,让模型在输出时接受证据约束。下面先拆解幻觉成因,再讲工程实现。

一、大模型幻觉为什么容易变成虚假新闻
大模型按token逐个预测文本,每一步只根据前面的内容计算下一个词的概率。这种机制让它在缺乏事实依据时,仍然会选择一个语言上最通顺、最常见于新闻报道的表述。例如你问某地最近是否发生地震,模型可能没有最新地震数据,但它的训练语料里有大量地震报道模板,于是它会把另一场地震的时间、地点替换掉,补上看似合理的数据。这不是模型有主观恶意,而是统计语言模型在面对信息缺口时做出的平滑补全。
新闻文本比普通问答更难容忍幻觉。普通对话中编一个电影角色或写一段广告文案,用户可以一笑了之;但新闻一旦出现假的引语、错误的数据、虚构的专家身份,就可能造成误导甚至法律风险。比如模型在报道中写某人发表了某句评论,而这个人从未说过,就会变成名誉损害。更麻烦的是,新闻稿件会经过平台推荐系统加速传播,错误信息扩散后很难完全纠正。因此,新闻生成系统不能只依赖模型内置知识,必须引入可追溯的外部证据。
从工程角度看,大模型的参数记忆有两个明显缺陷。第一,训练数据有截止时间,无法覆盖刚刚发生的新闻事件。第二,训练语料本身混杂低质量、过期、冲突的信息,模型无法可靠区分权威来源和谣传来源。直接把新闻写作任务交给裸模型,等于让一个记忆模糊的人凭印象写稿。解决思路不是换更大模型,而是把记忆和查证拆开,让模型在生成时实时读取外部知识库。
二、检索增强生成:先查证再回答
检索增强生成的核心逻辑是把外部知识库作为模型的工作记忆。流程通常分为四步:查询改写、文档召回、重排、证据注入生成。用户输入可能很口语化,比如“最近那边什么情况”,系统需要先把它改写成适合检索的短语,比如“某地 最新事件 官方通报”。随后从新闻知识库中召回候选片段,既要做语义检索,也要做关键词检索,因为新闻中的专有名词、数字、日期对精确匹配更敏感。
向量检索擅长找语义相近的内容,但容易漏掉数字和专名。BM25这类关键词检索则能准确匹配“死亡人数”“航班号”“公司名称”,但对同义改写不敏感。实际系统通常采用混合召回,比如向量召回前20条,BM25召回前20条,再做融合排序。下面是一个简化版的混合检索示意。
def hybrid_search(query, vector_index, bm25_index, alpha=0.5):
semantic_hits = vector_index.search(query, top_k=20)
keyword_hits = bm25_index.search(query, top_k=20)
fused_scores = {}
for hit in semantic_hits:
fused_scores[hit.id] = alpha * hit.score
for hit in keyword_hits:
if hit.id in fused_scores:
fused_scores[hit.id] += (1 - alpha) * hit.score
else:
fused_scores[hit.id] = (1 - alpha) * hit.score
ranked = sorted(fused_scores.items(), key=lambda x: x[1], reverse=True)
return ranked[:10]
混合召回之后还需要重排。召回阶段为了不漏掉相关内容,通常会放宽数量,返回几十条甚至上百条候选。但这些候选质量参差不齐,直接塞进上下文会浪费token,也会让模型注意力被无关文本稀释。重排通常使用交叉编码器,把查询和候选片段拼在一起逐对打分,选出最相关的若干条。新闻场景还可以在重排时加入来源权威度、发布时间新鲜度、实体匹配度等特征,避免只按语义相似度排序。
证据注入生成时,需要把筛选出的片段结构化地放进提示词。比如给每条证据编号,标注来源标题、发布时间和正文内容,并要求模型在输出中引用这些编号。这样生成结果可以追溯到具体文档,校对人员也能快速核查。提示词中还要明确约束:只能依据给定证据作答,证据不足时说明无法核实,不得补充未经证实的时间、数字、人名。这种约束不能完全杜绝幻觉,但能把错误范围限制在证据窗口内。
三、事实对齐:训练与解码如何抑制幻觉
检索增强生成负责给模型提供证据,但模型不一定老老实实照着证据写。有些模型会忽略检索结果,继续按参数记忆生成内容;有些模型会把证据中的局部信息过度推断,比如证据只说两人会面,模型却写成双方签署协议。事实对齐的目标就是在训练和解码阶段加入事实性约束,降低模型脱离证据的倾向。
第一种方式是监督微调。构造一批带证据的问题和回答对,训练数据中包含三类样本:证据充分时给出准确回答并标注引用;证据不足时明确说明无法核实;证据冲突时指出不同来源的差异。经过这类数据微调,模型会学会在不确定时表达不确定性,而不是强行给出一个看似确定的答案。第二种方式是强化学习,设计事实性奖励函数,用自然语言推理模型判断生成句子与证据之间是支持、矛盾还是中立,把支持度作为奖励信号。这样模型会优化为更倾向生成能被证据支持的句子。
解码阶段也可以做事实约束。例如生成数字、日期时,可以直接从证据片段中复制,而不是从语言模型分布中采样。实现上可以在生成前对候选span做校验,发现与证据冲突就降低该候选概率。下面是一个简单的事实一致性校验函数示例。
def check_support(claim, evidence):
result = nli_model.predict(premise=evidence, hypothesis=claim)
if result.label == "contradiction":
return False, result.score
if result.label == "neutral" and result.score < 0.5:
return False, result.score
return True, result.score
事实对齐与RAG是互补关系,不是替代关系。RAG解决外部知识来源问题,事实对齐解决模型如何使用这些知识的问题。如果只做RAG不做对齐,模型可能拿着证据仍说出证据中没有的细节;如果只做对齐不接知识库,模型遇到新事件只能频繁拒答,无法满足新闻生产需要。两者配合后,系统会呈现出更保守、更可核查的输出风格。
四、新闻场景的工程落地:从知识库到发布审核
建一个新闻可信生成系统,知识库质量往往比模型选择更重要。知识库应优先接入权威新闻源、政府公告、企业官方声明,并给每篇文档标注发布时间、来源域名、来源等级。旧闻必须标记为历史资料,过时内容需要定期清理或降权。实践中经常出现一个坑:知识库里放着一篇2023年的政策文章,用户问2025年最新政策,系统把旧文召回后进行总结,生成内容看似正确,实际严重过时。解决办法是在召回条件中加入时间窗口,比如优先召回最近90天的内容,旧文只有在用户明确追溯历史时才使用。
另一个容易被忽视的是检索中毒问题。如果知识库混入自媒体转载、未经核实的社交平台内容,RAG会把错误证据原封不动地交给模型。来源白名单是必须的,同时对每个知识条目计算置信度,低置信度内容只能进入备选池,不能直接作为唯一证据。新闻系统还可以在生成完成后增加一层实时核查,用规则和实体链接检查数字、日期、人名是否与证据一致,发现冲突自动转入人工审核队列。
下面是一个新闻简报生成链路的简化实现,包含查询改写、混合召回、证据格式化、生成和事实校验。
def generate_news_brief(query):
rewritten = query_rewriter.rewrite(query)
candidates = hybrid_search(rewritten, top_k=50)
candidates = reranker.rerank(candidates, top_k=8)
evidence_text = format_evidence(candidates)
prompt = build_prompt(query, evidence_text)
draft = llm.generate(prompt, max_tokens=700)
check_result = fact_checker.check(draft, candidates)
if check_result.confidence < 0.85:
return review_queue.add(draft, check_result)
return draft
这个链路的关键不是模型参数有多大,而是每一步都有据可查。查询改写保证检索意图准确,混合召回保证数字和专名不被漏掉,重排保证进入上下文的片段质量,事实校验则在最后兜底。线上运行时,建议把生成结果和证据引用同时返回给编辑端,编辑可以点击引用查看原文片段,快速判断是否采纳。
五、局限与后续优化
检索增强生成和事实对齐并不能把幻觉归零。检索失败时,模型没有可用证据,如果对齐训练不够充分,它仍然可能退回到参数记忆中编造内容。证据冲突时,模型可能随意选择一方,或者把冲突信息拼接成前后矛盾的段落。长文档切分也会造成上下文断裂,比如一个事件的原因和结果被切到不同片段,模型只看到结果就错误推断原因。这些都是真实系统中需要持续监控的故障模式。
事实对齐的成本同样不低。构建高质量的对齐数据需要人工标注哪些句子被证据支持、哪些是过度推断,标注标准不一致会直接影响效果。过度强调事实性还可能导致模型变得过于保守,所有内容都写着可能、疑似、有待进一步证实,新闻稿的可读性下降。合理的做法是按场景分级:突发新闻优先保证准确性,宁可拒答;软性资讯可以适当放宽,但仍需保留来源说明。
后续优化方向包括多智能体交叉核查,让一个模型负责生成,另一个模型扮演质疑者,检查关键事实是否被证据覆盖;还可以引入事实验证模型对最终稿件逐句标注支持状态,生成可信度报告。对新闻机构来说,大模型更适合做初稿辅助和信息整理,最终发布前仍应保留人工审核环节。技术手段压缩幻觉空间,人工审核承担最终责任,这是当前更稳妥的落地方式。