news 2026/7/2 1:46:52

LangChain4j 实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LangChain4j 实战指南

LangChain4j 实战指南:在 Java 应用中优雅集成大语言模型

概述

如果你是一名 Java 后端开发者,一定经历过这样的阶段:为了调用一次 ChatGPT,自己拼 HTTP 请求、解析 JSON、处理重试与超时;想做 RAG 问答,又要单独对接向量库、Embedding 模型和 Prompt 模板。代码越写越长,却越来越难维护。

LangChain4j正是为解决这类问题而生的开源 Java 库。它对标 Python 生态中的 LangChain,为 JVM 世界提供统一的 LLM 接入 API,并内置 RAG、Tool Calling、对话记忆、Agent 等能力,与 Spring Boot、Quarkus 等企业级框架深度集成。

本文将带你从零理解 LangChain4j 的设计思路,并通过可运行的示例,掌握在 Spring Boot 3 项目中落地 AI 能力的正确姿势。

为什么选择 LangChain4j

对比维度手写 HTTP 调用LangChain4j
模型切换每个厂商一套 SDK统一ChatModel接口,改配置即可
Prompt 管理字符串散落各处@SystemMessage/@UserMessage声明式注解
RAG自研检索 + 拼接逻辑ContentRetriever/RetrievalAugmentor开箱即用
工具调用手动解析 function call@Tool注解 + 自动注册
Spring 集成自行封装 Bean@AiService自动扫描与注入

LangChain4j 的核心价值不是「多包一层 HTTP」,而是把 LLM 应用中的重复模式抽象成可组合、可测试的组件,让业务代码只关注「做什么」,而不是「怎么调 API」。

核心概念

1. ChatModel 与 EmbeddingModel

LangChain4j 将大模型交互抽象为接口:

  • ChatModel:同步对话,传入UserMessage,返回AiMessage
  • StreamingChatModel:流式输出,适合 SSE 场景
  • EmbeddingModel:文本向量化,RAG 的基础

官方与社区提供了 OpenAI、Anthropic、Ollama、Azure、DashScope(通义)等多种集成 Starter,通过application.yml即可完成配置。

2. AI Services(声明式 AI 接口)

AI Services 是 LangChain4j 最具特色的 API,类似 Spring Data JPA 的 Repository:你定义接口,框架生成实现。

@AiServicepublicinterfaceAssistant{@SystemMessage("你是一名专业的 Java 技术顾问,回答简洁准确。")Stringchat(@UserMessageStringuserMessage);}

启动 Spring Boot 应用后,langchain4j-spring-boot-starter会扫描@AiService接口,自动注入ChatModelChatMemoryContentRetriever等组件,并注册为 Spring Bean。

在 Controller 中直接注入即可:

@RestController@RequestMapping("/api/assistant")@RequiredArgsConstructorpublicclassAssistantController{privatefinalAssistantassistant;@PostMapping("/chat")publicStringchat(@RequestBody@ValidChatRequestrequest){returnassistant.chat(request.getMessage());}}

3. Chat Memory(对话记忆)

