ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

LLM、RAG、AI Agent:搞懂大模型应用开发三大核心概念

LLM、RAG、AI Agent:搞懂大模型应用开发三大核心概念

1. 为什么每个技术人都该搞懂这三个词

这两年“大模型”几乎成了技术圈最热的关键词,但很多刚接触的朋友容易被一堆术语绕晕。尤其LLM、RAG、AI Agent这三个词,经常出现在各种文章里,却很少有人把它们的区别、联系讲清楚。我当初入门的时候也踩过不少坑,看了一堆资料,感觉每个字都认识,连起来却不知道在说什么。后来自己在项目里逐个试了一遍,才真正摸清楚它们各自的定位。

一句话先概括:LLM是大脑,RAG是给大脑配的“外挂知识书”,AI Agent是让大脑学会“自己动手干活”的完整系统。这三者不是互斥关系,而是层层递进、可以组合使用的关系。如果你只学一个概念,你可能只会调接口;如果你把这三个都搞明白,你就能设计出真正解决实际问题的应用。

这篇文章适合谁?想入门大模型应用开发的开发者、产品经理、技术决策者,甚至是对AI感兴趣但一直被术语劝退的自学者。我尽量不用晦涩的数学公式,全程用“人话”讲解,并结合我实际跑过的项目案例来拆解。读完你至少能回答这几个问题:LLM到底在做什么?RAG解决的是什么痛点?AI Agent比普通对话机器人强在哪?以及——我自己的场景到底该选哪个。

2. LLM:大语言模型到底是个什么“大脑”

2.1 从“文字接龙”说起

很多人把大语言模型想得太神秘,其实它的核心机制用一句话就能概括:根据前文预测下一个最合适的词。你给它一句话,它逐个字或逐个词往后生成,每一步都在选择“在现有上下文里最合理的下一个词”。这个过程叫自回归生成。

打个比方,你朋友说“今天天气真”,你大概率会接“好”或者“不错”——因为你根据生活经验判断,这个位置最可能出现什么词。LLM做的事情本质上是同一件事,只不过它的“生活经验”来自海量的互联网文本,而且它不仅能接一个词,还能一直接下去,直到组成一段完整的文章、代码或对话。

这里有个关键点值得展开说。LLM生成内容不是查数据库,它没有存储任何一条具体“记录”,它存储的是统计规律。训练阶段,模型把文本中的词法、语法、常识、推理模式抽象成了成千上亿的参数。你问它问题,它不是在记忆里搜索答案,而是基于参数计算出一个概率分布,然后从分布里采样生成内容。这也是为什么LLM偶尔会“一本正经地胡说八道”——它追求的是“像人话”,不追求“一定真实”。

2.2 训练、微调与部署的基本盘

深入使用LLM之前,至少要了解三个层次的“模型”概念。底层是预训练模型,比如常见的开源基座模型,它在大规模通用语料上训练,知识面广但什么“都会一点、都不精”。中间层是微调模型,在预训练基础上用特定领域数据继续训练,让它更懂某个行业的术语和表达习惯。顶层是应用层,也就是你通过API或本地部署真正调用的服务。

我在第一次实践时犯过一个典型错误:以为微调是万能的,想让模型学会一个垂直领域的问答,直接准备了一批数据去微调。后来才发现,微调更适合改变模型的“行为模式”和“表达风格”,而不是往里面塞新知识。你要让模型知道一个内部工具的用法、一份产品手册的细节,光靠微调效率低、成本高,而且更新知识需要重新训练。这时候RAG才是更合适的方案。

部署方面,如果你只是做原型验证,直接调用云端API最省事,比如常见的几种商用模型接口,都有免费额度或低价档位。如果你对数据隐私有要求,或者需要高频调用、成本可控,才会考虑本地部署开源模型。本地部署的显存估算有个粗公式:参数量(B)乘以大约2GB,也就是说一个7B模型,FP16精度下大概需要14GB显存,实际跑起来加上上下文缓存,一般建议预留20GB以上。这个账一定要提前算清楚,否则模型下载下来跑不动,很尴尬。

