news 2026/2/28 6:33:48

【Agent从入门到实践】24 向量数据库的通俗理解:什么是向量,什么是相似度检索

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Agent从入门到实践】24 向量数据库的通俗理解:什么是向量,什么是相似度检索

文章目录

    • 前言
    • 一、先搞懂:什么是“向量”?—— 用“标签打分”来理解
      • 1. 生活中的“向量”:给事物打“特征分”
      • 2. 数学上的向量:就是“有方向有长度的箭头”
    • 二、什么是“向量嵌入”?—— 把“文字/图片”变成“向量”
      • 1. 为什么要“嵌入”?
      • 2. 谁来做“嵌入”?—— 嵌入模型
      • 3. 嵌入的核心魔法:语义相近 → 向量相近
    • 三、什么是“相似度检索”?—— 找“最像”的东西
      • 1. 生活中的“相似度”:看“特征重合度”
      • 2. 计算机中的“相似度”:算“向量距离”
      • 3. 相似度检索的流程:3步走
    • 四、通俗对比:传统检索 vs 相似度检索
    • 五、实战:用Python玩“向量相似度”(不用向量数据库)
      • 1. 安装依赖
      • 2. 代码:嵌入+相似度计算
      • 3. 运行结果(你会看到神奇的效果!)
      • 4. 结果解读(完美符合预期!)
    • 六、向量数据库的核心价值:把“相似度检索”规模化
    • 七、总结:3句话搞懂向量和相似度检索

目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步。想要系统学习AI知识的朋友可以看看我的教程http://blog.csdn.net/jiangjunshow,教程通俗易懂,风趣幽默,从深度学习基础原理到各领域实战应用都有讲解。

前言

各位小伙伴,上一节咱们知道了:Agent要想“懂语义、找相似、查得快”,必须靠向量数据库。但很多人一听“向量”“嵌入”“余弦相似度”,头就大了——这不是数学吗?我一个程序员,搞懂这些有啥用?

其实完全不用怕!今天咱们就用大白话+生活类比,把“向量”“向量嵌入”“相似度检索”讲得明明白白,不用复杂公式,不用高等数学,看完你就能懂:向量数据库到底在干嘛,为什么它能解决传统数据库搞不定的事。


一、先搞懂:什么是“向量”?—— 用“标签打分”来理解

1. 生活中的“向量”:给事物打“特征分”

咱们先抛开数学定义,用奶茶来举例子:

假设我们要描述一杯奶茶,只用3个维度:

  • 甜度:0(无糖)~ 10(全糖)
  • 清爽度:0(浓郁)~ 10(清爽)
  • 奶味:0(无奶)~ 10(重奶)

给3杯奶茶打分:

  1. 青提茉莉:甜度3,清爽度9,奶味1 → 写成一串数字:[3, 9, 1]
  2. 芋泥鲜奶:甜度5,清爽度2,奶味9 →[5, 2, 9]
  3. 西瓜啵啵:甜度4,清爽度8,奶味0 →[4, 8, 0]

这串数字,就是“向量”!

  • 向量 = 用一组数字,描述一个事物的所有关键特征
  • 每个数字,代表一个“特征维度”的得分;
  • 维度越多,描述越精准(比如再加“冰量”“配料数”“价格”等维度)。

2. 数学上的向量:就是“有方向有长度的箭头”

从数学角度,向量可以理解成空间里的一个箭头

  • 3维向量 → 3维空间里的一个点(x,y,z);
  • 1536维向量(LLM常用)→ 1536维空间里的一个点(虽然我们想象不出来,但数学上成立);
  • 向量的长度:代表事物的“特征强度”;
  • 向量的方向:代表事物的“特征组合”(比如“清爽+低甜+少奶”就是一个方向)。

核心结论
不管是3维还是1536维,向量的本质,就是“用数字给事物打特征标签”——把模糊的“清爽”“浓郁”“好喝”,变成计算机能看懂的数字。


二、什么是“向量嵌入”?—— 把“文字/图片”变成“向量”

1. 为什么要“嵌入”?

计算机看不懂文字、图片、语音,只能看懂数字

  • 文字“夏天喝什么奶茶清爽不腻” → 计算机看不懂;
  • 把它变成向量[0.12, 0.34, ..., 0.98]→ 计算机就能处理了。

这个**“把非结构化数据(文字、图片、语音)转换成向量”的过程,就叫向量嵌入(Embedding)**。

2. 谁来做“嵌入”?—— 嵌入模型

我们不用自己写代码算向量,有专门的嵌入模型帮我们做:

  • 文本嵌入模型:sentence-transformers(开源免费)、OpenAI Embeddings(API)、通义千问Embeddings;
  • 图片嵌入模型:CLIP、ResNet;
  • 语音嵌入模型:Wav2Vec。

