LangChain4j 是 JVM 生态中模块化、灵活度极高、RAG/Agent 能力成熟的大模型应用开发框架,主打零框架依赖、声明式 API、全链路 RAG、强 Agent 与工具调用、多模型 / 向量库全覆盖,社区活跃且更新极快。下面从定位、架构、核心特点、关键能力与适用场景展开详细说明。
        

一、核心定位

        LangChain4j 是为Java/Kotlin 生态打造的,非 Spring 专属,可独立使用或集成任意 Java 框架(Spring Boot、Quarkus、Micronaut)。

有如下的设计理念:

模块化:组件化积木式设计,按需引入,无强制依赖。

灵活优先:低阶 API 可控、高阶 API 简洁,平衡自由度与开发效率。

Java 原生:拥抱接口、注解、POJO、流式(Flux)等 JVM 范式。

生产就绪:内置重试、缓存、限流、可观测性,适配企业级高可用场景。

二、核心 API 特点

1.底层 API(Core):全可控,无封装黑盒

1)ChatModel:聊天模型统一接口,同步 / 流式 / 异步调用。

2)EmbeddingModel:文本向量化接口,支持批量嵌入。

3)ChatMemory:对话记忆(消息窗口 / Token 窗口 / 持久化)。

4)Tool:工具调用(函数调用)底层抽象。

5)EmbeddingStore:向量存储统一接口(20 + 向量库)。

6)DocumentLoader/Splitter:文档加载与分割全链路组件。

2.高层 API(AI Services):声明式,极简开发

AI Service 注解驱动:定义 Java 接口,框架自动生成实现,类似 Spring Data JPA。

// 声明式接口,无需实现类
interface CustomerSupport {
    String chat(String userMessage);
    @SystemMessage("你是专业的技术顾问")
    String advise(@UserMessage String question);
}
// 自动注入模型与记忆,创建代理实例
CustomerSupport support = AiServices.create(CustomerSupport.class, chatModel);
String response = support.chat("如何集成LangChain4j?");

三、核心特点

1.无侵入式设计:零框架依赖,全生态兼容

1)独立运行:不绑定 Spring 等任何框架,可用于普通 Java 项目、Android、后端服务。

2)轻量集成:Spring Boot 只需引入 starter,自动配置模型、记忆、向量库;也可手动组装组件。

3)依赖极简:核心包仅依赖 Jackson、Slf4j、Reactor(流式),无重型传递依赖。

2.模型生态全覆盖:15+ LLM 提供商,国产支持极佳

1)主流模型:OpenAI(GPT-3.5/4/4o)、Anthropic Claude、Google Gemini、Mistral、Ollama(本地模型)。

2)国产模型:通义千问、DeepSeek、智谱 AI、Moonshot、文心一言、星火认知(官方优先适配)。

3)多模态:支持文本 + 图像输入(如 GPT-4V、Gemini),文生图(DALL・E、Stable Diffusion)。

4)统一切换:一套代码切换模型,仅改配置 / 构造参数,业务逻辑零改动。

3.最成熟的 RAG 全链路:可定制每一步

LangChain4j 的 RAG 是Java 生态最完整、可定制性最强的实现。

1)文档加载:支持 PDF、Markdown、Word、HTML、TXT、CSV,来源包括文件系统、URL、GitHub、S3、Azure Blob。

2)文本分割:Token 分割、段落分割、递归分割,支持自定义分割器,保持语义完整。

3)嵌入与存储:15 + 嵌入模型(OpenAI、BGE、M3E),20 + 向量库(Milvus、PGVector、Chroma、Redis、Pinecone)。

4)检索增强:

     基础:相似度检索、Top-K、元数据过滤。

     高级:查询重写、查询扩展、混合检索(向量 + BM25)、结果重排序、Reciprocal Rank Fusion。

5)可定制 Pipeline:每一步(加载→分割→嵌入→存储→检索→生成)均可自定义扩展。

4.强大的 Agent 与工具调用:自主规划 + 动态工具

1)Agent 类型

  • 简单 Agent:工具调用循环(思考→调用工具→观察→回答)。
  • 规划型 Agent:任务拆解、子任务编排、多步骤执行。
  • 自定义 Agent:可基于底层 API 实现任意复杂的决策逻辑。

2)工具调用(Function Calling):

  • @Tool 注解:快速注册 Java 方法为工具,自动生成 JSON Schema。
  • 动态工具:支持 LLM 动态生成代码并执行(如计算器、数据查询)。
  • 多工具并行:一次请求注册多个工具,模型自主选择调用。

3)记忆集成:Agent 自带对话记忆,支持多轮任务上下文保持。

