Needle:把工具調用 Agent 塞進手機

Needle:把工具調用 Agent 塞進手機

📌 本文重點

  • Needle 是專門負責工具選擇與參數填充的小型中控模型
  • 能在手機級硬體離線、高吞吐運行,降低雲端大模型成本
  • 最適合當工具路由器 / 前置規劃器,輸出穩定 JSON 給其他系統

Needle 就是一顆專門幫大模型「只負責選工具、組參數、吐 JSON」的超小中控腦,讓工具調用 Agent 能在手機級硬體離線或低延遲運作。

原始專案在 GitHub:https://github.com/cactus-compute/needle


核心功能:專心當「工具路由中樞」的 26M 模型

1. 26M 參數 + 純 Attention:為工具調用瘦身

Needle 的設計很直接:

  • 只有約 2600 萬參數(26M),比動輒數十億參數的聊天模型小一到兩個數量級。
  • 結構是 Simple Attention Network:只有 attention + gating,沒有 MLP/FFN 層。
  • 目標任務只有一件事:
  • 讀取指令 + 工具列表描述
  • 選擇要用哪個工具(或多個)
  • 從指令中抽出參數
  • 輸出工具調用 JSON

💡 關鍵: 只有約 2600 萬參數的 Needle,能在極小成本下專門負責工具路由與參數抽取,是取代通用大模型做 function calling 決策的關鍵。

這代表你的行動步驟是:

  • 如果你現在是用 GPT / Gemini / Claude 來做工具決策(例如 function calling),可以把「決定用什麼工具」這一步改交給 Needle,減少大模型 token 消耗與延遲。

2. 專門為工具調用預訓與微調

Needle 的訓練重點不是聊天對話,而是「工具使用」:

  • 先在 200 億 token 上預訓練語言能力。
  • 再用約 20 億條合成函數調用資料微調,來源是模擬 Gemini style 工具(例如鬧鐘、導航、日曆、筆記等)。

💡 關鍵: 針對 20 億條函數調用資料微調,讓 Needle 在工具選擇與參數解析上比同尺寸聊天模型穩定得多。

實際上,它不負責長篇推理,而是非常擅長:

  • 從口語指令中抓出結構化欄位(時間、地點、標題…)。
  • 在多個工具之間做正確匹配。
  • 輸出符合 schema 的 JSON 給你直接丟進 API。

行動建議:

  • 如果你已經有一組工具 schema(例如 OpenAPI、function calling 定義),可以直接拿來給 Needle,讓它幫你產生調用 payload,再由你自己的程式實際發 API。

3. 手機級硬體也能跑的高吞吐

作者實測在「消費級裝置」可達:

  • 6000 tok/s prefill
  • 1200 tok/s decode

💡 關鍵: 在一般消費級裝置上就能達到 6000 tok/s prefill、1200 tok/s decode,讓 Needle 可以長駐於手機與邊緣設備當本地 Agent 大腦。

翻成白話:

  • 放在中階手機、平板、開發板(如樹莓派級別 SoC)上,當離線工具路由器是可行的。
  • 可以把 Needle 當作 永遠常駐的本地 Agent 大腦,大模型只在真正需要複雜推理/生成時才被叫起。

行動建議:

  • 如果你正在做行動 App 或智慧硬體(耳機、車機、家電),可以先用 Laptop 上測試 Needle 的工具選擇邏輯,再評估移植到裝置端做本地推理。

適合誰用:三種典型場景

1. 行動裝置上的離線 / 低延遲 Agent

典型案例:

  • 「早上 7 點幫我叫醒,順便播固定歌單」→ Needle 決定:set_alarm + play_playlist
  • 「開車回家,避開高速公路」→ Needle 決定:navigate,並填好目的地與偏好
  • 「幫我記一條:明天 meeting 要問預算」→ Needle 決定:create_note,抽出時間與內容

做法:

  • 語音 → 本地 ASR(或雲端 Transcription)
  • 文字指令 + 工具列表 → Needle → 工具 JSON
  • 裝置端程式依 JSON 實際調起鬧鐘、導航、筆記 App

適合:行動 App 團隊、智慧手錶 / 車機 / AR 眼鏡、想要弱網路或離線也能用的指令助手

2. 雲端大模型前面加一層「本地工具路由器」

你可能遇過這種成本問題:

  • 每個使用者點一個按鈕,就丟完整上下文給 GPT 讓它幫你:
  • 看要不要查資料庫
  • 看要不要 call search API
  • 看要不要調 CRM
  • 結果大部分情況都只是在查一個欄位,卻要跑一整輪大模型推理。

用 Needle 可以:

  • 由 Needle 先判斷:這次是否需要工具?用哪個?
  • 只有當需要長推理 / 文本生成時,才叫雲端 LLM

這樣能直接對應到多代理系統常被提到的「orchestration tax」問題:減少不必要的 LLM orchestration 回合數。

適合:SaaS 後端、API 產品、任何大量使用 function calling 的服務,希望降成本 + 降延遲

3. MCP / Function Calling 之前的一層「前置規劃器」

如果你已經在用:

  • OpenAI / Gemini / ClaudeTool Use / Function Calling
  • 或是某種 MCP(Multi-Channel Prompting 或 Model Context Protocol)架構

Needle 可以扮演:

  • 用戶輸入 → Needle 選擇:
  • 要走哪一條 MCP channel
  • 要用哪個 Function / Tool
  • 再把整理好的工具調用意圖,交給聊天模型做:
  • 實際回應文案
  • 或進一步分解子任務

