← 返回信息流
技术博客Hugging Face Blog·2026/6/3

Reachy Mini新增MCP工具支持

原标题:Adding MCP Tools to Reachy Mini

速览

该博客介绍如何在Reachy Mini机器人上集成MCP(Model Context Protocol)工具。MCP让机器人能通过自然语言调用外部服务,如搜索和API。这次更新显著提升了Reachy Mini的自主任务执行能力。它使开发者更易为机器人添加智能行为,推动AI与机器人融合。

AI 深度解读

背景

Reachy Mini 是一款由 Pollen Robotics 开发的桌面机器人,具备对话、表情、头部运动等交互能力。其核心对话应用(reachy-mini-conversation-app)内置了多种工具(tools),允许大语言模型在对话过程中调用这些工具来驱动机器人的物理行为,例如播放情绪动画、转动头部、启用摄像头等。然而,这些工具最初全部是本地 Python 代码,与机器人本身紧耦合,导致工具的分发、更新和迭代成本较高——分享一个工具需要传递 Python 文件,更新则需要重新发送文件,改动工具甚至需要修改整个应用。为了解决这些问题,团队引入了远程工具(remote tools)机制,基于 Hugging Face Spaces 和 MCP(Model Context Protocol)协议,让开发者可以像安装插件一样为机器人添加搜索、天气等外部能力,同时保持本地核心工具的安全与稳定。

核心内容

添加远程工具的基本流程

要为一个 Reachy Mini 实例添加远程工具,只需一条命令:

reachy-mini-conversation-app tool-spaces add pollen-robotics/reachy-mini-weather-tool

添加后正常启动应用:

reachy-mini-conversation-app

之后用户可以直接提问,例如:“What's the weather in Paris today?”,机器人便能在对话中调用天气工具并返回结果。

工具与配置文件机制

机器人内部定义了一系列工具(tool),每个工具有一个名称和简短描述。模型在对话时读取这些信息,判断何时调用哪个工具。传统上,所有工具都在应用内本地运行,主要涉及机器人的物理控制,例如:

  • dance / stop_dance
  • play_emotion / stop_emotion
  • camera
  • head_tracking / move_head
  • idle_do_nothing

这些工具默认全部启用,但实际哪些可用由 profile(配置文件)控制。每个 profile 是一个文件夹,包含两个关键文件:

  • instructions.txt:模型的 prompt 指令,指导它如何使用工具。
  • tools.txt:列出当前 profile 中启用的工具名称(一行一个)。不在列表中的工具,模型无法调用。

用户也可以编写自定义本地工具:在 profile 或 external_tools/ 目录下添加 Python 文件,定义名称和描述,然后在 tools.txt 中列出即可。

远程工具的引入

远程工具作为第三种工具类型加入,与内置工具和自定义本地工具并列。它适合那些无状态、独立于机器人硬件的功能,如网页搜索、天气查询、信息检索等。其优势在于:

  • 可以发布在公共 Hugging Face Spaces 上,易于分享和复用。
  • 更新只需更新 Space,无需改动机器人应用。
  • 功能与机器人本体解耦,迭代更灵活。

团队首先发布了两个 canary(金丝雀)测试工具,用于验证整个流程:

  • pollen-robotics/reachy-mini-search-tool:网页搜索工具
  • pollen-robotics/reachy-mini-weather-tool:天气工具

要同时启用两者,只需依次添加两个 Space,并在同一个 profile 中配置它们的 tools.txt。例如:

reachy-mini-conversation-app tool-spaces add pollen-robotics/reachy-mini-search-tool
reachy-mini-conversation-app tool-spaces add pollen-robotics/reachy-mini-weather-tool

远程工具的安装与管理命令

完整的命令列表:

| 命令 | 说明 | |------|------| | add <owner/space-name> | 验证 Space、探测 MCP 端点、发现工具,并默认将工具 ID 追加到当前活动 profile 的 tools.txt | | add <owner/space-name> --profile <NAME> | 添加并启用到指定 profile | | add <owner/space-name> --install-only | 仅安装,不自动启用(不修改 tools.txt) | | list | 列出已安装的 Space | | remove <owner/space-name> | 移除已安装的 Space |