多轮对话需要上下文。LangChain4j 提供:

  • MessageWindowChatMemory:保留最近 N 条消息
  • ChatMemoryProvider:按用户 ID 隔离会话(配合@MemoryId
@AiServicepublicinterfaceCustomerSupportAgent{@SystemMessage("你是客服助手,请根据历史对话回答用户问题。")Stringreply(@MemoryIdStringsessionId,@UserMessageStringmessage);}

4. Tools(工具调用)

当 LLM 需要查数据库、调接口、执行计算时,使用@Tool将 Java 方法暴露给模型:

@ComponentpublicclassOrderTools{privatefinalOrderServiceorderService;publicOrderTools(OrderServiceorderService){this.orderService=orderService;}@Tool("根据订单号查询订单状态")publicStringgetOrderStatus(@P("订单号")StringorderNo){returnorderService.getStatus(orderNo);}}

在 AI Service 中注册工具:

Assistantassistant=AiServices.builder(Assistant.class).chatModel(chatModel).tools(newOrderTools(orderService)).build();

Spring Boot 场景下,将OrderTools注册为 Bean 后,Starter 会自动发现并注入。

5. RAG(检索增强生成)

RAG 解决「模型不知道你的私有知识」的问题,典型流程:

用户提问 → 向量化 → 检索相关文档片段 → 拼入 Prompt → LLM 生成回答

LangChain4j 提供Naive RAGAdvanced RAG两档能力:

模式组件适用场景
简单 RAGEmbeddingStoreContentRetriever文档问答、知识库
高级 RAGRetrievalAugmentor查询改写、重排序、多路检索

示例:使用内存向量库做文档问答

EmbeddingStore<TextSegment>embeddingStore=newInMemoryEmbeddingStore<>();// 1. 导入文档并切分Documentdocument=FileSystemDocumentLoader.loadDocument(Paths.get("docs/manual.pdf"));DocumentSplittersplitter=DocumentSplitters.recursive(300,30);List<TextSegment>segments=splitter.split(document);// 2. 向量化并入库EmbeddingModelembeddingModel=newAllMiniLmL6V2EmbeddingModel();for(TextSegmentsegment:segments){Embeddingembedding=embeddingModel.embed(segment).content();embeddingStore.add(embedding,segment);}// 3. 构建 ContentRetrieverContentRetrievercontentRetriever=EmbeddingStoreContentRetriever.builder().embeddingStore(embeddingStore).embeddingModel(embeddingModel).maxResults(3).minScore(0.75).build();// 4. 注入 AI ServiceAssistantragAssistant=AiServices.builder(Assistant.class).chatModel(chatModel).contentRetriever(contentRetriever).build();

Spring Boot 快速集成

Maven 依赖

以 OpenAI 为例(Spring Boot 3):

<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai-spring-boot-starter</artifactId><version>1.0.0-beta3</version></dependency><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-spring-boot-starter</artifactId><version>1.0.0-beta3</version></dependency>

版本号请以 Maven Central 最新发布为准。

application.yml 配置

langchain4j:open-ai:chat-model:api-key:${OPENAI_API_KEY}model-name:gpt-4o-minitemperature:0.7timeout:60slog-requests:truelog-responses:true

定义 AI Service

@AiServicepublicinterfaceCodeReviewer{@SystemMessage(""" 你是一名资深 Java Code Reviewer。 请从可读性、性能、空安全、并发安全四个维度给出建议。 输出 Markdown 格式。 """)@UserMessage(""" 请 Review 以下代码: ```java {{code}} ``` """)Stringreview(@V("code")Stringcode);}

Controller 直接注入使用,无需手动AiServices.builder(...)

生产环境最佳实践

1. 分层清晰,Controller 不写 Prompt

  • Controller:参数校验、鉴权、返回封装
  • @AiService:Prompt 与 AI 逻辑
  • @Tool / Service:业务数据访问

这与常规 Spring 分层一致,避免 Prompt 字符串污染 Web 层。

2. 明确事务边界

@Tool方法可能触发数据库写操作。遵循 Spring 事务规范:Tool 内的 DB 操作走 Service 层,不要在 Tool 里直接发 HTTP 或 MQ;若 Tool 被 AI 多次调用,注意幂等与性能。

3. RAG 文档更新策略

向量库与源文档需保持一致:

  • 文档变更 → 重新 Embedding 并 upsert
  • 大规模场景使用 Milvus、PgVector、Elasticsearch 等外部EmbeddingStore
  • 检索结果设置minScore阈值,避免低相关片段污染回答

4. 可观测性

开启请求/响应日志(见上方 yml),并结合 TraceId 关联一次用户会话内的多次 LLM 调用。LangChain4j 支持监听AiServiceRegisteredEvent,在启动时打印已注册的 AI Service 与 Tool 列表,便于排查。

5. 流式响应提升体验

长文生成场景,接口返回类型改为TokenStream,配合 SSE 推送到前端:

@AiServicepublicinterfaceStreamingWriter{TokenStreamwrite(@UserMessageStringtopic);}

与 LangChain(Python)的对比

特性LangChain (Python)LangChain4j (Java)
生态成熟度非常成熟快速发展中
企业框架FastAPI 等Spring Boot / Quarkus 原生
AI Services部分支持核心设计,注解驱动
MCP 支持已支持 Tool / MCP 集成
适用团队AI 工程 / 数据Java 后端 / 企业 IT

若团队技术栈以 Java 为主,LangChain4j 的学习与维护成本显著低于引入 Python 微服务。

FAQ

Q1:LangChain4j 需要什么 Java 版本?

A:官方要求Java 17+,推荐 Java 21 LTS,与 Spring Boot 3.5+ 搭配。

Q2:能否使用本地 Ollama 模型?

A:可以。引入langchain4j-ollama-spring-boot-starter,配置base-urlhttp://localhost:11434,无需 API Key,适合开发与离线场景。

Q3:RAG 检索结果不准怎么办?

A:依次排查:文档切分粒度(chunk size)、Embedding 模型质量、maxResults/minScore参数、是否需 Advanced RAG(查询扩展、重排序)。

Q4:AI Service 和直接调用 ChatModel 怎么选?

A:简单单次对话可直接用ChatModel;涉及 Memory、Tools、RAG、结构化输出时,优先AI Services,代码量通常减少 60% 以上。

Q5:如何防止 Prompt 注入?

A:对用户输入做长度限制与敏感词过滤;System Prompt 中明确「仅回答与业务相关的问题」;Tool 方法内校验参数合法性,禁止 LLM 间接执行危险操作。

总结

LangChain4j 让 Java 开发者可以用熟悉的方式构建 LLM 应用:

  1. 统一 API屏蔽不同模型厂商差异
  2. AI Services用接口 + 注解声明 Prompt 与能力
  3. Tools / RAG / Memory以组件形式组合,而非堆砌 if-else
  4. Spring Boot Starter实现零样板配置

从「调一次 OpenAI API」到「上线一个可维护的 AI 功能」,差距往往不在模型能力,而在工程化程度。LangChain4j 正是补齐 Java 生态这块短板的关键拼图。

建议下一步:用@AiService+ 本地 Ollama 跑通一个最小问答接口,再逐步叠加 RAG 与 Tool,比一上来追求复杂 Agent 更稳妥。


参考链接

  • LangChain4j 官方文档
  • Spring Boot 集成教程
  • AI Services 教程
  • GitHub 示例仓库
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/2 1:46:07

moby-dockerd-启动流程详解

┌────────────────────────────────────────────────────────────────────────┐ │ 用户在 shell 里敲: $ dockerd │ └──────────────…

作者头像 李华
网站建设 2026/7/2 1:43:18

OpenAI-compatible API 接入前必须检查的 5 个配置

为什么只改 base URL 还会报错 很多 OpenAI-compatible API 接入问题&#xff0c;不是 SDK 不能用&#xff0c;而是 base URL、API Key 和模型 ID 来自不同平台。 接入前的 5 项检查 检查 base URL&#xff1a;确认协议、域名以及 /v1 路径完整。检查 API Key&#xff1a;必须使…

作者头像 李华
网站建设 2026/7/2 1:42:21

Mega安汇:长期观察者更在意的信息透明度,这里做个逻辑盘点

对多数外汇相关用户来说&#xff0c;判断平台并不需要复杂术语&#xff0c;关键在于信息能否被快速理解、关键提示是否容易找到、服务体验是否稳定一致。以Mega安汇为例&#xff0c;这里聚焦这些更贴近实际使用的亮点与细节。外汇相关信息更新频繁&#xff0c;平台将关键提示与…

作者头像 李华
网站建设 2026/7/2 1:40:30

无锡幼小衔接哪家靠谱

对于即将步入小学的孩子来说&#xff0c;幼小衔接是成长中关键的一步。很多家长都在问&#xff1a;无锡幼小衔接哪家靠谱&#xff1f; 在经开区&#xff0c;有一家以“因材施教&#xff0c;助力成长”为理念的本地机构——童乐托管&#xff0c;正凭借精细化服务和科学衔接课程&…

作者头像 李华
网站建设 2026/7/2 1:39:14

匿名内部类和实验四

public class AnonyDemo { public static void main(String}TOC 实验四 Java Swing 小学生算术练习 难度选择&#xff08;简单整数/中等小数/进阶分数&#xff09;随机四则运算题目&#xff08; - * /&#xff09;输入答案点击确认/回车按键校验对错实时统计正确/错误数量界面…

作者头像 李华