Skip to content

本项目是一个基于 Spring AI 框架构建的检索增强生成(RAG)应用,旨在通过向量检索技术增强大模型的生成能力,使 AI 回答既智能又有依据。 项目采用现代化 Java 技术栈,核心框架为 Spring Boot 3.3 与 Spring AI 1.0,集成 OpenAI 模型(deepseek-r1、doubao-embedding)主打白嫖,支持 PostgreSQL+pgvector、Elasticsearch 等多种向量存储方案,并利用 Redis 实现缓存加速、Elasticsearch 管理对话记忆。

Notifications You must be signed in to change notification settings

listener-He/spring-ai-example

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 

Repository files navigation

🚀 Spring AI RAG 示例:给大模型装上"超级大脑"

嘿,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(最新特性,写得爽)

✨ 超酷功能清单

  1. 文档检索:像搜索引擎一样精准,从各种向量存储里"揪出"相关文档
  2. 对话记忆:Elasticsearch当"笔记本",多轮聊天不迷路,还记得你上次说的话
  3. 查询优化:自动给你的问题"化妆"——压缩废话、重写清晰、扩展关键词
  4. 多级缓存:Redis出马,重复问题不用等,响应速度飞起来
  5. 容错Retry:网络波动?服务抽风?自动重试帮你搞定
  6. 性能监控:每一步耗时、每一次调用都看得明明白白,调优有方向
  7. 灵活配置:想换模型?改改参数;想调策略?配置文件搞定

🚀 快速上手

  1. 拉取代码:git clone https://github.com/your-repo/spring-ai-rag-example.git
  2. 配置密钥:在application.properties填好OpenAI API Key和数据库信息
  3. 启动服务:mvn spring-boot:run
  4. 访问接口:默认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    # 对话记忆存储

本地调试指南

前置依赖

  1. 环境准备

    • JDK 21+(推荐使用Amazon Corretto或OpenJDK)
    • Maven 3.8+
    • PostgreSQL 14+(需安装pgvector插件)
    • Elasticsearch 8.0+
    • Redis 6.2+
    • Zipkin(可选,用于链路追踪)
  2. 服务启动顺序

    # 启动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

配置修改

  1. 复制配置模板(如无则创建)

    cp src/main/resources/application.properties.example src/main/resources/application.properties
  2. 关键配置项修改

    # 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

启动应用

  1. 使用Maven启动

    mvn spring-boot:run
  2. 验证启动成功

    • 访问健康检查接口:http://localhost:8080/api/v1/health
    • 控制台输出应用启动日志,包含Banner和功能列表

基础部署指南

打包应用

# 构建可执行JAR包
mvn clean package -DskipTests

# 生成的JAR包位于target/目录下
ls target/*.jar

服务器部署

  1. 单机部署

    # 直接运行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 &
  2. 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

系统架构

项目采用分层架构设计,核心流程如下:

  1. 请求处理层:通过RagController接收用户查询请求
  2. 业务逻辑层RagService实现核心RAG流程(检索→增强→生成)
  3. 数据访问层:向量存储(PostgreSQL/Elasticsearch)和缓存(Redis)交互
  4. 增强器链:通过多个Advisor实现查询优化、记忆管理等增强功能
  5. 监控层:OpenTelemetry+Zipkin实现全链路追踪

核心优势在于模块化设计,可灵活替换向量存储、AI模型等组件,适应不同场景需求。

接口测试

可通过以下接口快速验证功能:

  1. 流式问答

    curl -X POST http://localhost:8080/api/v1/chat/stream \
      -H "Content-Type: application/json" \
      -d '{"sessionId":"test123","query":"什么是RAG技术?","enableRetrieval":true}'
  2. 同步问答

    curl -X POST http://localhost:8080/api/v1/chat \
      -H "Content-Type: application/json" \
      -d '{"sessionId":"test123","query":"Spring AI有哪些核心功能?"}'
  3. 获取会话历史

    curl http://localhost:8080/api/v1/sessions/test123/history
    
    
    
    

🤝 贡献指南

发现Bug?有新想法?欢迎提Issue或PR,一起让这个项目更强大!

About

本项目是一个基于 Spring AI 框架构建的检索增强生成(RAG)应用,旨在通过向量检索技术增强大模型的生成能力,使 AI 回答既智能又有依据。 项目采用现代化 Java 技术栈,核心框架为 Spring Boot 3.3 与 Spring AI 1.0,集成 OpenAI 模型(deepseek-r1、doubao-embedding)主打白嫖,支持 PostgreSQL+pgvector、Elasticsearch 等多种向量存储方案,并利用 Redis 实现缓存加速、Elasticsearch 管理对话记忆。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages