langchain4j-ai-services-patterns について
LangChain4jで宣言的かつ型安全なAIサービスを構築するJava開発者向けスキルです。インターフェース定義、会話メモリ、ツール呼び出し、構造化出力、RAGパターンを扱います。
主な機能
- 01JavaインターフェースによるAIサービス
- 02システム・ユーザーメッセージのアノテーション
- 03複数ターンの会話メモリ管理
- 04ツールと関数の呼び出し
- 05構造化出力とRAGパターン
活用シーン
- 01少ない定型コードで会話サービスを作成
- 02複数ユーザーごとに会話メモリを管理
- 03enumやPOJOなど型付きの結果を返す
- 04ツールやRAGを備えたAIサービスを構築
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ giuseppe-trisciuoglio/ developer-kit --skill langchain4j-ai-services-patternsインストール後、Claude Code で/langchain4j-ai-services-patternsを入力して読み込まれたか確認します。
同梱ファイルreferences/examples.mdreferences/references.md
詳細
LangChain4j AI Servicesのパターン
このスキルでは、インターフェースベースのパターン、システムメッセージとユーザーメッセージのアノテーション、メモリ管理、ツール連携、高度なAIアプリケーションパターンを使用して、低レベルのLLMとのやり取りを抽象化したLangChain4jの宣言的なAI Servicesの構築方法を説明します。
概要
LangChain4j AI Servicesでは、アノテーション付きのJavaインターフェースを使用してAI機能を定義し、定型コードを最小限に抑えながら、型安全で宣言的なAIを実現します。
使用する場面
次のような場合にこのスキルを使用します。
- Javaインターフェースを使用して、定型コードを最小限に抑えた宣言的なAIサービスを構築する
- メモリ管理機能を備えた、型安全な会話型AIを作成する
- 関数/ツール呼び出し機能を備えたAIエージェントを実装する
- 構造化データ(列挙型、POJO、リスト)を返すAIサービスを設計する
- RAGパターンを宣言的に統合する
手順
LangChain4jで宣言的なAI Servicesを作成するには、次の手順に従います。
1. AI Serviceインターフェースを定義する
AIとのやり取りを行うメソッドシグネチャを含むJavaインターフェースを作成します。
interface Assistant {
String chat(String userMessage);
}
2. システムメッセージとユーザーメッセージのアノテーションを追加する
@SystemMessageと@UserMessageアノテーションを使用してプロンプトを定義します。
interface CustomerSupportBot {
@SystemMessage("You are a helpful customer support agent for TechCorp")
String handleInquiry(String customerMessage);
@UserMessage("Analyze sentiment: {{it}}")
Sentiment analyzeSentiment(String feedback);
}
3. AI Serviceのインスタンスを作成する
AiServicesのビルダーまたはcreateを使用して、サービスのインスタンスを作成します。
// Simple creation
Assistant assistant = AiServices.create(Assistant.class, chatModel);
// Or with builder for advanced configuration
Assistant assistant = AiServices.builder(Assistant.class)
.chatModel(chatModel)
.build();
4. 複数ターンの会話に対応するメモリを設定する
複数ユーザーのシナリオに対応するため、@MemoryIdを使用してメモリ管理を追加します。
interface MultiUserAssistant {
String chat(@MemoryId String userId, String userMessage);
}
Assistant assistant = AiServices.builder(MultiUserAssistant.class)
.chatModel(model)
.chatMemoryProvider(userId -> MessageWindowChatMemory.withMaxMessages(10))
.build();
5. 関数呼び出し用のツールを統合する
@Toolアノテーションを使用してツールを登録し、AIによる関数の実行を可能にします。
class Calculator {
@Tool("Add two numbers") double add(double a, double b) { return a + b; }
}
interface MathGenius {
String ask(String question);
}
MathGenius mathGenius = AiServices.builder(MathGenius.class)
.chatModel(model)
.tools(new Calculator())
.build();
6. 検証とテストを行う
具体的な検証パターンを使用してAI Servicesをテストします。
// 1. Test with sample inputs
String response = assistant.chat("Hello, how are you?");
assert response != null && !response.isEmpty();
// 2. Validate structured outputs with assertions
Sentiment result = bot.analyzeSentiment("Great product!");
assert result == Sentiment.POSITIVE;
// 3. Log tool calls with side effects for audit
MathGenius math = AiServices.builder(MathGenius.class)
.chatModel(model)
.tools(new Calculator())
.build();
// 4. Test memory isolation between users
String userA = assistant.chat("User A message", "session-a");
String userB = assistant.chat("User B message", "session-b");
assert !userA.equals(userB); // Verify memory isolation
例
実践的な例については、examples.mdを参照してください。次の内容を含む包括的な例を確認できます。
- 基本的なチャットインターフェース
- メモリを備えたステートフルなアシスタント
- 複数ユーザーのシナリオ
- 構造化出力の抽出
- ツール呼び出しと関数の実行
- ストリーミング応答
- エラー処理
- RAGの統合
- 本番環境向けのパターン
APIリファレンス
APIドキュメント、アノテーション、インターフェース、設定パターンの完全な情報は、references.mdを参照してください。
ベストプラクティス
- 文字列ベースのプロンプトではなく、型安全なインターフェースを使用する
- 適切な上限を設定して、適切なメモリ管理を実装する
- パラメーターの説明を含めて、わかりやすいツールの説明を設計する
- カスタムのエラーハンドラーを使用して、エラーを適切に処理する
- 応答の予測可能性を高めるために、構造化出力を使用する
- ユーザー入力の検証を実装する
- 本番環境へのデプロイでは、パフォーマンスを監視する
依存関係
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>1.8.0</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>1.8.0</version>
</dependency>
// Gradle
implementation 'dev.langchain4j:langchain4j:1.8.0'
implementation 'dev.langchain4j:langchain4j-open-ai:1.8.0'
参考資料
制約事項と警告
- AI Servicesが依存するLLMの応答は非決定的です。テストでは変動を考慮してください。
- メモリプロバイダーは会話履歴を保存します。複数ユーザーのシナリオでは、適切にクリーンアップしてください。
- ツールの実行にはコストがかかる場合があります。レート制限とタイムアウト処理を実装してください。
- システムメッセージやユーザーメッセージに、機密データ(APIキーやパスワード)を決して渡さないでください。
- コンテキストウィンドウが大きいとトークンコストが高くなる可能性があります。メッセージを削減する戦略を実装してください。
- ストリーミング応答では、部分的な失敗に対する適切なエラー処理が必要です。
- 本番システムで使用する前に、AIが生成した出力を検証してください。
- 副作用のあるツールには注意してください。AIモデルが予期せず呼び出す可能性があります。
- トークン制限はモデルによって異なります。プロンプトとコンテキストがモデルの制約内に収まるようにしてください。