Cactusは、ツール呼び出し、構造化データ抽出、テキスト検索を小型デバイス(電話機、ウェアラブル、スマートホームハブ、ロボット、マイクロコントローラー)で実行するように設計された「オートメーション基盤モデル」Needle 3をリリースした。このモデルは単一の8~29 MBのバイナリとして配信され、重みあたり約2ビットに量子化されている。同社の見出しにある主張は、このモデルの小さなファインチューニングされたスライスが、クラウドでホストされるはるかに大きなフロンティアモデルであるDeepSeek V4 Flashと、ツール呼び出しやテキストから構造化フィールドを抽出する特定のタスクで匹敵するというものである。

Needle 3のラダー型シンプルアテンションネットワークアーキテクチャを示す図。エングラムメモリ、グループドクエリアテンション、ハイパーコネクションを表示。
Needle 3のラダー型アーキテクチャは、ほとんどのパラメータをエングラムnグラムメモリに配置することで、1.21億パラメータのモデルが5000万パラメータのモデルと同じ演算を行えるようにする。github.com

この記事では、Laddered Simple Attention Networkが標準のフィードフォワードネットワークをモナークハダマードMLPに置き換え、グループドクエリアテンションと因果畳み込みを組み合わせ、ガザー操作でエングラムnグラムメモリを読み取る仕組みを説明している。

設計における異彩を放つ部分は、Cactusが「インテリジェンスラダー」と呼ぶものである。Needle 3は一組の重みからなるが、2層から20層までの深さそれぞれがそれ自体で配備可能なモデルである。開発者は、フルの20層バージョンまたはラズベリーパイ向けの8層サブネットワークを出荷でき、それぞれのサブネットワークは独立してファインチューニングすることができる。同社独自のベンチマークによれば、ダウンストリームタスクで1エポックファインチューニングされた4層サブネットワークはDeepSeek V4 Flashに匹敵し、このモデルはモバイルツール呼び出しタスクにて自身のサイズの約10倍のモデルを上回り、抽出タスクでは自身のサイズの2~3倍のモデルに匹敵する。

DroidCallとMobile Actionsベンチマークにおけるファインチューニング前後のすべてのNeedle 3サブネットワークを示す棒グラフ。
ファインチューニングによりすべてのサブネットワークは18~36ポイント向上し、4層以上からはチューニング済みサブネットワークがDeepSeek V4 Flashを上回り始める。github.com

この記事では、インテリジェンスラダーについて説明しており、2層から20層までの深さそれぞれが配備可能なモデルであり、独立してファインチューニングできることを述べている。さらに、ダウンストリームタスクで1エポックファインチューニングされた4層サブネットワークがDeepSeek V4 Flashに匹敵することを示している。

8~29 MBのモデルがどのようにこれが可能なのかという疑問に対する答えは、Laddered Simple Attention Network(ラダー型シンプルアテンションネットワーク)である。このアーキテクチャは、同じサイズのトランスフォーマーと比較してトークンあたりの計算量をはるかに少なくするように構築されている。GitHubリポジトリによれば、標準のフィードフォワードネットワーク(FFN)をモナークハダマードMLPに置き換え、グループドクエリアテンション(GQA)と因果畳み込みを組み合わせ、ガザー操作でエングラムnグラムメモリを読み取り、マルチレーンハイパーコネクションを追加する。ほとんどのモデルパラメータはこのエングラムに存在するため、同社は1.21億パラメータのモデルが5000万パラメータのモデルと同じ演算を行えると述べている。製品ページでは、このアーキテクチャが同じ構成のトランスフォーマーと比較してトークンあたりの百万浮動小数点演算(MFLOPs)を2倍以上少なくしていると説明している。このモデルは、独自の構造化データセットから3600億トークンで訓練され、ラズベリーパイ5ではデコード速度が400~4,000トークン/秒、プリフィル速度が1,000~10,000トークン/秒である。

