大模型在真实业务推理中出现幻觉,是指生成内容与事实、上下文或可用工具不一致的输出。这类问题在客服问答、代码辅助、文档摘要等场景会造成直接损失,因此不能只靠人工抽查。系统排查需要从数据链路、模型配置、运行环境三个层面同步入手,建立可复现的观测体系。

从输入与检索链路定位幻觉源头
多数幻觉并不是模型凭空发明,而是因为检索阶段没有返回正确知识,模型在信息缺口下被迫补全。第一步应固定推理请求的全部参数,包括用户问题原文、系统提示词、检索返回的文档块编号与相似度分数、随机种子和解码温度。只有输入完全可复现,才能判断某一次幻觉是偶发还是稳定复现。
建议在企业内部搭建一个最小复现脚本,将生产流量抽样落盘,离线重放。重放时分别关闭检索增强、替换不同召回策略,观察输出变化。如果无检索时幻觉明显减少,说明模型在强行利用上下文之外的内容;如果有无检索都幻觉,则问题在模型本身或提示词设计。
下面给出一个Python重放与对比的简化示例,用于记录每次推理引用的知识块:
import hashlib
import json
def replay_sample(sample, use_rag=True):
# sample包含question、seed、temperature
ctx = retrieve(sample['question']) if use_rag else []
block_ids = [c['id'] for c in ctx]
output = model_generate(
prompt=build_prompt(sample['question'], ctx),
seed=sample['seed'],
temperature=sample['temperature']
)
return {
'output': output,
'block_ids': block_ids,
'hash': hashlib.md5(output.encode()).hexdigest()
}
# 对比有无RAG的输出差异
with_rag = replay_sample(sample, use_rag=True)
without_rag = replay_sample(sample, use_rag=False)
print(json.dumps({'with_rag': with_rag, 'without_rag': without_rag}, ensure_ascii=False))
解码策略与提示词如何诱发幻觉
解码参数对幻觉率影响极大。过高的温度会让概率分布变平坦,模型更容易选择训练语料中常见但当前无关的词。Top_p过大会混入低置信度候选。在排查时,应将温度从零点逐步调高,绘制幻觉率曲线。很多团队发现温度超过零点七后,实体错误明显上升。
提示词中的模糊指令也会诱导模型臆测。例如写“如果用户没提供地址,请合理推测”,模型就会生成不存在的街道。正确做法是在提示词中显式要求“未知字段必须输出空值或向用户追问”。同时应避免在系统提示中堆砌互相冲突的规则,模型在冲突下会随机选择一种解释,从而产生不一致输出。
我们可以用一段前后对比的提示词改造来说明差异:
# 易诱发幻觉的提示词 你是一个智能助手,请补全用户信息,缺少的内容自己猜测合理的。 # 改进后的提示词 你是一个数据录入助手。仅使用用户已提供信息和检索结果。 对于未提供的必填字段,返回空字符串并说明需补充。 禁止生成训练知识之外的实体名称。
用后处理与评测集持续抑制幻觉
即使模型和提示词调优后,仍会有长尾幻觉。此时需要在生成之后加一层校验。常见方案包括:实体一致性检查,将输出中的公司名、API名与白名单比对;工具调用验证,让模型先输出调用计划,由执行器返回是否真实存在该接口;置信度阈值,若生成概率低于某值则转人工。
要建立持续的防幻觉机制,必须构造业务专用的评测集。评测集应覆盖边界问题、对抗样本和历史故障案例。每次模型迭代都在同一评测集上跑幻觉率,只有指标不退化才允许上线。下表列出三类评测维度:
| 维度 | 说明 | 示例 |
|---|---|---|
| 事实一致性 | 输出实体是否真实存在 | 虚构客户编号 |
| 上下文忠诚 | 是否偏离给定文档 | 摘要加入原文没有的结论 |
| 工具可行 | 调用参数是否合法 | 不存在的SDK方法名 |
最后给出一个后处理过滤的参考代码,在输出环节拦截明显幻觉:
ALLOWED_ENTITIES = load_whitelist('corp_names.txt')
def filter_hallucination(text):
for name in extract_entities(text):
if name not in ALLOWED_ENTITIES:
# 命中未授权实体,标记为需人工
return False, f'疑似幻觉实体: {name}'
return True, text
ok, result = filter_hallucination(model_output)
if not ok:
send_to_human_review(result)
通过上述输入链路排查、解码与提示词优化、后处理评测三步走,团队可以把大模型幻觉从不可控的随机故障,转变为可观测、可度量、可回归的工程问题。关键在于把每一次异常都沉淀为日志和测试用例,而不是临时修补。
LLM_hallucinationmodel_inferenceRAG修改时间:2026-08-16 11:32:12