Slide 1

Slide 1 text

2026/02/24 数村憲治 © 2026 Fujitsu Limited @kkzr LangChain4jとは一味違う LangChain4j-CDI CDI

Slide 2

Slide 2 text

© 2026 Fujitsu Limited © 2026 Fujitsu Limited アジェンダ AIとJava LangChain4j / LangChain4J-CDI Jakarta Agentic AI 2

Slide 3

Slide 3 text

© 2026 Fujitsu Limited 自己紹介 Jakarta EE 仕様策定委員 MicroProfile ステコミ委員 Adoptium ステコミ委員 JCP Executive Committee メンバー Eclipse Foundation ボードディレクター OCX、Adoptium Summit、JakartaOneなどで登壇 3

Slide 4

Slide 4 text

© 2026 Fujitsu Limited © 2026 Fujitsu Limited アジェンダ AIとJava LangChain4j / LangChain4J-CDI Jakarta Agentic AI 4

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

© 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

Slide 8

Slide 8 text

© 2026 Fujitsu Limited © 2026 Fujitsu Limited LF AI & Data Landscape https://landscapeapp.cncf.io/lfai/ 8

Slide 9

Slide 9 text

© 2026 Fujitsu Limited © 2026 Fujitsu Limited JavaとAI AIの技術進化スピードは速い エンタープライズで成功してきた Javaの標準化・互換戦略はマッチしない 企業が抱えるJava資産・Javaエンジニアを活用するため、 AI-Infused Applicationの成功が今後のカギとなる。 バランスの取れた互換性とイノベーション戦略 9

Slide 10

Slide 10 text

© 2026 Fujitsu Limited © 2026 Fujitsu Limited バランスの取れた互換性とイノベーション戦略 AIシステムを構築サポートするフレームワークの提供 ベクトルDBやGPUをサポートする 現実のユースケース・システムで実証 標準化により企業が安心して使える Javaの仕様と実装を提供 Step1 実践的インテグレーション Step2 プロトタイプでの実証 Step3 AIの標準化 10

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

© 2026 Fujitsu Limited © 2026 Fujitsu Limited AI-Infused Application アーキテクチャ アプリケーション Embedding モデル ベクトルデータ モデル プロンプト プロンプト ベクトル ベクトル プロンプト+類似データ 類似データ 回答 12

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

© 2026 Fujitsu Limited アジェンダ AIとJava LangChain4j / LangChain4J-CDI Jakarta Agentic AI 14

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

© 2026 Fujitsu Limited © 2026 Fujitsu Limited LangChain4jの構成 https://docs.langchain4j.dev/intro/ 16

Slide 17

Slide 17 text

© 2026 Fujitsu Limited © 2026 Fujitsu Limited LangChain4j-CDI LangChain4jをCDI指向プログラミング化するもの AI-Infused Jakarta EE アプリケーションの作成 メリット 宣言的なサービス作成 柔軟な設定 (MP Config) オブザーバビリティ (MP Telemetry) 信頼性 (MP Fault Tolerance) ポータビリティ 17

Slide 18

Slide 18 text

© 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

Slide 19

Slide 19 text

© 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

Slide 20

Slide 20 text

© 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

Slide 21

Slide 21 text

© 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

Slide 22

Slide 22 text

© 2026 Fujitsu Limited © 2026 Fujitsu Limited 便利な機能 (LC4j) プロンプトテンプレート ツール JSONバインディング ガードレール 22

Slide 23

Slide 23 text

© 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

Slide 24

Slide 24 text

© 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

Slide 25

Slide 25 text

© 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

Slide 26

Slide 26 text

© 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

Slide 27

Slide 27 text

© 2026 Fujitsu Limited © 2026 Fujitsu Limited RAG Retriever LC4jでは4つのRetrieverを提供 WebSearchEngineContentRetriever SqlContentRetriever Neo4jContentRetriever EmbeddingStoreContentRetriever 27

Slide 28

Slide 28 text

© 2026 Fujitsu Limited © 2026 Fujitsu Limited アジェンダ AIとJava LangChain4j / LangChain4J-CDI Jakarta Agentic AI 28

Slide 29

Slide 29 text

© 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

Slide 30

Slide 30 text

© 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

Slide 31

Slide 31 text

© 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

Slide 32

Slide 32 text

© 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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

© 2026 Fujitsu Limited © 2026 Fujitsu Limited リリース予定 2026年1QにVersion 1.0 最小限のもの 単体仕様としてリリース Platform / Profile には含めない 34

Slide 35

Slide 35 text

© 2026 Fujitsu Limited © 2026 Fujitsu Limited 35 © 2026 Fujitsu Limited #!xyzxx?*¥a2%7&

Slide 36

Slide 36 text

© 2026 Fujitsu Limited © 2026 Fujitsu Limited 本日紹介したコード 36 https://github.com/fujitsu/app_blog/tree/master/lc4j-cdi-samples

Slide 37

Slide 37 text

© 2026 Fujitsu Limited © 2025 Fujitsu Limited Fujitsu Restricted Thank You