Upgrade to Pro — share decks privately, control downloads, hide ads and more …

LangChain4jとは一味違うLangChain4j-CDI

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

 LangChain4jとは一味違うLangChain4j-CDI

LangChain4jプログラムをCDI流儀でかけるLangChain4j-CDIの紹介。

Avatar for Kenji Kazumura

Kenji Kazumura

February 24, 2026
Tweet

More Decks by Kenji Kazumura

Other Decks in Programming

Transcript

  1. © 2026 Fujitsu Limited © 2026 Fujitsu Limited アジェンダ AIとJava

    LangChain4j / LangChain4J-CDI Jakarta Agentic AI 2
  2. © 2026 Fujitsu Limited 自己紹介 Jakarta EE 仕様策定委員 MicroProfile ステコミ委員

    Adoptium ステコミ委員 JCP Executive Committee メンバー Eclipse Foundation ボードディレクター OCX、Adoptium Summit、JakartaOneなどで登壇 3
  3. © 2026 Fujitsu Limited © 2026 Fujitsu Limited アジェンダ AIとJava

    LangChain4j / LangChain4J-CDI Jakarta Agentic AI 4
  4. © 2026 Fujitsu Limited © 2026 Fujitsu Limited AIの分類 Predictive

    Generative Artificial Intelligence Machine Learning Deep Learning 未来を予想 例:天気予報 実用で使われているAI のほどんどはこっち 期待は大きいが。。。 創発 例:Chat GPT、 Stable Diffusion 5
  5. © 2026 Fujitsu Limited © 2026 Fujitsu Limited AIとOSS 主流AIの開発はOSSではない

    周辺技術はOSSもある Linux FoundationではLandscapeとしてまとめているが、 Javaに関するものは、ほぼない AIソフト開発はデータサイエンティスト向けに先行 「AI & Data」でまとめているように、 アプリケーション開発者向けではない 6
  6. © 2026 Fujitsu Limited © 2026 Fujitsu Limited (参考) OSAID

    1.0 Open Source AI Definition OSIによるオープンソースAIの定義 https://opensource.org/ai Validationフェーズをパスしたもの ライセンスを変えればパスしそうなもの パスしないもの Pythia(Eleuther AI), OLMo(AI2), Amber and CrystalCoder(LLM360), T5(Google) BLOOM(BigScience), Starcoder2(BigCode), Falcon(TII) Llama2(Meta), Grok(X), Phi-2(Microsoft), Mixtral(Mistral) 7
  7. © 2026 Fujitsu Limited © 2026 Fujitsu Limited LF AI

    & Data Landscape https://landscapeapp.cncf.io/lfai/ 8
  8. © 2026 Fujitsu Limited © 2026 Fujitsu Limited JavaとAI AIの技術進化スピードは速い

    エンタープライズで成功してきた Javaの標準化・互換戦略はマッチしない 企業が抱えるJava資産・Javaエンジニアを活用するため、 AI-Infused Applicationの成功が今後のカギとなる。 バランスの取れた互換性とイノベーション戦略 9
  9. © 2026 Fujitsu Limited © 2026 Fujitsu Limited バランスの取れた互換性とイノベーション戦略 AIシステムを構築サポートするフレームワークの提供

    ベクトルDBやGPUをサポートする 現実のユースケース・システムで実証 標準化により企業が安心して使える Javaの仕様と実装を提供 Step1 実践的インテグレーション Step2 プロトタイプでの実証 Step3 AIの標準化 10
  10. © 2026 Fujitsu Limited © 2026 Fujitsu Limited AI-Infused Application

    既存システムと同様のエンタープライズ品質が求められる 人工知能的な機能を備えたソフトウェアプログラム AIモデルを活用し、知能的な機能を実装する セキュリティ オブザーバビリティ API管理 トランザクション フォールトトレラント ・・・ 11
  11. © 2026 Fujitsu Limited © 2026 Fujitsu Limited AI-Infused Application

    アーキテクチャ アプリケーション Embedding モデル ベクトルデータ モデル プロンプト プロンプト ベクトル ベクトル プロンプト+類似データ 類似データ 回答 12
  12. Java X AI 関連技術 Landscape 2025年版 メモリアクセス・GPU制御 RAG利用 AIフレームワーク ネイティブラッパー

    トレーニング MCP / A2A / ACP利用 AIクラウドネイティブ化 AIリモートアクセス Vector API HAT Babylon Valhalla JCuda TensorFlow for Java FFM Deep Java Library Visual Recognition Jakarta Agentic AI MicroProfile REST Client LangChain4j Jakarta Messaging Quarkus AI Spring AI LangGraph4j Embabel Jakarta Transactions Jakarta Query Jakarta Data Jakarta Security Jakarta Restful Web Services Jakarta RPC MicroProfile Fault Tolerance MicroProfile Telemetry MicroProfile Config Jakarta Websocket Jakarta Config Agentic AI
  13. © 2026 Fujitsu Limited © 2026 Fujitsu Limited LangChain4j AI-Infused

    Java アプリケーションを構築するツールキット 多数のLLM/SMLとのインテグレーションを提供 一般的パターン(RAG、関数呼出し)のビルディングブロック を提供 プロンプト・メッセージ・メモリ・トークンなどの抽象化 多種多様なベクトルストアとドキュメントデータの統合 15
  14. © 2026 Fujitsu Limited © 2026 Fujitsu Limited LangChain4j-CDI LangChain4jをCDI指向プログラミング化するもの

    AI-Infused Jakarta EE アプリケーションの作成 メリット 宣言的なサービス作成 柔軟な設定 (MP Config) オブザーバビリティ (MP Telemetry) 信頼性 (MP Fault Tolerance) ポータビリティ 17
  15. © 2026 Fujitsu Limited © 2026 Fujitsu Limited (参考) LangChain4j-CDIの歴史

    2023年頃 LangChainにインスパイアされてLC4Jプロジェクト作成 Java版LangChainではない(LangChainとは無関係) 2024年3月頃 MicroProfile AIの議論が浮上する 2024年5月頃 LC4J-CDIの前身となるsmallrye-llmプロジェクト作成 2026年1月 LangChain4j-CDI 1.0のリリース 18
  16. © 2026 Fujitsu Limited © 2026 Fujitsu Limited LangChain4j コード例

    var apiKey = System.getenv("GOOGLE_API_KEY"); ChatModel model = GoogleAiGeminiChatModel.builder() .apiKey(apiKey) .modelName("gemini-2.5-flash-lite") .build(); var svc = AiServices.create(ChatService.class, model); var response = svc.chat("Tell me a joke."); ビルダーパターンで、モデルやキーを指定 19
  17. © 2026 Fujitsu Limited © 2026 Fujitsu Limited AI Service

    (LC4j-CDI) @RegisterAIService(chatModelName="chat-model") public interface ChatService { String chat(@UserMessage String userMessage); } RegisterAIServiceでAI Serviceを定義 @Inject private ChatService svc; ・・・ var response = svc.chat("Tell me a joke.") 作成したAI ServiceをInjectして使う モデルやキーは外出し可能 20
  18. © 2026 Fujitsu Limited © 2026 Fujitsu Limited AI Service

    設定 dev.langchain4j.cdi.plugin.chat-model.class= dev.langchain4j.model.googleai.GoogleAiGeminiChatModel dev.langchain4j.cdi.plugin.chat-model.config.api-key= ${GOOGLE_API_KEY} dev.langchain4j.cdi.plugin.chat-model.config.model-name= gemini-2.5-flash-lite META-INF/microprofile-config.properties (*) 紙面の都合上キーとバリューが改行されてます MicroProfile Configで設定 21
  19. © 2026 Fujitsu Limited © 2026 Fujitsu Limited 便利な機能 (LC4j)

    プロンプトテンプレート ツール JSONバインディング ガードレール 22
  20. © 2026 Fujitsu Limited © 2026 Fujitsu Limited MicroProfile Telemetry

    トレース用リスナー dev.langchain4j.cdi.telemetry.SpanChatModelListener メトリクス用リスナー dev.langchain4j.cdi.telemetry.MetricsChatModelListener LC4j-CDIでは二つのリスナーを提供 MP Configでリスナーを指定 dev.langchain4j.cdi.plugin.chat-model.config.listeners= lookup:@all (*) 紙面の都合上キーとバリューが改行されてます 23
  21. © 2026 Fujitsu Limited © 2026 Fujitsu Limited AI メトリクス

    gen_ai.client.token.usage gen_ai.client.operation.duratioin gen_ai.server.request.duration gen_ai.server.time_per_output_token gen_ai.server.time_to_first_token OpenTelemetryセマンティック規約でAI関連メトリクスが定義 https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-metrics/ LC4j-CDIで出力 24
  22. © 2026 Fujitsu Limited © 2026 Fujitsu Limited Fault Tolerance

    @RegisterAIService(chatModelName="chat-model") public interface ChatService { @Retry(maxRetries=2) @Fallback(fallbackmethod="chatFallback") String chat(@UserMessage String userMessage); default String chatFallback(String userMessage) { return "something wrong." } } MP FTを使う場合は、LC4jのリトライ機能はオフにしておく方がよい 25
  23. © 2026 Fujitsu Limited © 2026 Fujitsu Limited RAG @RegisterAIService(chatModelName="chat-model",

    contentRetrieverName = "rag-ret") public interface ChatService { RegisterAIServiceでretriever名を指定 使用するretrieverは、MP Configで dev.langchain4j.cdi.plugin.rag-ret.class= dev.langchain4j.rag.content.retriever.EmbeddingStoreContentRetriever dev.langchain4j.cdi.plugin.rag-ret.config.embeddingStore= lookup:@default dev.langchain4j.cdi.plugin.rag-ret.config.embeddingModel= lookup:@default (*) 紙面の都合上キーとバリューが改行されてます 26
  24. © 2026 Fujitsu Limited © 2026 Fujitsu Limited RAG Retriever

    LC4jでは4つのRetrieverを提供 WebSearchEngineContentRetriever SqlContentRetriever Neo4jContentRetriever EmbeddingStoreContentRetriever 27
  25. © 2026 Fujitsu Limited © 2026 Fujitsu Limited アジェンダ AIとJava

    LangChain4j / LangChain4J-CDI Jakarta Agentic AI 28
  26. © 2026 Fujitsu Limited © 2026 Fujitsu Limited スコープ Jakarta

    EE ランタイムで動作するエージェントの共通パターン LLMにアクセスする最小限のインターフェスを定義 実装は、LangChain4j や Spring AIなど好みのものを使う ワークフローは、ランタイム時にJavaのAPIを通じて動的に変更可能 Jakarta EE の各種APIと統合 Validation, REST, JSON Binding, Persistence, Data, Transactions, NoSQL, Concurrency, Security, Messaging 設定は、Jakarta Config または MicroProfile Config OpenTelemetry をサポート https://github.com/jakartaee/agentic-ai/blob/main/README.md#scope 29
  27. © 2026 Fujitsu Limited © 2026 Fujitsu Limited コード例 (1/3)

    @Agent public class FraudDetectionAgent { @Inject private LargeLanguageModel model; @Inject private EntityManager entityManager; @Trigger private void processTransaction( @Valid BankTransaction transaction) { } 30
  28. © 2026 Fujitsu Limited © 2026 Fujitsu Limited コード例 (2/3)

    @Decision private Result checkFraud (BankTransaction transaction) { String output = model.query( "Is this a fraudulent transaction?" + "If so, how serious is it?", transaction); boolean fraud = isFraud(output); Fraud details = null; if (fraud) details = getFraudDetails(output); return new Result (fraud, details); } 31
  29. © 2026 Fujitsu Limited © 2026 Fujitsu Limited コード例 (3/3)

    @Action private void handleFraud (Fraud fraud, BankTransaction transaction) { if (fraud.isSerious()) alertBankSecurity(fraud); Customer customer = getCustomer(transaction); alertCustomer(fraud, transaction, customer); } @Outcome private void markTransaction(BankTransaction transaction) { } } 32
  30. © 2026 Fujitsu Limited © 2026 Fujitsu Limited Version 1.0

    @Agent CDI Beanとしてエージェントの定義 ワークフローAPI等から名前でlookup可能 @Trigger エージェントワークフローを開始 @Decision エージェントの判断ポイント @Action エージェントの実行ステップ @Outcome エージェントワークフローの終わり 33
  31. © 2026 Fujitsu Limited © 2026 Fujitsu Limited リリース予定 2026年1QにVersion

    1.0 最小限のもの 単体仕様としてリリース Platform / Profile には含めない 34
  32. © 2026 Fujitsu Limited © 2026 Fujitsu Limited 35 ©

    2026 Fujitsu Limited #!xyzxx?*¥a2%7&
  33. © 2026 Fujitsu Limited © 2026 Fujitsu Limited 本日紹介したコード 36

    https://github.com/fujitsu/app_blog/tree/master/lc4j-cdi-samples