Ollama + Milvus 本地智能体搭建指南:打造本地部署RAG知识库助手(java快速搭建)

前提需要docker环境 本文基于docker安装 Milvus 向量数据库

后台通过java项目启动  java版本17

技术组件核心作用核心优势

Ollama本地运行开源大模型(对话生成、文本向量化)

   1. 轻量便捷,一键部署,无需复杂的模型环境配置;

   2. 离线可用,支持 Qwen、Llama、Mistral 等多款开源模型;

   3. 支持自定义模型,可嵌入固定角色与业务规则;

   4. 无调用额度限制,零成本使用。

Milvus存储与检索高维向量数据(知识库核心载体)

   1. 专为向量检索设计,性能远超通用数据库,支持百万级向量快速检索;

   2. 支持数据持久化,重启服务后知识库数据不丢失;

   3. 提供可视化工具 Attu,方便管理向量集合与数据;

   4. 可横向扩展,从单机版平滑升级到分布式集群,满足业务增长需求。

Spring AI基于 Spring Boot,简化大模型 / 向量库整合

   1. 封装 Ollama 调用,无需手写 HTTP 请求,一行代码完成文本向量化与对话生成;

   2. 与 Spring Boot 无缝集成,支持配置化管理模型参数,自动注入客户端;

   3. 提供统一的 RAG 流程支撑,降低大模型项目开发成本;

   4. 支持扩展多种大模型 / 向量库,便于后续技术选型替换。

Apache Tika解析 PDF/Word 等多种格式文档(辅助构建知识库)

1. 支持几乎所有主流文档格式,无需单独开发各格式解析逻辑;

2. 轻量高效,能快速提取文档中的纯文本内容,用于后续向量化。

步骤 1:Ollama 安装与必备模型下载本文安装的

Ollama 是本地智能体的「大脑」,负责将文本转换为向量(供 Milvus 存储)和基于检索结果生成自然语言回答,先完成它的安装与模型下载。

1. 跨平台安装 Ollama

Ollama 支持全平台安装,步骤简单,无需额外配置:

  • Windows 系统
    1. 访问 Ollama 官方下载地址,点击下载 Windows 版本安装包(.exe 格式);
    2. 双击安装包,按照提示下一步安装(默认勾选「Add Ollama to PATH」,无需手动修改);
    3. 安装完成后,Ollama 会自动在后台启动服务,无需手动执行命令。
  • macOS 系统
    1. 访问 Ollama 官方下载地址,下载 macOS 版本安装包(.dmg 格式);
    2. 双击安装包,将「Ollama」拖拽到「应用程序」文件夹;
    3. 打开终端,执行 ollama --version 触发服务启动(首次启动可能需要 10 秒左右)。
  • Linux 系统
    1. 安装完成后,执行 systemctl start ollama 启动 Ollama 服务(设置开机自启:systemctl enable ollama)。

打开终端,执行一键安装命令:bash运行

curl -fsSL https://ollama.com/install.sh | sh 

2. 验证 Ollama 安装成功

打开终端 / 命令行,执行以下命令,若能显示 Ollama 版本号,则说明安装成功:

bash

运行

ollama --version ollama version is 0.14.2 (本文用的版本) 

3. 下载必备开源模型

本文项目需求,需要下载两款模型:「对话生成模型」(负责回答用户问题)和「文本向量化模型」(负责将文档 / 问题转换为向量),以下对话生成模型和文本向量化模型 可以根据自己需求切换

  1. 验证模型下载成功:执行 ollama list,若能看到上述两款模型的记录(包含模型名、大小、修改时间),则说明下载成功。

快速测试 Ollama 服务:执行 ollama run qwen2:7b-instruct,进入模型对话界面,输入「你好」,若能收到正常回复,说明 Ollama 服务运行正常(输入 /bye 可退出对话界面)。

下载文本向量化模型(all-MiniLM-L6-v2,轻量高效,适合本地运行):bash运行

ollama pull mahonzhan/all-MiniLM-L6-v2 

