介绍了大型语言模型的新进展及 LLM 的局限性
引言
大型语言模型(LLM)最近这波进展,尤其是ChatGPT出来之后,确实让AI应用有了不少新玩法:构建全新的人机交互方案、搞定复杂任务、自动总结文档、从文献里找答案,甚至还能生成新内容。听起来很酷,对吧?但别高兴太早——LLM在获取最新知识或者企业内部的领域特定知识时,明显力不从心。那怎么破?现在有两个主流路子:
微调LLM:拿特定领域的文献继续训练LLM,但得自己管理或部署这个微调后的模型。
用检索增强生成(RAG)系统:让LLM借助现有的、可扩展的知识文档来生成答案。
这两个选项在数据隐私、安全性、可扩展性、成本和所需技能上各有千秋。RAG-GPT选的就是RAG这条路,咱们今天重点聊这个。
RAG的思路其实挺聪明:把检索机制和LLM的生成能力一结合,就能产出上下文相关、准确又时效性强的信息。具体说,
检索模块
生成模块则把这些资料当背景,生成答案。这样一来,所有非结构化信息都能被索引并拿来查询,省去了开发时间(不用费劲建知识图谱),对数据的整理和清洗要求也低了不少。
要搭一个RAG系统,你得先预处理各种格式的领域知识,把处理后的信息塞进合适的存储(比如向量数据库),搞一套查询和文档匹配的策略,对匹配的文档排个序,最后调LLM的API把用户问题和上下文文档一起传过去。虽然关于RAG系统的新点子层出不穷,但在具体应用场景里到底效果如何,还得再摸一摸。
RAG系统的核心流程
随着ChatGPT、文心一言、Kimi、豆包这类大模型服务越来越火,很多人开始琢磨怎么拿它们做问答系统。效果确实惊艳,但有两个硬伤:
幻觉
不可控
RAG系统就是为了搞定这两个问题而生的——它是一种信息检索方法,专门用来突破直接使用LLM的瓶颈。
它的工作原理是这样:先把自然语言查询转成Embedding(向量化表示),然后用这个Embedding在一堆文档里做语义搜索,最后把搜到的文档丢给LLM生成答案。

搭建RAG系统需要搞定Index和Query两大块。Index在开发阶段做,Query在运行阶段跑。
Index
RAG系统里,检索靠的是Embedding——它给文档提供一个压缩过的语义表示,说白了就是一堆数字向量。索引的时候,每个文档会被拆成小块(chunk),然后用Embedding模型把这些小块变成向量,再把原始块和向量一并存进数据库。这里有个设计关键:怎么切文档?切多大?如果切得太碎,有些问题可能压根答不上来;如果切得太大,答案里又容易混进噪音。
不同类型的文档需要的拆分策略也不一样。比如视频内容,得先转录成文本再编码。选哪种Embedding也很讲究,因为一旦换了Embedding策略,所有chunk都得重新索引。选的时候主要看语义检索能不能正确命中答案——这取决于chunk大小、预期问题的类型、内容结构以及应用领域。
OpenAI的Embedding模型

Query
查询在运行时进行。首先把自然语言问题转成通用查询——这一步靠LLM完成,可以把历史聊天记录等额外上下文加进去。然后从新查询里算出一个Embedding,用它在向量数据库里找相关文档。相似度方法(比如余弦相似度)会检索出Top K个最相似的文档(向量数据库有倒排索引这类加速技术)。这里的K值很关键:K太小可能召回率太低,漏掉正确答案;K太大会让输入LLM的Prompt太长,计算成本飙升,甚至可能超出LLM支持的长度。
检索到的文档还会重新排序,尽量把包含答案的chunk排到前面。接着进入合并器阶段,处理这些chunk。这一步主要是为了克服LLM的两大限制:
token限制
速率限制
OpenAI的一级速率限制

LLM底座的选择还有一个特别需要关注的点:推理成本。通常GPT-4作为底座效果最好,但代价很高,所以得结合实际场景折中。比如现在有些开源LLM效果也还不错、但小得多。不合适的模型还可能导致LLM不按Prompt要求生成答案,所以通常需要做评估实验来决策。
中文开放式生成评估

LLM API价格

RAG系统的最后一步是从生成的文本里提取答案。上层应用需要过滤掉提示中的噪音,遵循格式要求(比如把答案输出成选项列表),然后生成查询结果。实现RAG系统需要定制多个提示来处理提问和答案,确保返回的是领域相关的内容。用LLM从文档里实时回答问题,这为问答系统开辟了新天地。
RAG的优势
RAG有三个明显的好处,这也是它能在当前AI应用中被广泛采用的原因:
- 。LLM产生的幻觉往往看起来高度连贯、合理且可信,但实际是错的。RAG通过在推理时把带有高度上下文参考数据的提示注入进去,利用LLM强大的上下文学习能力来弥补这一缺陷。
减少LLM幻觉
- 。引入组织、企业或行业特定数据(包括定义、术语等),RAG是一种简单直接的方式。
源数据和参考数据与交互、对话挂钩
- ,不需要人工标注数据。
对参考数据进行分块和索引的过程基本自动化

