AI大模型之RAG(向量库milvus实现)
介绍概念:RAG = 检索增强生成Retrieval-Augmented Generation
打个比方 普通 AI:像闭卷考试,只会脑子里记的东西,容易记错、过时。 RAG AI:像开卷考试,先去翻你给的课本 / 文档,找到相关内容,再整理成通顺答案。
2025年初 deepseek很火的时候,用ollama+anything LLM,整了一个RAG,通过控制台界面上传文档再向量化,然后可以对话使用RAG了,今天用代码来实现。
大语言RAG工作原理:
用户上传文档,对文档分块,并通过Embedding模型将文档向量化,存入向量数据库。
用户查询知识库,Embedding模型将用户提示词向量化,并进行相似查询,将查询结果和用户提示词一起发送给大模型,大模型根据结果组织回答。
介绍一下代码的实现:
开发环境:java17 +spring ai alibaba +向量数据库 (milvus)
一、向量数据库 (milvus)
我在青云科技上申请云主机(系统 contos8.3)搭建milvus向量库(便于拉取镜像,1核2G就够了),有外网访问权限,并设置好网络访问控制。
- 安装docker(会安装的略过)
在线安装:
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
systemctl start docker
docker ps -a
配置docker镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-‘EOF’
{ “registry-mirrors”: [“https://izf4l7qi.mirror.aliyuncs.com”] }
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
- 安装 docker-compose(会安装的略过)
docker-compose 在线安装
curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-(uname−s)−(uname -s)-(uname−s)−(uname -m) -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose -v
- 安装milvus及客户端
yum install -y wget
wget https://github.com/docker/compose/releases/download/v2.27.1/docker-compose-linux-x86_64
修改名字
mv milvus-standalone-docker-compose.yml docker-compose.yml
运行起来,需要下载镜像,需要一点时间:
docker-compose up -d
- milvus连接客户端安装:
docker run --rm -p 3000:3000 -e MILVUS_URL=host.docker.internal:19530 zilliz/attu:v2.5
访问终端(IP改为云主机外网IP):
http://103.61.37.169:3000/ 打开后,修改连接IP为云主机外网IP然后连接,这样milvus既安装好了。
二、spring ai alibaba
大语言模型配置、分词器配置(略,需要请留言)
POM文件
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud.ai</groupId> <artifactId>spring-ai-alibaba-starter-dashscope</artifactId> </dependency> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-tika-document-reader</artifactId> </dependency> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-vector-store-milvus</artifactId> <version>1.0.3</version> </dependency> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-advisors-vector-store</artifactId> <version>1.0.3</version> </dependency> </dependencies>- application.properties
server.port=9001 server.servlet.encoding.enabled=true server.servlet.encoding.force=true server.servlet.encoding.charset=UTF-8 spring.ai.dashscope.api-key=替换为自己百炼平台apikey(阿里百炼申请) spring.ai.dashscope.chat.options.model=qwen-plus spring.ai.dashscope.embedding.options.model=text-embedding-v3 spring.application.name=rag-huxipi spring.ai.vectorstore.milvus.client.host=103.61.37.163 spring.ai.vectorstore.milvus.client.port=19530 spring.ai.vectorstore.milvus.client.username="" spring.ai.vectorstore.milvus.client.password="" spring.ai.vectorstore.milvus.database-name=default spring.ai.vectorstore.milvus.collection-name=vector_store spring.ai.vectorstore.milvus.embedding-dimension=1024 spring.ai.vectorstore.milvus.index-type=IVF_FLAT spring.ai.vectorstore.milvus.metric-type=COSINE spring.ai.vectorstore.milvus.initialize-schema=true4. **关键代码(controller)**文档向量化:@GetMapping(value = "/rag/save") public String doSave(){ try { // 从 resource 目录读取 docx 文件 ClassPathResource classPathResource = new ClassPathResource("2025年XXXX信息系统报告.docx"); // 使用 TikaDocumentReader 读取文件内容(支持 txt、pdf、docx、doc 等格式) TikaDocumentReader reader = new TikaDocumentReader(classPathResource); List<Document> documents= reader.read(); // 懒加载获取 Bean,避免启动时就连接 Milvus TokenTextSplitter tokenTextSplitter = getTokenTextSplitter(); VectorStore vectorStore = getVectorStore(); // 1. 分块 - 将文档内容分成小块 List<Document> apply = tokenTextSplitter.apply(documents); // 2. 向量化 - 将文本转换为向量嵌入并存储 vectorStore.add(apply); return "文档加载成功:" + classPathResource.getFilename() + ",共处理 " + documents.size() + " 个文档块"; } catch (Exception e) { e.printStackTrace(); return "错误:" + e.getMessage(); } }文档查询:@GetMapping(value = "/rag/query") public Flux<String> doQuery(@RequestParam(name = "msg",defaultValue = "你是谁") String msg){ Flux<String> content=chatClient.prompt() .user(msg).advisors( QuestionAnswerAdvisor.builder(getVectorStore()) .searchRequest(SearchRequest.builder().query(msg).similarityThreshold(0.1d).build()) .build()) .stream() .content(); return content;三、结果演示
文档加载:
文档查询
这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享!
👇👇扫码免费领取全部内容👇👇
1. 成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。
2. 大模型经典PDF书籍
书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)
3. 大模型视频教程
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。
4. 2026行业报告
行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
5. 大模型项目实战
学以致用,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。
6. 大模型面试题
面试不仅是技术的较量,更需要充分的准备。
在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
7. 资料领取:全套内容免费抱走,学 AI 不用再找第二份
不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:
👇👇扫码免费领取全部内容👇👇
