Needle 2 - 14MBの超軽量エージェントLLM
Show HN: Cactus Needle 3: 8-29MB automation models can match DeepSeek V4 Flash
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をアプリ内でローカルに実行しています。モデルのフットプリントは非常に小さく、パフォーマンスは決して期待を裏切りません。
HNでの議論
91- IanCal
これで浴室の電気をつけてくれるか気になった:
「おしっこしたい」→「wee」がジャンルだから音楽をかけようとする
「おしっこおしっこしたい」→浴室で掃除機をかけ始める
「トイレに行く」→トイレをつけると言い、それが何を意味するのか全くわからない。
「トイレに行く、見えない」→浴室の電気をつけるべきだと推論した後、またトイレをつける方を選ぶ。
「トイレに行く、どこに行くか見えない」→推論は「『トイレに行く』→ control_device で device 'coffee maker'(トイレはコーヒーメーカーを暗示)」
「トイレに行く、暗すぎてどこに行くか見えない」→「『暗い』→ direction 'dark'; adjust_lights で brightness 100 にして暗い光にする」となり、リビングの電気を「暗く」しようとして失敗。
この時点で掃除機は暗い浴室にあり、リビングは100%の明るさで「wee」を再生中。少なくともコーヒーはある。
- gs17
「すべての電気をつけて/消して」と「浴室が暗すぎる」はうまくいったけど、それより間接的なものはダメだった。「寒い」と言うと実際にサーモスタットを下げた(「寒い」は…電気を暗くした?)!ただ、悪い応答の信頼度はかなり低かったので、デモにしきい値を追加する価値はあるかも。
それとも単にサーモスタットを下げる奇妙なバイアスがあるのか?「暑くして」でも下げた(具体的には20→18にしようとした、少なくとも試みた、UIはまだ20を表示していた)、しかも高い信頼度で。摂氏と華氏の混同もあるかもしれない。面白いコンセプトだけど、今のところオーブンを制御させるのはちょっと嫌だな。
ラップトップのデモはメールアプリを開こうとするまでうまくいった。「メールをチェック」はエラーでブラウザを開き続け、「メールを確認」は「email」というテキストのメモを作り、「メールを開く」は実際のブラウザで「https://api.email.com/v1/email」に行くが、「メールを開いて」は機能する。
それに「推論」はあまり信頼できないと思う?車では「『音量を上げて』は音量を下げる意味 → set_volume を低い値で」となった。家では、推論はアラームをオフにしたいと正しく言うのに、実際にはやらなかった。
- 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%)
- raybb
これのユースケースのアイデアがあるんだけど、意味があると思うか、あるいはこのアプローチについて何か考えがあるか聞きたい。
私はOpenStreetMapの大ファンで、パソコンから編集するのを楽しんでいる。携帯からだと、電話番号を正確に打ち込んでダブルチェックしたり、Upredorで利用可能な大量のフィールドリストから正しいフィールドを見つけて選択するのがかなり面倒だ。
一般的には、レストランを見て、看板がある。そこに「現金のみ。電話番号はこれ。営業時間はこれ」と書いてある。本当にクールなのは、携帯に話しかけて「ねえ、この場所の情報はこれだよ」と言うだけで、自動的に位置情報を使って近くの場所を検出し、どの場所について話しているかまで検出して、「OK、これが君が提案している変更だと思う、あるいは君が述べたこれらのことが差分を生む」と教えてくれることだ。これはおそらく、最も一般的な20のキーと、ほとんどのキーに対する事前定義された値セットに限定されるだろう。例えば cuisine=x は最も一般的なものにマッチすべきで、新しいものを作り出してはいけない。
もちろん、これは大規模言語モデルでもできることだが、オンデバイスで動けばもっと快適で安上がりだ。
- Retro_Dev
とてもクールなプロジェクトだが、もちろん完璧ではない。私は30メガバイトのヒューリスティックよりも、家庭内の完璧で正しい制御変更にマッピングされた30メガバイトのフレーズの方がいい。「家を暖めて」と試した(サーモスタットの温度を上げる)が、モデルは実際には照明を「暖かい明るさ」にした。推論は `"'warm the house' -> set_lights to warm brightness. No specific room given, so use default 'living room' as default."` だった。