构建基于Java的AI智能体:使用LangChain4j与Spring AI实现RAG应用

简介: 当大模型需要处理私有、实时的数据时,检索增强生成(RAG)技术成为了核心解决方案。本文深入探讨如何在Java生态中构建具备RAG能力的AI智能体。我们将介绍新兴的Spring AI项目与成熟的LangChain4j框架,详细演示如何从零开始构建一个能够查询私有知识库的智能问答系统。内容涵盖文档加载与分块、向量数据库集成、语义检索以及与大模型的最终合成,并提供完整的代码实现,为Java开发者开启构建复杂AI智能体的大门。

一、 引言:从调用API到构建智能体
单纯调用大模型API只能解决通用问题。真正的企业级AI应用需要模型能够理解和处理外部知识,如公司内部文档、数据库记录等。这就是AI智能体的用武之地——它能感知环境、使用工具(如数据库)、并执行复杂任务。

RAG是构建此类智能体的关键技术栈。其核心思想是:在向大模型提问前,先从私有知识库中检索出最相关的信息片段,并将其作为上下文与问题一同提交给模型,从而得到基于特定知识的精准回答。

本文将对比介绍两个Java领域的AI框架:Spring AI(Spring官方新项目,提供抽象层)和LangChain4j(灵感源于Python的LangChain,功能丰富),并分别展示如何用它们实现RAG流水线。

二、 技术选型与项目初始化

  1. 框架简介

Spring AI(选学):致力于为AI应用开发提供熟悉的Spring范式(如AIClient抽象、PromptTemplate)。目前仍在早期阶段,但背靠Spring生态,前景可观。

LangChain4j(主打):一个功能强大、设计优雅的Java库,提供了大量现成的组件(文档加载器、工具、链),用于构建AI应用,是目前Java生态中最接近Python LangChain成熟度的选择。

  1. 项目依赖

本例我们以LangChain4j为主进行构建。在pom.xml中引入以下依赖:

xml


0.29.0




org.springframework.boot
spring-boot-starter-web

<!-- LangChain4j 核心 -->
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j</artifactId>
    <version>${langchain4j.version}</version>
</dependency>

<!-- LangChain4j 用于OpenAI集成 -->
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-open-ai</artifactId>
    <version>${langchain4j.version}</version>
</dependency>

<!-- LangChain4j 本地向量库(暂存嵌入向量) -->
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-embeddings-all-minilm-l6-v2</artifactId>
    <version>${langchain4j.version}</version>
</dependency>

<!-- 用于从文件系统加载文档 -->
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-document-parser-apache-poi</artifactId>
    <version>${langchain4j.version}</version>
</dependency>

  1. 配置信息(application.yml)

yaml
langchain4j:
openai:
chat-model:
api-key: ${OPENAI_API_KEY}
model-name: "gpt-3.5-turbo"
embedding-model:
api-key: ${OPENAI_API_KEY}
model-name: "text-embedding-ada-002"

知识库文档路径

app:
knowledge-base-path: "./knowledge-base"
三、 核心实现:四步构建RAG流水线
一个完整的RAG系统包含四个关键步骤:文档摄入、向量化与存储、检索和生成。

  1. 文档摄入与分块(Ingestion)

首先,我们需要将原始文档(如PDF、Word、TXT)加载进来,并切割成适合处理的小片段(chunks)。

java
import dev.langchain4j.data.document.Document;
import dev.langchain4j.data.document.DocumentParser;
import dev.langchain4j.data.document.DocumentSplitter;
import dev.langchain4j.data.document.loader.FileSystemDocumentLoader;
import dev.langchain4j.data.document.parser.TextDocumentParser;
import dev.langchain4j.data.document.splitter.DocumentSplitters;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.EmbeddingStoreIngestor;
import dev.langchain4j.store.embedding.inmemory.InMemoryEmbeddingStore;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.nio.file.Paths;
import java.util.List;