下载对话生成模型(Qwen2 7B 指令版,中文表现优异,性价比高):bash运行

ollama pull qwen2:7b-instruct 
注意:模型下载需要联网,下载完成后后续运行可完全离线;若下载速度较慢,可更换国内镜像源或耐心等待(7B 模型大小约 4GB 左右)。

步骤 2:Docker Compose 一键部署 Milvus + Attu

Milvus 运行依赖 Etcd(元数据存储)和 MinIO(对象存储),手动部署复杂且容易出错,我们使用 docker-compose.yml 一键部署全套服务,同时整合 Attu 可视化工具,方便后续管理向量数据。

1. 编写完整的 Docker Compose 配置文件

  1. 新建一个空文件夹(如 milvus-standalone-deploy),用于存放 Milvus 配置与数据,避免文件混乱;
  2. 在该文件夹内创建docker-compose.yml 文件,粘贴以下完整配置(已优化网络通信与数据持久化):

yaml

version: '3.5' services: # 依赖服务1:Etcd - 存储 Milvus 元数据(如集合结构、索引信息) etcd: container_name: milvus-etcd image: quay.io/coreos/etcd:v3.5.5 environment: - ETCD_AUTO_COMPACTION_MODE=revision - ETCD_AUTO_COMPACTION_RETENTION=1000 - ETCD_QUOTA_BACKEND_BYTES=4294967296 - ETCD_SNAPSHOT_COUNT=50000 volumes: - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd healthcheck: test: ["CMD", "etcdctl", "endpoint", "health"] interval: 30s timeout: 20s retries: 3 networks: - milvus # 依赖服务2:MinIO - 存储 Milvus 海量向量数据与原始文档 minio: container_name: milvus-minio image: minio/minio:RELEASE.2023-03-20T20-16-18Z environment: MINIO_ACCESS_KEY: minioadmin MINIO_SECRET_KEY: minioadmin ports: - "9001:9001" # MinIO 控制台访问端口 - "9000:9000" # MinIO 服务通信端口 volumes: - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_data command: minio server /minio_data --console-address ":9001" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3 networks: - milvus # 核心服务:Milvus Standalone 单机版 standalone: container_name: milvus-standalone image: milvusdb/milvus:v2.3.0 command: ["milvus", "run", "standalone"] environment: ETCD_ENDPOINTS: etcd:2379 MINIO_ADDRESS: minio:9000 volumes: - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvus healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"] interval: 30s start_period: 90s # Milvus 首次启动较慢,预留足够启动时间 timeout: 20s retries: 3 ports: - "19530:19530" # Milvus 核心向量检索/通信端口(必须保留) - "9091:9091" # Milvus 健康检查端口 depends_on: - "etcd" - "minio" networks: - milvus # 可视化工具:Attu - 管理 Milvus 向量数据(无需命令行,图形化操作) attu: container_name: milvus-attu image: zilliz/attu:v2.3.9 environment: MILVUS_URL: standalone:19530 # 内部服务名通信,比 localhost 更稳定 ports: - "8000:3000" # Attu 前端访问端口(浏览器访问) depends_on: - standalone healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000"] interval: 30s start_period: 60s timeout: 10s retries: 3 networks: - milvus # 统一网络:确保所有服务互通,隔离其他 Docker 容器 networks: milvus: name: milvus 

2. 启动 Milvus + Attu 服务

  1. 打开终端 / 命令行,进入 milvus-standalone-deploy 文件夹(即 docker-compose.yml 所在目录);
  2. 等待服务启动完成(首次启动需要下载镜像,约 5-10 分钟,取决于网络速度)。

执行以下命令,后台启动所有服务(-d 表示后台运行,不占用终端窗口):bash运行

docker-compose up -d 
注意:镜像下载失败的话增加 Docker 镜像的下载地址

如果解析失败的话  增加 DNS 解析尝试   "dns": ["8.8.8.8", "114.114.114.114"] 

3. 验证 Milvus + Attu 启动成功

方法 1:查看 Docker 容器状态

