第一部分:核心概念速览 (思维导图)

  • 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函数) ❌ 否 (仅是数据指令) ❌ 否 (是文本知识) ✅ 是 (编排调度)

大模型处流程

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