一文搞懂 AI Agent 核心支柱:从 Tools 到 MCP,从 Skills 到 Loop

发布时间:2026/8/1 20:02:04
一文搞懂 AI Agent 核心支柱:从 Tools 到 MCP,从 Skills 到 Loop 一文搞懂 AI Agent 核心支柱从 Tools 到 MCP从 Skills 到 Loop摘要2025 年是 AI Agent 的爆发年但很多开发者分不清 Function Call、MCP、Skills 和 Loop 的区别。本文将从“手”、“接口”、“手艺”和“大脑运行”四个维度结合 Python 代码与实践架构彻底拆解这四大核心概念并手把手教你如何将它们串联成一个可用的 Agent 系统。前言为什么你的 AI 总在“一本正经地胡说八道”传统的 LLM大语言模型像是一个博学的“植物人”——脑子里有无穷知识但无法触碰现实世界。它不会查实时天气不会操作数据库更不会自己写代码并运行。为了让 AI “活” 过来业界在短短两年内构建了一套完整的技术栈。这套技术栈的四个基石就是Tools工具、MCP协议、Skills技能和Loop循环。很多新手容易把它们混为一谈其实它们的职责边界非常清晰Tools解决“能干啥”原子能力MCP解决“怎么接进来”统一接口Skills解决“怎么干好”流程编排Loop解决“怎么干完”自主迭代下面我们逐一深入。一、Tools工具LLM 的“手脚”——最底层的原子能力1.1 什么是 Tools在 OpenAI 提出 Function Calling 之前想让 LLM 调用外部函数你得用繁琐的提示词工程如 ReAct 风格的文本解析。现在Tools通过标准的 JSON Schema 描述函数签名让 LLM 能够“感知”外部世界。说白了Tools 就是一个个封装好的函数Function比如get_weather(city)、search_web(query)、execute_python(code)。1.2 代码实战标准 Tools 定义Python在最新的 OpenAI SDK 或 LangChain 中Tool 的定义长这样fromtypingimportLiteralfrompydanticimportBaseModel# 1. 定义输入参数的 SchemaclassWeatherInput(BaseModel):city:strunit:Literal[celsius,fahrenheit]celsius# 2. 定义工具的具体执行逻辑defget_weather(params:WeatherInput)-str:# 模拟真实 API 调用returnf{params.city}当前气温 22°天气晴朗。# 3. 生成 Tool 描述传给 LLM 的 JSONtool_definition{type:function,function:{name:get_weather,description:获取指定城市的实时天气信息,parameters:WeatherInput.model_json_schema(),}}关键点Tools 必须是**无状态Stateless且原子性Atomic**的一个 Tool 只专注做一件事。二、MCP模型上下文协议AI 界的“USB-C 万能接口”2.1 Tools 的痛点碎片化严重假设你给 ChatGPT 写了一套基于openai格式的 Tools想迁移到 Claude 或本地开源的 Llama 上发现它们的 Tool Calling 格式完全不同有的要求 XML有的要求特定 JSON。每接一个新模型就要重写所有工具适配层——极其痛苦。2.2 MCP 的诞生MCPModel Context Protocol由 Anthropic 在 2024 年底开源。它定义了一套标准化的 Client-Server 架构MCP Server暴露工具、资源Resource和提示词Prompt比如一个“本地文件系统 Server”或“GitHub Server”。MCP ClientAI 应用如 Claude Desktop、Cursor、VS Code 插件。只要 Client 和 Server 都遵循 MCP 协议基于 JSON-RPC 2.0AI 就能动态发现并即插即用所有工具。2.3 MCP 通信流程精简版// Client 发送初始化请求发现可用工具{jsonrpc:2.0,id:1,method:tools/list,params:{}}// Server 返回可用工具列表{jsonrpc:2.0,id:1,result:{tools:[{name:read_file,description:读取本地文件,inputSchema:{type:object,properties:{path:{type:string}}}}]}}CSDN 划重点MCP 让 AI 应用从“单机写死工具”进化到了“动态插拔生态”。未来MCP Server 会像 npm 包一样丰富开发者只需要维护一个 MCP Client就能调用全世界的工具生态。三、Skills技能把“工具”变成“手艺”有了 Tools锤子、钉子和 MCP能够到任何工具箱AI 就能干好活了吗不能。因为干好一项复杂任务需要的是流程而不是孤立的 API。3.1 Tools vs SkillsTools“打开文件”、“写入代码”、“执行终端命令”。Skills“创建一个 Spring Boot 博客系统” —— 它内部封装了检查环境 - 创建项目结构 - 写入依赖文件 - 生成 Entity/Controller - 编译运行 - 若报错则修复这一整套工作流。3.2 Skills 的核心特征渐进式披露Progressive DisclosureSkills 和 Tools 最大的工程区别在于上下文占用。Tools 的定义必须始终塞进 System Prompt占满上下文窗口Context Window。Skills 采用按需加载。系统先给 LLM 一个极简的 Skill 列表只包含名称和一句话描述。当 LLM 决定调用某个 Skill 时系统才把该 Skill 的详细指令Prompt和依赖的子工具注入上下文。Skills 文件结构示例参考开源项目 anthropic/skillsmy-blog-generator/ ├── SKILL.md # 主指令定义角色、流程、约束条件 ├── scripts/ # 关联的 Python/Shell 脚本 ├── references/ # 参考文档如 API 文档、架构图 └── assets/ # 模板文件如 HTML 模板四、Loop反馈循环Agent 的“永动机”LLM 是一次性推理InferenceAgent 是循环推理Iterative Reasoning。Loop 就是 Agent 的灵魂。它模拟了人类的思考模式思考Think→ 行动Act→ 观察Observe→ 再思考Re-think。这就是著名的ReActReason Act范式。4.1 一个极简的 Agent Loop 核心代码importjsonfromtypingimportList,DictclassSimpleAgent:def__init__(self,llm,tools:List[Dict]):self.llmllm self.toolstools self.messages[]self.max_iterations10defrun(self,user_goal:str):self.messages.append({role:user,content:user_goal})forstepinrange(self.max_iterations):# 1. 思考调用 LLM 获取下一步动作responseself.llm.chat(messagesself.messages,toolsself.tools,# 传入可用工具tool_choiceauto)# 2. 判断LLM 是否想调用工具ifresponse.tool_calls:fortool_callinresponse.tool_calls:# 3. 行动执行工具tool_nametool_call.function.name tool_argsjson.loads(tool_call.function.arguments)resultself._execute_tool(tool_name,tool_args)# 4. 观察将结果喂回给 LLMself.messages.append({role:tool,tool_call_id:tool_call.id,content:result})print(f[Step{step}] 调用{tool_name}返回:{result[:50]}...)else:# 如果没有工具调用说明任务完成返回最终答案returnresponse.contentreturn达到最大迭代次数任务终止。4.2 工业级 Loop 的“六块积木”一个能上生产环境的 Loop远不止上面几行代码。它需要Automations触发器支持定时或 Webhook 自动唤醒 Loop。Worktrees隔离环境每一次新任务运行在独立的 Git Worktree 或 Docker 容器中互不污染。Sub-agents多智能体协作分解任务比如“代码编写员”负责写代码“代码审查员”负责挑错由主 Loop 协调。Memory记忆系统使用向量数据库如 Milvus或 Redis将长期记忆存储在模型外部支持跨会话回忆。五、一图流四大概念的协作关系CSDN 读者最爱为了方便大家记忆我将它们整理为一张逻辑拓扑图文字版用户输入“帮我部署一个个人网站” │ ▼ ┌───────────────────────────────────────┐ │ Agent Core (大脑运行机制 - Loop) │ ← 在这里进行 Plan→Execute→Observe └───────────────────────────────────────┘ │ 拆解任务 ▼ ┌───────────────────────────────────────┐ │ 技能层 (Skills - 流程封装) │ │ “部署网站 Skill” │ ← 渐进式加载节省 Token └───────────────────────────────────────┘ │ 调用底层基础能力 ▼ ┌───────────────────────────────────────┐ │ 协议层 (MCP - 统一接口) │ ← USB-C 接口连接万物的桥梁 └───────────────────────────────────────┘ │ │ │ │ ▼ ▼ ▼ ▼ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ 文件工具 │ │ 终端工具 │ │ 云端API │ ← 原子能力 (Tools) └──────────┘ └──────────┘ └──────────┘六、总结与最佳实践建议干货如果你是初学者请按以下顺序学习先死磕Tools熟练使用 OpenAI / DashScope 的 Function Calling这是地基。再理解MCP试着跑通 Claude Desktop 的本地 MCP Server比如 Filesystem感受“即插即用”的魅力。接着模仿Loop自己用 Python 写一个 50 行的while循环 ReAct Agent你会有茅塞顿开的感觉。最后封装Skills把你经常做的一套流程比如“周报生成器”、“代码单元测试生成器”封装成 Skill 目录结构沉淀为自己的数字资产。最后一句忠告不要把所有的逻辑都塞进 System Prompt善用 Tools 抽离计算逻辑善用 MCP 解耦外部依赖善用 Skills 管理复杂流程善用 Loop 处理不确定性。这四者配合才是未来 AI 应用开发的正确范式。 欢迎在评论区留言讨论你在接入 MCP 或封装 Skills 时遇到的坑如果本文对你有帮助请点赞收藏后续我会出一期《手写一个支持 MCP 协议的轻量级 Agent 框架》