这些模型的作用,就是翻译官

  • 输入:文字/图片/语音;
  • 输出:一串固定长度的向量(比如384维、768维、1536维)。

3. 嵌入的核心魔法:语义相近 → 向量相近

嵌入模型最牛的地方,是语义相似的东西,向量靠得近;语义不同的东西,向量离得远

比如:

  • 文字1:“夏天喝什么奶茶清爽不腻”
  • 文字2:“低糖分水果味奶茶,无奶盖,清爽解腻”
  • 文字3:“夏天限定款奶茶,包装清爽”

嵌入后:

  • 文字1和文字2的向量,距离很近(语义相似);
  • 文字1和文字3的向量,距离很远(语义不同)。

这就是向量数据库能“懂语义”的核心原理!


三、什么是“相似度检索”?—— 找“最像”的东西

1. 生活中的“相似度”:看“特征重合度”

还是用奶茶的例子,3杯奶茶的向量:

  • 青提茉莉:[3, 9, 1]
  • 西瓜啵啵:[4, 8, 0]
  • 芋泥鲜奶:[5, 2, 9]

用户问:“推荐和青提茉莉差不多的奶茶”

  • 看特征:青提茉莉是“低甜+高清爽+低奶”;
  • 西瓜啵啵:“低甜+高清爽+无奶” →特征几乎一样,最相似;
  • 芋泥鲜奶:“中甜+低清爽+高奶” →特征完全相反,最不相似。

所以,相似度检索的结果:西瓜啵啵 > 芋泥鲜奶。

2. 计算机中的“相似度”:算“向量距离”

计算机不会“看特征”,它会算向量之间的距离——距离越近,相似度越高;距离越远,相似度越低。

常用的3种距离计算方法(不用记公式,懂意思就行):

  1. 余弦相似度(Cosine Similarity)

    • 向量的方向是否一致(不管长度);
    • 适合文本语义匹配(比如“清爽不腻”和“低甜清爽”方向一致);
    • 取值范围:-1 ~ 1,越接近1,越相似
  2. 欧氏距离(Euclidean Distance)

    • 向量在空间中的直线距离
    • 适合数值特征匹配(比如奶茶的甜度、清爽度、奶味);
    • 取值范围:0 ~ ∞,越小,越相似
  3. 点积(Dot Product)

    • 结合方向和长度;
    • 适合推荐系统(比如用户偏好向量和商品向量的点积)。

3. 相似度检索的流程:3步走

不管用哪种距离,相似度检索的流程都一样:

  1. 建库:把所有数据(文字/图片/语音)用嵌入模型转成向量,存入向量数据库;
  2. 查询:把用户的问题(比如“夏天喝什么奶茶清爽不腻”)转成查询向量;
  3. 检索:向量数据库计算查询向量和所有库向量的距离,返回距离最近的Top-K个结果(最相似的)。

四、通俗对比:传统检索 vs 相似度检索

维度传统检索(关键词匹配)相似度检索(向量匹配)
核心逻辑找“字一样”的找“意思一样”的
匹配方式字面匹配语义匹配
数据类型结构化数据(表格、数字)非结构化数据(文字、图片、语音)
检索效果精准但死板(漏相似、含无关)智能且灵活(找相似、滤无关)
适用场景查订单号、手机号、商品ID问答、推荐、相似内容查找
例子搜“夏天”→ 出“夏天限定”“夏天包装”搜“夏天清爽奶茶”→ 出“青提茉莉”“西瓜啵啵”

一句话总结
传统检索是找双胞胎(必须一模一样);
相似度检索是找亲戚(只要特征相似就行)。


五、实战:用Python玩“向量相似度”(不用向量数据库)

咱们不用复杂的向量数据库,只用Python和开源嵌入模型,亲手体验“向量嵌入+相似度计算”,一看就懂!

1. 安装依赖

pipinstallsentence-transformers numpy scikit-learn

2. 代码:嵌入+相似度计算

fromsentence_transformersimportSentenceTransformerimportnumpyasnpfromsklearn.metrics.pairwiseimportcosine_similarity# 1. 加载开源嵌入模型(轻量级,本地运行)model=SentenceTransformer('all-MiniLM-L6-v2')print("✅ 嵌入模型加载完成!")# 2. 定义文本(用户问题+候选答案)texts=["用户问题:夏天喝什么奶茶清爽不腻",# 查询文本"候选1:低糖分水果味奶茶,无奶盖,清爽解腻","候选2:夏天限定款奶茶,包装清爽,多种口味","候选3:芋泥鲜奶,绵密口感,适合秋冬","候选4:西瓜啵啵,少糖冰爽,夏天爆款"]# 3. 文本 → 向量(嵌入过程)print("\n🔄 正在生成向量...")embeddings=model.encode(texts)# 输出:(5, 384) 5个文本,每个384维向量print(f"✅ 向量生成完成!形状:{embeddings.shape}")# 4. 计算相似度(查询文本 vs 所有候选文本)query_embedding=embeddings[0].reshape(1,-1)# 查询向量( reshape 适配 sklearn 接口)candidate_embeddings=embeddings[1:]# 候选向量# 计算余弦相似度similarities=cosine_similarity(query_embedding,candidate_embeddings)[0]# 5. 输出结果(按相似度排序)print("\n📊 相似度检索结果(从高到低):")results=list(zip(texts[1:],similarities))results.sort(key=lambdax:x[1],reverse=True)# 按相似度降序fori,(text,sim)inenumerate(results,1):print(f"{i}. 相似度:{sim:.4f}|{text}")

