当前位置: 首页 > news >正文

AI大模型之RAG(向量库milvus实现)

介绍概念:RAG = 检索增强生成Retrieval-Augmented Generation

打个比方 普通 AI:像闭卷考试,只会脑子里记的东西,容易记错、过时。 RAG AI:像开卷考试,先去翻你给的课本 / 文档,找到相关内容,再整理成通顺答案。

2025年初 deepseek很火的时候,用ollama+anything LLM,整了一个RAG,通过控制台界面上传文档再向量化,然后可以对话使用RAG了,今天用代码来实现。

大语言RAG工作原理:

  1. 用户上传文档,对文档分块,并通过Embedding模型将文档向量化,存入向量数据库。

  2. 用户查询知识库,Embedding模型将用户提示词向量化,并进行相似查询,将查询结果和用户提示词一起发送给大模型,大模型根据结果组织回答。

介绍一下代码的实现:

开发环境:java17 +spring ai alibaba +向量数据库 (milvus)

一、向量数据库 (milvus)

我在青云科技上申请云主机(系统 contos8.3)搭建milvus向量库(便于拉取镜像,1核2G就够了),有外网访问权限,并设置好网络访问控制。

  1. 安装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

  1. 安装 docker-compose(会安装的略过)

docker-compose 在线安装

curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-(uname−s)−(uname -s)-(unames)(uname -m) -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

docker-compose -v

  1. 安装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

  1. 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

  1. 大语言模型配置、分词器配置(略,需要请留言)

  2. 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>
  1. 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=true
4. **关键代码(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 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:

👇👇扫码免费领取全部内容👇👇

http://www.cnnetsun.cn/news/1589305.html

相关文章:

  • 3种进阶方案:B站音频无损提取与管理全流程指南
  • 如何永久保存微信聊天记录?WeChatMsg完整备份与数据分析方案
  • 电路耦合技术:原理、应用与实战避坑指南
  • Janus-Pro-7B真实效果:会议白板照片→要点提取→纪要初稿生成
  • 每日 AI 研究简报 · 2026-03-30
  • 5个提升游戏体验的技巧:如何通过League-Toolkit实现高效游戏辅助
  • Redis 完整入门指南 | 零基础小白也能轻松掌握的缓存神器
  • Windows APK安装新方案:告别模拟器,实现Android应用原生运行
  • Masa Mods汉化资源包:让中文玩家无障碍体验Minecraft模组生态
  • 从零理解自然数系统:用Python类模拟皮亚诺公理(含加法乘法实现)
  • RK3588开发基础
  • 基因集(模块)活性量化:R语言+Java原生
  • ZEMAX实例解析:施密特—卡塞格林系统的多项式非球面优化与MTF分析
  • 手把手教你配置PUSCH repetition type A跳频:Intra-slot与Inter-slot参数设置详解(含RB位置计算器)
  • Python实战:用SymPy解常微分方程 vs 偏微分方程的5个关键差异
  • Flutter Isolates:多线程编程的艺术
  • PyTorch 3.0静训架构深度拆解(企业级容错+混合精度+梯度压缩三重加固)
  • 为什么APKMirror是安卓用户最安全的应用下载工具?完整指南解析
  • ROS2数据录制实战:用ros2 bag记录小海龟运动轨迹(附常见问题排查)
  • 嵌入式系统内存碎片优化方案与实践
  • crypto-js 测试验证全攻略:从浏览器到自动化的加密功能验证实践
  • Umi-OCR服务化集成方案:构建企业级OCR自动化工作流的技术实现
  • 终极指南:3个维度解锁Cyber Engine Tweaks,重塑赛博朋克2077游戏体验
  • 告别Matrikon模拟器:用C#和Workstation.UaClient从零搭建一个真正的OPC UA客户端
  • PCB邮票孔设计与应用全解析
  • 高效全功能开源PPT制作工具:浏览器PPT编辑器的创新实践
  • 微信公众号自动化广告升级全解读:AI 时代的流量变现新机遇
  • Blender3mfFormat插件:3MF文件处理全攻略
  • xshell连接VMware虚拟机
  • 【AI】字节开源智能体DeerFlow