Needle 2 - 14MBの超軽量エージェントLLM

Show HN: Cactus Needle 3: 8-29MB automation models can match DeepSeek V4 Flash

Needle 2 - 14MBの超軽量エージェントLLM

Needle 2は、4500万パラメータながら14MBの単一バイナリに収まり、28MBのRAMで動作するオープンなツール呼び出し・デバイス操作・構造化抽出モデルです。Cactus Quantsによる2bit量子化と独自エンジンで、Raspberry Pi 5上で毎秒500トークンのデコードを実現。Meta Quest 3SやApple Vision Pro、200ドル以下のスマートフォン、さらにはESP32-S3のようなマイコンでも動作します。FunctionGemma 270MやLFM2.5 230Mと同等の性能を5〜70倍小さいサイズで発揮し、クラウドに依存しないプライベートで即時的なオンデバイスAIを提供します。Apache 2.0ライセンスで、Hugging Faceから重みを取得可能。自分のMacやPCで数分から数時間でファインチューニングもできます。

画面のないPebble Index Ringでは、話しかけたアクションが毎回必ず実行されなければなりません。私たちはクラウドに頼らず、Cactus Needleをアプリ内でローカルに実行しています。モデルのフットプリントは非常に小さく、パフォーマンスは決して期待を裏切りません。
  1. IanCal

    これで浴室の電気をつけてくれるか気になった:

    「おしっこしたい」→「wee」がジャンルだから音楽をかけようとする

    「おしっこおしっこしたい」→浴室で掃除機をかけ始める

    「トイレに行く」→トイレをつけると言い、それが何を意味するのか全くわからない。

    「トイレに行く、見えない」→浴室の電気をつけるべきだと推論した後、またトイレをつける方を選ぶ。

    「トイレに行く、どこに行くか見えない」→推論は「『トイレに行く』→ control_device で device 'coffee maker'(トイレはコーヒーメーカーを暗示)」

    「トイレに行く、暗すぎてどこに行くか見えない」→「『暗い』→ direction 'dark'; adjust_lights で brightness 100 にして暗い光にする」となり、リビングの電気を「暗く」しようとして失敗。

    この時点で掃除機は暗い浴室にあり、リビングは100%の明るさで「wee」を再生中。少なくともコーヒーはある。

  2. gs17

    「すべての電気をつけて/消して」と「浴室が暗すぎる」はうまくいったけど、それより間接的なものはダメだった。「寒い」と言うと実際にサーモスタットを下げた(「寒い」は…電気を暗くした?)!ただ、悪い応答の信頼度はかなり低かったので、デモにしきい値を追加する価値はあるかも。

    それとも単にサーモスタットを下げる奇妙なバイアスがあるのか?「暑くして」でも下げた(具体的には20→18にしようとした、少なくとも試みた、UIはまだ20を表示していた)、しかも高い信頼度で。摂氏と華氏の混同もあるかもしれない。面白いコンセプトだけど、今のところオーブンを制御させるのはちょっと嫌だな。

    ラップトップのデモはメールアプリを開こうとするまでうまくいった。「メールをチェック」はエラーでブラウザを開き続け、「メールを確認」は「email」というテキストのメモを作り、「メールを開く」は実際のブラウザで「https://api.email.com/v1/email」に行くが、「メールを開いて」は機能する。

    それに「推論」はあまり信頼できないと思う?車では「『音量を上げて』は音量を下げる意味 → set_volume を低い値で」となった。家では、推論はアラームをオフにしたいと正しく言うのに、実際にはやらなかった。

  3. Scaevolus

    これはNeedle 2からの確かな改善だ。Runescapeのデータベースサイトへのツール呼び出しインターフェースに使ってみた。残念ながら、FunctionGemmaと比べると、まだ目標には十分な能力がない。

    モデル 正しいツール形状 正確な引数

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━

    FunctionGemma ファインチューン, BF16 209/230 (90.9%) 196/230 (85.2%)

    ─────────────────────────────── ──────────────────── ─────────────────

    Needle 3 ファインチューン W4A8 74/230 (32.2%) 47/230 (20.4%)

    ─────────────────────────────── ──────────────────── ─────────────────

    Needle 2 ファインチューン W4 59/230 (25.7%) 43/230 (18.7%)

  4. raybb

    これのユースケースのアイデアがあるんだけど、意味があると思うか、あるいはこのアプローチについて何か考えがあるか聞きたい。

    私はOpenStreetMapの大ファンで、パソコンから編集するのを楽しんでいる。携帯からだと、電話番号を正確に打ち込んでダブルチェックしたり、Upredorで利用可能な大量のフィールドリストから正しいフィールドを見つけて選択するのがかなり面倒だ。

    一般的には、レストランを見て、看板がある。そこに「現金のみ。電話番号はこれ。営業時間はこれ」と書いてある。本当にクールなのは、携帯に話しかけて「ねえ、この場所の情報はこれだよ」と言うだけで、自動的に位置情報を使って近くの場所を検出し、どの場所について話しているかまで検出して、「OK、これが君が提案している変更だと思う、あるいは君が述べたこれらのことが差分を生む」と教えてくれることだ。これはおそらく、最も一般的な20のキーと、ほとんどのキーに対する事前定義された値セットに限定されるだろう。例えば cuisine=x は最も一般的なものにマッチすべきで、新しいものを作り出してはいけない。

    もちろん、これは大規模言語モデルでもできることだが、オンデバイスで動けばもっと快適で安上がりだ。

  5. Retro_Dev

    とてもクールなプロジェクトだが、もちろん完璧ではない。私は30メガバイトのヒューリスティックよりも、家庭内の完璧で正しい制御変更にマッピングされた30メガバイトのフレーズの方がいい。「家を暖めて」と試した(サーモスタットの温度を上げる)が、モデルは実際には照明を「暖かい明るさ」にした。推論は `"'warm the house' -> set_lights to warm brightness. No specific room given, so use default 'living room' as default."` だった。

この日のほかの記事

2026-09-18