AI・機械学習
Strands Decider 2B: 小規模でオープンソースの意思決定モデル
Strands Decider 2B: a small, open-source, decision model (strandsagents.com)
要約
Strandsは、高速な実験、ローカル開発、イノベーションに最適化された小規模な意思決定モデル「Strands Decider 2B」を発表しました。このモデルは、LLMとは異なり、選択肢の中から最も適切なものを数値スコアで選ぶことに特化しており、低レイテンシーと高い信頼性スコアを提供します。20億パラメータのモデルはローカル環境で動作可能で、GitHubでオープンソースとして公開されています。
全文翻訳
今年初めに、エージェント型AIの最先端アプローチを実際に試せる場としてstrands-labsを発表しました。本日、Strands Decider 2Bを発表できることを嬉しく思います。これは、高速な実験、ローカル開発、イノベーションのために最適化された小規模な意思決定モデルです。
Strands Deciderは、最近TypeSafe AIがJevをローンチして以来注目を集めている、新しいクラスの意思決定モデル、あるいはシステムワンモデルの一つです。任意の出力を生成できるLLMとは異なり、意思決定モデルは選択肢のセットの中から一つを選ぶように設計されています(例:「『電気をつけて』という文字列はコーヒーメーカーに関するものか?はい、いいえ。」、「『sihamba ngokushesha』というフレーズはどの言語か?英語、ズールー語、オランダ語?」)。そして、単純な数値スコアを割り当てます(例:「『これは私が読んだ中で最高の文書だ』というフレーズは肯定的な感情か?0から1の間。」)。
この柔軟性の低下と引き換えに、意思決定モデルは与えられたサイズでより高速かつ高性能であり、常に選択されたオプションの中から回答を生成し、非常に低いレイテンシーで実行できます。その一方で、このアプローチ(単一の並列パスですべての出力を生成する)は、推論モデルよりも複雑な問題を解決する能力が著しく低く、テキストを生成できないため、コーディング、チャットボット、文書要約などの一般的なLLMタスクには不向きです。
さらに、意思決定モデルは各決定に対して高品質な信頼性スコア(「このはい/いいえが正しいとどの程度確信できるか?」)を提供しますが、これは最先端のLLM推論APIでは利用できません。また、同じプロンプトに対して複数の質問を非常に効率的に行うことができます。
これらの特性の組み合わせにより、多くの開発者がStrands Harness SDKや最近ローンチされたStrands Harnessで構築しているエージェント型ワークフローを推進するのに最適です。このクラスのモデルは、今後数週間、数ヶ月、数年でエージェント型AIに多くの興味深いイノベーションをもたらすと予想しています。Strands Decider 2Bは、そのイノベーションへの最初の貢献です。これは20億パラメータのモデルで、ローカルCPUまたはGPUでの実行に適しており、数ミリ秒で意味のある質問に回答できます。その精度とキャリブレーションは、このクラスの他の既知のモデルと競合します。
Strands-decider-2bをGitHubでオープンソースとしてリリースし、重みはHugging Faceで公開しています。モデル構築に使用したすべてのトレーニングデータとスクリプトも含まれており、独自のイノベーションの旅を始めるのに最適な場所となっています。
モデルアーキテクチャ
中心的なアイデアは、事前学習済みのLLMトルソー(Qwen3.5-2B)を使用し、LMヘッドを取り除いてテキスト生成能力を奪うことです。LMヘッドはポインターヘッドに置き換えられ、トルソーが各オプションに対して提供する回答をスコアリングします。これは、各オプション位置の隠れ状態と<answer>位置の隠れ状態を比較してスコアリングすることで行われます。このヘッドは非常に小さく、合計パラメータ数は100万強です。トルソーはランク16のLoRAアダプターでファインチューニングされています。
図1: Strands Decider 2Bのアーキテクチャ。
リポジトリをブラウズすると、これがアーキテクチャの2回目のメジャーイテレーションであることがわかります。最初のものは似ていましたが、パフォーマンスが著しく劣ることが判明したスロットヘッドを使用していました。実際、今日リリースするモデルはv19で、多くのイテレーションが内部で行われています。各バージョンで変更したすべてはリポジトリに含まれており、行った作業を追跡できます。
パフォーマンスはどうですか?
このタイプのモデルでは、3つのパフォーマンスターゲットに興味があります:精度(質問にどれだけうまく答えるか)、キャリブレーション(信頼度スコアがどれだけ信頼できるか)、レイテンシー(どれだけ速く意思決定できるか)。最初の2つは一緒に測定しています:JevBenchの公開セットでの精度、および同じセットでのBrierスコアを使用したキャリブレーションです。
Strands-decider-2bは、精度とキャリブレーションで良好なパフォーマンスを示しています(2Bクラスで33中3位、2B超モデルを除くと30中1位)。アーキテクチャを進化させるにつれてスコアは向上しており、将来の改善のための多くのアイデアがあります。Strands labsの精神に乗り、コミュニティが独自の新しいアイデアを貢献してくれることを願っています。
図2: トレーニング軌跡全体での精度とキャリブレーション(Brierスコア)。アーキテクチャが successive versions で進化するにつれて、両方のメトリックがJevBenchの公開セットで改善しました。
レイテンシーに関しては、Strands-decider-2bは広く利用可能なハードウェアで、中央値約115ミリ秒でローカル決定を下すことができます。決定にかかる時間はタスクサイズに依存し、タスクサイズが大きくなるにつれてほぼ線形に増加します。グラフの結果はローカルのNvidia RTX3090でのものですが、M3 MacBookでのパフォーマンスもそれほど悪くなく、小さなタスクの中央値レイテンシーは約153ミリ秒です。精度とキャリブレーションと同様に、改善のための多くのアイデアがあり、特にフロアの削減に注力しています。
図3: タスクサイズ(トークン単位)の関数としての決定レイテンシー。ローカルNvidia RTX 3090でモデルv18に対して測定。レイテンシーはタスクサイズにほぼ線形に増加します。
なぜ2Bなのか?
Strands Deciderを小規模モデルとして利用可能にした理由は2つあります。1つは、実験を奨励したいからです。Strands-decider-2bは、すでに持っているハードウェアで、使用したり、トレーニングしたりすることができます。これにより、物事を試すことが簡単、高速、低リスクになります。もう1つは、20億パラメータが一種のスイートスポットのように思えることです。実験には十分小さいが、意味のある作業を行うには十分大きいということです。
例えば、Strands DeciderはJevBenchの簡単なタスクを100%正しく実行し、これらのタイプの問題は、人々がエージェントで取り組むのを見るより簡単な問題のいくつかにうまくマッピングされます。
Strands Deciderで何ができますか?
何でも好きなことができます!より真剣に言うと、モデルルーティング、ツール選択、評価、ガードレール、メモリ、コンテキスト管理、ポリシー分類などのクラスのモデルで初期の成功を見ています。
また、ハイブリッドエージェントの構築に関するエキサイティングなイノベーションも見てきました。LLMを使用して最も難しい決定を下し、デサイダーモデルを使用してより簡単な定型的な決定を下すことで、コストとレイテンシーを削減しています。デサイダーモデルと固定ワークフロー言語を組み合わせて、別の種類のハイブリッドワークフローを構築する実験も見ています。
人々はまた、これらの種類のモデルを使用してゲームをプレイしたり、タスクを自動化したり、迷路をナビゲートしたりしています。この分野のイノベーションのスピードは驚くべきものです。
試してみる
始めるのに最も簡単な方法は、Strands-decider CLIを介して行うことです。
ターミナルウィンドウ
pip install strands-decider
選択の質問
モデルに、状態と質問に基づいて選択させることもできます。
ターミナルウィンドウ
strands-decider ask StrandsAgents/strands-decider-2B-hobson-v19 \
--state "Help! My payouts have been failing for 3 days! " \
--choice "Which team should handle this?=billing,sales,retail"
例の出力:
ターミナルウィンドウ
choice_0 -> billing (confidence 0.768)
billing 0.845
retail 0.091
sales 0.064
この出力では、モデルが最も高い確率スコアでbillingを回答として予測していることがわかります。
リポジトリには、Strandsエージェント内でStrands-decider-2bを使用する例もexamples/strands/に含まれています。エージェント自体はローカルで実行され、ローカルで実行されているStrands Deciderに接続し、Amazon BedrockのデフォルトLLMを使用します。これは意図的に小さなシナリオです。
エージェントには(義務的な)デモのget_weatherツールと、意図的に積極的なシステムプロンプトがあり、ユーザーが「天気は?」と場所を指定せずに尋ねたときに、エージェントは都市を推測してツールを呼び出します。しかし、その呼び出しが実行される前に、Strands-decider-2bは会話と提案されたツール呼び出しを読み取り、それについて2つのはい/いいえの質問に答えます:これらの引数値はユーザーが実際に言ったことに基づいていますか(ネタバレ:いいえ!)そして、このツールを呼び出すには早すぎますか?
数行のPythonで予測を決定に変換し、エージェントはどこかの天気を自信を持って報告するのではなく、どの都市を意味したのかを尋ねるために戻ります。