@Configuration
public class DocumentIngestionConfig {

@Bean
public EmbeddingStore<TextSegment> embeddingStore() {
    // 使用内存向量库作为示例。生产环境可换为ChromaDB、PgVector等持久化方案。
    return new InMemoryEmbeddingStore<>();
}

@Bean
public EmbeddingStoreIngestor embeddingStoreIngestor(EmbeddingStore<TextSegment> embeddingStore, EmbeddingModel embeddingModel) {
    // EmbeddingStoreIngestor 是一个工具类,封装了分块、向量化、存储的流水线
    return EmbeddingStoreIngestor.builder()
            .documentSplitter(DocumentSplitters.recursive(500, 100)) // 递归分块,最大500字符,重叠100字符
            .embeddingModel(embeddingModel)
            .embeddingStore(embeddingStore)
            .build();
}

// 应用启动时加载知识库的Bean
@Bean
public Boolean loadKnowledgeBase(EmbeddingStoreIngestor ingestor, @Value("${app.knowledge-base-path}") String path) {
    List<Document> documents = FileSystemDocumentLoader.loadDocuments(Paths.get(path), new TextDocumentParser());
    ingestor.ingest(documents);
    System.out.println("知识库文档加载完毕!");
    return true;
}

}

  1. 创建AI服务(智能体)

接下来,我们定义一个AI服务接口。LangChain4j会通过动态代理自动为我们实现它。

java
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.V;

// 定义智能体的“大脑”
public interface KnowledgeBaseAssistant {

@SystemMessage("""
    你是一个专业的客服助手,专门回答关于公司产品和服务的问题。
    请严格根据提供的信息来源进行回答。如果信息来源中没有相关答案,请明确告知"根据现有资料,我暂时无法回答这个问题。"
    请保持回答友好、简洁且准确。
    """)
String answerQuestion(@UserMessage @V("question") String question);

}

  1. 装配智能体(将检索与生成连接)

这是最核心的一步,我们将检索器(Retriever)和聊天模型(ChatModel)组装成一个具备RAG能力的AI服务。

java
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.rag.content.retriever.EmbeddingStoreContentRetriever;
import dev.langchain4j.service.AiServices;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AIConfig {

@Bean
public KnowledgeBaseAssistant knowledgeBaseAssistant(
        ChatLanguageModel chatLanguageModel,
        EmbeddingStore<TextSegment> embeddingStore,
        EmbeddingModel embeddingModel) {

    // 1. 创建内容检索器
    EmbeddingStoreContentRetriever retriever = EmbeddingStoreContentRetriever.builder()
            .embeddingStore(embeddingStore)
            .embeddingModel(embeddingModel)
            .maxResults(2) // 每次检索最相关的2个片段
            .build();

    // 2. 使用AiServices将检索器与AI模型绑定到接口上
    return AiServices.builder(KnowledgeBaseAssistant.class)
            .chatLanguageModel(chatLanguageModel)
            .contentRetriever(retriever) // 关键:注入RAG能力!
            .build();
}

}

  1. 提供REST API

最后,我们创建一个简单的控制器来暴露服务。

java
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/assistant")
public class AssistantController {

private final KnowledgeBaseAssistant assistant;

public AssistantController(KnowledgeBaseAssistant assistant) {
    this.assistant = assistant;
}

@PostMapping("/ask")
public String askQuestion(@RequestBody QuestionRequest request) {
    return assistant.answerQuestion(request.question());
}

public record QuestionRequest(String question) {}

}
四、 测试与进阶探讨
测试:

在./knowledge-base目录下放入你的公司手册、API文档等文本文件。

启动应用后,提问:“我们公司的主要产品是什么?” 智能体会自动检索知识库中的相关内容并生成回答。

进阶探讨:

向量数据库升级:内存向量库重启后数据丢失。生产环境应集成PostgreSQL(pgvector扩展)、RedisStack或ChromaDB等专业向量数据库。

更复杂的智能体:LangChain4j支持让AI智能体“使用工具”。例如,可以定义一个工具方法@Tool("查询用户订单信息"),让智能体在回答关于订单的问题时,自动调用后端服务查询真实数据。

与Spring AI的对比:Spring AI提供了类似的抽象,例如VectorStore接口和AiClient。其开发体验更“Spring化”,但当前版本(如1.0.0-M5)的文档和社区生态尚不如LangChain4j成熟。长期来看,两者都值得关注。