2.3 LLM的边界与天花板

吹了这么多LLM的能力,也得说说它的边界。首先是知识截止时间问题,模型训练完成后,它不知道发布之后发生的事情。其次是幻觉问题,在缺乏可靠依据的情况下,它会自信地编造答案。还有一个容易被忽略的问题——上下文窗口限制,也就是模型一次能“记住”的信息量有限,超过窗口长度的内容会被截断或遗忘。

这三个短板恰好引出下一个概念。RAG就是为了弥补知识时效性和幻觉问题而生的,AI Agent则是为了解决“模型只会聊天、不会干活”的局限。理解LLM的能力边界,比理解它的能力本身更重要,因为这决定了你设计应用时的架构选择。

3. RAG:给大模型配一本随时可查的参考书

3.1 为什么需要检索增强生成

我先给你还原一个典型场景。假设你要做一个企业内部的规章制度问答机器人,员工会问“年假怎么休”“报销流程是什么”“加班调休怎么申请”。这类问题的答案不在模型的训练数据里,或者即使有,也已经过时了。如果你直接拿LLM硬答,结果大概率是三种:回答得模棱两可、回答得完全错误、回答得条理清晰但全是编的。

RAG的思路很简单:不逼模型“记住”所有知识,而是让模型在回答时去“查”知识库。具体来说,用户提问后,系统先从知识库里检索出与问题最相关的内容片段,然后把“问题 + 检索到的资料”一起交给LLM,让它基于这些资料生成答案。这就像考试时允许带参考资料入场,LLM不需要背下整本书,它只需要会读资料、会组织语言就行。

这个思路带来的好处非常直接。知识更新变成了“改资料库”而不是“改模型”——文档更新后,重新建立索引即可,不需要重新训练。回答的准确性大幅提升,因为模型有依据可循,幻觉被明显抑制。而且每个答案还能附上“参考来源”,用户能自己核对,这在实际业务里特别重要。

3.2 RAG的完整链路拆解

一个典型的RAG系统,跑起来其实就四步:文档加载、切片索引、检索召回、生成回答。

第一步是文档加载与清洗。把你手里的PDF、Word、网页、数据库记录统统读出来,转成纯文本。这里坑很多,PDF的表格会乱、扫描件要OCR、网页要去掉导航和广告。我实践下来的建议是:宁可多花时间在前处理上,也不要直接拿脏数据去建索引,否则后面检索质量会很差。

第二步是切片与向量化。把长文档切成小块,每块几百到上千字不等,然后用Embedding模型把每块文本转成一个向量。向量是什么?你可以把它理解成文本的“坐标”,语义相近的文本在向量空间里距离近,语义无关的距离远。这一步是RAG的基石,切片大小直接影响检索效果:切得太小,上下文不完整;切得太大,冗余信息多,还浪费模型上下文。

第三步是建立索引并检索。把向量存进向量数据库,用户提问时,先把问题也转成向量,然后在数据库里找最相似的若干片段。这里可以选择的技术栈很多,常见的有开源的向量库、基于传统数据库的向量插件,以及专门为RAG优化的托管服务。选型时重点看三点:数据量级、检索延迟、运维成本。早期验证阶段,用轻量级方案完全够用。

第四步是生成回答。把检索到的片段按相关度排序,拼进Prompt里,让LLM阅读这些资料并回答。Prompt要写清楚规则:基于给定的资料回答,如果资料里没有答案,直接说不知道,不要编造。这一步的效果很大程度上取决于Prompt的设计,我会在下一节用实际案例展示怎么设计。

3.3 一个完整的RAG实战案例

我去年在某项目里搭过一个“产品知识问答助手”,业务方要求客服能快速查询产品配置参数和常见故障处理方案。整个流程我从零走了一遍,可以把关键参数分享出来。

