Needle:8 到 29 MB 的端側“自動化基礎模型”,在手機、手錶和微控制器上做工具呼叫與結構化抽取

Published · AI Daily — AI-assisted deep research, methodology & disclosure

cactus-compute/needle 是一個只有 8 到 29 MB 的單檔案模型,專做三件事:根據應用暴露的函式選擇並填寫工具呼叫、把雜亂文字抽成帶型別的欄位、生成句向量。它基於 Cactus Compute 自研的 Laddered Simple Attention Network,2 到 20 層的每個深度都可單獨部署,還附帶 16.9 MB 的語音轉文字模型 Whistle。專案採用 Apache-2.0 許可,截至發稿約有 1.39 萬個星標。效能對比資料來自專案自述,尚待獨立復現。

Needle 是 Cactus Compute 團隊在 GitHub 上開源的一個很小的模型:整個模型是一個 8 到 29 MB 的二進位制檔案,目標裝置是手機、手錶和穿戴裝置、機器人、智慧家居、汽車乃至微控制器。專案自稱“自動化基礎模型”,並說明它拿通用聊天的能力做了交換,換來的是在移動端工具呼叫上勝過體量大 10 倍的模型,在結構化抽取上追平大 2 到 3 倍的模型。這些比較來自專案 README,我們沒有看到第三方復現,應當按“專案自述”來讀。截至 2026 年 10 月 13 日,倉庫約有 13,887 個星標、940 個派生,Apache-2.0 許可,主要用 Python 編寫,最近一次推送在 10 月 11 日。 它做的事情很具體。第一是工具呼叫:給定應用暴露的函式,Needle 選出該呼叫哪些,並從使用者的話裡填好每個引數;使用者一次提兩件事,就按順序給出兩個呼叫;使用者要的東西沒有任何工具能滿足,就返回空列表,而不是猜一個。第二是結構化抽取:先宣告一個形狀,比如發票、預訂、通知或表單,再把雜亂文字交進去,輸出的欄位帶型別,並且解碼語法保證結果能被解析,抽取能力還能推廣到分類。第三是文字向量:同一個模型可以為句子生成向量,應用可以在本地做搜尋、匹配和路由。第四,它的姊妹模型 Whistle 是一個 16.9 MB 的語音轉文字模型,跟 Needle 共用同一個容器格式和引擎,所以一次構建就能讓 Needle 直接接收音訊:音訊進去,工具呼叫出來。

使用門檻也很低。透過 pip install cactus-needle 安裝之後,用裝飾器把一個 Python 函式標成工具,函式簽名給出引數型別,文件字串作為工具描述,再用 agent.run 完成閉環:執行函式並返回結果。每一輪都會返回一個 JSON,含 function_calls、模型的 reasoning 和校準過的 confidence 置信度,應用可以按置信度決定自動執行、請使用者確認還是拒絕。想要部署到裝置,則用 needle build --platform macos-arm64 這樣的命令,取下對應平臺的預編譯引擎,並把 needle3.cact 權重放在旁邊。倉庫裡列出了 macOS、Linux ARM64 等目標,還有瀏覽器和 WASI 的構建說明。

架構是它真正不同的地方。Needle 3 是一個“階梯式簡單注意力網路”(Laddered Simple Attention Network):用 Monarch Hadamard MLP 取代常規的前饋層,使用帶因果卷積抽頭的分組查詢注意力,用按 gather 讀取的 engram n-gram 記憶,以及多通道超連線;訓練目標是讓 2 到 20 層的每一個深度都能單獨部署。大部分引數放在 engram 裡,所以 1.21 億引數的模型做的運算量相當於 5,000 萬引數的模型。解碼時有一套由你的 schema 編譯出的位元組級語法約束每個 token,每次回答還附帶校準過的置信度。這一整套設計的出發點是,在記憶體只有幾十 MB 的裝置上,把容量花在“查表式記憶”上比花在通用推理上更划算。

微調是專案強調的另一點。README 稱,在 DroidCall 上微調後每個子網路提升 18 到 36 個點,從 4 層、2,900 萬引數起,微調後的子網路就超過 DeepSeek V4 Flash。本地微調只訓練注意力投影上的 LoRA 介面卡,基礎權重凍結,最後合併匯出,精度是 4 位元,在自己的機器上用 JAX 跑;平臺微調則訓練完整模型,精度 2 位元,需要 Cactus 的 API 金鑰,可以由你的資料加上 Needle 原始資料集共同強化,避免遺忘。Whistle 的資料則是:比 Whisper base 小 8.6 倍,首個 token 快 6.6 倍,在 LibriSpeech、SPGISpeech、Earnings-22 和 FLEURS 平均成績上領先,在 TED-LIUM、AMI 和 MLS 平均成績上則是 Whisper base 更好,語言覆蓋英、德、法、西、意、荷、波七種。

如果把它放進實際的產品場景,適用面其實很清楚。設想一個智慧家居應用:使用者說“把廚房的燈關掉”,音訊進入 Whistle 轉寫,Needle 再從應用宣告的“開關燈”“調溫度”等函式里挑出一個並填好房間引數,整個過程在裝置本地完成,沒有網路往返,也不需要把家裡的語音上傳到雲端。同樣的思路適用於車載語音、手錶上的快捷指令和機器人的指令解析。README 說明,當使用者的話超出已宣告的工具範圍時,模型返回空列表而不是猜測;每次回答也帶有校準過的置信度,應用可以據此決定回退到雲端大模型,還是直接提示使用者,這比讓小模型硬編一個呼叫要穩妥得多。 我們的判斷是,Needle 的價值在於把一個很具體的需求做成了很小的產品:只要你的應用已經有一組清晰的函式,需要把自然語言或語音可靠地對映成呼叫,它就比部署一個大模型便宜得多,也能在斷網時工作。風險也同樣具體。其一,所有基準都來自專案自己的 README。其二,二進位制預設開啟遙測,隱私敏感的場景必須設定 NEEDLE_TELEMETRY=0 和 DO_NOT_TRACK=1。其三,它不會聊天,也不適合開放域推理;如果你的函式集會頻繁變化,就要認真評估微調和資料生成的成本。建議先用自己的真實工具清單和真實口語樣本做一次小規模評測,再決定是否取代雲端呼叫。

Sources

FAQ

Needle 到底能做什麼,不能做什麼?

它做三件事:根據應用提供的函式選擇並填好工具呼叫,遇到沒有對應工具的請求會返回空列表而不是瞎猜;把雜亂文字按宣告的結構抽成帶型別的欄位;為句子生成向量用於本地搜尋和路由。專案明確說它犧牲了通用聊天能力來換取這些任務上的表現。

“Laddered”結構有什麼實際好處?

2 到 20 層的每個深度都是可部署的模型,所以同一份權重可以按裝置大小取不同層數。README 稱,在 DroidCall 上微調後,每個子網路提升 18 到 36 個百分點,從 4 層、約 2,900 萬引數起,微調後的子網路就超過了 DeepSeek V4 Flash。這些是專案自己的結果。

使用時要注意什麼?

二進位制預設開啟遙測,需要設定 NEEDLE_TELEMETRY=0 和 DO_NOT_TRACK=1 才能關閉。效能對比來自 README,尚無獨立評測。本地微調只訓練 LoRA 介面卡並量化到 4 位元,平臺微調則會訓練完整模型,需要 Cactus 的 API 金鑰。