五、 总结
通过LangChain4j框架,Java开发者能够以声明式、模块化的方式高效构建功能强大的AI智能体。本文演示的RAG应用只是一个起点。通过组合不同的工具、模型和记忆机制,我们可以创造出能够理解复杂指令、与外部系统交互并完成闭环任务的下一代Java应用。随着Spring AI等官方项目的持续发力,Java在AI应用工程领域的地位必将愈发巩固,为开发者提供坚实可靠的智能底层架构。

目录
相关文章
|
26天前
|
云安全 人工智能 安全
Dify平台集成阿里云AI安全护栏,构建AI Runtime安全防线
阿里云 AI 安全护栏加入Dify平台,打造可信赖的 AI
|
26天前
|
人工智能 测试技术 API
构建AI智能体:二、DeepSeek的Ollama部署FastAPI封装调用
本文介绍如何通过Ollama本地部署DeepSeek大模型,结合FastAPI实现API接口调用。涵盖Ollama安装、路径迁移、模型下载运行及REST API封装全过程,助力快速构建可扩展的AI应用服务。
445 6
|
26天前
|
人工智能 API 开发工具
构建AI智能体:一、初识AI大模型与API调用
本文介绍大模型基础知识及API调用方法,涵盖阿里云百炼平台密钥申请、DashScope SDK使用、Python调用示例(如文本情感分析、图像文字识别),助力开发者快速上手大模型应用开发。
819 16
构建AI智能体:一、初识AI大模型与API调用
|
24天前
|
存储 机器学习/深度学习 人工智能
构建AI智能体:三、Prompt提示词工程:几句话让AI秒懂你心
本文深入浅出地讲解Prompt原理及其与大模型的关系,系统介绍Prompt的核心要素、编写原则与应用场景,帮助用户通过精准指令提升AI交互效率,释放大模型潜能。
319 5
|
27天前
|
机器学习/深度学习 人工智能 JSON
PHP从0到1实现 AI 智能体系统并且训练知识库资料
本文详解如何用PHP从0到1构建AI智能体,涵盖提示词设计、记忆管理、知识库集成与反馈优化四大核心训练维度,结合实战案例与系统架构,助你打造懂业务、会进化的专属AI助手。
170 6
|
26天前
|
人工智能 运维 Kubernetes
Serverless 应用引擎 SAE:为传统应用托底,为 AI 创新加速
在容器技术持续演进与 AI 全面爆发的当下,企业既要稳健托管传统业务,又要高效落地 AI 创新,如何在复杂的基础设施与频繁的版本变化中保持敏捷、稳定与低成本,成了所有技术团队的共同挑战。阿里云 Serverless 应用引擎(SAE)正是为应对这一时代挑战而生的破局者,SAE 以“免运维、强稳定、极致降本”为核心,通过一站式的应用级托管能力,同时支撑传统应用与 AI 应用,让企业把更多精力投入到业务创新。
366 29
|
1月前
|
消息中间件 人工智能 安全
云原生进化论:加速构建 AI 应用
本文将和大家分享过去一年在支持企业构建 AI 应用过程的一些实践和思考。
418 26
|
2月前
|
人工智能 安全 中间件
阿里云 AI 中间件重磅发布,打通 AI 应用落地“最后一公里”
9 月 26 日,2025 云栖大会 AI 中间件:AI 时代的中间件技术演进与创新实践论坛上,阿里云智能集团资深技术专家林清山发表主题演讲《未来已来:下一代 AI 中间件重磅发布,解锁 AI 应用架构新范式》,重磅发布阿里云 AI 中间件,提供面向分布式多 Agent 架构的基座,包括:AgentScope-Java(兼容 Spring AI Alibaba 生态),AI MQ(基于Apache RocketMQ 的 AI 能力升级),AI 网关 Higress,AI 注册与配置中心 Nacos,以及覆盖模型与算力的 AI 可观测体系。
713 38
|
28天前
|
设计模式 人工智能 自然语言处理
3个月圈粉百万,这个AI应用在海外火了
不知道大家还记不记得,我之前推荐过一个叫 Agnes 的 AI 应用,也是当时在 WAIC 了解到的。
282 1

热门文章

最新文章