Spring AI Alibaba搭建知识库详细教程
前言
Spring AI Alibaba是阿里云推出的面向Java开发者的AI应用开发框架,它基于Spring AI构建,提供了与阿里云大模型(通义千问)的无缝集成。通过Spring AI Alibaba,开发者可以快速构建RAG(检索增强生成)知识库系统,实现智能问答、文档处理等功能。
本教程将手把手教您从零开始搭建一个完整的Spring AI Alibaba知识库系统,包括环境准备、项目搭建、向量数据库配置、文档处理、检索问答等全流程。
目录
什么是RAG
1. RAG概念
RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合了信息检索和大语言模型生成的技术架构。
简单理解:让大模型”开卷考试”
- 传统大模型:闭卷答题,只能用训练时学到的知识
- RAG模式:先从知识库中检索相关内容,再把内容”喂”给大模型,让它基于真实资料回答
2. RAG工作流程
1 | 用户提问 → 向量化查询 → 向量检索 → 找到相关文档 → 注入Prompt → 大模型生成答案 |
3. RAG的优势
- 知识实时更新:无需重新训练模型,只需更新知识库
- 减少幻觉:基于真实文档回答,降低胡说八道的概率
- 可追溯性:可以知道答案来源于哪些文档
- 成本更低:比微调大模型成本低得多
技术栈介绍
1. Spring AI Alibaba
Spring AI Alibaba是阿里云基于Spring AI开发的框架,主要特性:
- 支持阿里云通义千问大模型
- 提供统一的AI模型调用接口
- 支持Prompt模板和变量替换
- 内置RAG支持
- 支持Function Calling
2. 向量数据库
本教程使用PostgreSQL + pgvector作为向量数据库:
- PostgreSQL:关系型数据库,稳定可靠
- pgvector:PostgreSQL的向量扩展插件
- 支持向量相似度搜索
- 免费开源
3. Embedding模型
使用阿里云的Embedding服务:
- 将文本转换为向量(768维或1536维)
- 支持中文语义理解
- 与通义千问模型协同工作
环境准备
1. 开发环境要求
- JDK:17或更高版本
- Maven:3.8+ 或 Gradle:7.5+
- Spring Boot:3.2+
- PostgreSQL:14+(带pgvector扩展)
2. 阿里云账号准备
2.1 开通百炼大模型服务
- 访问阿里云百炼控制台:https://bailian.console.aliyun.com/
- 开通服务(有免费额度)
- 创建API Key
2.2 获取API Key
1 | 登录阿里云 → 百炼控制台 → API Key管理 → 创建API Key |
记录下API Key,后续配置需要用到。
3. 安装PostgreSQL和pgvector
3.1 Docker方式安装(推荐)
1 | # 拉取带pgvector的PostgreSQL镜像 |
3.2 验证安装
1 | # 进入容器 |
看到vector扩展信息说明安装成功。
项目搭建
1. 创建Spring Boot项目
使用Spring Initializr创建项目:https://start.spring.io/
配置选项:
- Project:Maven
- Language:Java
- Spring Boot:3.2.0
- Group:com.example
- Artifact:rag-demo
- Name:rag-demo
- Package name:com.example.ragdemo
- Java:17
依赖选择:
- Spring Web
- Spring Data JPA
- PostgreSQL Driver
- Lombok(可选)
2. 添加Spring AI Alibaba依赖
在pom.xml中添加依赖:
1 | <properties> |
3. 配置application.yml
1 | server: |
注意:将${DASHSCOPE_API_KEY}替换为您的实际API Key,或者设置环境变量。
向量数据库配置
1. 创建向量存储配置类
1 | package com.example.ragdemo.config; |
2. 创建文档实体类
1 | package com.example.ragdemo.entity; |
3. 创建Repository接口
1 | package com.example.ragdemo.repository; |
文档处理与存储
1. 创建文档服务类
1 | package com.example.ragdemo.service; |
2. 创建文档上传Controller
1 | package com.example.ragdemo.controller; |
检索与问答
1. 创建RAG服务类
1 | package com.example.ragdemo.service; |
2. 创建问答Controller
1 | package com.example.ragdemo.controller; |
高级功能
1. 添加文档相似度搜索API
1 | package com.example.ragdemo.controller; |
2. 添加健康检查接口
1 | package com.example.ragdemo.controller; |
完整示例代码
1. 项目结构
1 | rag-demo/ |
2. 启动类
1 | package com.example.ragdemo; |
3. README.md
1 | # Spring AI Alibaba RAG 知识库演示 |
3. 运行
1 | mvn spring-boot:run |
4. 测试
API文档
文档管理
POST /api/documents/upload- 上传文档POST /api/documents/text- 创建文本文档GET /api/documents- 获取所有文档DELETE /api/documents/{docId}- 删除文档
问答
POST /api/chat- 简单问答POST /api/chat/with-references- 带引用的问答
搜索
GET /api/search/similar- 相似度搜索
技术栈
- Spring Boot 3.2
- Spring AI Alibaba
- PostgreSQL + pgvector
- 通义千问大模型
```
常见问题
Q1: 如何获取阿里云API Key?
解答:
- 访问 https://bailian.console.aliyun.com/
- 开通百炼服务
- 在API Key管理页面创建新的API Key
- 复制Key并配置到application.yml
Q2: 向量数据库连接失败怎么办?
解答:
- 检查PostgreSQL是否正常运行
- 确认pgvector扩展已安装
- 检查数据库连接配置(URL、用户名、密码)
- 确认防火墙允许5432端口访问
Q3: 文档解析失败怎么办?
解答:
- 确认文档格式受支持(PDF、Word、TXT等)
- 检查文档是否损坏
- 查看日志获取详细错误信息
- 尝试使用其他文档测试
Q4: 检索结果不准确怎么办?
解答:
- 调整相似度阈值(默认0.7)
- 增加返回文档数量(topK)
- 优化文档分块策略
- 检查Embedding模型是否正常工作
Q5: 如何优化RAG性能?
解答:
- 使用合适的文档分块大小(建议500-1000字符)
- 添加索引优化向量检索
- 使用缓存减少重复计算
- 考虑使用更高效的向量数据库(如Milvus)
Q6: 支持哪些文档格式?
解答:
通过Apache Tika支持多种格式:
- 文本:TXT、MD、CSV
- Office:DOC、DOCX、PPT、PPTX、XLS、XLSX
- PDF:PDF
- 网页:HTML、XML
- 代码文件:Java、Python、JavaScript等
结语
通过本教程,您已经学会了:
- ✅ RAG的基本概念和工作原理
- ✅ Spring AI Alibaba框架的使用
- ✅ 向量数据库(PostgreSQL + pgvector)的配置
- ✅ 文档处理和向量化的实现
- ✅ 基于RAG的智能问答系统构建
- ✅ 完整的项目开发和部署流程
下一步建议
- 优化分块策略:根据文档类型调整分块大小和重叠度
- 添加重排序:使用更精确的排序模型优化检索结果
- 多模态支持:扩展支持图片、音频等多模态内容
- 对话历史:添加多轮对话支持
- 用户管理:添加多租户和用户权限管理
参考资源
祝您开发顺利!