Agent——tool,function calling,skill,mcp
第一部分:核心概念速览 (思维导图)
-
Agent (智能体) = 大脑 (LLM) + 手脚 (Tools) + 计划 (Planning) + 记忆 (Memory)。它是自主决策与执行的主体。
-
Tool (工具) = 具体的手脚。是单一功能的API(如查天气、发邮件)。
-
Function Calling (函数调用) = 标准指令协议。是LLM将自然语言“翻译”成结构化机器指令(JSON)的底层机制。
-
Skill (技能) = 专家工作手册 (SOP)。是“工具+调用逻辑+领域知识”的高层封装(如
售后处理技能)。 -
MCP (模型上下文协议) = 万能插座 (USB-C)。是统一工具接入的开放标准,旨在解决“定制线缆”的麻烦。
第二部分:逐层代码示例 (Python 伪代码/标准格式)
以下代码示例,建议你在笔记中按“定义 -> 调用 -> 执行”的逻辑来记忆。
1. Tool (工具定义)
笔记要点:本质是一个普通的Python函数,通常需要附带一个描述其功能的 schema (蓝图),以便LLM理解。
# 1. 定义工具本体 (业务逻辑)
def get_weather(city: str, unit: str = "celsius") -> dict:
"""实际调用的API接口"""
# 模拟调用天气API
return {"city": city, "temp": 25, "unit": unit}
# 2. 定义工具的JSON Schema (给LLM看的说明书)
weather_tool_schema = {
"type": "function",
"function": {
"name": "get_weather",
"description": "获取指定城市的当前天气温度",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名称,如 Beijing"},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
},
"required": ["city"]
}
}
}
2. Function Calling (底层调用机制)
笔记要点:这是LLM服务商(如OpenAI)提供的API能力。重点在于请求(传入工具蓝图)和响应(返回调用指令),模型本身不执行代码。
import json
# 模拟发送给GPT的对话
messages = [{"role": "user", "content": "北京现在多少度?"}]
# 1. 发起请求 (携带工具蓝图)
# response = openai.chat.completions.create( model="gpt-4", messages=messages, tools=[weather_tool_schema] )
# 2. 模型返回的指令 (Function Call)
# 注意:此时模型只生成了指令,并没有真正调用Python函数!
mock_llm_response = {
"role": "assistant",
"content": None,
"tool_calls": [{
"id": "call_123",
"function": {
"name": "get_weather",
"arguments": json.dumps({"city": "Beijing"}) # 标准JSON字符串
}
}]
}
# 3. 开发者手动解析指令,并执行本地函数
tool_call = mock_llm_response["tool_calls"][0]
func_name = tool_call["function"]["name"]
func_args = json.loads(tool_call["function"]["arguments"])
# 4. 映射并执行
if func_name == "get_weather":
result = get_weather(**func_args) # 真正执行python函数
print(f"工具执行结果: {result}")
# 输出: 工具执行结果: {'city': 'Beijing', 'temp': 25, 'unit': 'celsius'}
# 5. (可选) 将result再次发给LLM,让它生成自然语言回复:“北京现在25摄氏度”
3. Skill (技能/专家手册)
笔记要点:Skill 不限定编程语言,通常表现为一个文件夹结构。核心是 SKILL.md 文件,它像“提示词模板”一样注入到系统指令中,指导Agent在特定场景下如何使用工具。
目录结构示例:
/weather-expert-skill/
├── SKILL.md # 核心指令手册
└── reference.py # (可选) 辅助脚本
SKILL.md 文件内容 (Markdown格式):
markdown
---
name: weather-expert
description: 当用户询问天气时,必须使用此技能。优先返回摄氏度。
---
# 天气专家技能指南
1. **触发条件**:只要用户提到“天气”、“温度”、“冷不冷”,立即调用 `get_weather` 工具。
2. **参数处理**:
- 如果用户说“我这里”,默认获取 `Beijing`。
- 单位统一使用 `celsius`。
3. **回复模板**:获取结果后,必须说“🌡️ 根据专家系统监测,[城市] 当前为 [温度]°C”。
加载逻辑(伪代码):当Agent识别到天气意图时,系统自动将上述 SKILL.md 的内容拼接到System Prompt中,从而让模型严格遵循该工作流。
4. Agent (智能体执行循环)
笔记要点:Agent不止调用一次API,而是包含 “思考 -> 行动 -> 观察” (ReAct) 的循环,直到任务完成。
# 一个极简的Agent ReAct循环骨架
class SimpleAgent:
def __init__(self, llm, available_tools):
self.llm = llm
self.tools = {tool["function"]["name"]: tool for tool in available_tools}
self.messages = []
def run(self, user_query):
self.messages.append({"role": "user", "content": user_query})
# 最多循环5次,防止死循环
for _ in range(5):
# 1. 大脑思考 (请求LLM)
response = self.llm.chat(self.messages, tools=self.tools.values())
# 2. 如果没有调用工具,直接返回结果
if not response.tool_calls:
return response.content
# 3. 执行工具 (行动)
for tool_call in response.tool_calls:
func = self.tools[tool_call.function.name]
result = func(**json.loads(tool_call.function.arguments))
# 4. 观察结果 (将结果喂回给LLM)
self.messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": str(result)
})
return "任务执行超时"
# 模拟运行
# agent = SimpleAgent(openai_client, [weather_tool_schema])
# print(agent.run("北京和上海哪个更热?"))
# 流程: 查北京(25°) -> 查上海(28°) -> LLM总结: "上海更热"
5. MCP (模型上下文协议) — 连接标准
笔记要点:MCP改变了工具接入方式。以前需要写死代码if func_name == "xxx"(左边),现在遵循MCP标准的工具会自动挂在统一的 Server 下,通过JSON-RPC标准通信(右边)。
MCP 工具定义示例 (标准格式):
// MCP Server 返回的工具列表标准格式
{
"jsonrpc": "2.0",
"method": "tools/list",
"result": {
"tools": [
{
"name": "get_weather",
"description": "获取天气",
"inputSchema": { /* 标准JSON Schema */ }
}
]
}
}
核心区别:MCP统一了工具发现的协议,Agent客户端无需预置工具列表,只需连接MCP Server即可动态获取所有可用工具。
第三部分:关键区别速查表
| 对比项 | Tool | Function Calling | Skill | Agent |
|---|---|---|---|---|
| 问自己 | 有什么能力? | 怎么下达指令? | 怎么做最专业? | 谁来统筹全局? |
| 谁产生的 | 开发者写代码 | LLM API生成指令 | 开发者写提示词/手册 | 系统运行时动态 |
| 包含内容 | 纯逻辑代码 | JSON参数 | Markdown文本 + 脚本 | 循环 + 状态管理 |
| 是否可执行 | ✅ 是 (Python函数) | ❌ 否 (仅是数据指令) | ❌ 否 (是文本知识) | ✅ 是 (编排调度) |
大模型处流程

更多推荐



所有评论(0)