LLM 幻觉现象及 RAG 解决方案

张开发
2026/4/6 17:30:01 15 分钟阅读

分享文章

LLM 幻觉现象及 RAG 解决方案
1. RAG 简介RAG, 检索增强生成 (Retrieval-Augmented Generation.将 外部知识检索 与 LLM 生成 结合起来。当用户提问时系统先从一个外部知识库中检索相关文档片段然后将这些片段作为“ 上下文” 输入给 LLM再回答。应用场景有企业智能客服基于产品手册、FAQ法律/医疗咨询助手基于法规条文、临床指南内部知识库问答系统2. LLM 的幻觉等局限性LLM 的局限性:幻觉Hallucination一些回答看似合理但有事实性错误。缺乏新知识: 如 GPT-4 知识截止于 2023 年无法获取之后的新信息。无法访问私有数据比如想给些例子作 few-shot, 能检索专有样例会更好.这些即 RAG 的必要性.其中幻觉(hallucination) 问题比较重要, 即回答中有编造成分或错误.例子: 比如问 “tensorflow 1.12 版本有 xxx 这个api 么”, 模型回答 “有”, 其实没有.原因训练语料质量低, 本身有错误答案存在.LLM 的训练并不关注 “事实是否正确”, 自然不能保证生成答案一定符合事实.推断期间引入错误,3. RAG 方案LLM 有表达力但不可信单纯查数据库又太死板无法理解自然语言RAG 恰好填补了这道鸿沟。步骤为:用户提问Query检索用向量搜索 / 关键词搜索从知识库里找到 Top-K 条相关内容Chunks合成 Prompt把原有系统提示 用户输入 检索到的知识拼成一个新的输入送给 LLM 输出答案流程简介将文本分块然后使用一些 Transformer Encoder 模型将这些块嵌入到向量中将所有向量放入索引中最后创建一个 LLM 提示告诉模型根据我们在搜索步骤中找到的上下文回答用户的查询。未来趋势:与 Agent 结合RAG LLM 工具调用 真正的“AI 助理”3.1 索引构建[原始文档]↓ 分块Chunking → 将大文档切分为小段落如每段 256 token↓ 向量化Embedding → 用嵌入模型将每个文本块转为向量vector↓️ 存入向量数据库Vector DB → 建立可搜索的索引分块Text Chunking最简单的是固定长度分块. 推荐使用 LangChain 中的 RecursiveCharacterTextSplitter支持智能断句。向量化Embedding使用预训练的语言模型将文本转换为高维向量通常是 384~1024 维使得语义相似的文本在向量空间中距离更近。比如 “苹果公司发布了新 iPhone” 和 “Apple 发布了新款手机” 虽然字面不同但在向量空间中会很接近。向量数据库Vector Database存储所有文本块的向量并支持高效的近似最近邻搜索Approximate Nearest Neighbor, ANN。常见的有 Chroma, FAISS 等.3.2 索引查询 用户提问 → 同样用相同模型向量化问题↓ 相似度匹配 → 在向量空间中找最近邻k-NN↓✅ 返回 top-k 最相关文本片段 → 输入给 LLM 生成答案相似匹配通常用余弦相似度.4. 检索结果 回写 promptPrompt 指令 上下文检索结果 问题一个典型的 RAG 增强后的 Prompt 结构如下【系统指令】 你是一个智能助手。请根据以下提供的参考资料回答问题。如果信息不足以回答请说“无法确定”。 【参考资料】 1. {检索到的文本片段1} 2. {检索到的文本片段2} 3. {检索到的文本片段3} 【问题】 {用户提问} 【回答】

更多文章