实战|Spring +Milvus,Java也能实现的企业级文档问答RAG

向量搜索数据库milvus的详细讲解 阅读详情

img

在企业数字化转型的浪潮中,PDF、Word 等海量文档往往沉睡在各个业务系统中,形成“数据孤岛”,难以被智能系统高效利用。

那么,如何构建一个真正面向企业场景落地的 AI 应用,让 AI 成为企业的“智能助手”?本项目提供一套基于 Spring 框架的完整解决方案,结合文档 ETL、向量检索与 RAG 问答技术,覆盖从数据导入到智能对话的全链路实践。

与其他演示不同,本项目强调企业级能力建设——包括 API 安全控制、指标可观测性等工程化特性。借助 Spring 强大的生态系统与 Java 社区对“高可维护、高可扩展系统”的成熟支持,我们将打造一个真正适合在企业环境中上线运行的 AI 应用。

img

技术栈速览

  • 框架:Spring Boot 3.5.0 + Spring AI 1.0.0

  • 语言:Java 17(长期支持)

  • AI 模型:百度千帆(OpenAI 接口兼容)

  • 向量存储:Milvus(高性能语义检索)

  • 工具链:Docker、Micrometer、Testcontainers

环境配置避坑指南

示例代码仓库 https://github.com/topikachu/spring-ai-rag

# 验证 Docker 是否正常运行$ docker version$ docker ps

img

为什么选百度千帆?

  • 免费额度友好:ernie-3.5-128k 和 tao-8k 均可免费试用
  • 接口兼容:与 Spring AI 的 OpenAI 接口高度兼容,几乎零开发成本切换
  • 在线模型列表: https://console.bce.baidu.com/qianfan/ais/console/onlineService
  • 申请模型API Key: https://console.bce.baidu.com/iam/#/iam/apikey/list

关键配置(application.properties)

spring.ai.openai.base-url=https://qianfan.baidubce.comspring.ai.openai.chat.completions-path=/v2/chat/completionsspring.ai.openai.chat.options.model=ernie-3.5-128kspring.ai.openai.embedding.embeddings-path=/v2/embeddingsspring.ai.openai.embedding.options.model=tao-8kspring.ai.openai.api-key=${OPENAI_API_KEY}spring.ai.model.embedding=openai

实操建议:

  • 用在线模型API工具验证密钥有效性,再接入项目。

  • tao-8k 嵌入模型仅支持单条输入,需调整分块逻辑,确保每次请求一个文档段落,下文有代码示例。

  • 不要在代码或者配置文件里硬编码API KEY,更不要提交到代码仓库,在生产中考虑使用环境变量。

img

文档 ETL:非结构化数据结构化处理

处理流程:
  • DocReader:使用 TikaDocReader 读取 PDF/Word 等
  • TextSplitter:基于 token 分块,控制上下文长度
  • 向量生成:调用 tao-8k 接口
  • 存入向量库:Milvus 自动管理

img

