如何通过构建外部知识库 RAG 来降低大模型在专业领域回答时的幻觉率
我最近在测试一个医疗设备的技术文档问答,如果直接问 Claude 3.5 或 GPT-4o,遇到一些冷门的型号参数,它们大概率会根据通用知识进行“合理推测”,这就是典型的幻觉。但当我搭建了一个基于向量数据库的 RAG 流水线后,模型在回答时的行为模式发生了明显变化:它从“凭记忆回忆”变成了“翻书回答”。
实测下来,不同模型在 RAG 链路中的表现差异很大。GPT-4o 的优势在于对检索回来的片段(Chunks)理解能力极强,即使检索到的内容碎片化严重,它也能把逻辑串起来。但 DeepSeek-V2.5 在处理中文专业术语的匹配度上出奇地高,在某些垂直行业的术语对齐上,比 GPT 更有“灵气”,不容易把专业名词翻译成大白话导致语义偏移。
最关键的坑在于:RAG 并不是把文档丢进去就能用。我对比了三种不同的检索策略:
1. 纯向量检索 (Vector Search)
表现:速度快,但对关键词极其不敏感。比如搜“型号 A-100”,它可能会把“型号 A-101”的相关片段也召回,导致模型在细节参数上产生幻觉。
2. 关键词检索 (BM25)
表现:极其死板,但精准。搜 A-100 就只给 A-100,但缺乏语义理解,无法处理同义词。
3. 混合检索 (Hybrid Search) + 重排序 (Rerank)
表现:这是目前的最佳实践。先用向量+关键词双路召回,再用 BGE-Reranker 对结果进行二次打分。实测幻觉率从 15% 降低到了 3% 左右。
为了强制模型不要乱发挥,我在 System Prompt 里加了硬约束:
你是一个专业的技术支持助手。请严格基于提供的【上下文】回答问题。
如果【上下文】中没有提到相关信息,请直接回答“知识库中未记录此信息”,严禁调用你的通用知识进行推测。
回答时请标注引用来源,例如 (文档A, 第3页)。目前的体感是:如果你追求极致的准确率,建议采用 DeepSeek (作为推理后端) + BGE-Reranker (重排序) + Milvus (向量库) 这种组合。虽然增加了链路复杂度,但比起在 Prompt 里求模型“请诚实地回答”,这种结构化的约束才真正起作用。
全部回复 (0)
还没有回复,来发第一条吧!
