【0-1的agent进阶篇】RAG:从Embedding到检索增强生成的底层逻辑
个人主页代码不加冰欢迎来访作者简介java后端学习者❄️个人专栏LeetCode刷题日记 苍穹外卖日记SSM框架深入JavaWeb✨命运的结局尽可永在不屈的挑战却不可须臾或缺大家好我是代码不加冰好久没有发文章了最近开始回归更新让我们一起进步。这篇主要给大家分享一下RAG的相关内容。不是仅仅是一个词汇而是带你从项目的源码看起分析内部的逻辑。RAG 把用户的问题变成向量 → 去知识库找相关内容 → 把找到的内容塞回 Prompt → 再让大模型回答。而 LangChain4j 做的事情就是把这套流程拆成了一组非常清晰的抽象。而我们今天主要侧重第一步Embedding也就是文本向量化文字怎么变成向量刚听到这些词的时候我也会觉得莫名其妙这明明是毫不相关的领域到底是什么联系的这篇文章就带你深入了解。一、RAG 到底是什么RAG Retrieval-Augmented Generation翻译成人话先检索再增强最后生成。它解决的核心问题是LLM 的知识是死的训练数据截止日期之后的事它不知道但 RAG 可以在用户提问时从外部知识库实时检索相关信息塞进 Prompt让 LLM 基于这些信息回答。所以 RAG 不是重新训练 LLM而是给 LLM 配一个“外挂知识库”。二、RAG 整体链路RAG 有两条链路一上一下缺一不可text RAG │ ┌──────────┴──────────┐ │ │ Ingestion Retrieval 数据入库 数据检索链路一Ingestion数据入库—— 提前准备好知识text 公司员工手册.pdf ↓ Document ↓ DocumentSplitter切分 ↓ TextSegment文本片段 ↓ EmbeddingModel向量化 ← 这里就是 Embedding ↓ Embedding向量 ↓ EmbeddingStore向量数据库最终库里存的是text TextSegment: 员工请假需要提前3天提交申请... Embedding: [0.023, -0.182, 0.731, ...]Ingestion 的本质把人类能理解的知识转换成机器能进行语义检索的向量。链路二Retrieval检索增强—— 用户提问时实时检索text 用户“请假需要提前多久” ↓ UserMessage ↓ Query ↓ QueryTransformer查询改写 ↓ QueryRouter路由选择 ↓ ContentRetriever真正检索 ← 这里会用到 Embedding 进行相似度搜索 ↓ EmbeddingStore向量库 ↓ Top-K 相关内容 ↓ ContentAggregator汇总排序 ↓ ContentInjector注入 Prompt ↓ 增强后的 UserMessage ↓ ChatModelLLM ↓ Answer三、现在我们聚焦Embedding上面的链路中Ingestion 的 EmbeddingModel和Retrieval 的相似度搜索都围绕同一个核心概念Embedding文本向量化四、Embedding 到底是什么在 LangChain4j 源码中Embedding 就是一个float[]java public class Embedding { private final float[] vector; }例如一个 384 维的向量java float[] vector { 0.12f, -0.52f, 0.83f, 0.19f, ... }; // 长度 384Embedding ≠ 文本Embedding 是文本经过模型编码后得到的一组数字。维度取决于模型模型维度某些轻量模型384OpenAI text-embedding-ada-0021536Cohere 某些模型768所以text Embedding float[dimension]五、为什么一定要 Embedding这是最核心的问题。用户问“请假需要提前多久申请”知识库里可能根本没有这句话它写的是“员工休假须至少提前三个工作日提交审批。”如果用传统字符串匹配关键词搜索基本匹配不到。但如果用Embeddingtext 问题“请假需要提前多久申请” ↓ Embedding ↓ [0.21, 0.83, -0.14, 0.52, ...] 知识“员工休假须至少提前三个工作日提交审批。” ↓ Embedding ↓ [0.19, 0.79, -0.11, 0.48, ...]这两个向量在向量空间中距离很近所以能被检索到。text 请假需要提前多久 ↓ Embedding ↓ [0.21, 0.83...] ↓ 向量数据库进行相似度搜索 ↓ 找到“员工休假须至少提前三个工作日……”这就是Semantic Search语义搜索不是字面匹配而是意思匹配。六、CosineSimilarity怎么判断两个向量像不像向量数据库找到了候选结果但怎么排序呢靠相似度计算最常用的是余弦相似度。源码中的计算逻辑java double dotProduct 0.0; double normA 0.0; double normB 0.0; for (int i 0; i vectorA.length; i) { dotProduct vectorA[i] * vectorB[i]; normA vectorA[i] * vectorA[i]; normB vectorB[i] * vectorB[i]; } return dotProduct / Math.sqrt(normA) * Math.sqrt(normB);用人话翻译判断两个向量的“方向”有多一致。比如text A ──────────────── B ────────────── 方向非常接近 → 相似度高 ✅ text A ──────────────── B ──────────────── 方向相反 → 相似度低 ❌七、为什么用余弦而不是算距离因为 Embedding 关注的是语义方向而不是长度。举个例子textA [1, 1] B [10, 10]虽然|A| ≠ |B|长度不同但方向完全一样。余弦相似度textcos θ 1所以它认为A 和 B 非常相似这非常适合语义向量——“很小的事”和“很大的事”在语义上可能是同一类。八、为什么 LangChain4j 又搞了一个 RelevanceScore余弦相似度的范围是[-1, 1]但 RAG 开发中更希望看到[0, 1]。所以 LangChain4j 做了转换java return (cosineSimilarity 1) / 2;映射关系余弦相似度RelevanceScore-10-0.50.2500.50.50.7511然后就可以做阈值过滤java if (match.score() 0.7) { // 认为比较相关采纳 }九、不同 Embedding 模型为什么不能混用这是一个非常容易踩的坑。模型 A维度 1536模型 B维度 384如果你的向量数据库 Collection 定义的是dimension 1536却塞入 384 维向量text ❌ 报错可以这样理解text EmbeddingModel.dimension() 数据库表结构的 Schema就像age INT不能塞字符串一样向量维度必须严格匹配。十、Embedding 在 RAG 中的两个位置理解了 Embedding你就能看懂它在 RAG 中的两次出现text RAG │ ┌──────────┴──────────┐ │ │ Ingestion Retrieval │ │ ▼ ▼ 文档 → EmbeddingModel 问题 → EmbeddingModel │ │ ▼ ▼ Embedding Embedding │ │ ▼ ▼ EmbeddingStore 相似度搜索Cosine │ ▼ 找到相关内容阶段Embedding 的作用Ingestion把文档变成向量存入数据库Retrieval把用户问题变成向量去数据库里找最相似的十一、整体回顾text ┌─────────────────────────────────────────────────────────────┐ │ RAG 完整链路 │ ├──────────────────────────┬──────────────────────────────────┤ │ Ingestion │ Retrieval │ ├──────────────────────────┼──────────────────────────────────┤ │ │ │ │ PDF → Document │ 用户问题 → Query │ │ ↓ │ ↓ │ │ DocumentSplitter │ QueryTransformer │ │ ↓ │ ↓ │ │ TextSegment │ QueryRouter │ │ ↓ │ ↓ │ │ ★ EmbeddingModel ★ │ ContentRetriever │ │ ↓ │ ↓ │ │ ★ Embedding ★ │ ★ 相似度搜索Cosine★ │ │ ↓ │ ↓ │ │ EmbeddingStore │ ContentAggregator │ │ │ ↓ │ │ │ ContentInjector │ │ │ ↓ │ │ │ ChatModel → Answer │ └──────────────────────────┴──────────────────────────────────┘下一篇预告这一篇我们重点攻克了Embedding 是什么、为什么、怎么算相似度。下一篇继续深入向量数据库的存储与索引