其中,add 操作会验证 Space 在 Hugging Face Hub 上是否存在,探测其 MCP 端点,发现它所提供的工具列表。默认将工具 ID 追加到活动 profile 的 tools.txt(活动 profile 默认为 default,除非设置了环境变量 REACHY_MINI_CUSTOM_PROFILE)。使用 --install-only 可以跳过自动启用步骤。

工具启用与命名空间

tools.txt 是门卫(gatekeeper):远程工具只有在其 ID 出现在 profile 的 tools.txt 中时才会被激活,与内置工具并列。已安装的 Space 源信息持久化在以下位置:

  • 托管应用模式:installed_tool_spaces.json
  • 终端模式:external_content/installed_tool_spaces.json

每个安装的 Space 会获得一个本地别名,由它的 slug 转换而来:连字符、点、斜杠统一替换为下划线。例如:

  • pollen-robotics/reachy-mini-search-toolpollen_robotics_reachy_mini_search_tool

远程工具的名称会使用双下划线命名空间,避免与内置工具冲突:

  • pollen_robotics_reachy_mini_search_tool__search_web
  • pollen_robotics_reachy_mini_weather_tool__get_day_brief

实现中还尽可能去除冗余的 Space 名前缀,使远程工具名称更简洁;若去前缀后与同一 Space 的其他工具名称冲突,则回退到完整命名空间形式。

此外,注册层面有重复安全性检查:Tool.name 在整个合并后的工具集合中必须唯一。如果两个来源声明了相同的名称,应用会快速报错失败。

金丝雀 profiles 示例

为了隔离 MCP 实验与完整具身工具集,团队创建了两个金丝雀 profile。

canary_web_search:保留少量表达工具(情绪、头部运动),同时增加网页搜索工具。

# profiles/canary_web_search/tools.txt
play_emotion
stop_emotion
idle_do_nothing
move_head
pollen_robotics_reachy_mini_search_tool__search_web

canary_web_search_weather:在搜索基础上增加天气工具。

# profiles/canary_web_search_weather/tools.txt
play_emotion
stop_emotion
idle_do_nothing
move_head
pollen_robotics_reachy_mini_search_tool__search_web
pollen_robotics_reachy_mini_weather_tool__get_day_brief

这样,Reachy Mini 在保留表情和动作表达能力的同时,可以回答来自网络的实时问题。

Prompts 对工具使用的影响

模型如何调用工具,很大程度上取决于 profile 中的 instructions.txt。在搜索和天气同时可用时,面对一个组合问题,例如:

Should I bring a jacket in Bordeaux today, and is there anything major happening downtown tonight?

模型至少有三种可能的调用顺序:先天气再搜索、先搜索再天气、或者同一轮同时调用。如果 prompt 写得太模糊,模型可能会串行调用两个工具,增加不必要的延迟。因此,金丝雀 profile 的 prompt 本身也成为了功能的一部分,而不仅仅是偶然的配置。

canary_web_search 的 instructions.txt 核心规则示例(翻译后大意):

## CANARY WEB SEARCH RULES
你有一个用于当前网络信息的远程工具。
当用户询问最新的事实、新闻、实时可用性或任何可能最近变化的信息时,请使用它。
当搜索结果已经回答了问题,直接用平实的语言回答。
先给出答案,不要过多描述工具调用过程。
对于可能需要一点时间的远程查询,你可以给出一个非常简短的英文确认,例如“Let me check that and I'll be right back”,然后继续。
除非用户明确要求其他语言,否则请用英文回答。
如果结果片段不完整或含糊,简要说明不确定性。
只有链接有额外价值或用户要求来源时才提及链接。
保持回答简短,像语音助手朗读的语气。通常一两句话就足够。跳过前言、列表、标题和填充语。只给用户需要的直接事实或答案。

**canary_web_search

查看原文 →huggingface.co