Needle 3は会話ではなく、3つの狭い機能のために構築されている。アプリが公開する関数に基づいて、適切なツールを選択し、ユーザーの発言からすべての引数を埋める:2つのことを尋ねられれば順番に2つの呼び出しを返し、どのツールにも対応していないことを尋ねられれば推測するのではなく空のリストを返す。構造化抽出については、開発者が形状(請求書、予約、通知など)を宣言し、乱雑なテキストを渡すと型付きのフィールドを取得できる;同社はデコード文法により出力が正しくパースされることを保証し、抽出が分類問題にもよく一般化すると述べている。同じモデルはテキスト埋め込みベクトルも返すため、アプリはデバイスを離れることなくローカルで検索、マッチング、ルーティングができる。製品ページではターゲットドメインとしてスマートホーム(例:"寝室の明かりを落とし、施錠する"がオフラインで2つの呼び出しとして実行される)、ロボット、電話機、ウェアラブル、ARグラス、自動車、そしてプレーンイングリッシュによるコンピュータ制御を挙げている。

この分野の基準から見れば、ファインチューニングのパスは安価である。Cactusは、計算とトレーニングデータ生成を含むホストされたファインチューニングランを3回、一度限りで19ドルで提供している。さらに、オープンソースパッケージは、フリーズされたベースのフル20層上でローカルなLoRA(低ランク適応)ファインチューニングをサポートし、同じエンジンで動作する任意のサブネットワークの4ビット.cactファイルをエクスポートする:

needle finetune data.jsonl --epochs 10 --out adapter.safetensors needle build --lora adapter.safetensors --out tuned.cact

Pythonでのループも同様に短い — 関数をデコレートし、run()を呼び出すことで関数を実行しその結果を返すループを完成させる:

Mobile Actions、DroidCall、BFCL v4、DSTC8、SNIPSゴールド、SNIPS 7-wayの6つのベンチマークにおけるNeedle 3とベースラインの比較チャート。
公開されている数値はメーカー独自のスイートでフルテストスプリットを実行したものであり、サブネットワークは2ビット精度、ベースラインはvLLM下でf16精度である。github.com

この記事では、ベンチマークの読み方について詳しく説明しており、ツール呼び出しは完全一致の精度、抽出はフィールドマイクロF1であること、さらに比較条件としてCQ2ビットバイナリ対f16ベースラインvLLM、およびDeepSeek V4 FlashのクラウドAPI到達を述べている。

import needle

macOS、Linux、Windows、Android、iOS、tvOS、watchOS、WASM、WASI向けのプリビルトエンジンを示す図。各プラットフォームフォルダーごとに1つのエンジンが存在する。
あらゆるターゲットに対して、起動時にneedle3.cactの重みを読み込む1MB未満のプリビルトエンジンが搭載される。github.com

この記事では、プラットフォームとしてmacOS、Linux(x86_64、arm64、armv7、riscv64、mipsel)、Windows、Android、iOS、tvOS、watchOS、ブラウザ経由のWASM、およびWASIコンポーネントがリストされていることを説明している。

@needle.tool def get_weather(city: str): "Get the current weather for a city." return {"city": city, "temp_c": 27, "sky": "clear"}

agent = needle.Needle(tools=[get_weather]) print(agent.run("what's it like in Lagos right now?")["results"]) # [{'city': 'Lagos', 'temp_c': 27, "sky": "clear"}]

各ターンでは、関数呼び出し、モデルの推論、較正された信頼度スコア、タイミングとメモリの数値を含む1つのJSONオブジェクトが返される。この信頼度スコアは、実際の製品で使用するのに十分な信頼性があるかどうかを決定する設計の一部である。エンジンは0.1の床関数を適用する:0.1未満では、呼び出しはsuppressed_callsフィールドに保留され、function_callsは空になる。0.1以上では、同社のガイダンスに従ってスコアに基づいてルーティングを行う — スコアが高い場合はすぐに実行し、中程度の場合は呼び出しを表示してユーザーに確認を求め、空の結果は拒絶として扱う。トリガーでマークされたツールは常に一致するリクエストに対して呼び出しを生成するため、このスコアは開発者にそのツールを実行するかまず確認するかを伝える。同社は率直に述べている:ツール設計こそが「ゲームのすべて」である。モデルはスキーマを文字通りに読み取るため、プレーンな説明の狭いツールは広いツールに勝ち、セットに含まれる追加のツールひとつがミスルートの機会となる。

