嘿,AI开发者们!还在为大模型"一本正经地胡说八道"头疼吗?想让你的AI既能侃侃而谈,又能句句有依据?来看看这个基于Spring AI构建的RAG(检索增强生成)示例项目——它就像给大模型配了个"外挂知识库",让AI回答既智能又靠谱!
这不是一个普通的AI Demo。我们用Spring AI框架搭了个"AI大脑增强器",核心玩法是:让AI在回答前先"查资料"。通过向量检索技术,它能从海量文档中精准抓出相关信息,再结合大模型的生成能力,给出有理有据的回答。
简单说:普通AI是"凭记忆答题",这个项目是"带课本考试"——成绩当然更靠谱!
看看我们用了哪些"硬核装备":
- 核心框架:Spring Boot 3.3(稳如老狗的后端基座) + Spring AI 1.0(AI开发加速器)
- AI模型:OpenAI全家桶(deepseek-r1聊上天,doubao-embedding把文字变向量)
- 向量存储:PostgreSQL+pgvector(轻量能打) + Elasticsearch(分布式检索扛把子)
- 记忆外挂:Elasticsearch(帮AI记牢每一次聊天)
- 加速神器:Redis(热点问题秒回,不重复干活)
- 监控雷达:OpenTelemetry + Zipkin(全链路追踪,问题无所遁形)
- 开发语言:Java 24(最新特性,写得爽)
- 文档检索:像搜索引擎一样精准,从各种向量存储里"揪出"相关文档
- 对话记忆:Elasticsearch当"笔记本",多轮聊天不迷路,还记得你上次说的话
- 查询优化:自动给你的问题"化妆"——压缩废话、重写清晰、扩展关键词
- 多级缓存:Redis出马,重复问题不用等,响应速度飞起来
- 容错Retry:网络波动?服务抽风?自动重试帮你搞定
- 性能监控:每一步耗时、每一次调用都看得明明白白,调优有方向
- 灵活配置:想换模型?改改参数;想调策略?配置文件搞定
- 拉取代码:
git clone https://github.com/your-repo/spring-ai-rag-example.git
- 配置密钥:在
application.properties
填好OpenAI API Key和数据库信息 - 启动服务:
mvn spring-boot:run
- 访问接口:默认8080端口,试试
POST /api/v1/chat/stream
发送你的问题
- 企业知识库:让新员工快速查到产品手册、流程规范
- 智能客服:根据历史对话和帮助文档,精准解答用户问题
- 学术助手:检索论文库,帮你总结研究成果、生成参考文献
- 个人助理:记住你的偏好,结合本地文档给出个性化建议
启动时看看控制台,有惊喜Banner!包含所有已启用功能的小对勾,一目了然~
想二次开发?代码结构清晰,核心逻辑都有注释,新增检索源、换个大模型都很方便!
用Spring AI构建你的第一个RAG应用,让AI不仅聪明,更"靠谱"!🚀
spring-ai-example/
├── .gitignore # 版本控制忽略文件配置
├── README.md # 项目说明文档
├── pom.xml # Maven依赖配置
└── src/
└── main/
└── java/
└── cn/hehouhui/example/rag/
├── RagApplication.java # 应用启动类(初始化Spring上下文)
├── controller/
│ └── RagController.java # 接口控制器(提供RESTful API)
├── service/
│ ├── RagService.java # RAG核心业务逻辑
│ ├── ModelConfigService.java # AI模型配置管理
│ └── RagCacheService.java # 缓存服务
├── config/
│ ├── CacheConfiguration.java # Redis缓存配置
│ ├── TracingConfiguration.java # 链路追踪配置
│ ├── AdvisorConfiguration.java # 增强器配置
│ └── RagPipelineConfiguration # RAG流水线配置
├── advisor/
│ ├── ChatMemoryAdvisor.java # 对话记忆增强器
│ ├── FirstConversationAdvisor # 首次对话增强器
│ └── AdvisorChain.java # 增强器链管理
└── memory/
├── ElasticsearchChatMemory.java # 对话记忆实体
└── ElasticsearchChatMemoryProvider # 对话记忆存储
-
环境准备
- JDK 21+(推荐使用Amazon Corretto或OpenJDK)
- Maven 3.8+
- PostgreSQL 14+(需安装pgvector插件)
- Elasticsearch 8.0+
- Redis 6.2+
- Zipkin(可选,用于链路追踪)
-
服务启动顺序
# 启动PostgreSQL(带pgvector) docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=postgres postgres:14 -c shared_preload_libraries=pgvector # 启动Elasticsearch docker run -d -p 9200:9200 -e "discovery.type=single-node" elasticsearch:8.10.4 # 启动Redis docker run -d -p 6379:6379 redis:6.2 # 启动Zipkin(可选) docker run -d -p 9411:9411 openzipkin/zipkin
-
复制配置模板(如无则创建)
cp src/main/resources/application.properties.example src/main/resources/application.properties
-
关键配置项修改
# OpenAI配置 spring.ai.openai.api-key=your-openai-api-key spring.ai.openai.chat.model=gpt-3.5-turbo # 数据库配置 spring.datasource.url=jdbc:postgresql://localhost:5432/ragdb spring.datasource.username=postgres spring.datasource.password=postgres # Elasticsearch配置 spring.elasticsearch.uris=http://localhost:9200 # Redis配置 spring.data.redis.host=localhost spring.data.redis.port=6379
-
使用Maven启动
mvn spring-boot:run
-
验证启动成功
- 访问健康检查接口:
http://localhost:8080/api/v1/health
- 控制台输出应用启动日志,包含Banner和功能列表
- 访问健康检查接口:
# 构建可执行JAR包
mvn clean package -DskipTests
# 生成的JAR包位于target/目录下
ls target/*.jar
-
单机部署
# 直接运行JAR包 java -jar target/spring-ai-example-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod # 后台运行 nohup java -jar target/spring-ai-example-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod > app.log 2>&1 &
-
Docker部署(推荐)
# Dockerfile示例 FROM eclipse-temurin:21-jre-alpine VOLUME /tmp COPY target/*.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"]
构建并启动容器:
docker build -t spring-ai-rag:latest . docker run -d -p 8080:8080 --name rag-app spring-ai-rag:latest
项目采用分层架构设计,核心流程如下:
- 请求处理层:通过
RagController
接收用户查询请求 - 业务逻辑层:
RagService
实现核心RAG流程(检索→增强→生成) - 数据访问层:向量存储(PostgreSQL/Elasticsearch)和缓存(Redis)交互
- 增强器链:通过多个Advisor实现查询优化、记忆管理等增强功能
- 监控层:OpenTelemetry+Zipkin实现全链路追踪
核心优势在于模块化设计,可灵活替换向量存储、AI模型等组件,适应不同场景需求。
可通过以下接口快速验证功能:
-
流式问答
curl -X POST http://localhost:8080/api/v1/chat/stream \ -H "Content-Type: application/json" \ -d '{"sessionId":"test123","query":"什么是RAG技术?","enableRetrieval":true}'
-
同步问答
curl -X POST http://localhost:8080/api/v1/chat \ -H "Content-Type: application/json" \ -d '{"sessionId":"test123","query":"Spring AI有哪些核心功能?"}'
-
获取会话历史
curl http://localhost:8080/api/v1/sessions/test123/history
发现Bug?有新想法?欢迎提Issue或PR,一起让这个项目更强大!