Spring AI Example について
Spring AI Exampleは、Spring AIによる MCP サーバーとクライアントの実装パターンを示すプロジェクトです。ツール実装やAI提案アプリを開発する人向けに、SSE、ツールコンテキスト、結果変換の例も含みます。
主な機能
- 01MCP サーバーとクライアントの実装
- 02WebFluxとWebMvcのSSE対応
- 03アノテーションによるツール定義
- 04ツール結果変換のカスタマイズ
- 05ツールコンテキストとパラメーター説明
活用シーン
- 01Spring AIのツール実装パターンの学習
- 02AI提案クライアントの構築例
- 03MCPとSSEの連携方法の確認
MCP 対応
MCP サーバー実装と、AI提案向けの MCP クライアント実装を含みます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Spring AI の例
プロジェクトの概要
このプロジェクトでは、Spring AI のツールを使用するためのさまざまな実装パターンとベストプラクティスを紹介します。主に次の 2 つのモジュールで構成されています。
- mcp-server:WebFlux と WebMvc SSE の両方をサポートする Model Context Protocol(MCP)サーバーを実装します
- proposal-agent:AI を活用した提案を作成するための MCP クライアントを実装します
プロジェクト構成
.
├── mcp-server/ # MCP Server implementation
│ ├── src/ # Server source code
│ └── README.md # Server documentation
├── proposal-agent/ # MCP Client implementation
│ ├── src/ # Client source code
│ └── README.md # Client documentation
└── src/ # Common source code
ツールの実装パターン
メソッドをツールとして使用する
Spring AI は、@Tool を付与することでメソッドをツールとして使用できます。DateTimeTools の例を次に示します。
@Tool(name = "getCurrentDateTime", description = "Get the current date and time")
public String getCurrentDateTime() {
return LocalDateTime.now().atZone(LocaleContextHolder.getTimeZone().toZoneId()).toString();
}
ツール結果コンバーター
ツールの結果の形式を制御するために、カスタム結果コンバーターを実装できます。CustomToolCallResultConverter の例を次に示します。
@Tool(name = "getCustomer",
description = "Retrieve customer information",
resultConverter = CustomToolCallResultConverter.class)
public Customer getCustomer(String name, ToolContext context) {
return new Customer(name, "[email protected]");
}
ツールコンテキスト
Spring AI では、コンテキスト情報にアクセスするために、ツールメソッドへ ToolContext パラメーターを注入できます。
public Customer getCustomerByEmail(String email, ToolContext context) {
log.info("Context: {}", context);
return new Customer("Demo", email);
}
ツールパラメーター
ツールパラメーターには @ToolParam を付与して説明を指定できます。
@Tool(name = "setAlarm")
public void setAlarm(@ToolParam(description = "Time in ISO-8601 format") String time) {
// Implementation
}
設定
このプロジェクトでは Spring Boot を使用しており、主な設定は次のとおりです。
- Ollama AI モデルとの統合
- PGVector を使用したベクトルストア
- 開発用の H2 データベース
- Web アクセス用の CORS 設定
- MCP サーバーの実装
- MCP クライアントの実装
- SSE の実装
SSE の実装
リアルタイム更新のための SSE(Server-Sent Events)の実装です。これは SseEmitter クラスを使用して実現します。
技術スタック
- Spring Boot
- Spring AI
- Ollama AI モデル
- PGVector ベクトルストア
- H2 データベース
- CORS 設定
- リアルタイム更新用の SSE(Server-Sent Events)
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。