资讯动态

LLM、Agent、Skill与MCP:构建智能应用的核心架构解析

发布时间:2026/8/13 6:03:01 来源:尧图企业网站定制
1. 项目概述为什么我们需要理清这四者的关系最近在跟几个团队聊大模型应用落地时我发现一个挺普遍的现象大家嘴里都挂着“Agent”、“MCP”、“技能”这些词但仔细一问发现每个人对这些概念的理解边界、它们之间的协作关系甚至谁包含谁都存在不小的分歧。这直接导致了沟通成本飙升——我说要建个“技能库”你理解的可能是我要封装一堆函数我说用“MCP”来管理你可能以为我要搞个全新的中间件。更麻烦的是这种概念上的模糊会直接影响技术架构的设计。比如是把业务逻辑写在Agent里还是拆成独立的SkillMCP到底管到哪一层这些问题如果前期没想清楚后期系统就会变得臃肿、难以维护。所以我觉得有必要花点时间把LLM大语言模型、Agent智能体、Skill技能和MCP模型上下文协议Model Context Protocol这四者的协同关系彻底掰扯清楚。这不仅仅是个理论问题更是一个关乎工程实践效率的实战问题。一个清晰的认知地图能帮助我们在设计AI应用时做出更合理的技术选型和架构分层避免“拿着锤子找钉子”或者“造重复轮子”的窘境。简单来说我们可以把这四者看作构建一个智能应用“大脑”的不同组成部分和协作规范。LLM是提供基础认知和推理能力的“脑细胞”Skill是让这个大脑能完成具体任务的“手和脚”或专业工具Agent是协调这些“手脑”协作、制定并执行复杂计划的“中枢神经系统”而MCP则是确保“手”Skill能够被“脑”LLM/Agent准确识别、理解和调用的“标准化接口与通信协议”。接下来我们就一层层剥开看看它们具体是什么以及如何协同工作。2. 核心概念拆解从原子到系统在深入协同关系之前我们必须先给每个角色下一个清晰、无歧义的定义。这是所有后续讨论的基石。2.1 LLM能力的源泉与思考的引擎大语言模型是这一切的起点。你可以把它理解为一个接受了海量文本训练的、具有强大模式识别、知识关联和文本生成能力的“超级大脑皮层”。它的核心价值在于通用理解与生成能理解人类用自然语言提出的问题并以连贯的文本进行回应。上下文学习能够根据对话历史上下文调整自己的回应实现多轮对话。思维链推理通过引导可以展示其推理步骤解决逻辑和数学问题。然而LLM本身是“静态”和“被动”的。它就像一个学识渊博但四肢瘫痪的学者知道很多但自己动不了手。它不知道当前时间、无法查询数据库、不能调用API、更不能操作你的电脑。它的知识有截止日期且可能产生“幻觉”编造信息。因此LLM的核心角色是“思考者”和“规划者”而非“执行者”。注意这里我们讨论的是作为能力基座的LLM API如GPT-4、Claude 3、GLM-4等而不是一个已经封装了工具调用能力的完整应用。后者通常已经是一个Agent的雏形。2.2 Skill可复用的专业化“手”与“工具”既然LLM自己动不了手我们就需要给它配备“手”。Skill技能就是这些具体化的“手”或“工具”。一个Skill本质上是一个封装好的、可独立执行特定任务的函数或服务。它的关键特征包括原子性一个Skill最好只做一件事并且把它做好。例如“查询天气”、“发送邮件”、“计算器”、“搜索数据库”。接口明确有清晰的输入和输出定义。输入通常是结构化参数如城市名、收件人、主题输出是结构化的结果如JSON格式的温度数据、发送状态。可描述性必须能用自然语言清晰地描述自己的功能、输入参数和输出格式。这份描述是给LLM“看”的让它知道在什么情况下该调用这个Skill。可复用性设计良好的Skill应该像乐高积木一样可以被不同的Agent在不同的场景中组合调用。例如一个“发送邮件”的Skill其描述可能是“通过SMTP协议发送一封电子邮件。需要参数收件人地址to、发件人地址from、邮件主题subject、正文内容body、SMTP服务器配置可选。返回发送状态成功/失败及消息ID。”2.3 Agent具备自主性的“协调中枢”与“执行者”Agent智能体是赋予LLM行动能力的“包装器”和“调度中心”。它不是一个新模型而是一个以LLM为核心集成了规划、记忆、工具使用Skill调用等模块的系统。一个典型的Agent工作流程如下接收目标用户用自然语言提出一个复杂请求如“帮我总结今天关于AI的新闻并挑选最重要的三条发邮件给团队”。规划与分解Agent内部的LLM“思考者”分析这个目标将其分解为一系列子任务①搜索今日AI新闻②总结新闻内容③筛选出最重要的三条④撰写邮件正文⑤调用发送邮件Skill。选择与调用对于每个需要动手的子任务如搜索、发邮件Agent根据Skill的描述决定调用哪个具体的Skill并生成符合该Skill接口要求的参数。执行与迭代Agent执行Skill调用获取结果并根据结果决定下一步是继续执行后续子任务还是需要调整计划比如搜索结果为空则需要重新搜索或告知用户。整合与回复将所有子任务的结果整合形成最终的自然语言回复给用户。因此Agent LLM大脑 规划/决策逻辑思维方法 Skill调用能力手脚 记忆/状态管理经验。它是真正与用户交互、负责完成端到端复杂任务的实体。2.4 MCP让“手”和“脑”说同一种语言的“协议”到这里问题来了世界上有成千上万个Skill每个Skill的描述格式、调用方式、返回格式都可能不同。我们不可能为每一个新Skill都去手动修改Agent的代码告诉它“嘿这里有个新工具它是这样用的……”这就需要MCPModel Context Protocol。MCP是由Anthropic公司提出并开源的一种标准化协议旨在解决LLM/Agent与外部工具Skill及数据源之间的连接问题。你可以把它想象成电脑的USB协议或者手机的充电协议。MCP的核心价值在于标准化发现Skill提供者Server按照MCP定义的格式向AgentClient宣告自己提供了哪些“工具”Tools和“资源”Resources。标准化描述每个Tool对应一个Skill都有统一的描述格式名称、描述、输入参数schema。标准化调用Agent通过统一的RPC远程过程调用方式来调用Tool并接收统一格式的响应。动态连接Agent可以在运行时动态地连接到一个MCP Server立即获取并使用其提供的所有Tool无需重新部署或编码。简单说MCP定义了一套“语言”让任何符合规范的Skill都能被任何支持MCP的Agent即插即用地识别和调用。它极大地降低了Skill的集成成本促进了Skill生态的繁荣。3. 协同关系深度解析从协议到智能理解了每个独立的概念我们现在把它们放到一个动态的协作系统里来看。它们的关系不是简单的层级包含而是一种松耦合、标准化的协作网络。3.1 核心关系模型一个生动的类比我们可以用一个“现代化特种作战小队”来类比LLM是小队中的“情报分析官”和“任务规划官”。他博学多才预训练知识擅长分析局势理解用户意图、拆解复杂任务规划并制定行动步骤。但他自己不直接开枪或拆弹。Skill是小队中各个领域的“特种装备”和“专家队员”。比如狙击步枪远程精确打击、爆破装置破门、无人机侦察、医疗包救援。每个装备/专家都有明确的说明书描述和操作规程接口。Agent是整个“小队的队长”。他倾听上级用户的命令然后与情报官LLM一起制定计划。计划确定后他根据步骤指挥相应的专家队员使用特定装备调用Skill去执行。他负责协调整个流程处理突发状况错误处理并最终向上级汇报结果。MCP是军队的“通用装备接口标准”和“任务简报格式”。无论来自哪个兵工厂的新装备新Skill只要符合这个接口标准就能被小队即插即用。任务简报Tool描述也采用统一格式队长和情报官一看就懂无需额外培训。在这个模型下MCP并不“包含”Skill或Agent而是定义了它们之间如何“连接”和“对话”的规则。Skill是能力的提供方Agent是能力的消费方和协调方而MCP是它们之间的“贸易通用语”和“交易市场规范”。3.2 数据流与工作流一次完整的任务执行让我们跟踪一个用户请求“帮我查一下北京明天天气如果下雨就提醒我带伞”在基于MCP的架构中的旅程用户发起请求用户向Agent如一个聊天机器人发出自然语言指令。Agent规划Agent将指令传递给其内部的LLM核心。LLM分析后生成规划“这是一个条件任务。首先需要执行‘查询天气’根据结果判断是否需要执行‘创建提醒’。”Skill发现Agent作为MCP Client已经预先连接了多个MCP Server。例如一个“天气服务Server”和一个“个人助理Server”。Agent向这些Server查询可用的Tools。Server返回列表其中包含get_weather(city: str, date: str)和create_reminder(content: str, time: str)这两个Tool并附带了标准的描述和参数格式。Skill选择与调用Agent的LLM根据规划决定首先调用get_weather。它根据Tool的描述生成正确的参数{“city”: “北京” “date”: “tomorrow”}。Agent通过MCP协议向天气服务Server发起RPC调用。天气Server执行查询返回结构化结果{“city”: “北京” “date”: “2023-10-27” “weather”: “rain” “temperature”: “15-20°C”}。结果处理与迭代Agent收到“rain”的结果。LLM核心根据初始规划中的条件如果下雨判断需要执行第二个步骤。于是它生成调用create_reminder的参数{“content”: “明天北京下雨记得带伞” “time”: “明天早上8点”}并通过MCP协议调用个人助理Server。整合回复所有步骤执行完毕后Agent的LLM核心将整个过程和结果整合成一段友好的自然语言回复给用户“已为您查询到北京明天有雨气温15-20°C。我已经创建了一个明天早上8点的提醒内容为‘明天北京下雨记得带伞’。”在整个流程中Agent是总指挥LLM是参谋Skill是执行单元而MCP是确保指挥命令调用能被各个执行单元无歧义理解的通信规程。3.3 架构优势与设计启示采用这种清晰分离、通过MCP协议连接的架构带来了显著的工程优势解耦与复用Skill的开发者和Agent的开发者可以完全独立工作。只要遵循MCP协议任何Agent都可以使用任何Skill。一个“发送邮件”的Skill可以被客服Agent、营销Agent、个人助手Agent复用。动态扩展需要增加新能力时只需部署一个新的MCP Server提供新的Skill然后让Agent连接它即可。无需修改Agent的核心代码实现真正的“热插拔”。安全与管控Skill可以运行在独立、安全受控的环境中。Agent通过标准的MCP接口调用避免了将敏感逻辑或数据直接暴露给Agent核心。权限管控可以在MCP Server层面实现。生态繁荣标准协议降低了接入门槛鼓励社区开发各种各样的Skill形成一个丰富的“能力市场”。Agent则专注于更高层次的规划、协调和用户体验。从设计角度这给我们清晰的启示Skill设计要“小而美”专注于单一功能接口设计清晰描述准确。避免建造“巨无霸”Skill。Agent设计要“专注规划”Agent的逻辑应侧重于任务分解、上下文管理、决策流控制和与用户的交互。将具体的执行逻辑委托给Skill。MCP是“连接器”在技术选型上应优先考虑支持MCP或类似标准协议如OpenAI的Function Calling也是一种事实标准的框架和工具以获得生态兼容性。4. 实战构建一个基于MCP的简易新闻摘要Agent理论说得再多不如动手搭一个。我们以构建一个“新闻摘要Agent”为例看看如何将LLM、Agent、Skill和MCP组合起来。假设我们已经有一个强大的LLM API如Claude 3我们将使用一个支持MCP的Agent框架比如LangChain的MCP集成来构建。4.1 技能准备构建两个MCP Server我们的Agent需要两个能力获取新闻和总结文本。我们将它们部署为两个独立的MCP Server。Server 1: 新闻获取 Skill (mcp-server-news)这个Server提供一个Toolfetch_news(topic: str, max_results: int)。内部实现使用一个新闻API如NewsAPI或爬虫来获取指定主题的最新新闻标题和链接。MCP暴露按照MCP的SDK将这个函数注册为一个Tool并提供清晰的描述“获取指定主题的最新新闻列表。参数topic新闻主题字符串max_results最大返回数量整数默认5。返回一个包含标题、链接、来源和发布时间的JSON数组。”Server 2: 文本摘要 Skill (mcp-server-summarize)这个Server提供一个Toolsummarize_text(text: str, max_length: int)。内部实现可以简单调用另一个LLM的摘要API或者使用本地摘要模型。MCP暴露注册Tool描述“对长文本进行摘要。参数text原始文本字符串max_length摘要最大长度整数。返回摘要后的文本字符串。”4.2 智能体构建使用LangChain与MCP集成# 伪代码展示核心逻辑 from langchain.agents import AgentExecutor, create_openai_tools_agent from langchain_openai import ChatOpenAI from langchain.mcp import MCPServer from langchain_core.prompts import ChatPromptTemplate # 1. 初始化LLM大脑 llm ChatOpenAI(modelgpt-4-turbo, temperature0) # 2. 连接MCP Server动态获取Tools手 news_server MCPServer(server_urlhttp://localhost:8080) # 新闻Server summarize_server MCPServer(server_urlhttp://localhost:8081) # 摘要Server # Agent会自动从Server拉取Tool列表 tools news_server.get_tools() summarize_server.get_tools() print(f可用工具: {[tool.name for tool in tools]}) # 输出可用工具: [fetch_news, summarize_text] # 3. 定义Agent的提示词规划逻辑 prompt ChatPromptTemplate.from_messages([ (system, 你是一个新闻助手。请根据用户需求使用可用工具来获取和总结新闻。请一步步思考。), (user, {input}) ]) # 4. 创建Agent agent create_openai_tools_agent(llm, tools, prompt) agent_executor AgentExecutor(agentagent, toolstools, verboseTrue) # 5. 运行Agent result agent_executor.invoke({input: 帮我找一下今天关于人工智能的最新进展并总结成一份简报。}) print(result[output])4.3 运行与解析当你运行这个Agent时verboseTrue会让我们看到它的思考过程思考用户需要AI的最新进展和简报。我需要先获取新闻然后总结。行动调用fetch_news参数{“topic”: “人工智能 进展” “max_results”: 5}。观察收到一个包含5条新闻的JSON列表。思考我拿到了5条新闻的原始文本或链接假设Skill也返回了内容。我需要将它们整合并总结。行动调用summarize_text参数{“text”: “[拼接5条新闻内容]” “max_length”: 500}。观察收到一段500字左右的摘要文本。最终回复将摘要整理成“简报”格式回复给用户。在这个过程中AgentLangChain框架负责管理整个流程LLMGPT-4负责每一步的“思考”和“决策”而两个具体的“脏活累活”抓新闻、做摘要则由通过MCP协议连接的独立Skill完成。任何一方的升级或替换都不会严重影响其他方你可以换用更强大的LLM可以增加一个“翻译新闻”的Skill或者把新闻源从API换成数据库都只需要修改对应的部分。5. 常见问题、误区与进阶思考在实际应用和讨论中我遇到了不少关于这四者关系的疑问和误区这里集中分享一下。5.1 常见误区澄清误区一Agent就是一个LLM加上几个函数调用。辨析这种说法只对了一半。一个“能调用函数的LLM”确实是Agent的核心但一个成熟的Agent远不止于此。它还包括记忆系统记住对话历史、用户偏好、规划与反思能力复杂任务分解、失败后调整策略、状态管理跟踪多步骤任务的进度以及与用户的交互逻辑。简单的函数调用包装只是一个起点。误区二Skill和Plugin插件、Tool工具是一回事。辨析在大多数上下文中Skill、Plugin、Tool这三个词经常混用指代的是同一个东西一个可供LLM/Agent调用的具体功能单元。细微的差别在于“Tool”更偏重单次操作如计算器“Skill”可能暗示稍复杂一些的能力组合“Plugin”则强调其可插拔的特性。在MCP的语境下它官方称之为“Tool”。我们不必纠结于名称理解其本质即可。误区三用了MCP就不需要关心Agent框架了。辨析MCP解决的是“连接”问题而Agent框架解决的是“调度”和“逻辑”问题。MCP让你能方便地“找到并使用”成千上万的Skill。但如何设计一个Agent让它能智能地、顺序地、有条件地组合调用这些Skill来完成超复杂的任务比如“规划一个包含预算、订票、天气查询的完整旅行”这仍然是Agent框架如LangChain、AutoGen、CrewAI要解决的核心问题。MCP让Agent框架如虎添翼但不能替代它。误区四所有功能都应该拆成Skill。辨析这是一个架构设计问题。原则是将那些具有明确边界、可独立测试、可能被多个Agent或场景复用的功能拆分为Skill。例如数据库查询、邮件发送、图像生成。而一些高度定制化、与特定Agent业务逻辑紧密耦合的简单操作则可以直接写在Agent内部。过度拆分会导致系统过于碎片化管理成本增加。5.2 典型问题与排查问题1Agent无法识别或错误调用Skill。排查思路检查MCP Server是否正常确认Server已启动并且能通过健康检查端点响应。检查Tool描述这是最常见的问题。确保Skill的description字段清晰、无歧义准确描述了功能、输入和输出。LLM完全依赖这个描述来做决策。模糊的描述会导致错误的调用。检查参数Schema确保输入参数的JSON Schema定义准确。例如将string类型误定义为number会导致Agent生成错误的参数。查看Agent的思考日志在开发时开启verbose模式看LLM在决定调用Tool前的“思考”内容判断是规划逻辑问题还是Tool选择问题。问题2多Skill协作时任务流混乱或陷入循环。排查思路强化系统提示词在给Agent的系统指令中明确其角色和任务边界。例如“你是一个数据分析助手请按步骤先获取数据再清洗最后分析”。设计更原子化的Skill如果一个Skill试图做太多事如“获取并分析数据”Agent可能难以驾驭。将其拆分为“获取数据”和“分析数据”两个Skill让Agent来协调。设置迭代上限在Agent执行器中设置max_iterations参数防止因逻辑错误导致无限循环。引入人工验证或确认步骤对于关键操作如发送邮件、支付让Skill返回一个需要用户或Agent确认的中间结果而不是直接执行最终动作。问题3性能瓶颈。分析性能问题可能出现在多个环节。LLM调用延迟每次Agent“思考”都需要调用LLM API这是主要延迟源。可以通过优化提示词、减少不必要的思考步骤、使用更快的模型来缓解。Skill执行时间某些Skill如爬虫、复杂计算本身执行就很慢。考虑为这些Skill设置超时或提供异步调用接口。网络开销MCPMCP调用是网络RPC会有额外开销。对于延迟极其敏感的简单Skill可以考虑将其与Agent打包部署通过本地函数调用而非MCP协议来通信。5.3 进阶思考架构的演变与未来当前的LLMAgentSkillMCP架构是一个强大的范式但它也在不断演进。Skill的智能化未来的Skill可能不再是简单的“函数”而是内嵌了小模型或规则引擎的“智能子体”。例如一个“客服工单分类Skill”内部可能就有一个微调的分类模型。Agent的专项化会出现更多为垂直领域深度优化的Agent框架它们内置了领域特定的规划模版、评估标准和Skill库。MCP生态的扩展MCP协议本身可能会扩展支持更复杂的能力交换比如Skill之间的直接调用、Skill的能力协商、动态组合等。多Agent协作一个复杂任务可能由多个专项Agent通过MCP协议协作完成。例如一个“旅行规划”任务可能涉及“信息搜集Agent”、“预算规划Agent”、“订票Agent”之间的协作它们彼此也将对方提供的服务视为一种特殊的Skill。理解LLM、Agent、Skill和MCP的关系就像是掌握了一套构建智能应用的“语法”。LLM是词汇Skill是短语Agent是造句的规则而MCP是确保大家都能读懂同一本字典的标点符号规范。只有清晰掌握了这套语法我们才能更高效、更优雅地设计出真正强大、灵活且可维护的AI应用避免在概念混淆和架构泥潭中浪费时间。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价