🔄 模块六:CUDA代码迁移与进阶

MTClaw Function Router:本地工具路由加速实战

高级·⏱ 55分钟·📅 2026-05-25

一、MTClaw 是什么?

MTClaw(OpenClaw Function Router) 是摩尔线程 2026-05-18 开源的本地工具路由代理,定位是一个 OpenAI-compatible 的 Provider Proxy。任何能配置 OpenAI base_url 的客户端(OpenClaw、Hermes、OpenCode、IDE、评测系统)都可以把 MTClaw 作为 LLM Provider 接入。仓库:MooreThreads/MTClaw。

它解决一个具体的工程问题:当智能体反复在做高频垂类动作(系统控制、文件操作、API 查询、企业内部流程)时,每一次都让大模型推理一遍是浪费的。MTClaw 在请求转发到上游 LLM 之前,先用一个本地小模型 + 工具路由判断"这个请求能不能直接走工具执行",命中工具就走快路径,没命中再透明转发到上游。

💡
和普通的"function calling"有什么区别?
普通 function calling 让上游大模型决定调用工具,请求仍然要先走一趟昂贵的大模型。MTClaw 把这个决策下沉到本地的 routing 模型(如 Qwen3-30B-A3B 不带 thinking),上游大模型只在真的需要"语言能力"时才介入。代价是引入一个本地小模型,收益是高频垂类的延迟可以下降一个数量级。

二、官方 benchmark:6.85x 加速

官方在 50 个 OpenClaw 桌面控制任务上做了 A/B(每任务 4 次重复,OpenClaw + Doubao 作为 baseline):

模式上游模型 / 路由模型Pass@1平均耗时加速比
OpenClaw + Doubao(baseline)doubao-seed-2-0-pro-26021599.0%37.97s1.00x
+ Function Router permissive上:Doubao / 路由:qwen3-30b-a3b-instruct-2507 (w/o thinking)95.5%5.54s6.85x
+ Function Router strict上:Doubao / 路由:同上100.0%7.61s4.99x
表 1:MTClaw 在 50 个 OpenClaw 桌面控制任务上的加速效果(数据来源:MTClaw 仓库 README)。

两种模式的差别在于路由置信度阈值:permissive 在路由模型给出最高加速时直接走工具路径;strict 在置信度不足时回退到上游 LLM,保证 100% Pass@1。

三、架构与组件

MTClaw 内部由四个 subagent 组成:

1
Routing subagent:本地路由模型,读最后一条用户消息,决定调用工具还是转发上游。
2
Tool execution subagents:内置工具(find / ls / cat / grep / sleep)与用户自定义 wrapper 脚本的执行器。
3
Completion check subagent:判断工具流程产出是否可以直接作为回答返回,还是需要交给上游 LLM 做"语言润色"。
4
Upstream LLM provider:通用推理与语言能力,命中工具的请求不会走到这里。

四、安装与最小配置

MTClaw 通过 pip 安装,配套提供 install 脚本一次性配置好两个 endpoint:

BASH
git clone https://github.com/MooreThreads/MTClaw.git
cd MTClaw
pip install .

# 引导式安装:会问你 routing 与 upstream 两套 endpoint
./scripts/install.sh

install 脚本要你填的 8 个配置项:

配置项含义示例
Routing model base URLOpenAI 兼容路由 endpoint(必须支持 tool calling)https://api.example.com/v1
Routing model name路由模型名qwen3-30b-a3b-instruct-2507
Routing model API key路由 endpoint 的 key${ROUTING_API_KEY}
Upstream base URL上游 LLM endpointhttps://api.openai.com/v1
Upstream API key上游 keysk-...
Upstream model name上游模型名gpt-4o
Tools base directorywrapper 脚本根目录/home/mt/tools
OpenClaw config path注册 function_router 的 openclaw.json 路径~/.openclaw/openclaw.json
表 2:MTClaw install 脚本的 8 个核心配置项。

启动 / 重启 router:

BASH
./scripts/restart.sh        # 单独重启 Function Router
./restart_all.sh            # 重启完整服务栈(Router + OpenClaw Gateway,按依赖顺序)

五、新增一个自定义工具:天气查询

MTClaw 的核心使用方式是"把高频垂类做成本地工具"。一个 wrapper 脚本只需要做三件事:从 stdin 读 JSON,往 stdout 写 JSON,用 exit code 表示成功。

5.1 定义函数:functions.jsonl

