大模型应用开发LangChain4j RAG实战实现向量存储的两种方案
大模型应用开发LangChain4j RAG实战实现向量存储的两种方案

上一篇文章分享了大模型应用开发LangChain4j核心知识点和学习路线图今天这篇文章我来分享大模型应用开发LangChain4j RAG实战实现向量存储的两种方案。通过实际代码案例,逐步掌握Java生态下的AI大模型应用产品开发。
完整代码在文章最后,如果觉得本篇文章对你有用,记得点赞、关注、收藏哦。你的支持是我持续更新的动力!
文章最后可以加入免费的Java&AI技术和支付系统沟通社群,一起探讨Java/你的产品如何与AI结合,请按照要求加入。在群中可以聊开发、系统设计、架构、行业趋势、AI等等话题
LangChain4j 是一个用于构建和操作语言模型(LLM)应用的 Java 框架。通过实际的项目功能案例,看LangChain4j如何提高你开发AI应用的工程能力,帮助你逐步掌握该框架的核心概念和高级功能。
AI专栏软件环境
- IntelliJ IDEA2024.3.4.1
- JDK 17.0.13
- LangChain4j1.0.0-beta1
- Spring Boot 3.4.3
- Spring 6.2.3
- pgvector 0.8.0
- postgresql 16.6
- 通义千问大模型
- 知识库文档
我们先看本篇文章对应的项目结构,请看下图

1 基于内存的向量存储
1.1 pom依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.itbeien.ai</groupId>
<artifactId>langchain4j-labs</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>lab03</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<langchain4j.version>1.0.0-beta1</langchain4j.version>
</properties>
<dependencies>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-community-dashscope-spring-boot-starter</artifactId>
</dependency>
<!-- <dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-community-zhipu-ai</artifactId>
</dependency>-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-easy-rag</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-pgvector</artifactId>
<version>${langchain4j.version}</version>
</dependency>
</dependencies>
</project>
1.2 基于内存的嵌入存储配置
package cn.itbeien.lab03.config;
import cn.itbeien.lab03.service.Assistant;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.rag.content.retriever.EmbeddingStoreContentRetriever;
import dev.langchain4j.service.AiServices;
import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.inmemory.InMemoryEmbeddingStore;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.time.Duration;
/**
* @author itbeien
* 项目网站:https://www.itbeien.cn
* 公众号:贝恩聊架构
* 全网同名,欢迎小伙伴们关注
* Java/AI学习社群
* Copyright© 2025 itbeien
*/
@Configuration
@RequiredArgsConstructor
public class InMemoryEmbeddingConfig {
final ChatLanguageModel chatLanguageModel;
@Bean
public EmbeddingStore<TextSegment> initEmbeddingStore() {
return new InMemoryEmbeddingStore<TextSegment>();
}
@Bean
public Assistant init(EmbeddingStore<TextSegment> embeddingStore) {
return AiServices.builder(Assistant.class)
.chatMemoryProvider(memoryId-> MessageWindowChatMemory.withMaxMessages(10))
.contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
.chatLanguageModel(chatLanguageModel).build();
}
}
1.3 AI助手API
package cn.itbeien.lab03.controller;
import cn.itbeien.lab03.service.Assistant;
import dev.langchain4j.data.document.Document;
import dev.langchain4j.data.document.loader.FileSystemDocumentLoader;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.EmbeddingStoreIngestor;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author itbeien
* 项目网站:https://www.itbeien.cn
* 公众号:贝恩聊架构
* 全网同名,欢迎小伙伴们关注
* Java/AI学习社群
* Copyright© 2025 itbeien
*/
@RestController
@RequestMapping("/chat")
@RequiredArgsConstructor
public class ChatAiAPI {
final ChatLanguageModel chatLanguageModel;
final Assistant assistant;
/**
* 低级别对话API
* @param question
* @return
*/
@RequestMapping("/chat")
public String chat(@RequestParam("question") String question) {
return chatLanguageModel.chat(UserMessage.from(question)).aiMessage().text();
}
/**
* 高级别API对话
* @param question
* @return
*/
@RequestMapping("/assistant")
public String assistant(@RequestParam("question")String question) {
return assistant.chat(question);
}
final EmbeddingStore<TextSegment> embeddingStore;
/**
* 加载企业/个人知识库文档
* @return
*/
@RequestMapping("/load")
public String load() {
List<Document> documents = FileSystemDocumentLoader.loadDocuments("你的知识库文档目录");
EmbeddingStoreIngestor.ingest(documents,embeddingStore);
return "ok";
}
}
1.4 测试RAG功能
向企业AI助手提问与企业相关的业务问题,看是否是想要的结果,下图为在未加载本地知识库大模型给出的答案
很明显下图中的结果不是我想要的关于我们公司SAAS-DB组件的定义

1.4.1 加载知识库到内存
当企业知识库加载成功后,向企业AI助手提问与企业相关的业务问题,看RAG是否生效。下面第一张图为加载企业知识库到内存,第二张图为大模型给出的答案,很明显这一次满足了RAG的功能。正确的回答了saas-db是什么


