📌 本文重點
- 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/Claude的 Tool 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(伪碼):
- 語音 → 文字
- 行動裝置用本地或雲端 ASR:
-
speech.wav -> transcript = "幫我找台北明天不下雨的戶外咖啡廳" -
Needle 選工具
- 工具例:
search_weather,search_places兩個 API。 -
needle.route_tools(transcript, tools)→ 回傳要先查天氣再查地點的參數 JSON。 -
實際 API 呼叫
-
你的後端或 App 依 Needle 給的 JSON,分別呼叫天氣 API、地點 API,整理出可用候選。
-
大模型生成回覆(可選)
- 把 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 之間,實測延遲與成本差異