3. 运行结果(你会看到神奇的效果!)

✅ 嵌入模型加载完成! 🔄 正在生成向量... ✅ 向量生成完成!形状:(5, 384) 📊 相似度检索结果(从高到低): 1. 相似度:0.8123 | 候选1:低糖分水果味奶茶,无奶盖,清爽解腻 2. 相似度:0.7856 | 候选4:西瓜啵啵,少糖冰爽,夏天爆款 3. 相似度:0.6210 | 候选2:夏天限定款奶茶,包装清爽,多种口味 4. 相似度:0.2145 | 候选3:芋泥鲜奶,绵密口感,适合秋冬

4. 结果解读(完美符合预期!)

  • 候选1:和用户问题语义最接近(清爽不腻、低糖分)→ 相似度最高(0.8123);
  • 候选4:夏天、冰爽、少糖 → 语义相近 → 相似度次之(0.7856);
  • 候选2:只提到“夏天”“清爽包装”,没提到“口味清爽不腻”→ 相似度中等(0.6210);
  • 候选3:芋泥鲜奶是秋冬款,和“夏天清爽”完全相反 → 相似度极低(0.2145)。

这就是相似度检索的魔力:不用关键词匹配,直接“懂意思”,找到最相关的内容!


六、向量数据库的核心价值:把“相似度检索”规模化

上面的代码,我们只处理了5个文本,计算相似度很快。但如果是10万、100万、1亿条数据

  • 每次都遍历所有向量,计算距离 →慢到无法忍受(秒级甚至分钟级);
  • 向量存储、管理、更新 →纯代码搞不定

这就是向量数据库的价值:

  1. 高效存储:专门优化向量存储,支持海量向量(亿级);
  2. 快速检索:用ANN索引(近似最近邻算法,如HNSW、IVF),把检索时间从秒级→毫秒级
  3. 功能丰富:支持增删改查、批量插入、过滤检索、多向量检索等;
  4. 易用性:提供Python/Java/Go SDK,像用MySQL一样简单。

向量数据库 = 向量存储 + ANN索引 + 相似度检索服务


七、总结:3句话搞懂向量和相似度检索

  1. 向量:用一组数字描述事物的特征,是计算机能看懂的“事物标签”;
  2. 向量嵌入:把文字/图片/语音转成向量的过程,让计算机“读懂”非结构化数据;
  3. 相似度检索:计算向量之间的距离,找到语义最相似的内容,解决传统检索“不懂语义、找不了相似”的痛点。

对Agent开发来说:

  • 向量 = Agent的“特征语言”;
  • 嵌入模型 = Agent的“翻译官”;
  • 向量数据库 = Agent的“语义搜索引擎”。

有了这三样,Agent才能真正“懂你”,而不是只会“关键词匹配”的笨机器人!


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/19 11:23:06

解锁聊天记录保护:让你的消息永不消失的实战指南

解锁聊天记录保护:让你的消息永不消失的实战指南 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitcode.com/Git…

作者头像 李华
网站建设 2026/2/19 23:22:30

告别肝帝模式:3步释放90%游戏时间的秘密武器

告别肝帝模式:3步释放90%游戏时间的秘密武器 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸上锁合成 自动肉鸽 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 在鸣潮的世界里&a…

作者头像 李华
网站建设 2026/2/27 9:37:53

云盘优化工具技术解析:从原理到实战的本地脚本开发指南

云盘优化工具技术解析:从原理到实战的本地脚本开发指南 【免费下载链接】123pan_unlock 基于油猴的123云盘解锁脚本,支持解锁123云盘下载功能 项目地址: https://gitcode.com/gh_mirrors/12/123pan_unlock 在云存储广泛应用的今天,用户…

作者头像 李华
网站建设 2026/2/14 22:10:09

Z-Image-Turbo提示词进阶写法:精准控制画面

Z-Image-Turbo提示词进阶写法:精准控制画面 你有没有试过这样输入提示词:“一个穿旗袍的女士在老上海街道上走路”,结果生成的图里人像模糊、背景像水墨画、旗袍颜色偏绿,连街道都看不出年代感?不是模型不行&#xff…

作者头像 李华