示例代码:
  return documentReader.getDocuments()          .flatMap(document -> {            var processChunks = Mono.fromRunnable(() -> {              var chunks = textSplitter.apply(List.of(document));              vectorStore.write(chunks); // expensive operation            }).subscribeOn(Schedulers.boundedElastic());            return Flux.concat(                    Flux.just(document),                    processChunks.then(Mono.empty())            );          })          .doOnComplete(() -> log.info("RunIngestion() finished"))          .doOnError(e -> log.error("Error during ingestion", e));}

注意:百度千帆嵌入 API 仅支持单文档请求,需确保 ETL 实现为“单文档单请求”。

@BeanBatchingStrategy singleDocumentBatchingStrategy() {  return documents -> documents.stream().map(List::of).toList();}

向量存储:用 Milvus 实现“秒级语义检索”

配置示例:
spring.ai.vectorstore.milvus.initialize-schema=truespring.ai.vectorstore.milvus.embedding-dimension=1024
说明:例如用户问“刘备结义排第几”,Milvus 会返回相关文档段落,再由语言模型生成自然语言答案。

RAG 对话:结合知识库与上下文的智能问答

核心逻辑:
  • 用户提问
  • 向量检索相关段落
  • 加载对话记忆(Redis)
  • 生成 AI 回答

img

对话向量检索与记忆集成示例:
public ChatClient.ChatClientRequestSpec input(String userInput, String conversationId) {  return ChatClient.builder(chatModel)          .build().prompt()          .advisors(                  new QuestionAnswerAdvisor(vectorStore),                  MessageChatMemoryAdvisor.builder(chatMemory).build()          )          .advisors(spec -> spec.param(CONVERSATION_ID, conversationId))          .user(userInput);}

提升前端体验:使用stream接口返回Flux,通过SSE实现打字机效果:

public Flux<String> stream(String userInput, String conversationId) {    return input(userInput, conversationId)            .stream().content();}
@PostMapping(path = "/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)public Flux<String> chat(@RequestBody ChatRequest chatRequest, @RequestParam() String conversationId, Principal principal) {  var conversationKey = String.format("%s:%s", principal.getName(), conversationId);  return chatService.stream(chatRequest.userInput, conversationKey)          .doOnError(exp -> log.error("Error in chat", exp));}

img

API 安全加固

权限控制示例:
@Overrideprotected void configure(HttpSecurity http) throws Exception {    http        .httpBasic()        .and()        .authorizeRequests(authz -> authz            .antMatchers("/api/v1/index").hasRole("ADMIN")            .anyRequest().authenticated()        );}
企业级加固:在正式的生产环境中建议升级为OAuth2/JWT认证方案。系统可观察性链路追踪:本项目使用OpenTelemetry JavaAgent,覆盖Chat → Milvus → 模型调用的全链路调用追踪(grpc调用链关键)-javaagent: \-Dotel.metrics.exporter=none \-Dotel.logs.exporter=none指标监控:使用Micrometer自动暴露Prometheus指标,比如:模型响应时间# HELP gen_ai_client_operation_seconds  # TYPE gen_ai_client_operation_seconds summarygen_ai_client_operation_seconds_count{...} 1向量检索耗时# HELP db_vector_client_operation_seconds# TYPE db_vector_client_operation_seconds summarydb_vector_client_operation_seconds_count{...} 1配置:
management.endpoints.web.exposure.include=prometheus
Tip:Spring Boot 3.2 引入 OTEL starter,但由于不能覆盖 gRPC(Milvus client)调用链,本项目采用 JavaAgent 接入方式,以确保完整链路追踪。
export OPENAI_API_KEY=<百度千帆APIKEY>mvn clean test packagedocker compose up -djava -javaagent:target/otel/opentelemetry-javaagent.jar -Dotel.metrics.exporter=none -Dotel.logs.exporter=none  -Dinput.directory=$PWD/src/test/resources/corpus  -jar target/rag-0.0.1-SNAPSHOT.jarcurl --location 'localhost:8080/api/v1/index' \--user "admin:password" \--header 'Content-Type: application/json' \--data '{}'curl --location 'localhost:8080/api/v1/chat?conversationId=liubei' \--header 'Content-Type: application/json' \--user "user:password" \--data '{    "userInput": "刘备结义时排第几?"}'curl --location 'localhost:8080/api/v1/chat?conversationId=liubei' \--header 'Content-Type: application/json' \--user "user:password" \--data '{    "userInput": "他哪里人?"}'curl --location 'localhost:8080/api/v1/chat?conversationId=guanyu' \--header 'Content-Type: application/json' \--user "user:password" \--data '{    "userInput": "关羽结义时排第几?"}'curl --location 'localhost:8080/api/v1/chat?conversationId=guanyu' \--header 'Content-Type: application/json' \--user "user:password" \--data '{    "userInput": "他哪里人?"}'curl "http://localhost:8080/actuator/prometheus"

打开trace 界面 http://localhost:16686/,可以查看调用的tracing情况,如下图

img

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范
  • …

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署
  • …

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建
  • …

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案
  • …

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

在这里插入图片描述

使用Milvus搭建以图搜图服务 安装Milvus,使用deeplearning4j提取图片向量,实现以图搜图 阅读详情

相关推荐

【SpringBoot】SpringBoot整合Milvus

Milvus,一个开源的高性能向量数据库,它在各种应用场景中展现出强大的性能和灵活性。在许多现代应用中,处理和分析大规模向量数据变得越来越重要。例如,在图像和视频搜索、推荐系统、自然语言处理和生物信息学等领域,向量数据被广泛应用。

DreamSun的博客 3930

JAVA整合Milvus矢量数据库及数据

Milvus下载安装步骤及可视化工具、java整合Milvus进行数据操作,MilvusServiceClient

FDX0821的博客 1万+

Spring AI与RAG技术实战:构建企业级智能文档问答系统

Spring AI是Spring生态系统中的AI集成框架,提供了统一的API来访问各种AI模型和服务。它支持OpenAI、Google AI、Azure OpenAI等多种AI服务提供商,并提供了工具调用、提示工程、向量化等核心功能。本文详细介绍了如何使用Spring AI和RAG技术构建企业级智能文档问答系统。通过结合Spring生态系统的成熟技术和先进的AI能力,我们能够构建出高效、准确、可扩展的智能问答解决方案。准确性高:基于真实文档内容生成答案,减少AI幻觉扩展性强:微服务架构,易于水平扩展。

intwei的博客 1059

Milvus 使用 java方式

需要跟milvus交互都需要调用MilvusServiceClient,我这里的做法是把它定义成一个Bean,需要用到的地方依赖注入。或 注意 @Value(“${milvus.port}”) 原理一致。2.创建集合 + 创建索引 + 把集合加载到内存中。1.判断集合是否已经存在。

qq_56352553的博客 4729

Spring AI + Milvus 实现 RAG 智能问答实战

摘要:本文介绍了如何使用SpringBoot+SpringAI+Milvus构建基于RAG架构的智能问答系统。RAG(检索增强生成)技术通过语义搜索从知识库中检索相关内容,再结合大语言模型生成精准回答,有效解决传统搜索的局限性。文章详细讲解了向量数据库、语义搜索等核心概念,并提供了从环境准备、知识库构建到实现RAG服务的完整步骤。该系统能理解用户问题意图,从文档中提取相关信息,生成有据可依的答案,适用于客服、知识管理等场景。SpringAI简化了AI能力集成,使Java开发者能快速构建智能应用。

nihao2q的博客 1078

Spring AI实战:基于DeepSeek与Milvus构建企业级智能问答系统的RAG架构解析

本文详细解析了基于Spring AI、DeepSeek与Milvus构建企业级智能问答系统的RAG架构。通过整合向量数据库与嵌入模型,实现高效知识检索与精准回答生成,解决大语言模型的'幻觉'问题。文章涵盖技术选型、系统设计、实战部署及性能优化,为企业构建AI知识管理系统提供完整解决方案。

weixin_42523711的博客 419

Spring AI + Milvus 实现 RAG 智能问答系统实战

通过的组合,可以轻松构建强大的、基于RAG 架构的智能语义搜索和问答应用。Spring AI 极大地简化了 AI 能力集成,让 Java 后端也能快速拥抱大语言模型和向量数据库技术。如果文章对你有帮助,点个免费的赞鼓励一下吧!关注公众号:加瓦点灯,每天推送干货知识!

shemuel的技术笔记 1547

大模型——Spring +Milvus,Java也能实现的企业级文档问答RAG

本文介绍了一套基于Spring框架的企业级AI应用解决方案,针对文档数据孤岛问题,整合文档ETL、向量检索与RAG问答技术。系统采用Spring Boot 3.5 + Spring AI 1.0,结合百度千帆AI模型和Milvus向量存储,提供从文档处理到智能对话的全链路能力。重点突出了企业级特性:API安全控制、指标可观测性、流式响应等,并通过Docker容器化部署。项目强调工程化实践,包括文档分块处理、单文档向量化、对话记忆管理等关键技术实现,为企业数字化转型提供可落地的智能助手方案。

257

从零构建 Java 智能体 RAG 系统:Milvus 向量数据库实战指南

本文系统介绍如何使用 **Java + Milvus** 从零构建企业级 AI 智能体 RAG 系统。文章涵盖 Milvus 环境搭建、Java SDK 核心操作(集合创建、索引配置、批量插入与向量检索),并基于 Spring AI 实现完整的文档 ETL、RAG 检索增强生成及 REST API 开发。进一步,通过 Milvus 存储对话历史,赋予智能体长期记忆能力;结合混合检索(稠密+稀疏向量)提升召回精度。最后分享批量插入优化、监控调优及安全实践,助力生产落地。

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 4868

ERA5数据批量下载

ERA5再分析数据的IDM接管下载

qq_38734327的博客 3036

基于 VS Code + CMake + Make + GNU工具链 + OpenOCD 的通用MCU开发环境搭建教程

以CH32V307(RISCV)和STM32F103(Cortex-M3)为例的Vscode+gnu单片机环境搭建。

余十三_的博客 2177

从文档到答案:飞算Java搭建企业级 RAG 知识服务平台

本文介绍了一个企业级AI知识库与智能问答平台的开发实践。作者通过飞算JavaAI工具,构建了一个覆盖文档接入、解析、检索、问答全流程的知识服务链。系统核心特点包括:基于权限管理的知识空间划分、多格式文档解析与向量化处理、混合检索与RAG问答框架、严格的引用溯源机制,以及模型调用与权限治理的深度整合。平台采用Spring Boot/Cloud技术栈,结合向量数据库和大模型接口,实现了可追踪的知识服务闭环。文章还分享了项目设计思路、技术选型和运营指标,强调企业知识管理需兼顾检索效率与数据安全。最后提到飞算Jav

编程世界如山海,探索不止。 2万+

LabVIEW工程密码保护机制与移除技术详解

LabVIEW作为工业自动化领域广泛使用的图形化编程工具,其密码保护机制涉及文件加密与权限控制等核心技术。从技术实现来看,现代版本采用AES-128加密结合SHA-256哈希校验,而经典版本使用XOR加密配合Base64编码。理解这些加密原理对于工程维护、灾难恢复等合法场景至关重要。在实际应用中,密码移除工具需要处理不同版本的文件结构差异,包括解析XML描述区的Protection标签、动态识别版本并应用对应解密策略。这类技术在工业设备维护、教学研究等场景具有重要价值,但必须注意遵守法律边界,确保拥有合法的

weixin_34161083的博客 392

基于Spring Boot与Milvus的RAG系统实战:从零构建企业级智能问答

在人工智能领域,大语言模型(LLM)凭借其强大的理解和生成能力,已成为构建智能应用的核心。然而,LLM存在知识更新滞后和易产生“幻觉”的固有局限。检索增强生成(RAG)技术通过引入外部知识库,有效解决了这一问题。其核心原理是将文档向量化后存入向量数据库,在用户提问时进行语义检索,并将检索到的上下文与问题一同提交给LLM,从而生成准确、可信的答案。这项技术对于提升企业知识库问答、智能客服等场景的专业性和时效性具有重要价值。本文以企业级应用为背景,详细阐述了如何利用Spring Boot、向量数据库Milvus

weixin_33806914的博客 386

论文理解【LLM-Clarification】—— 【QDrawer】Asking the Right Question at the Right Time: Human and Model Unce

本文基于 CoDraw 任务对 LLM 澄清提问的触发方式进行探索,发现模型内部不确定性与人类澄清决策相关性弱,使用不确定性阈值触发澄清提问相比模仿人类提问时机,性能和计算效率都更好

佚失的诗篇 771

不会C# Winform用户界面设计?是因为没有掌握这些控件(建议收藏)

文章目录6.1 常用控件6.1.1 单选按钮(RadioButton)6.1.2 复选框(CheckBox)6.1.3 框架1. 面板控件Panel2. 分组框GroupBox3. TabControl控件6.1.4 应用实例6. 2 列表框和组合框6.2.1 列表框(ListBox)6.2.2 组合框(ComboBox )6.2.3 应用实例6.3 用户交互界面6.3.1 滚动条和进度条6.3.2 定时器6.3.3 菜单设计菜单设计概述MenuStrip和ContextMenuSt

智慧空间实验室 2921

别再迷信 Python 了!Java + Spring + Milvus,这才是企业级 RAG 的终极形态!

在企业数字化转型的浪潮中,PDF、Word 等海量文档往往沉睡在各个业务系统中,形成“数据孤岛”,难以被智能系统高效利用。那么,如何构建一个真正的 AI 应用,让 AI 成为企业的“智能助手”?本项目提供一套基于 Spring 框架的完整解决方案,结合文档 ETL、向量检索与 RAG 问答技术,覆盖从数据导入到智能对话的全链路实践。与其他演示不同,本项目强调——包括 API 安全控制、指标可观测性等工程化特性。

m0_59163425的博客 988

ORB-SLAM3代码详解 - 第 18 篇 · Atlas 多地图系统、地图保存与全系统调优

会跑:理解三线程架构与数据流(01/08/10/13),能编译、配参、复现各数据集结果。会改:掌握相机模型抽象(05)、g2o 顶点与边(14)、预积分(15),能接入新传感器、新相机、新约束。会调:理解每个参数背后的物理含义与耦合(03/15/16/18),能针对自己的平台与场景做精度/实时/鲁棒的权衡。ORB-SLAM3 的价值不止于一个可用的 SLAM 系统,更在于它是一套工程化的几何状态估计模板:清晰的模块边界、可替换的相机/传感器抽象、紧耦合优化的标准范式。

PX4-SLAM-PNC 172
上一篇: Agentic的模式和实现代码
下一篇: MCP 和 A2A 之后又一 AI Agent 协议刷屏了:AG-UI 协议架构设计剖析
Python_金钱豹
博客等级 码龄5年 1万+粉丝 2839原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值