5.灵活的对话记忆管理:多策略 + 持久化

1)内存记忆

  • MessageWindowChatMemory:限制消息数量(如最近 10 轮)。
  • TokenWindowChatMemory:限制 Token 总数,自动裁剪上下文,避免溢出。

2)持久化记忆:支持 Redis、MySQL、MongoDB,跨会话恢复上下文。

3)记忆分区:支持用户隔离、会话隔离,多用户并行对话无干扰。

6. 结构化输出:类型安全,自动映射 POJO

  • 声明式输出:通过接口方法返回值类型,自动将 LLM 响应映射为 Java 对象。
interface BookAssistant {
    Book recommendBook(String category); // 自动映射JSON到Book类
}
record Book(String title, String author, int year) {}
  • 输出解析器:支持 JSON、XML、Markdown 表格等格式,自动校验格式正确性。

7. 流式响应原生支持:实时输出,适配 SSE

  • Flux 流式:所有模型支持stream()方法,返回Flux<String>,逐块输出结果。
  • SSE 适配:无缝集成 Spring Boot Webflux/MVC,实现聊天界面实时打字效果。
  • 异步非阻塞:基于 Reactor,高并发场景资源占用低。

四、项目实践

1、项目引入依赖

<!-- 核心starter -->
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-spring-boot-starter</artifactId>
    <version>1.0.0-beta</version>
</dependency>

<!-- 对接大模型 以OpenAI为例 -->
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-openai</artifactId>
</dependency>

<!-- 向量库 以Milvus为例 -->
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-milvus</artifactId>
</dependency>

<!-- 文档解析 PDF -->
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-document-parser-pdf</artifactId>
</dependency>

2、配置文件application.yml

langchain4j:
  openai:
    api-key: sk-xxxx
    model-name: gpt-3.5-turbo
  embedding:
    model-name: text-embedding-ada-002
  milvus:
    host: 127.0.0.1
    port: 19530
    collection-name: knowledge_base

3、RAG 知识库问答

1)文档入库

具体业务逻辑:把 PDF/MD/ 官网文档 → 解析 → 分块 → 向量化 → 存入 Milvus

// 1.读取PDF文档
Document document = PdfDocumentParser.parse("docs/规则手册.pdf");

// 2.文本分块
DocumentSplitter splitter = RecursiveDocumentSplitter.builder()
        .chunkSize(500)
        .chunkOverlap(50)
        .build();
List<Document> chunks = splitter.split(document);

// 3.向量化 + 存入向量库
@Autowired
private EmbeddingModel embeddingModel;
@Autowired
private EmbeddingStore<TextEmbedding> embeddingStore;

List<Embedding> embeddings = embeddingModel.embedAll(chunks).content();
embeddingStore.addAll(embeddings, chunks);

2)用户提问

具体业务逻辑:用户问题 → 问题向量化 → 向量库检索相似文档 → 拼接上下文 → 给大模型生成答案

@RestController
@RequestMapping("/ai")
public class AiController {

    @Autowired
    private ChatModel chatModel;
    @Autowired
    private EmbeddingModel embeddingModel;
    @Autowired
    private EmbeddingStore<TextEmbedding> embeddingStore;

    @GetMapping("/qa")
    public String qa(@RequestParam String question) {
        // 1.问题向量化
        Embedding questionEmbedding = embeddingModel.embed(question).content();

        // 2.相似度检索 Top3
        List<Document> relatedDocs = embeddingStore.findRelevant(questionEmbedding, 3);

        // 3.拼接提示词:上下文 + 用户问题
        String prompt = """
                基于下面的参考资料回答用户问题,不要编造:
                参考资料:%s
                用户问题:%s
                """.formatted(relatedDocs, question);

        // 4.调用大模型返回答案
        return chatModel.chat(prompt);
    }
}

4、AI 多轮记忆对话

LangChain4j 内置记忆对话的实现:

// 全局一个会话记忆
ChatMemory memory = MessageWindowChatMemory.withMaxMessages(10);

@Bean
public AiAssistant aiAssistant(ChatModel chatModel) {
    return AiServices.builder(AiAssistant.class)
            .chatModel(chatModel)
            .chatMemory(memory)
            .build();
}

5、AI Agent 自动任务

Agent 会自动:

  1. 拆解任务
  2. 调用多个工具(查数据、统计、文案生成)
  3. 自主多轮执行,直到完成

LangChain4j 提供现成 Agent:

Agent agent = Agent.builder()
        .chatModel(chatModel)
        .tools(dataQueryTool, reportTool)
        .build();

String result = agent.execute("帮我分析本月销售并生成总结");

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