执行 docker ps,查看是否有 4 个容器处于 Up 状态(milvus-etcdmilvus-miniomilvus-standalonemilvus-attu),若全部 Up,说明容器启动成功。

方法 2:访问 Attu 可视化界面
  1. 打开浏览器,输入 http://localhost:8000
  2. 无需额外配置(默认连接 localhost:19530),直接进入 Attu 主界面;
  3. 若左侧显示「Milvus」连接成功,且能看到「Collections」(向量集合)、「Indexes」(索引)等菜单,说明 Milvus 服务启动正常,可正常使用。

4. 关键说明

  • 数据持久化:所有数据(Etcd 元数据、MinIO 向量数据、Milvus 核心数据)均存储在 milvus-standalone-deploy/volumes 文件夹下,停止服务后数据不会丢失,下次启动可直接复用;
  • 版本兼容:本文使用 Milvus v2.3.0 + Attu v2.3.9,这是经过验证的兼容组合,请勿随意更换版本(版本不匹配会导致 Attu 无法连接 Milvus);
  • 停止服务:如需停止所有服务,进入 milvus-standalone-deploy 文件夹执行 docker-compose down(保留数据);若需清理所有数据,执行 docker-compose down -v
  • 端口冲突:若 19530、8000、9000 等端口被占用,可修改 docker-compose.yml 中的端口映射(如 8001:3000),避免冲突。

步骤 4:核心功能开发(实现完整 RAG 流程)

我们实现完整的 RAG(检索增强生成)流程:「文档解析 → 文本向量化 → 向量存入 Milvus → 用户问题向量化 → Milvus 检索相关向量 → Ollama 生成回答」,

java实现方式 

git clone https://gitee.com/li-hedong/ai-robot.git

下载代码 安装配置 

仓库依赖下载失败时 https://maven.aliyun.com/mvn/search
访问这个地址搜索下载对应版本

步骤 5:系统启动与验证(完整流程跑通)

至此,所有组件与代码已搭建完成,我们按顺序启动服务,验证整个系统的运行效果,确保每一步都能正常工作。

1. 启动前置服务(按顺序)

  1. 确保 Ollama 服务已启动(安装后默认后台运行,若未启动,执行 ollama serve);
  2. 确保 Milvus + Attu 服务已启动(进入 milvus-standalone-deploy 文件夹,执行 docker-compose up -d);
  3. 准备测试文档:在 src/main/resources 下创建 docs 文件夹,放入一份 PDF 或 Word 测试文档(如 product_manual.pdf),用于后续入库测试。

2. 启动 Spring Boot 项目

  1. 在 IDEA 中,右键点击项目主启动类 AiDocumentRetrievalApplication.java,选择「Run」;
  2. 查看控制台日志,若显示「🎉 AI 文档检索系统启动成功!」且无报错,说明 Spring Boot 项目启动成功;
  3. 同时查看 Milvus 客户端连接日志,若显示「Milvus 客户端连接成功:localhost:19530」,说明 Milvus 连接正常。

3. 验证核心功能(使用 Postman 或浏览器)

验证 1:文档入库

访问

http://localhost:8081/api/knowledge/import?documentPath=classpath:docs/product_manual.pdf

