尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

从LLM到智能体:RAG、Agent与MCP技术栈全解析

从LLM到智能体:RAG、Agent与MCP技术栈全解析 1. 项目概述从“文字接龙”到“超级智能体”的认知跃迁最近和不少刚入行或者想转行做AI应用的朋友聊天发现一个挺普遍的现象大家被各种新概念砸得晕头转向。今天听说RAG是解决大模型“胡说八道”的利器明天又看到Agent是通往通用人工智能的钥匙后天MCP协议又成了新的热点。这些词儿单个看好像都懂但放在一起它们之间到底是什么关系是先学RAG还是先搞AgentMCP又是个啥为啥突然火了这让我想起了我们小时候玩的“文字接龙”游戏。第一个人说“苹果”第二个人接“果树”第三个人可能就接“树林”……这个游戏的核心是每个人只能看到前一个人说的词然后基于这个词也就是“上下文”来生成下一个词。这不就是当今大语言模型LLM最底层的运行逻辑吗它本质上就是一个基于海量文本训练出来的、超级复杂的“文字接龙”机器。你给它一段话提示词它就能基于这段话的“上下文”用概率预测出下一个最可能的词一个接一个生成出连贯的文本。那么问题来了一个只会“接龙”的模型是怎么一步步变成能理解你意图、调用工具、规划任务、甚至自主完成复杂项目的“超级智能体”的呢这中间缺失的环节就是我们要梳理的“血缘图谱”。理解这个图谱不是为了死记硬背概念而是为了建立一套认知框架。当你再看到LLM、Context上下文、RAG、Agent、MCP这些词时你能立刻明白它们在这个进化链条上处于什么位置解决了什么问题以及你该在什么时候、用什么工具。这对于开发者设计架构对于产品经理定义需求甚至对于创业者寻找方向都至关重要。这篇文章我就尝试以一线实践者的视角为你一次讲透这条从“核心能力”到“上层应用”的演化路径。2. 核心基石LLM、上下文与“接龙”的本质2.1 大语言模型概率驱动的文本生成引擎我们得从根儿上理解LLM是什么。抛开所有华丽的包装当前主流的大语言模型如GPT-4、Claude、Llama等其核心是一个基于Transformer架构的深度学习模型。它通过在海量互联网文本数据上进行训练学会了文本中字、词、句子之间的统计关联规律。你可以把它想象成一个拥有万亿级别参数的、极其复杂的“条件概率计算器”。当你输入一段文本即“提示词”或“上下文”时模型内部会进行一系列复杂的数学运算最终输出一个概率分布这个分布描述了在所有可能的词汇中下一个词是每一个词的概率有多大。然后模型会按照某种策略如选择概率最高的或按概率随机采样选出一个词作为输出。接着把这个新生成的词追加到输入文本后面形成新的“上下文”再重复上述过程生成下一个词。如此循环就产生了你看到的一段段流畅的文本。所以LLM的“智能”并非真正的理解或思考而是基于统计模式的高度逼真的模仿。它的所有输出都严格受限于两件事一是它训练数据中的知识范围和模式二是你提供给它的“上下文”信息。注意这里常有一个误区认为模型“知道”一切。实际上它只是“记得”训练数据中的模式。如果训练数据里没有某个领域的最新知识或非常小众的事实模型就无法“回忆”起来从而产生事实性错误也就是我们常说的“幻觉”。2.2 上下文模型的“工作记忆”与核心瓶颈上下文在技术语境里通常指Context Window或Context Length即模型一次性能处理的最大文本长度通常以令牌Token为单位。这就像是模型的“短期工作内存”。你提供给模型的所有指令、知识、历史对话都必须装进这个“内存”里模型才能基于这些信息进行“接龙”。上下文长度直接决定了模型的能力边界理解复杂指令如果你的需求需要上千字的背景描述短上下文模型可能无法看到完整的指令导致输出偏离预期。进行长文档分析无法将一篇长论文或一份几十页的PDF全部塞进上下文就无法进行全文的连贯分析和总结。维持长对话在多轮对话中如果上下文太短模型很快就会“忘记”对话早期的内容。最近网络热词中频繁出现的错误提示如“api error: 400 this models maximum context length is 1048576 tokens...”正是开发者在实际调用中触碰到上下文边界的最直接体现。这个错误意味着你发送的请求内容包括提示词、历史消息和返回的文本总长度超过了模型设定的上限。因此如何高效、精准地利用有限的上下文空间就成了构建大模型应用的第一道核心课题。这引出了两个主要方向一是算法和硬件协同优化扩展上下文长度如热词中提到的ACCLlm这类研究二是在现有上下文限制下通过工程技术手段“喂”给模型最相关、最精炼的信息。后者正是RAG技术要解决的核心问题。3. 能力增强RAG如何为LLM注入“长期记忆”3.1 RAG的核心思想从“死记硬背”到“即查即用”既然LLM的“记忆”训练数据是静态的、可能过时的并且其“工作记忆”上下文是有限的那么一个很自然的想法是为什么不给模型配一个“外挂硬盘”和一套“检索系统”呢当模型需要某些它“记不清”或“不知道”的知识时就让它先去“外挂硬盘”里查一下把查到的相关资料放进“工作记忆”再基于这些资料来生成回答。这就是检索增强生成的核心思想。它把生成过程分成了两步检索根据用户的问题从一个外部的、可更新的知识库如向量数据库、文档系统中查找出最相关的文档片段。增强生成将这些检索到的文档片段与用户原始问题一起组合成一个新的、信息更丰富的提示词提交给LLM。LLM在生成答案时就有了可靠的参考依据。举个例子用户问“公司最新的差旅报销政策是什么”。传统的LLM可能会根据训练数据中“差旅报销”的一般模式编造一个答案。而RAG系统会先在公司内部的政策文档库中搜索“差旅报销 2024”等关键词找到最新的PDF或Wiki页面截取相关段落然后对LLM说“请根据以下公司内部文件内容回答用户关于差旅报销政策的问题[检索到的政策文本]”。这样LLM生成的答案准确性将极大提高。3.2 RAG实战中的关键环节与避坑指南搭建一个可用的RAG系统远不止“检索生成”这么简单。在实际项目中以下几个环节直接决定了系统的成败1. 知识库的构建与处理文档切分如何把长文档切成有意义的片段按段落按章节还是按固定长度切分不当会导致检索时丢失上下文信息。我的经验是结合语义和结构进行切分例如在Markdown文档中按二级标题切分同时保证每个片段有适中的长度如200-500个令牌。向量化将文本片段转换为向量即嵌入。这里的关键是选择与你的LLM和任务匹配的嵌入模型。例如用于检索的嵌入模型和用于生成的LLM不一定需要同系列但需要在相似任务上表现良好。text-embedding-3-small和BGE系列都是目前常见的选择。2. 检索策略的优化简单向量检索的局限仅靠余弦相似度计算问题与文档片段的向量相似度可能会因为关键词不匹配或语义细微差别而漏检、误检。混合检索结合稠密检索向量相似度和稀疏检索如BM25关键词匹配。向量检索擅长捕捉语义相似BM25擅长捕捉精确关键词匹配两者结合能显著提升召回率。重排序这是RAG实战中的高级技巧。先通过向量检索召回Top K个候选片段比如50个然后使用一个更精细但更耗资源的“重排序模型”对这50个片段进行二次打分和排序只选取Top N个比如5个最相关的片段送入LLM。这能在成本和精度间取得很好平衡。热词中的rag重排序指的就是这一步。3. 提示工程的精心设计如何将检索到的片段组织成给LLM的提示词极其重要。一个糟糕的提示词会让LLM忽略你辛苦检索来的资料。# 一个较好的RAG提示词结构示例 你是一个专业的问答助手。请严格根据以下提供的参考信息来回答问题。如果参考信息中没有答案请直接说“根据现有资料无法回答”不要编造信息。 参考信息[检索到的文档片段1] [检索到的文档片段2] ...问题{用户问题}实操心得在提示词中明确要求模型“严格根据参考信息”并说明无法回答时的处理方式能有效减少幻觉。同时将参考信息用分隔符清晰标出有助于模型区分指令和上下文。4. 评估与迭代RAG系统不是一蹴而就的。需要建立评估体系包括检索相关性评估检索到的片段是否真的与问题相关答案忠实度评估生成的答案是否严格源自检索到的片段答案质量评估答案是否准确、流畅、有用 可以人工评估也可以利用LLM作为裁判进行自动评估持续优化切分策略、嵌入模型和检索流程。4. 行为进化Agent赋予LLM“行动与思考”的能力4.1 从工具调用到自主智能体能力的阶梯如果说RAG解决了LLM“知识”不足和“记忆”短暂的问题那么Agent要解决的就是LLM“行动”能力缺失的问题。一个只会生成文本的模型就像是一个博学但瘫痪的顾问他知道很多但什么也做不了。Agent的目标是为这个顾问配上“手脚”和“思考回路”。Agent的发展可以看作一个能力阶梯工具调用最基础的能力。LLM可以根据用户请求识别出需要调用某个外部工具如计算器、搜索引擎、数据库API并生成符合该工具要求的输入参数。例如用户问“北京今天天气如何”LLM可以生成一个调用get_weather(api_key, city北京)的指令。这需要给LLM描述清楚工具的功能和参数格式。规划与执行进阶能力。面对复杂任务LLM能够先进行规划拆解成子步骤然后按顺序或条件执行。例如用户说“帮我订一张明天从上海到北京最便宜的高铁票并预订虹桥火车站附近的酒店”。Agent需要规划出1查询高铁班次和价格2比较并选择最便宜的车次3根据到达站和时间为条件搜索附近酒店4对比酒店价格和评价5执行预订。这要求LLM具备一定的逻辑推理和任务分解能力。反思与迭代高级能力。Agent能够检查自己或工具执行的结果判断任务是否完成得好如果不好可以分析原因并调整计划。例如搜索酒店后发现没有空房Agent能反思“可能是价格筛选太严”或“区域太小”然后调整搜索条件重新尝试。热词中提到的Agentic RAG就是将这种反思能力用于RAG过程比如判断检索到的文档是否足够回答问题如果不够则重新生成检索查询。多智能体协作前沿探索。多个具备不同技能的Agent协同工作完成更宏大的任务。例如一个“产品经理”Agent负责拆解需求一个“前端工程师”Agent负责写UI代码一个“后端工程师”Agent负责写API逻辑一个“测试”Agent负责检查代码运行。它们通过一个“协调者”或彼此通信来合作。4.2 主流Agent框架与开发实战目前社区涌现了许多Agent框架来简化开发它们抽象了工具调用、任务规划、记忆管理等通用模块LangChain / LangGraph生态最成熟组件丰富。LangGraph特别擅长描述有循环、有条件分支的复杂Agent工作流。热词中fastapi llm基础知识 langchain langgraph的关联搜索正体现了大家用它来构建具备复杂逻辑的AI应用后端。Dify / CrewAI更偏向应用层。Dify强调低代码通过可视化工作流编排AgentCrewAI则专注于多Agent协作方便定义Agent的角色、目标和它们之间的协作关系。Hermes Agent一个较新的开源项目因其清晰的架构和性能受到关注。热词hermes agent官网表明很多人正在积极了解和尝试。开发一个简单Agent的实战步骤定义工具明确你的Agent需要哪些“手脚”。比如一个数据分析Agent可能需要query_database(sql)、draw_chart(data, type)等工具。用框架提供的方式清晰定义工具名称、描述和参数。构建提示词模板设计一个系统提示词告诉LLM它现在是一个Agent拥有哪些工具以及在什么情况下应该使用什么工具并要求它以特定格式如JSON输出思考过程和工具调用。搭建执行循环将用户输入和对话历史传给LLM。LLM输出思考结果和工具调用请求。框架解析输出调用相应的外部工具。获取工具执行结果如数据库查询返回的数据。将工具执行结果作为新的上下文再次传给LLM让它决定下一步是继续调用工具还是生成最终答案回复用户。处理复杂逻辑对于需要多步规划的任务可以使用LangGraph这样的库来显式地定义状态图控制Agent的决策流程避免在简单的循环中迷失。避坑指南Agent开发中最常见的两个坑一是工具描述不清导致LLM无法正确选择或参数错误二是陷入死循环Agent在两个工具间来回调用无法跳出。解决方法是细化工具描述、在系统提示词中设定最大步骤限制并在工作流设计中加入明确的终止条件。5. 生态互联MCP协议如何实现智能体的“工具自由”5.1 MCP是什么工具生态的“通用插座”当你的Agent能力越来越强需要的工具也越来越多时一个新的问题出现了每个工具都需要为不同的Agent框架LangChain, CrewAI, Hermes...单独适配一遍吗能否有一种统一的方式让任何Agent都能方便、安全地调用任何工具这就是模型上下文协议诞生的背景。你可以把它理解为智能体世界的“USB-C接口”或“通用插座”。它定义了一套标准化的通信协议用于在服务器和客户端之间交换信息。MCP 服务器封装了具体的工具或数据源。例如一个天气MCP服务器提供了获取天气的工具一个公司数据库MCP服务器提供了查询销售额、获取用户列表等工具。热词中提到的tavily-mcp搜索、brave-search-mcp搜索、playwright mcp网页自动化都是不同功能的MCP服务器实现。MCP 客户端通常是Agent框架或AI应用。例如Claude Desktop、Cursor IDE、Windsurf等都可以作为MCP客户端。它们通过MCP协议发现并调用连接到其上的各种MCP服务器提供的工具。MCP的核心价值解耦与标准化工具开发者只需按照MCP协议实现一次服务器任何支持MCP的客户端Agent都能立即使用无需重复适配。安全与可控工具运行在独立的服务器进程中与主Agent隔离。客户端可以控制连接哪些服务器从而精细化管理工具访问权限。生态繁荣开发者可以专注于开发好用的工具服务器而不必担心集成问题。用户则可以像“应用商店”一样按需组合工具打造自己强大的智能体。5.2 如何利用MCP增强你的智能体对于Agent开发者来说MCP带来了极大的便利场景一快速集成现成工具假设你正在用LangChain开发一个研究助手Agent需要网络搜索能力。你可以直接启动一个tavily-mcp服务器它封装了Tavily搜索API然后在你的LangChain Agent中配置MCP客户端来连接这个服务器。瞬间你的Agent就拥有了搜索工具而无需关心Tavily API的具体调用细节。场景二安全暴露内部工具公司内部有很多敏感系统如CRM、ERP。直接让Agent访问这些系统的数据库或API存在风险。你可以为每个系统开发一个轻量的MCP服务器这个服务器只暴露几个安全的、审计过的工具接口如“获取客户X最近3个月的订单”。然后让公司的内部Agent连接这个MCP服务器。这样既提供了能力又通过MCP服务器实现了权限控制和审计日志。添加MCP服务器到客户端的通用步骤以支持MCP的IDE为例安装或启动MCP服务器通常通过Docker或直接运行二进制文件。例如运行docker run -p 8080:8080 mcp/tavily。配置客户端在客户端的配置文件如claude_desktop_config.json中添加该服务器的连接信息包括服务器类型stdio, sse、命令或URL等。重启客户端重启你的AI应用或IDE它就会自动发现并加载新工具。验证使用在对话中尝试使用新工具例如说“请搜索一下大模型上下文长度最新的研究”Agent应该能调用新加的搜索工具来完成任务。热词中搜索类 mcp 服务器添加进codex的详细步骤反映的正是用户在实践中遇到的具体配置需求。虽然不同客户端配置方式略有差异但核心流程都是启动服务器 - 配置连接 - 重启生效。6. 概念图谱串联与实战架构设计现在让我们把LLM、Context、RAG、Agent、MCP这五个核心概念放回“血缘图谱”中看看它们是如何协同工作的。[基础能力层] | v 大语言模型(LLM) (核心引擎概率“接龙”) | | 受限于 v 上下文(Context) (工作记忆/瓶颈) | | 增强/突破 ---------------------- | | v v 检索增强生成(RAG) 智能体(Agent) (外挂知识库/长期记忆) (规划/执行/反思) | | | (提供精准知识) | (需要调用工具) --------------------- | v 模型上下文协议(MCP) (工具生态/通用接口) | v [具体工具与服务] (搜索、API、数据库...)一个完整的“超级智能体”实战架构设计假设我们要构建一个“智能研发助手”它能回答技术问题、编写代码片段、并查询内部系统状态。底层核心选择一个强大的LLM作为大脑例如GPT-4或Claude 3并清楚其上下文长度限制如128K。知识增强为公司内部的技术文档、API手册、项目Wiki建立RAG知识库。当员工询问“我们的用户服务API的鉴权方式是什么”时Agent会先通过RAG从知识库检索最新文档再将答案生成。能力封装将“执行SQL查询数据库”封装成一个MCP服务器数据库MCP。将“调用GitLab API获取项目状态”封装成另一个MCP服务器GitLab MCP。将“在代码仓库中搜索相似代码片段”也封装成MCP服务器。智能体编排使用LangGraph框架构建主Agent。它的系统提示词定义为“你是一个研发助手可以回答问题、查询系统状态和生成代码。你有以下能力1. 从知识库获取信息2. 查询数据库3. 获取项目状态4. 搜索代码。”工作流用户提问“用户ID为123的用户最近一次登录失败是什么时候可能是什么原因”Agent规划这个问题需要两步1查询数据库获取登录日志2结合知识库中的常见错误码文档分析原因。Agent执行首先它可能直接通过RAG检索“登录失败 错误码 文档”。然后调用数据库MCP服务器的工具执行SQL查询。最后将检索到的错误码文档和查询到的具体日志组合成最终提示词交给LLM生成一份分析报告给用户。在这个架构中LLM是思考中枢Context是其工作台面RAG扩展了它的知识查阅能力Agent框架赋予了它规划和执行多步任务的能力而MCP则提供了一个标准化、可插拔的方式来接入执行任务所需的各种具体工具。它们环环相扣共同将原始的“文字接龙”模型升级为了一个能够解决实际复杂问题的“超级智能体”。7. 常见问题与排查技巧实录在实际开发和集成过程中你会遇到各种各样的问题。下面是我和团队踩过的一些坑以及解决方案整理成速查表希望能帮你节省时间。问题领域典型问题/错误信息可能原因排查思路与解决方案上下文与LLM调用API Error 400: Maximum context length exceeded...提示词生成内容总令牌数超过模型限制。1.精简提示词优化系统提示移除冗余。2.压缩历史对长对话历史进行摘要而非全部发送。3.流式处理对于长文本生成采用流式输出避免一次性内容过长。4.分而治之将长文档拆分后多次询问再综合结果。RAG检索效果差答案与检索到的文档无关幻觉或检索不到相关文档。1. 文档切分不合理破坏语义。2. 嵌入模型与任务不匹配。3. 检索查询与文档表述差异大。4. 未做重排序Top1结果不准。1.评估切分检查检索到的片段是否完整表达了某个主题。2.更换嵌入模型尝试BGE、text-embedding-3等不同模型。3.查询改写/扩展用LLM将用户问题改写成更利于检索的形式。4.启用重排序在向量检索后增加一个轻量级重排序模型如BGE-reranker对Top K结果精排。Agent工具调用失败Agent无法正确选择工具或工具参数格式错误。1. 工具描述不清LLM无法理解。2. 工具参数Schema定义有歧义。3. LLM的思维链CoT输出格式与框架解析器不匹配。1.细化工具描述在描述中明确工具用途、适用场景、参数含义和示例。2.提供示例在系统提示词中给出1-2个完美的工具调用示例。3.调试输出打印LLM的完整响应检查其“思考过程”是否导向了正确的工具调用JSON。Agent陷入死循环Agent反复调用相同工具或在不同工具间来回切换无法给出最终答案。1. 任务规划不清晰缺乏终止条件。2. 工具执行结果未能满足Agent的“预期”导致其不断重试。3. 系统提示词未设定最大步数限制。1.明确规划步骤在提示词中要求Agent先列出计划再执行。2.设定终止条件例如“如果连续3次尝试仍未获得新信息则总结当前所知并停止”。3.强制步数限制在框架层面设置最大迭代次数如10步。MCP连接或调用失败MCP客户端无法发现服务器或调用工具时超时/报错。1. MCP服务器未正确启动或配置。2. 客户端配置文件路径或格式错误。3. 网络或权限问题对于SSE类服务器。4. 工具输入输出Schema不匹配。1.检查服务器日志首先确保MCP服务器进程正常运行无报错。2.验证配置使用mcp inspector等工具测试与服务器的直接连接。3.简化测试尝试用最简单的“echo”类型MCP服务器验证客户端配置是否正确。4.查阅文档仔细对照MCP服务器提供的manifest清单中的工具定义确保调用参数完全匹配。最后再分享一个小技巧当你设计一个复杂的AI应用时从最简单的链条开始验证。不要一开始就想着构建一个拥有RAG、多工具Agent和MCP的庞然大物。先确保你的核心LLM调用能工作然后加上RAG看检索是否准确再引入一个最简单的工具调用最后再用MCP标准化这个工具。每一步都充分测试和评估这样能最快定位问题所在避免在复杂系统中迷失方向。这套从“文字接龙”到“超级智能体”的演化逻辑不仅是技术组件的叠加更是一种构建可靠AI系统的方法论。
返回列表