文档是50多份PDF,合计约2000页。处理流程是这样的:先用Python脚本把PDF统一转成文本,正则清理掉页眉页脚、特殊符号,按章节标题和段落结构切片,每片控制在500字左右,相邻切片重叠50字——重叠这个细节很重要,可以避免关键信息正好被切断在两片之间。向量化用的Embedding模型是当时主流的开源模型,向量维度768,切完一共得到7000多个片段,全部写入本地向量库。

检索参数的设置上,我一开始用默认配置,效果一般。后来做了几组对比测试:单次检索召回数量从4调到8,回答的完整性明显提升,但超过12之后,无关内容开始混入,生成质量反而下降。最终选定召回8个片段,相关度阈值过滤掉得分低于0.7的内容。Prompt模板的核心是“你是一个产品问答助手,请严格根据以下资料回答问题,如果资料中没有相关信息,请明确回复‘未找到相关资料’”。

上线后跑了一段时间,体感效果比预期好。客服反馈说,以前翻手册找参数要两三分钟,现在几秒出答案,准确率在绝大多数情况下靠谱,偶尔答错也是因为知识库本身的资料更新不及时。这个案例说明,RAG的价值不在于技术多高深,而在于把成熟技术和业务场景扎扎实实结合起来。

3.4 RAG的进阶优化方向

RAG的基本链路跑通很容易,但要做得“好用”,还有很多优化空间。我简单列几个自己验证过有效且方向明确的做法。

查询改写是成本最低、收益最明显的一招。用户提问时往往有歧义,比如问“那个功能怎么用”,如果不加处理直接去检索,效果一定差。可以先让LLM把问题改写成更适合检索的形式,比如“哪个功能?功能名称是什么?”拆解成几个具体关键词——准确率能提升不少。

重排序也是常用手段。向量检索召回的前K个结果,相关性排序未必符合人的直觉,可以再用一个重排模型或者让LLM二次打分,把最相关的内容排在前面,只把前几个片段放进Prompt。这在片段数量多的时候特别有用。

还有一个容易被忽视的点是知识库的维护节奏。RAG系统上线只是开始,文档持续更新是常态。建议设置定时任务,定期增量更新索引,而不是每次都全量重建。这个“增量更新”的流程,优先级甚至比调优模型参数更高,因为知识的新鲜度决定了系统的长期价值。

4. AI Agent:从“回答问题”到“完成任务”

4.1 Agent的本质是“知行合一”

RAG解决了“知”的问题,也就是让模型有知识可依。但真实业务里,很多需求不只是“回答一个问题”,而是“完成一件任务”。比如用户说“帮我分析一下这个月的销售数据,写一份报告,并发送到团队邮箱”——这不只是对话,而是一系列动作:读取数据表、统计数据、生成报告、调用邮件接口、发送邮件。

传统对话机器人做不到这件事,因为它只能生成文本,不能操作工具。AI Agent的本质,就是在LLM的基础上,增加了任务规划和工具调用的能力。你可以把Agent理解成一个“有手脚的大脑”:LLM负责思考、拆解任务、决定下一步做什么,工具(API、代码解释器、数据库查询、浏览器操作)负责执行。

这里有个很重要的设计理念:Agent的工作方式是循环而不是一次到底。它每执行一步,都会把结果反馈回模型,模型根据反馈决定下一步动作,如此循环,直到任务完成或达到终止条件。去年各家Agent框架的兴起,核心就是把这个循环流程标准化、工程化了。

4.2 Agent的核心组件与运行逻辑

拆开看,一个Agent系统包含四个核心组件。大模型底座是决策中枢,负责理解用户意图、拆解任务、选择工具、评估结果;工具集是Agent的手脚,每个工具就是一个带描述的函数,比如“search_database(query: str) -> str”,模型会根据描述决定何时调用哪个工具;记忆模块负责保存上下文信息,包括与用户的对话历史、中间结果、已完成的事项;规划模块负责把大任务分解成子步骤,有些Agent还会根据执行结果动态调整计划。

