Day 5|如何构建智能体的“工具路由器”?

53 阅读5分钟

上一篇,我们介绍了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 选择合适的工具。 必须遵守以下规定:

  1. 只能从已注册的工具列表中选择。
  2. 如果没有工具能满足 action,则返回 "tool": "none"。
  3. 工具参数必须符合工具的 Toolspec 规范。
  4. 严禁调用高风险工具(Risk Level = High),除非 action 明确要求。
  5. 输出必须使用 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 核心。到这一篇,你已经构建了一整套非常专业、可推广的内容链路。