第二章:1、Embedding与向量数据库
一、Embedding 原理详解1. 什么是 Embedding定义将一段文本转换为 float[] 数组如1536个浮点数这个数组即为文本的“语义指纹”。类比如同每个人有独一无二的指纹每段文本也有独特的向量。语义越接近的文本其向量在空间中的距离越近。关键认知向量中的每个数字本身没有具体含义例如你无法解释第37个数代表什么但整体方向代表了语义。经典实验语义关系的捕获能力向量(国王) - 向量(男人) 向量(女人) ≈ 向量(女王)这说明向量空间能够捕捉语义关系而不仅是字面匹配。关键词搜索 vs 语义搜索本质区别用户问题Java多线程有哪些最佳实践 关键词搜索只能找到包含“多线程”字样的文档 语义搜索可命中《并发编程指南》、ExecutorService文档、synchronized教程 ——即使文档未出现“多线程”字样只要语义相关就能命中RAG 相比传统全文搜索的核心优势即在于此。2. 什么是余弦相似度定义衡量两个向量方向相似度的指标取值范围[-1, 1]。1完全相同方向语义一致0垂直语义无关-1完全相反方向公式cos(θ) (A·B) / (|A| × |B|)经验阈值参考相似度范围含义典型场景0.85 ~ 1.0高度相似同义改写、重复内容0.70 ~ 0.85语义相关同一主题不同表述0.50 ~ 0.70弱相关广泛关联领域 0.50基本无关不同主题2.1 余弦相似度计算工具类Java实现在 Spring AI 项目中新建工具类手动实现余弦相似度计算便于理解底层原理public class VectorUtils { /** * 余弦相似度值域 [-1, 1]越大越相似 */ public static double cosineSimilarity(float[] a, float[] b) { if (a.length ! b.length) { throw new IllegalArgumentException(向量维度不一致: a.length vs b.length); } double dotProduct 0.0, normA 0.0, normB 0.0; for (int i 0; i a.length; i) { dotProduct a[i] * b[i]; normA a[i] * a[i]; normB b[i] * b[i]; } return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB)); } public static void main(String[] args) { // 模拟两组向量验证计算逻辑 float[] v1 {1.0f, 0.0f, 0.0f}; float[] v2 {0.9f, 0.1f, 0.1f}; float[] v3 {0.0f, 1.0f, 0.0f}; System.out.println(v1与v2相似度: cosineSimilarity(v1, v2)); // 应该很高 System.out.println(v1与v3相似度: cosineSimilarity(v1, v3)); // 应该为0 } }3. 主流 Embedding 模型选型模型提供商维度中文效果费用text-embedding-v3通义千问1024优秀按量计费有免费额度BGE-large-zhBAAI开源1024优秀免费本地部署text-embedding-3-smallOpenAI1536一般按量计费重要提醒Embedding 模型和对话模型不要求同厂商。例如可用通义千问的 Embedding DeepSeek 对话模型组合。这也是 Spring AI 统一抽象带来的灵活性。二、向量数据库选型对比PGVectorPostgreSQL扩展运维成本低适合中小规模推荐入门首选Redis Stack毫秒级延迟适合对实时性要求高的场景Milvus百亿级向量检索适合大规模生产环境三、Docker 部署 PGVector 与基础操作1. 启动 PGVector 容器# 该镜像已内置 pgvector 扩展无需手动安装 docker run -d --name pgvector \ -p 5432:5432 \ -e POSTGRES_USERpostgres \ -e POSTGRES_PASSWORDpostgres \ -e POSTGRES_DBspring_ai \ pgvector/pgvector:pg172. 连接数据库# 进入容器内的 psql 命令行 docker exec -it pgvector psql -U postgres -d spring_ai3. 创建扩展和测试表-- 启用 pgvector 扩展 CREATE EXTENSION IF NOT EXISTS vector; -- 创建测试表3维向量便于理解 CREATE TABLE test_vectors ( id serial PRIMARY KEY, content text, embedding vector(3) ); -- 插入测试数据 INSERT INTO test_vectors (content, embedding) VALUES (Java多线程编程, [1.0, 0.0, 0.0]), (Java并发编程指南, [0.9, 0.1, 0.0]), (Spring框架入门, [0.0, 1.0, 0.0]), (红烧肉的做法, [0.0, 0.0, 1.0]); -- 查询与“Java并发”最相似的文档余弦距离越小越相似 SELECT content, embedding [0.95, 0.05, 0.0] AS distance FROM test_vectors ORDER BY embedding [0.95, 0.05, 0.0] LIMIT 4;查询结果示例content | distance ----------------------------------------- Java多线程编程 | 0.001382167413583435 Java并发编程指南 | 0.0016858262888576059 Spring框架入门 | 0.9474411652632639 红烧肉的做法 | 1 (4 rows)4. 理解三种距离度量余弦距离衡量方向相似度文本场景首选- 欧氏距离衡量空间距离# 内积负数衡量向量乘积在文本语义搜索场景统一推荐使用余弦距离COSINE_DISTANCE。四、Embedding模型选型补充推荐模型text2vec、bge-m3中文优化、multilingual-e5可根据业务需求和语种选择最佳模型欢迎补充交流如有疑问欢迎留言讨论

相关新闻

品牌档位约束的Prompt条件生成:低端/中端/高端话术模板与错配检测

品牌档位约束的Prompt条件生成:低端/中端/高端话术模板与错配检测

一、问题定义 LLM生成slogan默认输出“中庸档”表达——功能与情绪各占一半的通用句式。但品牌实践存在明确的档位规律: 低端品牌:直接给好处(多、快、好、省); 中端品牌:不卖产品,卖向往&#…

2026/10/9 5:34:40 阅读更多 →
基于微信小程序的智能拍卖系统设计与实现复盘

基于微信小程序的智能拍卖系统设计与实现复盘

去年做毕业设计选题时,我在几个平台搜了一圈"智能拍卖小程序",下载过好几个标着"完整源码文档"的压缩包。解压之后发现问题都差不多:要么是几年前的老项目,登录接口还是旧版wx.getUserInfo,要么核…

2026/10/9 5:33:39 阅读更多 →
毕业论文格式不用愁:PaperXie智能排版工具实战指南

毕业论文格式不用愁:PaperXie智能排版工具实战指南

每年到这个时间点,我总会收到一波毕业论文格式求助:字体字号不对、目录页码乱跳、多级标题编号断裂、参考文献缩进怎么都对不齐。说实话,论文内容写得好不好是一回事,但格式过不了、提交不上去,那真是把人逼疯。所以今…

2026/10/9 5:33:39 阅读更多 →

最新新闻

AI系统扩容避坑指南:横向扩容还是纵向扩容?从原理到决策框架

AI系统扩容避坑指南:横向扩容还是纵向扩容?从原理到决策框架

1. 扩容决策的起点:两个方向,两种代价先聊一个我经常被问的问题:AI系统跑不动了——推理延迟飙升、训练任务排队、GPU显存告急——到底该加机器还是换大机器?这个问题听起来简单,但每次认真回答完,对方都会…

2026/10/9 6:04:00 阅读更多 →
任务管理系统APP毕业设计避坑指南:状态流转与循环提醒实现

任务管理系统APP毕业设计避坑指南:状态流转与循环提醒实现

做毕业设计选“个人任务管理系统APP”这类题目时,很多同学一开始会觉得简单:不就是一个TodoList加个数据库,再加个手机页面吗?等真正动手才发现,任务管理的业务逻辑远不止“增删改查”。状态怎么流转、循环任务怎么处理…

2026/10/9 6:04:00 阅读更多 →
蓝桥杯C++备赛:数据结构与STL容器实战指南

蓝桥杯C++备赛:数据结构与STL容器实战指南

1. 为什么DAY5只练数据结构:竞赛里的“地基”思维1.1 从一道送分题看数据结构的价值如果你参加过蓝桥杯,哪怕只是做过几套真题,一定会发现一个规律:C组的题目里,真正考“奇技淫巧”的并不多,大部分题目的核…

2026/10/9 6:04:00 阅读更多 →
无网络环境下Docker复杂应用离线迁移完整指南:从镜像到数据

无网络环境下Docker复杂应用离线迁移完整指南:从镜像到数据

最近接手了一个挺棘手的活儿:要在完全无网络、也没有私有镜像仓库的隔离环境里,把一套十几台容器、涵盖数据库、缓存、消息队列、应用前后端、定时任务的多应用复杂 Docker 环境,原封不动迁到另一台新机器上。很多人一听"无网络、无镜像…

2026/10/9 6:04:00 阅读更多 →
Flutter组件鸿蒙化适配全流程实战:以books_finder图书检索库为例

Flutter组件鸿蒙化适配全流程实战:以books_finder图书检索库为例

最近在做 Flutter 跨端组件库的鸿蒙化适配时,正好把一套自维护的图书检索组件 books_finder 移植到了鸿蒙生态上。这个组件的主要定位是图书元数据的聚合检索、数据资产标准化管理以及精确检索匹配,在安卓和 iOS 上已经跑了小半年,这次折腾鸿…

2026/10/9 6:04:00 阅读更多 →
SpringBoot集成Hyperledger Fabric实现DID去中心化身份认证

SpringBoot集成Hyperledger Fabric实现DID去中心化身份认证

简介:本资源是一套面向本科毕业设计的分布式身份认证系统用户端实现,基于Hyperledger Fabric区块链构建可信身份管理体系,适用于信息安全、区块链开发与Java后端方向的学习者与毕设开发者。项目采用SpringBoot框架搭建,完整覆盖用…

2026/10/9 6:02:59 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 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/8 21:13:17 阅读更多 →
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/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练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/7 13:34:55 阅读更多 →