Reachy Mini 對話應用程式現在可以透過 MCP 呼叫託管於公開 Hugging Face Spaces 中的工具。您無需編輯應用程式,只需從 Hub 新增一個 Space,即可為您的機器人賦予新能力,例如查詢天氣或搜尋網路。這些工具本身在 Space 中運行,因此無需將任何程式碼下載到您的機器上。您也可以發布自己的工具供他人使用。
新增工具只需一個指令:
reachy-mini-conversation-app tool-spaces add pollen-robotics/reachy-mini-weather-tool
然後像往常一樣啟動應用程式:
reachy-mini-conversation-app
現在您只需提問:
今天巴黎天氣如何?
接下來,我們將探討工具的定義、設定檔如何控制機器人可使用的功能,以及遠端路徑目前的限制。
內建工具
當您與機器人對話時,您獲得的不僅僅是語音回應,而是一個能對話語做出反應的系統:機器人可以在適用的情況下移動並進行非語言回應。我們在此想聚焦的是實現這些功能的工具。工具是模型在對話期間可以執行的一種操作:例如表達情感、移動頭部、透過攝影機觀察。
每個工具都有一個名稱和簡短描述。模型會讀取這些資訊,判斷何時使用該工具,然後呼叫它並利用其回傳的結果。目前,所有工具都是本地的,並隨應用程式一起發布,其中大部分都與機器人的身體功能相關:
工具
功能描述
move_head
安排頭部姿勢變更
dance / stop_dance
播放或清除舞蹈庫中的舞蹈
play_emotion / stop_emotion
播放或清除錄製的情感片段
head_tracking
切換頭部追蹤偏移
camera
捕捉畫面並分析
idle_do_nothing
在閒置回合明確保持閒置
設定檔如何控制工具
程式碼中的工具必須在設定檔中啟用後才能使用。設定檔是一個包含兩個重要檔案的資料夾:instructions.txt(提示詞)和 tools.txt(已啟用的工具)。預設設定檔會啟用所有工具:
profiles/default/tools.txt
dance
stop_dance
play_emotion
stop_emotion
camera
idle_do_nothing
head_tracking
move_head
如果某個名稱不在 tools.txt 中,模型就無法呼叫它。您也可以編寫自己的工具:將 Python 檔案新增到設定檔(或 external_tools/),給它一個名稱和描述,並將該名稱列在 tools.txt 中。目前有內建工具和自訂本地工具,而 tools.txt 決定哪些工具是活躍的。這對於機器人的身體功能運作良好,並能保持核心的信任機制精簡。
本地工具的限制
這裡的限制是每個工具都必須是本地的 Python 程式碼。對於 move_head 或 play_emotion 來說,這是正確的,因為它們與硬體溝通並屬於應用程式的一部分。但許多實用的功能與身體無關,例如網路搜尋、天氣查詢或資料查詢。對於這些功能,將所有內容都保留在本地會產生許多不便:
分享工具意味著將您的 Python 檔案交給他人
更新工具意味著再次發送這些檔案
更改工具意味著編輯應用程式,即使該功能實際上與應用程式是分離的
從 Spaces 呼叫工具
遠端工具新增了第三種類型,與您已有的內建工具和自訂本地工具並存,用於更容易獨立發布、分享和更新的功能:
內建機器人工具保持本地且受信任
可分享的遠端工具可以託管在公開的 Hugging Face Spaces 中
您仍然可以使用 external_tools/ 中的自訂一次性工具
這非常適合無狀態功能,例如搜尋、天氣和查詢:任何您想在不觸及應用程式本身的情況下進行迭代的功能。由於任何人都可以發布相容的 Space,因此可以輕鬆分享工具並在彼此的工作基礎上進行建構。
我們從兩個測試工具(canary tools)開始,這些小型測試工具用於驗證新流程:
pollen-robotics/reachy-mini-search-tool
pollen-robotics/reachy-mini-weather-tool
它們足以測試整個功能:從 Hub 安裝、發現遠端工具、依設定檔啟用它們,並讓即時後端像呼叫內建工具一樣呼叫它們。若要同時使用兩者,請在同一個設定檔中新增每個 Space 及其工具堆疊:
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
現在機器人可以在同一個對話中搜尋網路和查詢天氣,這正是下方 canary_web_search_weather 設定檔所實現的功能。
安裝、列出、移除
安裝 + 在活躍設定檔中啟用
reachy-mini-conversation-app tool-spaces add <owner/space-name>
在特定設定檔中啟用
reachy-mini-conversation-app tool-spaces add <owner/space-name> --profile <NAME>
僅安裝不啟用
reachy-mini-conversation-app tool-spaces add <owner/space-name> --install-only
列出已安裝的 Space
reachy-mini-conversation-app tool-spaces list
移除已安裝的 Space
reachy-mini-conversation-app tool-spaces remove <owner/space-name>
add 指令會驗證 Hub 上的 Space、探測 MCP 端點、發現其工具,並預設將工具 ID 附加到活躍設定檔的 tools.txt 中。除非您已設定 REACHY_MINI_CUSTOM_PROFILE,否則活躍設定檔為 default。使用 --install-only 可跳過此步驟。
tools.txt 是守門員:遠端工具只有在其 ID 出現在設定檔的 tools.txt 中,並與您想要的任何內建工具並列時,才會處於活躍狀態。
清單儲存位置
已安裝的來源會儲存在:
在受管理應用程式模式下為 installed_tool_spaces.json
在終端機模式下為 external_content/installed_tool_spaces.json
工具命名
每個已安裝的 Space 都會從其 slug 衍生出一個本地別名,其中連字號、點和斜線會轉換為底線:
pollen-robotics/reachy-mini-search-tool → pollen_robotics_reachy_mini_search_tool
遠端工具隨後會以雙底線進行命名空間化:
pollen_robotics_reachy_mini_search_tool__search_web
pollen_robotics_reachy_mini_weather_tool__get_day_brief
這可以防止遠端工具名稱與內建工具名稱衝突,並允許多個 Space 在同一個設定檔中並存。在可能的情況下,實作也會移除冗餘的 Space 名稱前綴,使冗長的遠端工具名稱變成更簡潔的本地 ID。如果移除前綴會導致來自同一個 Space 的兩個工具發生衝突,程式碼會回退到完整的命名空間化名稱。
在註冊表層級也有重複安全檢查:Tool.name 的值在整個合併工具集中必須是唯一的。如果兩個來源聲稱相同的名稱,應用程式會快速失敗。
設定檔範例
為了這項工作,我們創建了兩個專注的測試設定檔,以將 MCP 實驗與完整的實體工具集隔離開來。第一個設定檔保留了一些表達性工具(情感、頭部移動)並新增了網路搜尋功能:
profiles/canary_web_search/tools.txt
play_emotion
stop_emotion
idle_do_nothing
move_head
pollen_robotics_reachy_mini_search_tool__search_web
第二個設定檔與第一個相同,但額外增加了天氣工具和搜尋功能:
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 仍然可以在回答來自網路的即時問題時,同時做出富有表現力的反應。
提示詞為何重要
遠端工具的底層機制將工具整合到模型中。而提示詞則決定了模型如何使用這些工具。這在結合搜尋和天氣的測試中尤為明顯。一個像「我今天在波爾多需要帶外套嗎?今晚市中心有什麼大事發生嗎?」這樣的複合問題,至少可以透過三種方式處理:先天氣後搜尋、先搜尋後天氣,或在同一個回合中同時處理。如果提示詞模糊不清,模型會將呼叫序列化,造成不必要的延遲。因此,這些測試提示詞成為了功能的一部分,而不僅僅是附帶的配置。
canary_web_search/instructions.txt
[預設提示詞]
測試網路搜尋規則
您有一個用於查詢最新網路資訊的遠端工具。當使用者詢問最新事實、新聞、即時可用性或任何近期可能已更改的資訊時,請使用它。
當搜尋結果已回答問題時,請直接以簡潔的語言回答。以答案開頭,而不是工具的冗餘對話。
對於可能需要一些時間的遠端查詢,您可以給出一個非常簡短的英文確認,例如「Let me check that and I'll be right back」,然後繼續。
除非使用者明確要求其他語言,否則請以英文回答。
如果結果片段不完整或模糊,請簡要提及不確定性。
僅在連結增加價值或使用者要求來源時才提及連結。
保持回應簡短且口語化,如同語音助理朗讀一般。一到兩句話通常足夠。跳過前言、列表、標題和填充詞。只提供使用者需要的事實或直接答案。
canary_web_search_weather/instructions.txt
[預設提示詞]
測試搜尋與天氣規則
您有兩個遠端工具:
- 一個天氣簡報工具,用於提供某地點的簡潔日間天氣資訊
- 一個網路搜尋工具,用於更廣泛的即時網路資訊
使用天氣工具查詢今日狀況、溫度、降雨機率、日出、日落,或簡單的建議,例如是否需要帶外套。使用網路搜尋查詢新聞、活動、營業時間、旅遊資訊、嚴重警報或更廣泛的即時背景資訊。
當使用者的問題混合了天氣部分和即時資訊部分(例如:「我今天在波爾多需要帶外套嗎?今晚市中心有什麼大事發生嗎?」),請在同一個回合中同時呼叫這兩個工具。除非需要天氣結果來縮小搜尋範圍,否則不要等待一個結果後才開始另一個。
然後將結果合併成一個簡短的答案。先涵蓋天氣部分,然後是活動或新聞部分,以簡潔連貫的句子呈現。不要標記各部分或提及哪個工具提供了哪部分資訊。
當使用者詢問活動、新聞或正在發生的事情時,請從搜尋結果中給出實際答案:提及具體活動、地點或頭條新聞。不要告訴使用者去查看網站、訪問列表網站或自行查詢。如果搜尋沒有具體結果,請明確說明您沒有找到任何值得注意的活動,而不是將他們導向其他地方。
對於可能需要一些時間的遠端查詢,您可以給出一個非常簡短的英文確認,例如「Let me check that and I'll be right back」,然後繼續。
除非使用者明確要求其他語言,否則請以英文回答。
除非使用者詢問,否則不要談論工具的使用方式。
保持回應簡短且口語化,如同語音助理朗讀一般。一到兩句話通常足夠。跳過前言、列表、標題和填充詞。只提供使用者需要的事實或直接答案。
目前支援與不支援的功能
功能
支援
透過 slug 安裝公開、MCP 相容的 Gradio Spaces(標準 /gradio_api/mcp/ 端點)
✅
同時支援多個 Space
✅
透過 tools.txt 啟用各設定檔
✅
命名空間化的遠端工具 ID
✅
後端無關的註冊(OpenAI、Gemini、Hugging Face)
✅
無任意程式碼下載到本地應用程式
✅
私有或需驗證的 Space
❌
非 Gradio Space
❌
任意原始 MCP URL 或非 Hugging Face 的 MCP 伺服器
❌
保證平行工具編排
❌
有兩點值得注意。首先,Space 必須實際表現得像一個 MCP 伺服器;如果工具發現失敗,安裝也會失敗。其次,提示詞指令可以鼓勵平行呼叫,但無法保證它們。如果確定性編排對於某個使用案例很重要,那麼該邏輯應從提示詞移至程式碼中。
發布工具 Space 的技巧
如果您希望他人使用您的工具,請將其發布為一個公開的 Gradio Space,並公開標準的 MCP 端點。



