基于 Spring AI 框架实现的检索增强生成(RAG)系统,支持文档上传、向量化存储和智能问答功能。
本项目展示了如何使用 Spring AI 构建一个完整的 RAG 系统,主要功能包括:
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ 前端/客户端 │───▶│ Spring Boot │───▶│ Redis Stack │ │ │ │ 应用服务 │ │ 向量数据库 │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ ▼ ┌─────────────────┐ │ Ollama │ │ 大语言模型 │ └─────────────────┘
cd doc/redis-stack
docker-compose up -d
Redis Stack 将在以下端口启动:
localhost:6380http://localhost:8001# 安装 Ollama(macOS)
brew install ollama
# 启动 Ollama 服务
ollama serve
# 下载并运行 qwen3:8b 模型
ollama pull qwen3:8b
# 设置Redis密码(可选,默认为123456)
export REDIS_PASSWORD=your_secure_password
# 克隆项目
git clone <repository-url>
cd spring-ai-rag-example
# 编译并运行
mvn spring-boot:run
应用将在 http://localhost:8080 启动。
POST /rag/uploadDoc Content-Type: multipart/form-data file: <文档文件>
响应示例:
[
{
"id": "doc-1",
"content": "文档内容片段1...",
"metadata": {
"fileName": "example.txt"
}
}
]
GET /rag/search?question=你的问题
响应示例:
{
"answer": "基于上传文档的回答内容..."
}
spring:
ai:
ollama:
base-url: http://localhost:11434 # Ollama 服务地址
chat:
options:
model: qwen3:8b # 使用的模型
vectorstore:
redis:
initialize-schema: true # 自动初始化向量存储结构
index-name: spring-ai-vectorstore-index
prefix: 'embedding:'
data:
redis:
host: localhost
port: 6380
password: ${REDIS_PASSWORD:your_redis_password}
username: default
负责文档的上传、解析、分割和向量化存储:
提供 RESTful API 接口:
POST /rag/uploadDoc - 上传文档GET /rag/search - 智能问答基于正则表达式的文本分割器,按照空行分割文档内容,保持语义完整性。
curl -X POST \
http://localhost:8080/rag/uploadDoc \
-H 'Content-Type: multipart/form-data' \
-F 'file=@/path/to/your/document.txt'
curl -X GET \
"http://localhost:8080/rag/search?question=如何使用Spring AI?"
src/main/java/org/example/springai/ ├── SpringAiRagExampleApplication.java # 主启动类 └── rag/ ├── config/ │ └── AiConfig.java # AI 配置类 ├── controller/ │ └── RagController.java # REST 控制器 ├── service/ │ ├── DocumentService.java # 文档服务接口 │ └── impl/ │ └── DocumentServiceImpl.java # 文档服务实现 └── utils/ └── CustomTextSplitter.java # 自定义文本分割器