JSON
{
  "name": "get_weather",
  "description": "查询某个城市的当前天气",
  "parameters": {
    "type": "object",
    "properties": {
      "city": { "type": "string", "description": "城市名,例如 北京、上海" }
    },
    "required": ["city"]
  }
}

5.2 写 wrapper:scripts/get_weather.sh

函数名必须和脚本文件名一致:get_weather → ~/.function-router/scripts/get_weather.sh。

BASH
#!/usr/bin/env bash
set -euo pipefail

# 读 stdin JSON
INPUT=$(cat)
CITY=$(echo "$INPUT" | jq -r '.city')

# 调用一个公共天气 API(示例)
RESP=$(curl -s "https://wttr.in/${CITY}?format=j1")

# 输出 JSON 到 stdout
echo "$RESP" | jq '{city: "'"$CITY"'", temp_c: .current_condition[0].temp_C, desc: .current_condition[0].weatherDesc[0].value}'

5.3 重启生效

BASH
chmod +x ~/.function-router/scripts/get_weather.sh
./scripts/restart.sh
⚠️
wrapper 不一定要 Python
MTClaw 故意让 wrapper 协议保持极简:JSON in / JSON out / exit code。你可以用几行 bash 调 curl,也可以调 systemctl 操作 Linux 服务,更可以调企业内部的 Go/Rust/Node 二进制——不需要为了接入 MTClaw 再额外包一层 Python。这是它和很多"工具中间件"最大的不同。

六、把现有 Skill 一键转成 Function Router 工具

2026-05-21 合入主线的 PR #2 引入了 skill-to-fc converter:如果你已经有一份 script-backed skill(例如本课时所属的「摩尔线程教程网站」就是个例子),可以直接调用内置的 skill-to-fc skill 把它转成 Function Router 兼容的工具配置。

BASH
# 在你已有的 skill 目录下运行:
skill-to-fc convert ./my_skill --output ~/.function-router/

# 它会自动产出:
#   functions.jsonl 条目
#   scripts/.sh wrapper
#   并安装到 ~/.function-router/
./scripts/restart.sh

详细参数说明见仓库的 docs/skill-to-fc.md。

七、和 MUSA 软件栈的关系

MTClaw 本身是 Python,跟 GPU 没有直接绑定。但它在摩尔线程的故事里非常重要,原因是:

  • MTT AIBOOK 上的「龙虾」智能体(OpenClaw)就是用 MTClaw 做工具加速——本地路由模型 Qwen3-30B-A3B 跑在 MTT GPU 上,本质上把"端侧 GPU + 工具路由"做成了一个完整的 Agent 产品。
  • 小麦智能体的 90+ 工具调用接口底层也用了 MTClaw 的 Function Router 模式。
  • 路由模型本身可以是任何能跑 tool calling 的 OpenAI 兼容模型——你可以把它接到 vLLM-MUSA 或 SGLang-MUSA 部署的本地服务上,全栈跑在国产 GPU。

八、生产环境最佳实践

1
路由模型尽量选不带 thinking的轻量 tool-calling 模型(如 Qwen3-30B-A3B-Instruct-2507),保证路由判断本身只占 100ms 量级。
2
如果对准确率非常敏感(如金融 / 医疗),上线就用 strict 模式:100% Pass@1,仍有 4.99x 加速。
3
把 routing timeout 配成可重试(2026-05-21 合入主线的 PR #1,googs1025/feat/configurable-routing-timeout)。超时会先自动重试一次再回退上游,避免单次抖动导致整条请求走完整大模型。
4
同一个 OpenClaw config 内确保 provider id 是 function_router(OpenClaw 2026.5.18 起按字面 id 解析),否则 session 隔离会失效(详见仓库 commit f942782)。
5
通用 benchmark 不会回退:MTClaw 只拦截匹配工具的请求,其余仍透明转发——这意味着你可以放心在 OpenAI 兼容的现有客户端无侵入地接入。
✅
本课小结
MTClaw 是摩尔线程在「Agent 算力栈」的关键拼图:上层是小麦 / 龙虾这些智能体产品,底层是 MUSA GPU 与 vLLM-MUSA / SGLang-MUSA 推理引擎,中间这块「本地工具路由代理」就是 MTClaw。在系统控制类垂类上它可以打出 6.85x permissive / 4.99x strict + 100% Pass@1 的加速,且对客户端零侵入(OpenAI 兼容)。下次你要做一个高频垂类智能体时,先想想能不能把热路径下沉到 MTClaw 工具——通常这比让大模型多想几轮要快一个数量级。仓库:MooreThreads/MTClaw。