2 基于外部向量数据库存储
2.1 基于PgVector存储配置
package cn.itbeien.lab03.config;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.pgvector.PgVectorEmbeddingStore;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author itbeien
* 项目网站:https://www.itbeien.cn
* 公众号:贝恩聊架构
* 全网同名,欢迎小伙伴们关注
* Java/AI学习社群
* Copyright© 2025 itbeien
*/
@Configuration
@RequiredArgsConstructor
public class EmbeddingStoreConfig {
final PgVectorConfig pgVectorConfig;
@Bean
public EmbeddingStore<TextSegment> embeddingStore() {
return PgVectorEmbeddingStore.builder().table(pgVectorConfig.getTableName())
.dropTableFirst(true)
.createTable(true)
.host(pgVectorConfig.getHost())
.port(pgVectorConfig.getPort())
.user(pgVectorConfig.getUserName())
.password(pgVectorConfig.getPassword())
.database(pgVectorConfig.getDatabase())
.dimension(384)
.build();
}
}
2.2 测试RAG
在未加载企业知识库到pgvector中时,向企业AI助手提问与企业相关的业务问题,看是否是想要的结果。回答的结果也是一种通用结果,不是企业特定的知识。

2.2.1 加载知识库到PgVector
当企业知识库加载到外部向量库成功后,向企业AI助手提问与企业相关的业务问题,看RAG是否生效。第一,二张图为将企业知识向量化存储到pgvector。第三张图是大模型给出的RAG回答



以上就是今天大模型应用开发LangChain4j RAG实战实现向量存储的两种方案全部内容,文章最后有源码下载地址
欢迎大家关注我的项目实战内容itbeien.cn,一起学习一起进步,在项目和业务中理解各种技术。

欢迎沟通交流Java/AI技术和支付业务,一起探讨大模型应用/SAAS多租户/聚合支付/预付卡系统业务、技术、系统架构、微服务、容器化。并结合大模型应用/SAAS多租户/聚合支付系统深入技术框架/微服务原理及分布式事务原理。加入我的知识星球吧

AI专栏
01IDEA&VsCode集成DeepSeek-V3 API提高编程效率
02IntelliJ IDEA集成主流 AI 编程助手及特性介绍
03Spring AI快速入门-基于DeepSeek&智谱实现聊天应用
04Spring AI中流式对话API如何使用-基于DeepSeek
06SpringAI实现角色扮演(自定义人设)和Prompts模板语法-基于DeepSeek
07LangChain4j实战-Java AI应用开源框架之LangChain4j和Spring AI
08SpringAI基于向量数据库PGVector和智谱大模型实现RAG
09大模型应用开发LangChain4j和SpringBoot3.4.3实战:构建智能问答系统
10大模型应用开发LangChain4j核心知识点和学习路线图
SpringBoot3专栏
01SpringBoot3专栏-SpringBoot3.4.0整合Mybatis-plus和Mybatis
02SpringBoot3.4.0结合Mybatis-plus实现动态数据源
03mapstruct对象映射在Springboot3中这样用就对了
04RocketMQ5.3.1集成SpringBoot3.4.0就这样简单
05SpringBoot3.4.0整合Redisson实现分布式锁
06MySQL增量数据同步利器Canal1.1.7环境搭建流程
07SpringBoot3.4.0集成Canal1.1.7实现MySQL实时同步数据到Redis
08基于Docker-SpringBoot3.4.0集成Apache Pulsar4.0.1实现消息发布和订阅
09SpringBoot3.4.0整合消息中间件Kafka和RabbitMQ
10SpringBoot3.4.0整合ActiveMQ6.1.4
11SpringBoot3整合Spring Security6.4.2 安全认证框架实现简单身份认证
12SpringBoot3.4.1和Spring Security6.4.2实现基于内存和MySQL的用户认证
13SpringBoot3.4.1和Spring Security6.4.2结合OAuth2实现GitHub授权登录
14SpringBoot3.4.1和Spring Security6.4.2结合JWT实现用户登录
16SpringBoot3.4.1基于MySQL8和Quartz实现定时任务管理
17SpringBoot3.4.2基于MyBatis和MySQL8多数据源使用示例
18SpringBoot3.4.3实现(文本/附件/HTML/图片)类型邮件发送案例
19SpringBoot3.4.3实现文件上传和全局异常处理
20SpringBoot3.4.3集成Knife4j实现接口文档管理和调试
21SpringBoot3.4.3基于Caffeine实现本地缓存
22SpringBoot3.4.3基于Spring WebFlux实现SSE功能
23SpringBoot3.4.3基于SpringDoc2和Swagger3实现项目接口文档管理
24SpringBoot3.4.3基于Openfeign实现声明式http接口调用
25SpringBoot3.4.3基于Resilience4j实现服务容错构建高可用系统
26SpringBoot3.4.3基于JSqlParser和MyBatis实现自定义数据权限
跟着我学微服务系列
01跟着我学微服务,什么是微服务?微服务有哪些主流解决方案?
05SpringCloudAlibaba之图文搞懂微服务核心组件在企业级支付系统中的应用
06JDK17+SpringBoot3.4.0+Netty4.1.115搭建企业级支付系统POS网关
07JDK17+SpringCloud2023.0.3搭建企业级支付系统-预付卡支付交易微服务
08JDK17+Dubbo3.3.2搭建企业级支付系统-预付卡支付交易微服务
09JDK17+SpringBoot3.3.6+Netty4.1.115实现企业级支付系统POS网关签到功能
贝恩聊架构-项目实战地址
欢迎大家一起讨论学习,加我备注"Java/AI"拉你进入Java&AI技术讨论群,备注"聚合支付"拉你进入支付系统讨论群,在技术学习、成长、工作的路上不迷路!加我后不要急,每天下午6点左右通过!营销号免入

3 源码地址
贝恩聊架构-SpringBoot3专栏系列文章、资料和源代码会同步到以下地址,代码和资料每周都会同步更新
该仓库地址主要用于存放贝恩聊架构-SpringBoot3专栏、贝恩聊架构-AI专栏、基于企业级支付系统学习微服务整体技术栈所有资料和源码
