上一篇,我们介绍了Planner 任务规划器,它是智能体的大脑。今天我们介绍下一个组件Router,你可以理解它就是智能体的手。为什么这么说,随我一步一步拆解,还记得智能体的底层5大模块吗?Router正是工具执行器 中的核心,Router的作用是让模型自动选择正确工具的工程方法(含 Toolspec 标准) 概括下:
Planner 决定任务怎么做,
Tool Router 决定用什么工具做。
没有 Router,智能体就没有“手”。
没有 Toolspec,Router 就没有“眼睛”。
这是智能体系统中最容易被低估,但工程上最关键的模块之一。在企业项目里,我见过 80% 的“失败智能体项目”都倒在这一步:工具没定义清楚 → 模型瞎调用 → 流程卡死 → 工程师痛苦排查。今天我会把工具路由的底层设计,从体系到代码,一次讲清楚。
🚀 1. 为什么智能体需要“工具路由器”?
这是因为大模型本身不具备「选择能力」。大模型虽然有推理能力,但是大模型不能很好的处理模糊的需求,Planner规划器虽然能根据目标分解好任务,规划好流程,确保流程能到达预期目的,中间也可以处理各种特殊情况,但是Planner本身不设计执行和落地,如果只是把一堆的工具丢给模型,但是没有告诉模型如何使用,什么情况下使用,包括他的参数,他的副作用等。再强大的智能体也只是做无用功,这在大多数智能体落地过程中经常遇到的问题,规划好的任务和动作,智能体不知道该怎么行动,或者干脆就跑偏了。所以,必须构建一个专门的路由模块 Tool Router:负责匹配「步骤 → 工具」的中间层。 这个模块越好,智能体越稳。
🚀 2. 工具路由器的职责是什么?
一个合格的工具路由器包括哪些功能呢?
✔ 1. 根据 Planner 的任务步骤选择工具
Planner 输出:
{
"action": "爬取 6 个网站",
"tool": "WebCrawler"
}
Router 需要:
- 核验工具是否存在
- 核验参数
- 选择最优工具版本
✔ 2. 自动生成工具调用参数
如数据库查询工具:
tool: QueryDB
Route 需要自动生成:
{
"table": "user",
"condition": "last_7_days"
}
✔ 3. 检查调用安全(非常关键)
避免:
- 删除数据库
- 无限循环调用
- 高风险 API
- 参数越界
- 调用未授权工具
🚀 3. 架构图:智能体中的 Tool Router
下面是现代智能体(OpenAI / CrewAI / 自研系统)使用的通用结构:
┌──────────────────────────┐
│ Task Planner │
└──────────────────────────┘
│
▼
┌──────────────────────────┐
│ Tool Router │
│ (工具匹配、参数生成、安全检查)│
└──────────────────────────┘
│
▼
┌──────────────────────────┐
│ Tool Executor │
└──────────────────────────┘
│
▼
┌──────────────────────────┐
│ State Manager │
└──────────────────────────┘
📌 一句话总结:Planner 决定“做什么”,Router 决定“用什么”,Executor 决定“怎么做”。三个模块串起来,才构成真正可执行的智能体。
🚀 4. 如何定义一个好的工具?(Toolspec 规范)
大模型不能直接理解你的 Python 工具。 你必须事先告诉它:
- 工具能干什么
- 参数是什么
- 参数类型是什么
- 什么时候使用它
- 输入输出格式
- 使用限制 这份说明就叫 Toolspec(Tool Specification)。 🎯 Toolspec 的标准结构
Tool Name: WebCrawler
Description:
从指定 URL 列表中爬取 HTML 内容并返回纯文本。适用于数据采集、新闻抓取。
Parameters:
- urls: str[](必须) 要抓取的网站链接列表
- timeout: int(可选) 超时时间(默认 5s)
Input Format:
{"urls": ["https://example.com"],"timeout": 5
}
Output Format:
{"text_contents": ["..."]
}
Risk Level:
Low
When to use:
当任务目标包含“爬取/抓取/采集”字样时使用。
当 Toolspec 清晰后,模型选择工具会变得非常稳。
🚀 5. Router 的通用Prompt
这个 Prompt 是我在多个智能体项目里复用的模板,稳定、可控。 👇 可以直接复制到你的系统里 你是 Tool Router,负责根据 Planner 给出的 action 选择合适的工具。 必须遵守以下规定:
- 只能从已注册的工具列表中选择。
- 如果没有工具能满足 action,则返回 "tool": "none"。
- 工具参数必须符合工具的 Toolspec 规范。
- 严禁调用高风险工具(Risk Level = High),除非 action 明确要求。
- 输出必须使用 JSON 格式。 工具列表如下:
{{toolspecs}}
输入为:
{"action": "...","input": "..."
}
请输出:
{"tool": "ToolName or none","arguments": { ... }
}
模型会非常稳定地执行工具路由任务。
🚀 6. 实战示例:自动日报系统的 Router
Planner 生成:
action: "提取新闻内容的摘要"
Router 输出:
{
"tool": "LLM_Summarizer",
"arguments": {
"content": "{{structured_data}}",
"max_length": 150
}
}
如果 Planner 输出一个工具不存在的动作:
action: "分析视频中的情绪"
Router 会输出:
{
"tool": "none",
"arguments": {}
}
这避免了智能体暴走。
🚀 7. 代码结构(Python Demo,可直接运行)
from openai import OpenAI
import json
client = OpenAI()
TOOL_ROUTER_PROMPT = """
(这里放 Router 模板)
"""def route_tool(action, toolspecs):
response = client.chat.completions.create(
model="gpt-4.1",
messages=[
{"role": "system","content": TOOL_ROUTER_PROMPT.replace("{{toolspecs}}", toolspecs)
},
{"role": "user","content": json.dumps({"action": action,"input": ""
})
}
]
)return json.loads(response.choices[0].message["content"])
toolspecs = """
Tool Name: WebCrawler
Description: 从 url 列表获取 HTML
Parameters: urls(str[])
"""print(route_tool("爬取新闻数据", toolspecs))
在完整智能体项目中,只需要把:
- Planner
- Router
- Executor 三个模块串起来,就能构建真正可执行、可扩展的智能体系统。
🚀 8. 关于工具的最佳实践
✔ 1. 工具越少越稳
建议先从 5~10 个工具开始,确保稳定后再扩展。
✔ 2. Toolspec 是最重要的工程文档
就像 API 文档,它是模型理解工具能力的唯一来源。
✔ 3. 为每个高风险工具设置“人类审核”
例如:
- 发邮件
- 写数据库
- 删除内容
- 推送公众号文章 必须加一层 review。
✔ 4. Router 必须支持「tool = none」
而不是强行调用。
✔ 5. Router 输出必须结构化(JSON)
这是构建自动化工作流必备条件。
Planner + Router = 智能体的“大脑 + 手” 如果你做智能体内容、产品、工程落地:
- Day 4:教读者如何让智能体“会规划”
- Day 5:教读者如何让智能体“会选择工具” 加起来,才是一个真正的 Agent 核心。到这一篇,你已经构建了一整套非常专业、可推广的内容链路。