ここでモデルの正直な限界も明らかになり、GitHubのREADMEはそれを平易に述べている:製品は「一般的なチャット容量と引き換え」である。Needle 3はチャットボットではなく、そうなる意図もない。これはオートメーションモデルである:ツールを呼び出し、フィールドを抽出し、文を埋め込む。ツールの作成に関するガイダンス — 1アクションにつき1つのツール、ユーザーの発言から名前を引き出し、説明に値の形式を明記し、デフォルト値を必要な引数に設定し、1ターンあたりのツールセットを小さくする — は実際にはモデルが失敗する方法のリストである。同社の抽出が「分類問題にもよく一般化」するという主張は、独自のスイートに限定される;ソース素材にはそれが任意の分類タスクにも一般化するという独立した証見は示されておらず、設計の狭さこそがその速度とサイズの要点である。

ベンチマークの読み方を詳しく説明する価値がある。「DeepSeek V4 Flashに匹敵」という表現は過大解釈されやすいからである。公開されている数値はメーカー独自のスイートから来ており、フルテストスプリットで実行されている:ツール呼び出しは完全一致の精度、抽出はフィールドマイクロF1である。ツールスイートはMobile Actions(Androidインテントへの電話機コマンド)、DroidCall(電話機リクエスト、一部は2回の呼び出しが必要)、およびBFCL v4(バークリー関数呼び出し、シングルターン)である。抽出スイートはDSTC8、SNIPSゴールド、およびSNIPS 7-wayである。比較条件は以下のように指定されている:Needle 3のサブネットワークは出荷されているCQ2ビットバイナリ(Cactus Quants、同社の2ビット量子化)を通じて実行され、ベースラインはvLLM推論エンジン下でf16精度で実行され、DeepSeek V4 FlashはそのクラウドAPIを通じて到達する。したがって、主張されているのは、オンデバイスの2ビットサブネットワークが、クラウドサービスのはるかに大きなフル精度モデルと、ツール呼び出しと抽出のいくつかのスイートで比較可能なスコアを出すということであり、一般的にDeepSeek V4 Flashに匹敵するということではない。ファインチューニングの数値も同じ点を強調している:DroidCallでのファインチューニングにより、すべてのサブネットワークは18~36ポイント向上し、4層以上からはチューニング済みサブネットワークがDeepSeek V4 Flashを上回り始める。この点は29Mパラメータから始まる。

展開範囲は広い。あらゆるターゲットに対して、起動時にneedle3.cactの重みを読み込む1MB未満のプリビルトエンジンが搭載され、needle buildはプラットフォーム用のエンジンを取得し、その横に重みを配置する。プラットフォームにはmacOS、Linux(x86_64、arm64、armv7、riscv64、mipsel)、Windows、Android、iOS、tvOS、watchOS、ブラウザ経由のWebAssembly(WASM)、およびWebAssembly System Interface(WASI)コンポーネントが含まれる。開発者は任意のサブネットワークを構築できる — たとえばラズベリーパイ向けの8層バージョンなど — そして、Cactusプラットフォームは、データセット、2ビット量子化、評価、ファインチューニング、データセット管理を含むフルパスを、独自のパイプラインを構築したくないチーム向けに同社のインフラストラクチャ上で提供する。

依然として不確実なのは、メーカー独自のスイートと実際の使用との間のギャップである。公開されている数値はCactusによる測定値であり、Cactusのベンチマーク上で特定の条件下で実行された特定の比較モデルに対するものであり、ソース素材には独立した監査は含まれていない。自然言語のあいまいさ — 確かな間違いの呼び出しではなく拒否を生むような表現 — に対するモデルの挙動は、ツール説明の質と、メーカーのデータで較正された信頼度スコアに依存している。このモデルはPythonパッケージとHugging Faceの重みから、スターが12.9k、フォークが875、コミットが326のGitHubリポジトリまで公開的に入手可能であり、そのため主張は独立して検証可能である。明確に定義されたツールセット周辺でのオンデバイスオートメーションを構築するチームにとって、ラダーアーキテクチャと19ドルのファインチューニングパスはその価値を評価するに足る。