第 14 期:赋予数字之手 — 给 Agent 接入 Tools 工具集

⏱ 预计阅读 12 分钟 更新于 2026/4/9

没有工具的 Agent 是残缺的

一个没有 Tools 的 AI Agent 就像一个只有嘴但没有手的人——它能说会道,但无法真正执行任何操作。

graph LR
    subgraph "无工具 Agent"
        Q1["用户: 15% of 8437 是多少?"] --> A1["🤖 大约是 1265.55
❌ 实际是 1265.55 but 模型可能算错"] end subgraph "有工具 Agent" Q2["用户: 15% of 8437 是多少?"] --> Think["🧠 我需要精确计算"] Think --> Calc["🔧 Calculator Tool
8437 × 0.15 = 1265.55"] Calc --> A2["🤖 精确答案: 1265.55 ✅"] end style Calc fill:#ff6d5b,stroke:#e55a4e,color:#fff

1. Tool 的工作原理 (Function Calling)

sequenceDiagram
    participant User as 👤 用户
    participant Agent as 🤖 AI Agent
    participant LLM as 🧠 GPT-4o
    participant Tool as 🔧 Calculator Tool
    
    User->>Agent: "8437 的 15% 是多少?"
    
    Agent->>LLM: 消息 + 可用工具列表
    Note over LLM: 我有以下工具可用:
1. calculator(expression)
2. wikipedia(query)
我决定用 calculator LLM-->>Agent: Tool Call: calculator("8437 * 0.15") Note over Agent: Agent 拦截 Tool Call
不是直接回答,而是工具调用请求 Agent->>Tool: 执行: 8437 * 0.15 Tool-->>Agent: 结果: 1265.55 Agent->>LLM: Tool 返回结果: 1265.55 Note over LLM: 结合计算结果生成回复 LLM-->>Agent: "8437 的 15% 是 1265.55" Agent-->>User: "8437 的 15% 是 1265.55"

📌 关键理解:LLM 自己不执行工具。它只是告诉 Agent "我想调用 calculator,参数是 8437*0.15"。真正执行计算的是 n8n 的 Tool 节点。LLM 负责"决策",Tool 负责"执行"。


2. n8n 内置 AI 工具大全

graph TB
    subgraph "n8n Agent 可用工具集"
        Agent[🤖 AI Agent]
        
        Agent --> T1[🧮 Calculator
数学精确计算] Agent --> T2[📖 Wikipedia
查询百科知识] Agent --> T3[🌐 Web Search (SerpAPI)
搜索引擎查询] Agent --> T4[💻 Code Tool
执行自定义代码] Agent --> T5[🔗 HTTP Request Tool
调用任意 API] Agent --> T6[📊 Data Tables Tool
查询/写入内置表] Agent --> T7[🔄 Workflow Tool
调用其他子工作流] Agent --> T8[🌐 MCP Client Tool
连接 MCP Server] end style Agent fill:#ff6d5b,stroke:#e55a4e,color:#fff style T7 fill:#8b5cf6,stroke:#7c3aed,color:#fff style T8 fill:#22c55e,stroke:#16a34a,color:#fff
工具 用途 配置复杂度
Calculator 精确数学运算 ⭐ 零配置
Wikipedia 知识检索 ⭐ 零配置
SerpAPI Search Google 搜索 ⭐⭐ 需 API Key
Code Tool 自定义 JS/Python 逻辑 ⭐⭐⭐ 需编写代码
HTTP Request Tool 调用任意 REST API ⭐⭐ 需配置 URL/Auth
Workflow Tool 调用另一个 n8n 工作流 ⭐⭐ 需先创建子工作流

3. 实战:多工具 Agent

graph TB
    CT[💬 Chat Trigger] --> Agent[🤖 AI Agent]
    
    subgraph "Agent 配置"
        Agent --> Model[🧠 GPT-4o]
        Agent --> Mem[💾 Memory]
        Agent --> T1[🧮 Calculator]
        Agent --> T2[📖 Wikipedia]
        Agent --> T3[🌐 SerpAPI]
    end
    
    style Agent fill:#ff6d5b,stroke:#e55a4e,color:#fff
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// 多工具场景的对话示例
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

// 用户: "SpaceX 今年发射了多少次火箭?每次成本大约多少?算一下总花费。"

// Agent 内部思考:
// 1. 这个问题需要最新信息 → 用 SerpAPI 搜索 "SpaceX 2026 launches"
// 2. 搜索结果: 约 80 次发射
// 3. 每次发射成本 → 再搜索或用 Wikipedia "Falcon 9 launch cost"
// 4. Wikipedia 结果: 约 6700 万美元/次
// 5. 计算总花费 → Calculator: 80 * 67000000
// 6. 结果: 53.6 亿美元
// 7. 综合回答给用户

// Agent 在一次对话中可能连续调用 3 个不同的工具!

4. HTTP Request Tool:打造自定义工具

// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// HTTP Request Tool 配置
// 让 Agent 能够调用你公司内部的 API
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

// Tool Name: "query_inventory"        ← Agent 看到的工具名
// Tool Description:                    ← 🔑 这段描述决定了 Agent 何时会选择此工具!
//   "查询公司产品库存数量。输入产品名称(中文),返回当前库存数和仓库位置。
//    仅在用户询问产品库存相关问题时使用此工具。"

// Method: GET
// URL: https://api.your-company.com/inventory
// Query Parameters:
//   product: {{ $fromAI('productName') }}
//   ↑ $fromAI() 是特殊函数: 让 LLM 自动从对话中提取参数值

// Authentication: Header Auth
// Header: Authorization = Bearer {{ $credentials.internalApiKey }}

// ⚠️ Tool Description 是 Agent 决策的唯一依据!
// 写得模糊 → Agent 可能在不该用时用,或该用时不用
// 写得精确 → Agent 调用准确率大幅提升

5. Tool Description 编写法则

// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// ❌ 差的 Tool Description (太模糊)
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// "查询产品信息"
// → Agent 不知道什么时候该用、能返回什么

// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// ✅ 好的 Tool Description (明确且限定)
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// "根据产品名称查询实时库存数量和仓库位置信息。
//  输入: 产品名称(中文文本)
//  输出: JSON 格式 {stock: number, warehouse: string}
//  使用场景: 仅当用户明确询问某产品的库存、剩余数量或仓库位置时使用。
//  不要用于: 查询价格、产品详情、订单状态。"

// 📏 法则:
// 1. 一句话说明工具做什么
// 2. 明确输入参数格式
// 3. 明确输出格式
// 4. 明确使用场景 (When to use)
// 5. 明确不适用场景 (When NOT to use)

Agent 多工具决策流程图

graph TB
    Input[用户输入] --> Parse[🧠 LLM 分析意图]
    
    Parse --> D1{需要精确计算?}
    D1 -->|是| Calc[🧮 Calculator]
    
    Parse --> D2{需要最新信息?}
    D2 -->|是| Search[🌐 Web Search]
    
    Parse --> D3{需要内部数据?}
    D3 -->|是| API[🔗 HTTP Request]
    
    Parse --> D4{可以直接回答?}
    D4 -->|是| Direct[直接生成文本]
    
    Calc --> Combine[🧠 综合所有结果]
    Search --> Combine
    API --> Combine
    Direct --> Combine
    
    Combine --> Reply[📤 最终回复]
    
    style Parse fill:#8b5cf6,stroke:#7c3aed,color:#fff
    style Combine fill:#8b5cf6,stroke:#7c3aed,color:#fff

下一步

在 Ep 15 中,我们将探索 System Prompt 与 Tool Description 的高级调优技巧——如何精准引导 LLM 在 10+ 个工具中做出最优选择。