Java RAG 实战(第 6 篇):Markdown 知识库与 RAG
系列导航所属专栏《Java 开发者从零实现 RAG 知识库》学习位置第 6 篇 / 共 12 篇上一篇《第5篇Embedding 与语义检索》下一篇《第7篇使用 Qdrant 保存和检索向量》本篇先不引入向量数据库只用 Markdown、内存向量检索和 qwen3 跑通完整 RAG重点看清检索资料怎样进入 Prompt。完成进度1. 把 Markdown 按二级标题切成 Chunk2. 使用 bge-m3 检索最相关的 Chunk3. 使用阈值过滤无关资料4. 把命中资料和问题组装成 Prompt5. 调用 qwen3 生成资料内回答为什么要学Embedding 和相似度只能找出“哪段文字更相关”还不会直接生成最终答案。RAG 的关键是把检索结果转换成人类可读的 Prompt再让聊天模型严格依据这些资料回答。先使用内存版可以暂时避开数据库配置把注意力集中在完整主链切分、检索、过滤、组装 Prompt 和生成回答。理解这条链路后再引入 Qdrant 才能清楚知道向量数据库替换了哪一部分。第 1 步运行内存版 Markdown RAG在引入向量数据库前先运行03-markdown-rag确认完整 RAG 并不等于 Qdrant。这个模块把知识放在 Java 内存中适合观察每一步的数据怎样流动。示例知识文件位于03-markdown-rag/knowledge/kubernetes.md程序执行顺序MarkdownKnowledgeLoader 读取 Markdown 并按二级标题切成 Chunk ↓ ChunkSearch 用 bge-m3 计算问题与全部 Chunk 的相似度 ↓ RelevantChunkSelector 过滤低于 0.60 的结果并选择 Top-2 ↓ RagPromptBuilder 把命中资料和原始问题组装成 Prompt ↓ OllamaChatClient 调用 qwen3:14b 生成最终回答运行默认问题mvn-f03-markdown-rag/pom.xml compile exec:java也可以传入自己的问题mvn-f03-markdown-rag/pom.xml compile exec:java\-Dexec.args密码、令牌和证书应该保存在哪里成功时会先打印候选 Chunk 和相似度再打印模型回答。这里的候选向量没有保存到数据库因此每次运行都会重新读取 Markdown并重新为全部 Chunk 生成 Embedding。命中资料不是由 Ollama 自动读取的。RagPromptBuilder会在 Java 中组装类似下面的内容System Prompt只能根据提供的知识库资料回答。 User Prompt 知识库资料 [Service Chunk 的标题和正文] 用户问题 Pod 重建后 IP 变化怎样提供稳定访问地址qwen3 看到的是这个 Prompt不是向量。向量只在“找资料”这一步中使用。关键代码检索结果怎样变成模型回答对应源码03-markdown-rag/src/main/java/com/example/ai/rag/MarkdownRagDemo.java 03-markdown-rag/src/main/java/com/example/ai/rag/RagPromptBuilder.javaMarkdownRagDemo先过滤结果没有合格资料时直接返回为了突出主调用链下面片段缩减了日志打印类名、方法和调用顺序与仓库源码一致。ListChunkSearch.ResultrelevantResultsselector.select(results,MIN_SIMILARITY,TOP_K);if(relevantResults.isEmpty()){System.out.println(根据现有资料无法确定。);return;}RagPromptBuilder.PromptpromptnewRagPromptBuilder().build(query,relevantResults,TOP_K);StringanswerchatClient.chat(prompt);RagPromptBuilder再把最多TOP_K条资料按顺序拼接StringBuilderuserPromptnewStringBuilder(知识库资料);intchunkCountMath.min(maxChunks,results.size());for(intindex0;indexchunkCount;index){MarkdownKnowledgeLoader.Chunkchunkresults.get(index).chunk();userPrompt.append(\n\n[资料 ).append(index1).append().append(chunk.title()).append(]\n).append(chunk.content());}userPrompt.append(\n\n用户问题\n).append(query);这是 RAG 中“检索”与“生成”真正接上的位置。前面的relevantResults来自向量检索后面的prompt才会发给 qwen3。运行这一阶段的测试mvn-f03-markdown-rag/pom.xmltest测试覆盖 Markdown 切分、检索排序、阈值过滤、Prompt 组装和 Ollama 请求解析。完成这一步后再把相同知识迁移到 Qdrant就能清楚看到向量数据库究竟替换了哪一段工作。本篇自测RAG 一定需要向量数据库吗bge-m3 和 qwen3 在这条链路中分别做什么qwen3 最终看到的是向量还是 Prompt没有资料达到阈值时为什么不调用聊天模型参考答案不一定小规模资料可以先做内存检索bge-m3 负责向量化和检索qwen3 根据资料生成回答模型看到的是组装后的 Prompt避免基于无关资料回答并减少无效调用。本篇小结完整 RAG 包含加载切分、向量检索、阈值过滤、Prompt 组装和模型生成。向量只用于寻找相关资料真正发送给 qwen3 的是人类可读的 Chunk 正文。内存版适合学习流程但每次运行都会重新计算全部知识向量。下一篇 本专栏下一篇《第7篇使用 Qdrant 保存和检索向量》完整代码都在 GitHub欢迎 Star ⭐本专栏的全部示例代码都已开源包含 5 个可独立运行的 Maven 模块、自动化测试和完整分篇教程。建议Fork / Clone下来边读边跑 https://github.com/bysbsh/ai-rag-learning-guide代码与教程同步更新对照每一篇动手实践效果最好。如果这份教程帮到了你点个Star就是对我最大的支持也方便你之后找回最新版本。遇到问题或发现错漏欢迎在仓库提 Issue / PR。项目采用 MIT 协议可自由学习与二次创作。