我用一个实际例子走一遍Agent的运行逻辑。假设任务是“查询上季度各区域销售额,并生成对比图表”。Agent的思考与行动轨迹可能是这样:

  1. 用户给出任务,Agent开始规划:需要两件事——获取数据和画图。
  2. Agent从工具集中选择“数据库查询工具”,参数是“上季度、各区域、销售额”,工具返回原始数据。
  3. Agent看到返回的数据格式,判断还缺一个维度——各区域的目标值,于是再调用一次查询。
  4. 数据齐了之后,Agent调用“Python代码解释器”工具,用代码生成图表,运行后收到图表文件路径。
  5. Agent用自然语言组织最终回答,把结论和图表位置告诉用户。

整个过程,用户只给了一句指令,中间所有拆解、决策、执行、反馈都由Agent自主完成。这种体验和传统的“一问一答”完全是两个层次。

4.3 从“单步工具调用”到“自主智能体”——聊聊Agent的复杂度分级

很多人对Agent的认知容易走极端,要么觉得它无所不能,要么觉得它只是噱头。我自己的感受是,Agent其实有清晰的复杂度分级,不同级别解决的问题完全不同。

最低级别是单步工具调用。LLM根据问题决定“调不调用工具、调用哪个”,工具返回结果后,模型把结果融入回答。这本质上是一个“带工具的Chatbot”,实现难度低、效果可控性好,适合“查天气”“算价格”这类场景。

中间级别是多步任务执行。模型需要自主规划多个步骤,按顺序调用多个工具,并根据中间结果动态调整。前面说的销售报告例子就属于这一档。这一档已经能解决很多办公自动化的实际需求,但需要精心设计Prompt和工具定义,否则模型容易跑偏。

最高级别是自主规划与反思。Agent不仅能执行任务,还会在失败后自我纠错、尝试新方案、甚至主动向用户提问澄清需求。这一档目前还处于快速演进阶段,效果受模型能力、工具质量、场景复杂度多方面影响,落地时建议从小范围、低风险场景开始验证。

我的建议是:不要一上来就追求最高级别的“全自主”,先从单步工具调用做起,跑通了再加规划逻辑,一步步升级。所谓“先完成后完美”,在Agent领域特别适用。

4.4 用Agent框架快速搭建一个Demo

如果你已经用熟了LLM API,想体验Agent开发,其实不需要从零搭框架。目前常见的Agent开发框架已经帮我们封装好了“模型调用、工具注册、循环控制”这些脏活,开发者主要工作变成了两件事:定义工具、设计Prompt。

我用一个“内部知识库+日程管理”的Demo举个例子。工具集里我注册了三个工具:搜索知识库文档、查询今日日程、创建日程提醒。每个工具都写了清晰的描述,比如“search_docs(query: str):在公司知识库中搜索与query相关的文档,返回标题和摘要列表”。框架会自动把工具描述塞进系统Prompt,模型看到这些描述后,就知道什么情况下该调用什么工具。

实际运行效果很有意思。用户说“帮我找一下报销规定,然后提醒我明天下午三点提交申请”,Agent先调用搜索工具找到报销规定,总结要点回复用户,然后调用创建日程工具设置提醒。整个过程很流畅,没有专门的“意图识别”训练,全靠大模型读工具描述后的推理能力。

这类Demo的主要价值是让你快速理解Agent的工作机制。想真正落地到生产环境,还得多花心思在工具稳定性、错误兜底、权限控制这些工程问题上。

5. 三者如何选择与组合——实战决策指南

5.1 一张表看清适用场景

很多朋友学完这三个概念后,最大的困惑是:我的项目到底该用哪个?我根据实际经验整理了几个判断维度,做成表格方便对比。

你的需求类型推荐方案核心原因
通用聊天、创意写作、代码辅助纯LLM调用不需要外部知识,模型能力够用
需要回答私有或实时知识的问题LLM + RAG让模型基于最新知识库作答,减少幻觉
需要替代人工执行多步操作流程LLM + Agent(可选叠加RAG)模型负责决策,工具负责执行
既要专业知识又要自动执行任务LLM + RAG + Agent 三层组合知识有依据、行动有规划,能力最全

