最新の安定バージョンについては、Spring AI 2.0.0 を使用してください!

ツール検索ツールによる動的ツール検出

AI エージェントが Slack、GitHub、Jira、MCP サーバーなど、より多くのサービスに接続するにつれて、ツールライブラリは急速に増加します。一般的なマルチサーバー構成では、会話が始まる前に 50 以上のツールが大量のトークンを消費する可能性があります。さらに悪いことに、モデルが 30 以上の類似した名前のツールに直面すると、ツール選択の精度が低下します。

Anthropic によって開拓された (英語) ツール検索ツールパターンは、この問題を解決します。モデルは、すべてのツール定義を事前に読み込むのではなく、必要に応じてツールを検出します。最初は検索ツールのみを受け取り、必要に応じて機能を照会し、関連するツール定義をコンテキストに合わせて展開します。

Spring AI の実装により、数百のツールへのフルアクセスを維持しながら、OpenAI、Anthropic、Gemini モデル全体で 34-64% トークン削減が実現されます。

導入

ツール検索ツール [GitHub] (英語) プロジェクトは、Spring AI の再帰アドバイザーを継承して、Spring AI がサポートするあらゆる LLM プロバイダーで機能する動的ツール検出を実装します。

主な利点:

  • トークン節約 - 検出されたツール定義のみが LLM に送信されます

  • 精度の向上 - モデルは、より小さく関連性の高いセットからより確実にツールを選択します。

  • スケーラビリティ - コンテキストの肥大化なく数百のツールを管理

  • ポータビリティ - OpenAI、Anthropic、Gemini、Ollama、Azure、OpenAI などに対応

ブログ投稿

ブログ投稿では、完全な実装の詳細、パフォーマンスベンチマーク、高度なユースケースについて説明します。

クイックスタート

依存関係

プロジェクトにツール検索ツールの依存関係を追加してください。

<dependency>
    <groupId>org.springaicommunity</groupId>
    <artifactId>tool-search-tool</artifactId>
    <version>2.0.0</version>
</dependency>

<!-- Choose a search strategy -->
<dependency>
    <groupId>org.springaicommunity</groupId>
    <artifactId>tool-searcher-lucene</artifactId>
    <version>2.0.0</version>
</dependency>
dependencies {
    implementation 'org.springaicommunity:tool-search-tool:2.0.0'

    // Choose a search strategy
    implementation 'org.springaicommunity:tool-searcher-lucene:2.0.0'
}
バージョン v1.0.x [GitHub] (英語) は、Spring AI 1.1.x/Spring Boot 3 と互換性があります。バージョン v2.0.x [GitHub] (英語) は、Spring AI 2.x/Spring Boot 4 と互換性があります。

基本的な使い方

@SpringBootApplication
public class Application {

    @Bean
    CommandLineRunner demo(ChatClient.Builder builder, ToolSearcher toolSearcher) {
        return args -> {
            var advisor = ToolSearchToolCallAdvisor.builder()
                .toolSearcher(toolSearcher)
                .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
    }
}

使い方

ToolSearchToolCallAdvisor は、Spring AI の ToolCallAdvisor を継承し、動的なツール検出機能を実現します。

Tool Search Tool Flow
  1. インデックス作成 : 会話開始時に、登録されているすべてのツールが ToolSearcher にインデックス化されます。(しかし、LLM には送られなかった)

  2. 初回リクエスト : LLM にはツール検索ツール定義のみが送信されます

  3. ディスカバリコール : LLM が機能を必要とする場合、クエリを使用して検索ツールを呼び出します。

  4. 検索と展開 ToolSearcher は一致するツールを見つけ、その定義を次のリクエストに追加します。

  5. ツール呼び出し : LLM は、検索ツールと発見されたツールの定義の両方を認識するようになりました。

  6. ツールの実行 : 発見されたツールが実行され、結果が返されます。

  7. レスポンス : LLM は最終的な答えを生成します

検索戦略

ToolSearcher インターフェースは、複数の検索実装をサポートしています。

戦略 実装 最適な用途

セマンティック

VectorToolSearcher

自然言語クエリ、あいまいマッチング

キーワード

LuceneToolSearcher

正確な用語一致、既知のツール名

正規表現

RegexToolSearcher

ツール名のパターン (get_*_data)

利用可能な実装については、ツール検索ツール [GitHub] (英語) を参照してください。

パフォーマンス

28 種類のツールを用いた準備ベンチマークテストでは、トークンの大幅な節約が示されました。

モデル ツール検索を使用 それなし 保存

Gemini

2,165 トークン

5,375 トークン

60%

OpenAI

4,706 トークン

7,175 トークン

34%

Anthropic

6,273 トークン

17,342 トークン

64%

いつ使うか

ツール検索ツールアプローチ 伝統的なアプローチ

システムには 20 種類以上のツールが含まれています

小型ツールライブラリ (20 個未満のツール)

5,000 トークン以上を消費するツール定義

すべてのセッションで頻繁に使用されるツール

複数のサーバーを使用した MCP 搭載システムの構築

非常にコンパクトなツール定義

ツール選択の精度に関する問題が発生しています

サンプルプロジェクト

コミュニティリソース

参照