相关新闻

继承体系搭好了,方法找不到了

继承体系搭好了,方法找不到了

系列回顾:上一篇毛毛姐叠了三个装饰器,执行顺序全反了——洋葱模型 + 协议覆盖,元编程的两把双刃剑。这一篇,毛毛姐搭了个粉丝管理的多重继承体系,结果方法调用顺序完全不对。 📋 本期坑点速览:多重继承 MRO 顺序反直觉 super() 在闭包中绑定错误类 __name 名称修饰不…

2026/10/13 3:19:19 阅读更多 →
2024年KMS_VL_ALL_AIO激活工具完全指南:3步实现Windows和Office自动续期激活

2024年KMS_VL_ALL_AIO激活工具完全指南:3步实现Windows和Office自动续期激活

2024年KMS_VL_ALL_AIO激活工具完全指南:3步实现Windows和Office自动续期激活 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 周一早上,隔壁工位的小王一脸愁容地问我&…

2026/10/13 3:19:22 阅读更多 →
Uniswap V3 AMM核心原理:集中流动性与Tick数学

Uniswap V3 AMM核心原理:集中流动性与Tick数学

Uniswap V3 AMM核心原理:集中流动性与Tick数学 一、引言 Uniswap V3是DeFi史上最重要的创新之一——通过集中流动性(Concentrated Liquidity),LP可以将资金集中在特定价格区间,资本效率比V2提升4000倍。但代价是复杂的数学和LP策略。 二、从V2恒定乘积到V3集中流动性…

2026/10/10 17:56:25 阅读更多 →

最新新闻

小白程序员必备:收藏!从零开始掌握 Codex 大模型核心技术

小白程序员必备:收藏!从零开始掌握 Codex 大模型核心技术

本文深入解析 Codex 大模型的六层架构,涵盖模型、Runtime、Context、Tool、Sandbox 和 Environment 的功能与关系。通过分析 Agent Loop 的工作原理,揭示 Token 的计量方式以及 Context Window 与 Memory 的关联。文章还探讨了长任务中出现的“忘记”现象…

2026/10/13 3:18:47 阅读更多 →
小白程序员也能逆袭!75天零基础拿下字节大模型Agent实习Offer,附学习路线+面试秘籍

小白程序员也能逆袭!75天零基础拿下字节大模型Agent实习Offer,附学习路线+面试秘籍

本文分享作者从零基础转行大模型Agent方向的75天经验,涵盖LLM基础学习、Agent框架掌握、项目实战和面试技巧。强调Agent方向的优势和字节等大厂的招聘需求,提供详细学习时间线和核心知识点清单。 双非硕从零转行大模型Agent方向,75天拿下字节…

2026/10/13 3:18:47 阅读更多 →
标准引领,信任赋能:SGS以权威认证审核铸就高质量发展基石

标准引领,信任赋能:SGS以权威认证审核铸就高质量发展基石

在全球化竞争日益激烈、监管要求日趋严格的今天,“认证”已成为企业进入市场的“通行证”、赢得客户信任的“信用证”以及实现可持续发展的“导航仪”。作为国际公认的测试、检验和认证机构,SGS凭借其跨越145年的卓越经验与瑞士公司特有的精准度&#xf…

2026/10/13 3:18:47 阅读更多 →
31岁在职备考软考高项经验分享:白天上班夜里刷题,二战三科50+的逆袭之路

31岁在职备考软考高项经验分享:白天上班夜里刷题,二战三科50+的逆袭之路

我31岁,做项目管理,白天上班,晚上等孩子睡了才能翻开书。第一次考高项,案例38分,没过。第二次调整方法,案例52分,三科一次过。 在职备考最大的痛就三个:时间碎、资料乱、案例论文不会…

2026/10/13 3:18:47 阅读更多 →
SpringBoot+Vue小区购物系统毕设:从架构设计到部署答辩全攻略

SpringBoot+Vue小区购物系统毕设:从架构设计到部署答辩全攻略

直接说结论:这个题目选得聪明。SpringBoot Vue 是目前 Java Web 方向使用频率最高的前后端分离组合,而"小区购物系统"又是一个业务逻辑非常完整、功能边界清晰的场景——有用户、有商品、有订单、有配送、有权限管理。对毕设来说,…

2026/10/13 3:18:47 阅读更多 →
小白程序员必备:从概念到实践,打造你的第一个 Agent 系统

小白程序员必备:从概念到实践,打造你的第一个 Agent 系统

本文深入浅出地介绍了 Agent 系统的概念、运行机制以及如何将其转化为可靠的系统。通过实际案例分析,详细阐述了 Agent Loop 的运行过程,以及模型、Runtime 和工具在其中的角色和职责。文章还探讨了如何避免 Agent 原地打转的问题,并简要介绍…

2026/10/13 3:17:47 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →