RAG技术:解决大模型知识局限、幻觉与数据安全难题,企业级AI应用新思路!
本文深入探讨了通用大模型LLM在专业场景应用中的局限性如知识时效性、幻觉问题和数据安全隐患。为解决这些问题文章重点介绍了检索增强生成RAG技术阐述其通过结合外部数据源提升模型准确性和效率同时保障数据安全的优势。通过LangChain代码示例展示了RAG的实际应用流程并与微调技术进行对比分析两者适用场景及互补关系。最后文章提出分阶段学习大模型AI的路径助力读者系统掌握相关技能。写在前面大模型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 和微调的区别方便大家选型。01什么是AI大模型应用开发工程师如果说AI大模型是蕴藏着巨大能量的“后台超级能力”那么AI大模型应用开发工程师就是将这种能量转化为实用工具的执行者。AI大模型应用开发工程师是基于AI大模型设计开发落地业务的应用工程师。这个职业的核心价值在于打破技术与用户之间的壁垒把普通人难以理解的算法逻辑、模型参数转化为人人都能轻松操作的产品形态。无论是日常写作时用到的AI文案生成器、修图软件里的智能美化功能还是办公场景中的自动记账工具、会议记录用的语音转文字APP这些看似简单的应用背后都是应用开发工程师在默默搭建技术与需求之间的桥梁。他们不追求创造全新的大模型而是专注于让已有的大模型“听懂”业务需求“学会”解决具体问题最终形成可落地、可使用的产品。CSDN粉丝独家福利给大家整理了一份AI大模型全套学习资料这份完整版的 AI 大模型学习资料已经上传CSDN朋友们如果需要可以扫描下方二维码点击下方CSDN官方认证链接免费领取【保证100%免费】02AI大模型应用开发工程师的核心职责需求分析与拆解是工作的起点也是确保开发不偏离方向的关键。应用开发工程师需要直接对接业务方深入理解其核心诉求——不仅要明确“要做什么”更要厘清“为什么要做”以及“做到什么程度算合格”。在此基础上他们会将模糊的业务需求拆解为具体的技术任务明确每个环节的执行标准并评估技术实现的可行性同时定义清晰的核心指标为后续开发、测试提供依据。这一步就像建筑前的图纸设计若出现偏差后续所有工作都可能白费。技术选型与适配是衔接需求与开发的核心环节。工程师需要根据业务场景的特点选择合适的基础大模型、开发框架和工具——不同的业务对模型的响应速度、精度、成本要求不同选型的合理性直接影响最终产品的表现。同时他们还要对行业相关数据进行预处理通过提示词工程优化模型输出或在必要时进行轻量化微调让基础模型更好地适配具体业务。此外设计合理的上下文管理规则确保模型理解连贯需求建立敏感信息过滤机制保障数据安全也是这一环节的重要内容。应用开发与对接则是将方案转化为产品的实操阶段。工程师会利用选定的开发框架构建应用的核心功能同时联动各类外部系统——比如将AI模型与企业现有的客户管理系统、数据存储系统打通确保数据流转顺畅。在这一过程中他们还需要配合设计团队打磨前端交互界面让技术功能以简洁易懂的方式呈现给用户实现从技术方案到产品形态的转化。测试与优化是保障产品质量的关键步骤。工程师会开展全面的功能测试找出并修复开发过程中出现的漏洞同时针对模型的响应速度、稳定性等性能指标进行优化。安全合规性也是测试的重点需要确保应用符合数据保护、隐私安全等相关规定。此外他们还会收集用户反馈通过调整模型参数、优化提示词等方式持续提升产品体验让应用更贴合用户实际使用需求。部署运维与迭代则贯穿产品的整个生命周期。工程师会通过云服务器或私有服务器将应用部署上线并实时监控运行状态及时处理突发故障确保应用稳定运行。随着业务需求的变化他们还需要对应用功能进行迭代更新同时编写完善的开发文档和使用手册为后续的维护和交接提供支持。03薪资情况与职业价值市场对这一职业的高度认可直接体现在薪资待遇上。据猎聘最新在招岗位数据显示AI大模型应用开发工程师的月薪最高可达60k。在AI技术加速落地的当下这种“技术业务”的复合型能力尤为稀缺让该职业成为当下极具吸引力的就业选择。AI大模型应用开发工程师是AI技术落地的关键桥梁。他们用专业能力将抽象的技术转化为具体的产品让大模型的价值真正渗透到各行各业。随着AI场景化应用的不断深化这一职业的重要性将更加凸显也必将吸引更多人才投身其中推动AI技术更好地服务于社会发展。CSDN粉丝独家福利给大家整理了一份AI大模型全套学习资料这份完整版的 AI 大模型学习资料已经上传CSDN朋友们如果需要可以扫描下方二维码点击下方CSDN官方认证链接免费领取【保证100%免费】