注意看最后一行——RAG和Agent不是二选一,而是可以叠加的。实际上,我见过的大多数生产级应用都是组合形态:RAG为Agent提供知识支撑,Agent在思考时随时可以检索资料,然后再决定下一步操作。打个比方,RAG是给你一本参考书,Agent是教你“怎么利用这本书完成一个课题”。

5.2 组合架构的推荐路径

如果你做的是知识密集型任务型应用,推荐从“RAG + Agent”组合开始。我拆一个参考架构给你,这是我在某模拟项目里验证过可行的:

用户请求进来后,先经过Agent的规划模块,由LLM判断这个请求需要哪些步骤。如果涉及知识查询,Agent调用RAG检索接口;如果涉及外部操作,Agent调用对应工具。每一步的结果都会流回Agent的上下文,直到最终生成完整回答并执行完所有动作。

这种架构的关键在于接口解耦:RAG作为一个服务独立运行,Agent通过标准API调用它;工具也是独立服务,Agent只负责调度。这样任何一层的升级和替换都不影响整体,排障也容易定位——到底是模型答错了、检索没召回,还是工具执行失败。

5.3 预算与成本控制实战建议

选型除了看技术指标,还得看钱。我提供一些实测后的粗略数据供参考:纯LLM的API调用,每次问答成本从几厘到几分钱不等,取决于模型大小和上下文长度;RAG会增加embedding调用和向量库存储成本,embedding费用相对低,向量存储按量计费;Agent因为是多轮交互,模型调用次数成倍增加,成本最高,但可以通过设计减少无效调用。

省钱的经验有几条:第一步,尽量用小模型处理简单任务,只有复杂推理时才用大模型,这是普通人最容易忽略的优化手段;第二步,在Agent里设置“最多执行N步”的终止条件,防止模型陷入死循环烧钱;第三步,通用知识类的查询不一定要走RAG,直接让LLM回答就好,知识库检索只在涉及私有信息时才启用。

成本这件事,做原型时不用太计较,但设计生产架构时必须一开始就想清楚,不然上线后账单会让你措手不及。

5.4 三个常见误区提醒

最后提醒三个我反复看到的认知误区,也算是我自己走过的弯路。

误区一:以为RAG能替代所有微调。RAG适合引入新知识,微调适合改变模型行为和风格,二者定位不同,不该互相替代。如果想让模型学会某种特定输出格式或专业语气,微调更合适;如果想让模型知道“最新产品参数”,RAG更合适。

误区二:以为Agent完全不需要人工干预。当前Agent的能力还没到“全自动且零错误”的程度,尤其在执行关键操作时,建议设计“人工确认”环节——比如发送邮件、转账、删除数据这些不可逆动作,必须让Agent先给出方案,用户确认后再执行。

误区三:以为框架能解决一切。Agent框架确实省了很多开发量,但它不解决Prompt设计问题,也不解决工具不稳定问题。很多项目跑不通,不是框架不行,而是工具定义太模糊、Prompt引导不到位、异常处理没做好。

5.5 我个人的入门学习路径建议

如果你是从零开始,我建议按这个顺序推进,和我自己入门时的路径基本一致:先把LLM的基础概念吃透——理解token、上下文窗口、温度参数这些基础概念,调过几个不同模型的API;然后做一个RAG项目——不必复杂,比如让模型基于你本地的一堆文档做问答,把链路跑通;接着再上手Agent——用现成框架注册几个工具,实现一个自动执行的小任务;最后把RAG整合进Agent,做一个知识型自动化应用,就算真正入门了。

每走一步,你都会对前一步有更深的理解。比如你用了RAG之后再回头用Agent,才会明白“工具调用”和“知识检索”在Agent里是如何协作的——当你真正看完模型一步步计划、调用、纠错、完成的完整轨迹时,那种感觉,和只看文章里对Agent的定义是完全不同的。

我自己入门那会儿,总觉得这些概念隔着一层纱,后来在项目里把每个环节亲手跑通,那些模糊的概念才彻底清晰起来。希望这篇文章能帮你也捅破这层窗户纸。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进