toolpick — エージェント向けツール選定ユーティリティ
概要
toolpickは、多数のツール(APIやローカル関数など)を使うマルチツールAIエージェントの運用で発生する「ツール定義が多すぎてモデルが混乱する」「コンテキストトークンコストが膨れ上がる」という問題を緩和するためのライブラリです。READMEによれば、エージェントが持つツール群の中から「そのステップに有用な上位5つ」を選び出し、モデルに渡すツール定義を絞ることでトークン使用量を削減し、モデルが適切なツールを選びやすくすることを目的としています。npmでインストールでき、TypeScriptで実装された軽量なユーティリティです。
リポジトリの統計情報
- スター数: 59
- フォーク数: 2
- ウォッチャー数: 59
- コミット数: 2
- ファイル数: 6
- メインの言語: TypeScript
主な特徴
- エージェントに登録されたツールのうち、コンテキストに渡すべき上位N個を選択してトークン使用量を削減
- シンプルなAPI(createToolIndex 等)で既存の ai / OpenAI 等のワークフローに組み込みやすい
- TypeScript実装で型安全、軽量な依存関係(bun.lock が存在)
- npmパッケージとして配布されており導入が容易
技術的なポイント
READMEの説明とリポジトリ構成から読み取れる主要な技術的ポイントを整理します。toolpickのコアアイデアは「ツール定義(名前・説明・引数定義など)をインデックス化して、問い(ユーザーの指示やモデルの中間的な出力)に対してその中から関連性の高いものだけを選ぶ」ことです。これにより、以下のような効果と設計上の考慮点が生まれます。
-
コンテキスト削減とコスト最適化: 多数のツール定義を毎回全て渡すと、プロンプトのトークン数が増えそのままコスト増につながります。toolpickは上位5つ(README例)のように必要最小限のツールだけを渡すことで、モデルへのトークン負荷を下げ、APIコール費用や応答レイテンシの観点からも効率化します。
-
関連性評価のアプローチ(実装の推測と拡張案): READMEでは具体的なアルゴリズムは示されていませんが、一般的には「キーワードマッチング」「TF-IDFや埋め込みベースの類似度」「メタデータ(カテゴリ、権限)によるフィルタリング」などの手法が採用されます。toolpick自体はTypeScriptで提供され、ai SDKやOpenAIと組み合わせる想定なので、次のような拡張が現実的です。
- 軽量な文字列類似度やスコアリングで高速に候補絞り込み
- 必要に応じて埋め込み(OpenAIや他のベクターDB)を使うオプションを提供し、意味的に近いツールを抽出
- スコア閾値や選出個数(k)をカスタマイズ可能にして用途に応じて柔軟に調整
-
統合のしやすさ: READMEの使用例は、aiライブラリからのgenerateTextや@ai-sdk/openaiとの組み合わせを示唆しています。つまり、ツール選定はプロンプトを作る前段階で行い、選ばれたツール定義のみをモデルに渡すフローです。これは既存のエージェント設計(ツール呼び出しを伴う対話)との親和性が高く、導入コストが低い利点があります。
-
実運用上の注意点:
- 選定ミス(必要なツールが選ばれない)を防ぐため、緊急用のフォールバックルールやユーザー確認フローを用意することが望ましい。
- ツールが動的に追加・削除される環境ではインデックスの再作成や差分更新、キャッシュ戦略が重要。
- 埋め込みを用いる場合は埋め込み生成コストとレスポンス遅延、モデル依存性を考慮する必要がある。
- セキュリティ面では、ツールに与える権限やアクセス制御を明確にし、モデルに渡す説明文からセンシティブ情報がリークしないよう注意する。
-
ライブラリ設計上の利点: TypeScriptで書かれているため、型定義によりツールスキーマ(引数の型や戻り値など)を明示しやすく、IDEでの補完や静的チェックが効きます。また、ファイル数が少なく依存も控えめであることから、大きなシステムにも軽量に組み込める点が魅力です。
-
拡張・改善ポイント(実務的提案):
- メタデータ重視のスコアリング(権限レベル、実行コスト、成功率など)を加える
- 実行ログを基にした学習的ランキング(どのツールが実際に選ばれて成功したかをフィードバック)
- ベクター検索を外部DBに任せる場合のプラグイン設計
- ストレス下でのパフォーマンス計測とスケーラビリティ試験
以上のように、toolpickは「多数ツールを扱うエージェントの実運用問題」を扱う実用的な小さなコンポーネントであり、導入によってトークンコスト削減とモデルの誤選択防止の両面で効果を期待できます。実際に採用する際は、選出アルゴリズムの精度とフォールバック設計を慎重に評価すると良いでしょう。
プロジェクトの構成
主要なファイルとディレクトリ:
- .gitignore: file
- README.md: file
- bun.lock: file
- package.json: file
- src: dir
…他 1 ファイル
(リポジトリはファイル数が少なく、ライブラリとしての導入・理解が容易な構成です。src配下にコア実装が収まっている想定です。)
まとめ
多数のツールを扱うエージェントのトークンコストと誤選択問題に対する、軽量で実践的な解決策です。
リポジトリ情報:
- 名前: toolpick
- 説明: 説明なし
- スター数: 59
- 言語: TypeScript
- URL: https://github.com/pontusab/toolpick
- オーナー: pontusab
- アバター: https://avatars.githubusercontent.com/u/655158?v=4
READMEの抜粋:
toolpick
Your agent has 30 tools. The model sees all of them on every step — tool definitions eat thousands of tokens, the model picks the wrong one, and you’re paying for context it doesn’t need.
toolpick fixes this. It picks the right 5 tools per step so the model only sees what matters.
Install
npm install toolpick
Usage
import { generateText } from "ai";
import { openai } from "@ai-sdk/openai";
import { createToolIndex } from "toolpick";
const index = createT...