首页 > 教程攻略 > ai资讯 >如何优化LLM?Prompt、RAG、Fine-Tuning方法对比分析

如何优化LLM?Prompt、RAG、Fine-Tuning方法对比分析

来源:互联网 时间:2026-08-03 14:12:09
# LLM的挑战与优化路径:Prompt、RAG、Fine-Tuning如何选择? 先说几个核心判断:大模型虽然强大,但并非万能。在实际落地中,幻觉、数据新鲜度、数据安全这三座大山,几乎是每个团队都绕不开的坎。而针对这些问题的优化方案——Prompt工程、RAG(检索增强生成)、微调(Fine-Tuning)——各有各的用武之地。今天就来拆解一下,这三条路到底该怎么走。 ## LLM的问题 梳理当前主流LLM的表现,问题主要集中在三个方面: **幻觉问题**:大模型的底层原理是基于概率,这就决定了它有时候会一本正经地胡说八道。比如你问某个博物馆的客服Chat“下周一开门吗?”,模型有概率会告诉你“开门”。但如果游客真去了,发现闭馆,事情可能演变成一通12345投诉电话。在很多要求精确的场景下,单纯依赖生成式回答是很不严谨的,而且这个问题很难根除——目前常见的缓解方案是前置一个BERT模型,或者预置大量prompt做优化。 **新鲜度问题**:模型规模越大(参数越多、tokens越多),训练成本越高。像ChatGPT 3.5,数据新鲜度依然停留在2021年。对于高时效性的事情,大模型更加无能为力,比如“今天有什么电影值得看?”——这种任务需要去淘票票、猫眼等网站获取最新信息,大模型本身完成不了。 **数据安全**:OpenAI已经遭遇过多次隐私投诉。对企业而言,把经营数据、合同文件等机密信息上传到互联网上的大模型,风险可想而知。如果企业人员问“帮我看看3月份XX部门的销售环比数据与哪些兄弟部门增长密切相关”,这需要打穿企业内部多个数据系统。既要保证安全,又要借助AI能力,最优方案就是把数据全部放在本地,业务计算本地完成,大模型仅做归纳功能,甚至完全本地化部署。 针对以上三个问题,有多种优化方式,下面逐层深入。 --- ## Prompt Prompt工程,就是让LLM根据你提供的文本输入提示来生成响应。它本质上是一个精确指导模型输出的输入,输出的基础完全依赖于LLM现有的知识。这也是门槛最低、最基础的优化手段。 ## RAG 当你把提示工程和数据库查询结合起来,获得带有丰富上下文的答案时,这就是RAG(Retrieval-Augmented Generation)。它让模型能够使用未经训练的数据——这些数据要么训练时不存在,要么被认为不够重要。生成的输出基于数据库中的现有知识,模型能引用实际数据源,而不仅仅是回忆要点。 ### RAG如何运作? RAG的工作分两个阶段:设置阶段和检索阶段。 #### 设置阶段 这个阶段负责收集和准备稍后要包含在提示中的数据。 **图 1:RAG 设置阶段** **1. 收集数据**:先收集所有要用于增强的数据,比如文档、代码文件、博客文章等。 **2. 分割数据**:将数据分割成块。块的大小取决于用例和LLM能力。例如,引用研究论文时,可以按章节分割,这样块不会太大,同时把语义相关的信息保持在一起(比如结论数据单独成块)。构建代码搜索时,则可按模块、类或函数拆分。 **3. 嵌入数据**:让数据可搜索,需要把每个数据块转换为向量嵌入。这些编码文本块的大量数字列表,是通过嵌入模型完成的。 **4. 存储数据**:将嵌入后的块存入向量数据库(如Upstash Vector),以便提示时随时调用。 完成后,就可以在检索阶段使用数据了。 #### 检索阶段 每次向LLM发送提示时都会执行这个阶段。 **图 2:RAG 检索阶段** **1. 嵌入提示**:将提示文本转换为向量嵌入,使用与设置阶段相同的嵌入模型,这样向量数据库才能可靠地将提示与数据比较。在此步骤前,最好去掉提示中的填充词,让搜索更准确。 **2. 搜索数据库**:将嵌入发送到向量数据库,获取与它们相关的块。可以过滤结果,确保它们与提示匹配。 **3. 将提示与结果结合**:将搜索结果与输入提示结合,创建包含丰富上下文的提示。可以给模型介绍数据背景,说明它应该如何根据这些数据构建回应,并指出在哪部分找到了相关信息。最后,加入用户输入。 **4. 生成响应**:将丰富后的提示发送给LLM,生成最终回答。 --- ## Fine-Tuning 微调,是用特定任务的数据调整大语言模型的参数,让它在某个领域内专业化。比如,在医学文献上微调模型,它就更擅长回答健康护理问题。这就好比给一位技艺娴熟的工人做额外培训,让他在特定领域成为专家。 ### 微调如何进行? 微调只有训练阶段。微调后的模型像常规LLM一样工作,不需要后续再取数据或往提示里加数据。 #### 训练阶段 收集、准备数据,然后交给模型。 **图3:微调训练阶段** **1. 收集数据**:比如想训练模型以莎士比亚风格写所有输出,就收集他的所有作品。想防止模型在不同领域语境中答非所问,就收集术语和定义列表。想教小模型某个特定领域,就尽量收集该领域的所有数据。 **2. 转换数据**:理想情况是数据已经是问答形式,可跳过此步。如果不是,则把数据转换为输入和所需输出的列表。微调的目的是消除每次发送提示前不断修改提示的繁琐(这正是RAG需要做的)。训练阶段可以用任何LLM辅助,比如告诉GPT-4以莎士比亚风格回答问题,再给一些写得出彩的部分作为例子。 **3. 训练模型**:数据格式准备好后,开始训练。完成后得到调整后的模型,可以像常规模型一样使用,无需再反复调整提示。 --- ## 何时使用 Prompt、RAG 及微调? 那么,在实际项目中,到底该选哪条路? 上图揭示了两项关键指导参数:第一是外部知识的需求,第二是模型适应的需求。模型适应意味着改变模型的行为、词汇、写作风格等。 **RAG vs 微调 对比分析** ### 访问不断变化的数据 RAG能让模型访问经常更新的新数据,定期更新向量数据库中的记录即可。 ### 以事实为基础的模型 需要模型忠实地呈现特定信息时,RAG是很好的选择。模型倾向于把提示里的信息当作事实。 ### 引用正确的来源 需要模型引用信息来源时,RAG也极为适合。 ### 修改输出样式 微调是教授模型写作风格或输出格式的方法,非常适合教授难以用语言解释的技能。 ### 专注于特定领域 微调也有利于训练模型专注特定领域。只需确保训练数据包含该领域的模糊术语和正确答案即可。 ### 优化提示 如果你需要把经常加到提示里的数据“固化”进模型权重,微调是首选。这能省下为大提示付费的成本,还能缩短响应时间。 ### 超长上下文 如果提示需要极长上下文,微调也很合适。把做决策所需的所有RAG数据放在一个提示里,有时并不可行——即使块很小,也可能需要数百个块来处理各种边缘情况。 ### 将小模型变成专家 通用模型通常很慢,小模型没那么复杂,但微调可以教给小模型特定领域的知识。甚至可以用通用模型来生成训练数据,最终训练出质量接近通用模型、但响应速度快得多的专业模型。 --- ## 总结 简单来说,微调更多是改变结构(行为)而非知识,RAG则正好相反。想基于自定义知识库生成输出,同时保持LLM的词汇和写作风格不变,选RAG——但要留意提示尺寸。想省提示尺寸,或者教小模型新技能?微调是好选择,前提是能收集或生成所需数据。如果应用场景同时需要定制知识和行为改变,那“RAG + 微调”混合方案就是首选。如果两者都不需要,那么Prompt工程就是最佳路径。 参考来源: - https://upstash.com/blog/comparing-rag-with-ft - https://www.rungalileo.io/blog/optimizing-llm-performance-rag-vs-finetune-vs-both