RAG的挑战
RAG系统在实际落地中,有几个潜在的故障点(Failure Points):
- 。当提出的问题在现有文档里找不到答案时,可能出现失败。理想情况下,RAG系统会回复“抱歉,我不知道”。但如果问题与内容沾边但缺乏具体答案,系统可能被误导而给出响应。
FP1:缺失内容
- 。文档里明明有答案,但排名不够高,没被呈现给用户。理论上所有文档都会排序并考虑,但实践中只返回Top K个文档,K是根据性能指标选的。
FP2:错过了最相关的文档
- 。包含答案的文档已经成功检索出来,但没有被放到用于生成响应的上下文里。多个文档检索回来后,合并提取答案时容易出这个问题。
FP3:不在上下文中
- 。答案就在提供的上下文里,但LLM就是没准确捞出来。当上下文噪音过多或信息冲突时,经常发生。
FP4:未提取
- 。问题要求以特定格式(比如表格或列表)提取信息,但LLM忽略了指令。
FP5:格式错误
- 。响应里有答案,但缺乏所需的具体性或过于具体,满足不了用户需求。
FP6:特定性错误
- 。不完整的答案不一定错,但少了些信息,即使这些信息在上下文里且能被提取出来。
FP7:不完整
经验教训和未来优化方向
Chunking and Embedding
Chunking听起来简单,但质量直接影响检索过程——尤其影响chunk的Embedding,进而影响与用户查询的相似度和匹配。目前有两种chunking方式:
- (用标点符号、段落结尾等)。
基于启发式的方法
- (根据文本中的语义确定块的起止)。
语义分块
后续研究应该深入探讨这些方法之间的权衡,以及它们对Embedding和相似性匹配等下游过程的影响。如果能有一套系统评估框架,在查询相关性和检索准确性等指标上对比不同的Chunking技术,会对这个领域大有帮助。
Embedding是另一个活跃的研究方向,包括为多媒体和多模态块(比如表格、图形、公式)生成Embedding。chunk的Embedding通常在系统开发期间或索引新文档时创建一次。查询预处理对RAG系统性能影响很大,尤其是处理否定或模糊查询时。要解决Embedding本身的局限性(匹配质量是领域相关的),还需要更多架构模式和方法的研究。
RAG vs 微调
LLM因为训练数据量大,加上发布前有微调任务,成了很好的通用模型。但这些通用模型不一定了解你领域的细节,而且知识有截止日期,不够新。微调和RAG提供了两种定制路线,各自的权衡不同。微调需要策划内部数据集来适应和训练LLM,但所有数据都会嵌入到模型中,得解决安全/隐私问题(谁可以访问什么)。另外,基础模型本身演变或你要添加新数据时,得重新微调。而RAG系统更像一个务实的方案:按需对数据分块,只拿相关的块在上下文中给LLM生成答案。这能通过新文档持续更新知识,还能控制用户能访问哪些块。不过,chunk的Embedding、检索和上下文融合的优化策略仍是活跃的研究课题。下一步工作应该系统比较微调和RAG在准确性、延迟、运营成本、鲁棒性等因素上的表现。
RAG系统的测试和监控
RAG系统的工程最佳实践还在不断摸索中。测试和测试用例生成是急需改进的领域之一。RAG系统需要和应用相关的问题和答案,但这些通常在索引非结构化文档时是没有的。最近有研究开始用LLM从多个文档生成问题。如何生成真实、与领域相关的问题和答案,仍然是个开放问题。
结论
本文介绍了构建RAG系统时遇到的挑战和对应的解决方案,特别是通过集成LLM来实现智能客服。RAG系统把检索机制和LLM的生成能力结合起来,能高效处理非结构化信息,减少开发时间和数据清洗需求。当然,实现过程中存在一些故障点,比如缺失内容、格式错误、答案不完整等。
文章还探讨了RAG系统的核心流程、优势以及面临的挑战。RAG的好处很明显:减少LLM幻觉、关联源数据和参考数据、自动化处理非结构化数据。但实际应用里,还得解决好Chunking和Embedding策略、RAG与微调的选择、以及系统的测试和监控等问题。希望这些经验和建议能为从事RAG系统开发的工程师提供有价值的参考。
| FP | 优化方向 | 具体描述 |
|---|---|---|
| FP4 | 更多的上下文信息 | 大模型的窗口从4K增加到8K或者更大,LLM可以使用更多的上下文信息 |
| FP1 | 语义缓存降低了成本和延迟 | 由于速率限制和LLM的成本,RAG系统在应对并发用户方面存在困难。使用常见问题的预检索能力,可以缓解内容缺失现象。 |
| FP5~FP7 | RAG“越狱” | LLM大模型微调,增加模型的基础能力 |
| FP2, FP4 | 增加元信息 | 将文件名和chunk编号添加到检索到的上下文中有助于读者提取所需信息。这对对话很有用。 |
| FP2 FP4~7 | 开源LLM模型在处理小型文本方面表现更优。 | 在处理小型文本方面,开源LLM模型的表现与闭源替代品相当。 |
| FP2~7 | RAG系统需要持续校准。 | RAG系统在运行时接收未知输入,需要不断监控。 |
| FP1 FP2 | 实现一个RAG配置流水线 | 一个RAG系统需要校准chunk大小、Embedding策略、Chunking策略、检索策略、整合策略、上下文大小和提示。 |
| FP2,FP4 | 通过组装定制解决方案创建的RAG Pipeline是次优的。 | 端到端训练模型,增强RAG的领域实用性 |
| FP2~FP4 | 只有在运行时才能测试性能特征。 | 离线评估技术,如G-Evals看起来很有前景,但前提是能够获得标记过的问题和答案对。 |
-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名