大模型知识瓶颈?RAG技术方案,本地部署解决幻觉与安全难题!
写在前面大模型Large Language ModelLLM的浪潮已经席卷了几乎各行业但当涉及到专业场景或行业细分域时通用大模型就会面临专业知识不足的问题。相对于成本昂贵的“Post Train”或“SFT”基于RAG的技术方案往成为一种更优选择。本文从RAG架构入手详细介绍相关技术细节并附上一份实践案例。LLM的问题尽管LLM拥有令人印象深刻的能力但是它们还面临着一些问题和挑战幻觉问题大模型的底层原理是基于概率在没有答案的情况下经常会胡说八道提供虚假信息。时效性问题规模越大参数越多、tokens 越多大模型训练的成本越高。类似 ChatGPT3.5起初训练数据是截止到 2021 年的对于之后的事情就不知道了。而且对于一些高时效性的事情大模型更加无能为力比如帮我看看今天晚上有什么电影值得去看这种任务是需要去淘票票、猫眼等网站先去获取最新电影信息的大模型本身无法完成这个任务。数据安全OpenAI 已经遭到过几次隐私数据的投诉而对于企业来说如果把自己的经营数据、合同文件等机密文件和数据上传到互联网上的大模型那想想都可怕。既要保证安全又要借助 AI 能力那么最好的方式就是把数据全部放在本地企业数据的业务计算全部在本地完成。而在线的大模型仅仅完成一个归纳的功能甚至LLM 都可以完全本地化部署。解决这些挑战对于 LLMs 在各个领域的有效利用至关重要。一个有效的解决方案是集成检索增强生成RAG技术该技术通过获取外部数据来响应查询来补充模型从而确保更准确和最新的输出。主要表现方面如下有效避免幻觉问题虽然无法 100% 解决大模型的幻觉问题但通过 RAG 技术能够有效的降低幻觉在软件系统中结合大模型提供幂等的API接口就可以发挥大模型的重要作用。经济高效的处理知识开箱即用只需要借助信息检索和向量技术将用户的问题和知识库进行相关性搜索结合就能高效的提供大模型不知道的知识同时具有权威性。数据安全企业的数据可以得到有效的保护通过私有化部署基于 RAG 系统开发的AI产品能够在体验AI带来的便利性的同时又能避免企业隐私数据的泄漏。上图展示了 RAG 如何使 ChatGPT 能够提供超出其初始训练数据的精确答案。什么是RAG检索增强生成(Retrieval Augmented Generation简称 RAG已经成为当前最火热的LLM应用方案。经历今年年初那一波大模型潮想必大家对大模型的能力有了一定的了解但是当我们将大模型应用于实际业务场景时会发现通用的基础大模型基本无法满足我们的实际业务需求主要有以下几方面原因知识的局限性模型自身的知识完全源于它的训练数据而现有的主流大模型ChatGPT、文心一言、通义千问…的训练集基本都是构建于网络公开的数据对于一些实时性的、非公开的或离线的数据是无法获取到的这部分知识也就无从具备。幻觉问题所有的AI模型的底层原理都是基于数学概率其模型输出实质上是一系列数值运算大模型也不例外所以它有时候会一本正经地胡说八道尤其是在大模型自身不具备某一方面的知识或不擅长的场景。而这种幻觉问题的区分是比较困难的因为它要求使用者自身具备相应领域的知识。数据安全性对于企业来说数据安全至关重要没有企业愿意承担数据泄的风险将自身的私域数据上传第三方平台进行训练。这也导致完全依赖通用大模型自身能力的应用方案不得不在数据安全和效果方面进行取舍。而RAG是解决上述问题的一套有效方案。实践示例那具体 RAG 怎么做呢我们用一个简单的 LangChain 代码示例来展示 RAG 的使用。环境准备安装相关依赖# 环境准备安装相关依赖 pip install langchain sentence_transformers chromadb本地数据加载这个例子使用了保罗·格雷厄姆Paul Graham的文章What I Worked On的文本。下载文本后放置到./data目录下。Langchain 提供了很多文件加载器包括 word、csv、PDF、GoogleDrive、Youtube等使用方法也很简单。这里直接使用 TextLoader 加载txt文本。from langchain.document_loaders import TextLoader loader TextLoader(./data/paul_graham_essay.txt) documents loader.load()文档分割(split_documents)文档分割借助 langchain 的字符分割器。代码中我们指定 chunk_size500, chunk_overlap10 这样的意思就是我们每块的文档中是 500 个字符chunk_overlap 表示字符重复的个数这样可以避免语义被拆分后不完整。# 文档分割 from langchain.text_splitter import CharacterTextSplitter # 创建拆分器 text_splitter CharacterTextSplitter(chunk_size500, chunk_overlap10) # 拆分文档 documents text_splitter.split_documents(documents)向量化(embedding)接下来对分割后的数据进行 embedding并写入数据库。LangChain提供了许多嵌入模型的接口例如OpenAI、Cohere、Hugging Face、Weaviate等请参考LangChain官网。这里选用 m3e-base 作为 embedding 模型向量数据库选用 Chroma。from langchain.embeddings import HuggingFaceBgeEmbeddings from langchain.vectorstores import Chroma # embedding model: m3e-base model_name moka-ai/m3e-base model_kwargs {device: cpu} encode_kwargs {normalize_embeddings: True} embedding HuggingFaceBgeEmbeddings( model_namemodel_name, model_kwargsmodel_kwargs, encode_kwargsencode_kwargs )数据入库将嵌入后的结果存储在 VectorDB 中常见的VectorDB包括Chroma、weaviate和FAISS等这里使用Chroma来实现。Chroma与LangChain整合得很好可以直接使用LangChain的接口进行操作。# 指定 persist_directory 将会把嵌入存储到磁盘上。persist_directory db db Chroma.from_documents(documents, embedding, persist_directorypersist_directory)检索(Retrieve)向量数据库被填充后可以将其定义为检索器组件该组件根据用户查询与嵌入式块之间的语义相似性获取附加上下文。retriever db.as_retriever()增强(Augment)接下来为了将附加上下文与提示一起使用需要准备一个提示模板。如下所示可以轻松地从提示模板自定义提示。from langchain.prompts import ChatPromptTemplate template You are an assistant for question-answering tasks. Use the following pieces of retrieved context to answer the question. If you dont know the answer, just say that you dont know. Use three sentences maximum and keep the answer concise. Question: {question} Context: {context} Answer: prompt ChatPromptTemplate.from_template(template)生成(Generate)最后可以构建一个 RAG 流水线的链将检索器、提示模板和LLM连接在一起。一旦定义了 RAG 链就可以调用它。本地通过 ollama 运行的 llama3 来作为 LLM 使用。如果不了解本地ollama部署模型的流程可以参考这篇文章。from langchain_community.chat_models import ChatOllama from langchain.schema.runnable import RunnablePassthrough from langchain.schema.output_parser import StrOutputParser llm ChatOllama(modelllama3) rag_chain ( {context: retriever, question: RunnablePassthrough()} | prompt | llm | StrOutputParser() ) query What did the author do growing up? response rag_chain.invoke(query) print(response)我这里的本地llama3环境下输出为Before college, Paul Graham worked on writing and programming outside of school. He didnt write essays, but instead focused on writing short stories. His stories were not very good, having little plot and just characters with strong feelings.从这个输出中可以看到已经将我们提供的文本中的相关信息检索出来并由 LLM 总结回答我们的问题了。RAG 与微调上面都是介绍的 RAG 在这里顺便对比一下微调Fine-tuning。在大语言模型的优化措施中 RAG 和微调都是一种重要的技术。可以把 RAG 想象成给模型提供一本参考书让它根据问题去查找信息然后回答问题。这种方法适用于模型需要解答具体问题或执行特定信息检索任务的情况。但 RAG 并不适合于教会模型理解广泛的领域或学习新的语言、格式或风格。而微调更像是让学生通过广泛学习来吸收知识。当模型需要模仿特定的结构、风格或格式时微调就显得非常有用。它可以提高未经微调的模型的表现使交互更加高效。微调特别适用于强化模型已有的知识、调整或定制模型的输出以及给模型下达复杂的指令。然而微调并不适合于向模型中添加新的知识或者在需要快速迭代新场景的情况下使用。RAG 和微调可以相互补充而非相互排斥从而在不同层次上增强模型的能力。在特定情况下结合这两种方法可以达到模型性能的最佳状态。还有一个形象的对比来介绍 RAG 和微调 RAG 就相当于是开卷考试考试的时候可以翻书, 可以随时翻到某一页来查找对应的知识点去回答。微调相当于你一整个学期的学习并在考试前进行了重点复习和记忆考试时凭借自己巩固的知识去答题。总结本文列举了LLM的问题。简单介绍了什么是 RAG 以及 RAG 的流程。最后使用了一个简单的LangChain代码示例来展示 RAG 的使用。最后对比了 RAG 和微调的区别方便大家选型。2026年AI行业最大的机会毫无疑问就在应用层字节跳动已有7个团队全速布局Agent大模型岗位暴增69%年薪破百万腾讯、京东、百度开放招聘技术岗80%与AI相关……如今超过60%的企业都在推进AI产品落地而真正能交付项目的大模型应用开发工程师****却极度稀缺落地AI应用绝对不是写几个prompt调几个API就能搞定的企业真正需要的是能搞定这三项核心能力的人✅RAG融入外部信息修正模型输出给模型装靠谱大脑✅Agent智能体让AI自主干活通过工具调用Tools环境交互多步推理完成复杂任务。比如做智能客服等等……✅微调针对特定任务优化让模型适配业务目前脉脉上有超过1000家企业发布大模型相关岗位人工智能岗平均月薪7.8w实习生日薪高达4000远超其他行业收入水平技术的稀缺性才是你「值钱」的关键具备AI能力的程序员比传统开发高出不止一截有的人早就转行AI方向拿到百万年薪AI浪潮正在重构程序员的核心竞争力现在入场仍是最佳时机我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】⭐️从大模型微调到AI Agent智能体搭建剖析AI技术的应用场景用实战经验落地AI技术。从GPT到最火的开源模型让你从容面对AI技术革新大模型微调掌握主流大模型如DeepSeek、Qwen等的微调技术针对特定场景优化模型性能。学习如何利用领域数据如制造、医药、金融等进行模型定制提升任务准确性和效率。RAG应用开发深入理解检索增强生成Retrieval-Augmented Generation, RAG技术构建高效的知识检索与生成系统。应用于垂类场景如法律文档分析、医疗诊断辅助、金融报告生成等实现精准信息提取与内容生成。AI Agent智能体搭建学习如何设计和开发AI Agent实现多任务协同、自主决策和复杂问题解决。构建垂类场景下的智能助手如制造业中的设备故障诊断Agent、金融领域的投资分析Agent等。如果你也有以下诉求快速链接产品/业务团队参与前沿项目构建技术壁垒从竞争者中脱颖而出避开35岁裁员危险期顺利拿下高薪岗迭代技术水平延长未来20年的新职业发展……那这节课你一定要来听因为留给普通程序员的时间真的不多了立即扫码即可免费预约「AI技术原理 实战应用 职业发展」「大模型应用开发实战公开课」还有靠谱的内推机会直聘权益完课后赠送大模型应用案例集、AI商业落地白皮书