相关新闻

AI总乱改代码?一个规则文件帮你搞定!99%的人都没设置!附万能模板!

AI总乱改代码?一个规则文件帮你搞定!99%的人都没设置!附万能模板!

大家好,我是卡卡罗特。 如果你的 Agent 总是不听话,经常忘了你定的规则,胡编乱造,bug 越改越多,那多半是你少了这个规则文件。这篇文章就教你怎么生成一份能指导 Agent 工作的规则文件,让你的 Agent 越来越…

2026/8/16 3:49:07 阅读更多 →
DOTween动画:TweenManager深度解析

DOTween动画:TweenManager深度解析

TweenManager 是 DOTween 动画引擎最核心的数据中枢与底层调度器。TweenManager 是控制所有动画生命周期、内存池、帧更新与批量操作的“大脑”。它采用全静态架构,通过原生数组与自定义算法实现了极致的 零 GC(垃圾回收) 和高效的内存复用。…

2026/8/16 3:49:06 阅读更多 →
DeekSeek harness安装插件后报Failed to load plugins

DeekSeek harness安装插件后报Failed to load plugins

DeekSeek harness安装插件后报Failed to load plugins如图所示修复方法(提示哪个插件就卸载哪个插件):如图所示 web页面无法使用 根因:Cordis 插件系统的 UI 插槽冲突。 插槽:conversation.composer.dock(对话输入框右侧停靠面板…

2026/8/16 3:48:06 阅读更多 →

最新新闻

Win11下VSCode配置Python虚拟环境:从venv原理到高效开发实战

Win11下VSCode配置Python虚拟环境:从venv原理到高效开发实战

1. 项目概述:为什么在Win11上用VSCode配置Python虚拟环境是开发者的必修课 如果你在Windows 11上写Python,还在用系统全局的Python环境,那无异于在厨房里把所有调料都倒进一个罐子——炒菜时,你永远不知道会尝到什么奇怪的味道。…

2026/8/16 4:41:20 阅读更多 →
OpenClaw文档即工具架构:AI Agent技能系统的扩展性革命

OpenClaw文档即工具架构:AI Agent技能系统的扩展性革命

1. 从一个“反直觉”的架构选择说起如果你关注过一些现代AI应用框架,比如LangChain、Semantic Kernel,你会发现它们都在强调一个概念:工具(Tool)。在这些框架里,工具通常被定义为一个函数,它有明…

2026/8/16 4:41:20 阅读更多 →
双非学生3个月AI逆袭:Day6机器学习实战入门

双非学生3个月AI逆袭:Day6机器学习实战入门

1. 项目概述作为一名经历过AI学习转型的过来人,我深知大三这个时间节点对于双非院校学生的重要性。这个阶段往往面临着就业与考研的双重压力,而AI领域的高门槛更让很多同学望而却步。今天要分享的这个3个月逆袭计划,正是针对这一特定群体设计…

2026/8/16 4:41:20 阅读更多 →
【C语言】一维数组+字符串

【C语言】一维数组+字符串

第一题:一维数组。遍历输出数组全部元素。定义数组保存6个成绩:88,76,92,59,81,95,用for循环逐各打印出来。1、int score[6]:创建可以存6个整数的数组,名字叫score,用来放…

2026/8/16 4:41:20 阅读更多 →
宽压降压电源新选择|CN8830 100V 异步降压芯片,汽车 / 工业 IoT 供电一站式方案

宽压降压电源新选择|CN8830 100V 异步降压芯片,汽车 / 工业 IoT 供电一站式方案

一、高压供电痛点难解决?CN8830 精准破局在车载影音、电动车控制器、工业 DSL 猫、户外 IoT 设备、相机电源等场景里,供电电压跨度极大:4.5V~100V 宽输入区间,同时设备需要稳定低纹波输出、大峰值瞬时电流,传统低压 Bu…

2026/8/16 4:41:20 阅读更多 →
财政涉农支出数据分析:从概念到应用,解锁三农政策研究

财政涉农支出数据分析:从概念到应用,解锁三农政策研究

1. 一份跨越二十年的财政涉农支出数据,到底能告诉我们什么?如果你正在研究中国的农业、农村发展,或者对区域经济、公共财政感兴趣,那么一份覆盖全国各省、时间跨度长达二十多年的财政涉农支出数据,其价值可能远超你的想…

2026/8/16 4:40:20 阅读更多 →

日新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/14 13:40:53 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/14 14:06:45 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/15 2:35:29 阅读更多 →