差別在於:

  • 一般微型聊天模型:
  • 會嘗試「理解+回答+決定工具」,但在複雜工具 schema 上容易出錯或 hallucinate。
  • Needle:
  • 不負責聊天,只專注在「選工具+填參數+吐 JSON」。

適合:已經有多工具、多 Agent 架構的團隊,需要一個可控、可本地跑的規劃器 / 路由器


Needle vs 一般微型聊天模型

名稱 核心功能 免費方案 適合誰
Needle 工具選擇+參數抽取+輸出 JSON 完全開源,自架 行動 App、硬體端、本地 Agent
微型聊天模型 閒聊、簡單問答 多數可免費測試 想要基本對話、不重工具調用的人

關鍵差異:

  • Needle 的輸出預期是結構化工具調用,不是自然語言回答。
  • 在工具 schema 清楚的情況下,Needle 通常比同尺寸聊天模型更穩定地填參數、遵守格式。

行動建議:

  • 若你只需要「會聊天」:選一般微型聊天模型。
  • 若你需要「穩定地依 schema 呼叫工具」:可以試 Needle 當前置規劃器,再用大模型生成回覆文案。

怎麼開始:從 clone Repo 到跑出第一個工具調用

1. 抓下專案與模型

# 1. clone repo
git clone https://github.com/cactus-compute/needle.git
cd needle

# 2. 建議先建立虛擬環境
python -m venv .venv
source .venv/bin/activate  # Windows 用 .venv\Scripts\activate

# 3. 安裝依賴
pip install -r requirements.txt

模型本體會在首次推理時自動下載(或依 README 指示手動下載權重)。

2. 用現成推理腳本跑官方 demo

Repo 裡提供了簡單的推理範例(實際檔名可能隨版本變動,可在 examples/ 或 README 中找到):

python examples/simple_tool_calling.py

通常你需要提供:

  • 工具 schema(JSON / Python dict)
  • 使用者指令文字

腳本會回傳一段包含工具名稱與參數的 JSON,確認能跑通是第一步。

行動建議:

  • 先照官方 demo 跑一遍,不改任何 schema,只看 Needle 如何選工具。

3. 定義自己的工具 schema

假設你要做一個簡單的鬧鐘 + 記事 Agent,可以這樣定義工具(示意):

tools = [
  {
    "name": "set_alarm",
    "description": "設定鬧鐘時間(24 小時制)",
    "parameters": {
      "type": "object",
      "properties": {
        "time": {"type": "string", "description": "例如 07:30"},
        "label": {"type": "string", "description": "鬧鐘備註"}
      },
      "required": ["time"]
    }
  },
  {
    "name": "create_note",
    "description": "建立一則文字筆記",
    "parameters": {
      "type": "object",
      "properties": {
        "title": {"type": "string"},
        "content": {"type": "string"}
      },
      "required": ["content"]
    }
  }
]

接著丟給 Needle:

from needle import NeedleModel

model = NeedleModel.from_pretrained("cactus/needle-base")

user_query = "明天早上七點叫我起床,順便幫我記:早會要問預算"

result = model.route_tools(query=user_query, tools=tools)
print(result)

預期會拿到類似:

[
  {
    "tool": "set_alarm",
    "arguments": {"time": "07:00", "label": "早會"}
  },
  {
    "tool": "create_note",
    "arguments": {"title": "早會", "content": "早會要問預算"}
  }
]

接下來只要用你熟悉的語言(Swift / Kotlin / Node / Python),依這個 JSON 實際呼叫 OS API 或雲端 API 即可。

4. 把 Needle 接在現有 LLM 後面,做一條簡單 workflow

以下是一條最小可行的 workflow(伪碼):

  1. 語音 → 文字
  2. 行動裝置用本地或雲端 ASR:
  3. speech.wav -> transcript = "幫我找台北明天不下雨的戶外咖啡廳"

  4. Needle 選工具

  5. 工具例:search_weather, search_places 兩個 API。
  6. needle.route_tools(transcript, tools) → 回傳要先查天氣再查地點的參數 JSON。

  7. 實際 API 呼叫

  8. 你的後端或 App 依 Needle 給的 JSON,分別呼叫天氣 API、地點 API,整理出可用候選。

  9. 大模型生成回覆(可選)

  10. 把 API 結果 + 原始指令送給 GPT / Gemini / Claude,只讓它負責自然語言回覆:「幫你找到三間明天不預測下雨的咖啡廳…」。

這種分工方式:

  • Needle:做工具決策+參數解析
  • LLM:只在真正需要「說人話」的最後一步出現

能同時達到:成本可控、延遲更低、邊緣裝置也能預先處理大量決策。


適合誰現在就試用 Needle?

  • 行動 App 開發者:想做語音指令、快捷操作、離線助手,又不想每次都打雲端 LLM。
  • 硬體產品團隊:智慧手錶、車機、家電、AR 眼鏡,需要一顆小而穩定的本地「工具路由中樞」。
  • 個人自架 Agent 系統玩家:已經有多工具、多 Agent,正在煩惱 orchestration 成本和延遲的人。

只要你場景的核心在「選工具+填參數」,而不是長篇聊天,Needle 值得你花一個下午跑起 demo,直接把它塞到你的 workflow 裡測一次。更多細節與最新腳本可以在 GitHub 查看:https://github.com/cactus-compute/needle

🚀 你現在可以做的事

  • 先 clone Needle 專案並跑一次官方 demo:git clone https://github.com/cactus-compute/needle.git
  • 把你現有的 function calling / OpenAPI schema 丟給 Needle,觀察它產生的工具 JSON
  • 在一個實際專案裡,嘗試用 Needle 接在 ASR 和雲端 LLM 之間,實測延遲與成本差異

留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *