このバージョンはまだ開発中であり、まだ安定しているとは見なされていません。最新の安定バージョンについては、Spring AI 1.1.7 を使用してください! |
ツール検索ツールによる動的ツール検出
AI エージェントが Slack、GitHub、Jira、MCP サーバーなど、より多くのサービスに接続するにつれて、ツールライブラリは急速に増加します。一般的なマルチサーバー構成では、会話が始まる前に 50 以上のツールが大量のトークンを消費する可能性があります。さらに悪いことに、モデルが 30 以上の類似した名前のツールに直面すると、ツール選択の精度が低下します。
Anthropic によって開拓された (英語) ツール検索ツールパターンは、この問題を解決します。モデルは、すべてのツール定義を事前に読み込むのではなく、必要に応じてツールを検出します。最初は検索ツールのみを受け取り、必要に応じて機能を照会し、関連するツール定義をコンテキストに合わせて展開します。
Spring AI の実装により、数百のツールへのフルアクセスを維持しながら、OpenAI、Anthropic、Gemini モデル全体で 34-64% トークン削減が実現されます。
導入
ツール検索ツールは、Spring AI の再帰アドバイザーを継承し、Spring AI がサポートするあらゆる LLM プロバイダーで動作する動的なツール検出機能を実現します。
主な利点:
トークン節約 - 検出されたツール定義のみが LLM に送信されます
精度の向上 - モデルは、より小さく関連性の高いセットからより確実にツールを選択します。
スケーラビリティ - コンテキストの肥大化なく数百のツールを管理
ポータビリティ - OpenAI、Anthropic、Gemini、Ollama などに対応
クイックスタート
基本的な使い方
@SpringBootApplication
public class Application {
@Bean
CommandLineRunner demo(ChatClient.Builder builder, ToolIndex toolIndex) {
return args -> {
var advisor = ToolSearchToolCallingAdvisor.builder()
.toolIndex(toolIndex)
.build();
ChatClient chatClient = builder
.defaultTools(new MyTools()) // 100s of tools registered but NOT sent to LLM initially
.defaultAdvisors(advisor) // Activate Tool Search Tool
.build();
var answer = chatClient.prompt("""
Help me plan what to wear today in Amsterdam.
Please suggest clothing shops that are open right now.
""").call().content();
System.out.println(answer);
};
}
static class MyTools {
@Tool(description = "Get the weather for a given location at a given time")
public String weather(String location,
@ToolParam(description = "YYYY-MM-DDTHH:mm") String atTime) {
// implementation
}
@Tool(description = "Get clothing shop names for a given location at a given time")
public List<String> clothing(String location,
@ToolParam(description = "YYYY-MM-DDTHH:mm") String openAtTime) {
// implementation
}
@Tool(description = "Current date and time for a given location")
public String currentTime(String location) {
// implementation
}
// ... potentially hundreds more tools
}
}使い方
ToolSearchToolCallingAdvisor は、Spring AI の ToolCallingAdvisor を継承し、動的なツール検出機能を実現します。

インデックス作成 : 会話開始時に、登録されているすべてのツールが
ToolIndexにインデックス化されます。(しかし、LLM には送られなかった)初回リクエスト : LLM にはツール検索ツール定義のみが送信されます
ディスカバリコール : LLM が機能を必要とする場合、クエリを使用して検索ツールを呼び出します。
検索と展開 :
ToolIndexは一致するツールを見つけ、その定義を次のリクエストに追加します。ツール呼び出し : LLM は、検索ツールと発見されたツールの定義の両方を認識するようになりました。
ツールの実行 : 発見されたツールが実行され、結果が返されます。
レスポンス : LLM は最終的な答えを生成します
検索戦略
ToolIndex インターフェースは、複数の検索実装をサポートしています。
| 戦略 | 実装 | 最適な用途 |
|---|---|---|
セマンティック |
| 自然言語クエリ、あいまいマッチング |
キーワード |
| 正確な用語一致、既知のツール名 |
正規表現 |
| ツール名のパターン ( |
利用可能な実装および構成オプションについては、ツール検索ツールを参照してください。
パフォーマンス
28 種類のツールを用いた準備ベンチマークテストでは、トークンの大幅な節約が示されました。
| モデル | ツール検索を使用 | それなし | 保存 |
|---|---|---|---|
Gemini | 2,165 トークン | 5,375 トークン | 60% |
OpenAI | 4,706 トークン | 7,175 トークン | 34% |
Anthropic | 6,273 トークン | 17,342 トークン | 64% |
いつ使うか
| ツール検索ツールアプローチ | 伝統的なアプローチ |
|---|---|
システムには 20 種類以上のツールが含まれています | 小型ツールライブラリ (20 個未満のツール) |
5,000 トークン以上を消費するツール定義 | すべてのセッションで頻繁に使用されるツール |
複数のサーバーを使用した MCP 搭載システムの構築 | 非常にコンパクトなツール定義 |
ツール選択の精度に関する問題が発生しています |
参照
Anthropic 高度なツール使用 (英語) - オリジナルパターンの説明
Spring AI 再帰アドバイザーブログ (英語) - ツール検索実装用 Foundation