(替换为你的测试文档路径),若返回「文档入库成功!」,说明文档已成功解析并存入 Milvus;同时可访问 Attu(http://localhost:8000),查看 document_knowledge_base 集合,能看到入库的数据条数,验证入库成功。

验证 2:智能问答

访问 http://localhost:8081/api/knowledge/qa?question=产品的核心功能有哪些(替换为与测试文档相关的问题),若能返回基于文档内容的回答,说明整个 RAG 流程运行正常,智能体已具备离线知识库检索能力。

4. 离线验证(可选)

断开网络连接,重复上述「智能问答」步骤,若仍能正常返回回答(基于已入库的本地文档),说明系统实现了全离线运行,数据隐私得到保障。

Read more

零基础学 OpenCV + Python 图像处理:手把手带你做人脸识别(附代码+典型案例)

零基础学 OpenCV + Python 图像处理:手把手带你做人脸识别(附代码+典型案例)

零基础学 OpenCV + Python 图像处理:手把手带你做人脸识别(附代码+典型案例) 关键词:opencv-python、opencv图像处理、opencv人脸识别代码python、python安装opencv库 亮点提示:本文面向零基础读者,手把手教你从环境搭建到实战应用,一步步深入,让你快速掌握 OpenCV+Python 图像处理与人脸识别技术。文中附带完整示例代码与典型案例,可直接复制、运行与深度改造,助你轻松入门并提升项目收藏率! 摘要 零基础学 OpenCV + Python 图像处理,手把手带你从 Python 安装 OpenCV 库、opencv-python 基础操作到 opencv图像处理、opencv人脸识别代码python 实战案例(静态图、人脸检测、摄像头实时识别)全流程讲解,附完整代码与典型案例,帮助初学者快速上手人脸识别项目。 目录 1. 为什么选择 OpenCV + Python?

By Ne0inhk
Java 常见Exception全面解析:出现场景、错误排查与代码修正实战

Java 常见Exception全面解析:出现场景、错误排查与代码修正实战

文章目录 * 课程导言 * 适用对象 * 学习目标 * 课程安排 * 教学方式 * 第一部分:Java异常体系回顾(约10分钟) * 1.1 异常是什么? * 1.2 Java异常体系结构 * 1.3 异常信息解读 * 第二课时(上):运行时异常深度剖析(约30分钟) * 2.1 NullPointerException(空指针异常) * 现象描述 * 出现场景 * 堆栈分析示例 * 排查方法流程图 * 代码修正与预防 * 2.2 ArrayIndexOutOfBoundsException(数组下标越界异常) * 现象描述 * 出现场景 * 堆栈分析示例 * 排查方法 * 代码修正与预防 * 2.3 ClassCastException(类型转换异常) * 现象描述 * 出现场景 * 堆栈分析示例 * 排查方法 * 代码修正与预防 * 2.

By Ne0inhk
Python-flask旅游景点酒店推荐系统的设计与开发-Pycharm django

Python-flask旅游景点酒店推荐系统的设计与开发-Pycharm django

目录 * 技术文章大纲:Python-Flask旅游景点酒店推荐系统开发(基于PyCharm与Django技术栈) * 系统架构设计 * 开发环境配置 * 核心功能实现 * 前后端交互 * 测试与部署 * 扩展方向 * 开发技术路线 * 源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 技术文章大纲:Python-Flask旅游景点酒店推荐系统开发(基于PyCharm与Django技术栈) 系统架构设计 采用Flask作为后端框架,结合Django的ORM模块进行数据管理,前端使用Bootstrap或Vue.js实现交互界面。系统分为用户模块、推荐算法模块、数据管理模块三大核心部分。 数据库设计使用SQLite或MySQL,包含用户表、景点表、酒店表、评分表等,通过Django的models.py定义数据结构。 开发环境配置 PyCharm中创建Flask项目,安装依赖库:flask, flask-sqlalchemy, django, pandas。通过virtualenv创建虚拟环境隔

By Ne0inhk
python无需验证码免登录12306抢票 --selenium(2)

python无需验证码免登录12306抢票 --selenium(2)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 @[TOC](python无需验证码免登录12306抢票 --selenium(2)) 前言 提示:这里可以添加本文要记录的大概内容: 就在刚刚我抢的票:2025年1月8日 上午9.00多 抢到了哈哈哈哈— 其实还是有用的我是在 8:59:56运行程序的 上一篇帖子,我们已经了解了如何用python自动登录12306实现自动抢票,现在我们来一个进阶的版本,实现cookie免登录,这样可绕过验证码实现自动抢票。同时包括环境如何配置,也在这个帖子里面。 上一篇帖子的链接:https://blog.ZEEKLOG.net/xaing1314/article/details/144868504 配置selenium自动化的帖子链接:https://blog.ZEEKLOG.net/xaing1314/article/details/144869489?spm=1001.2014.3001.5502

By Ne0inhk