目前国内还是很缺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. 安装依赖

pip install sentence-transformers numpy scikit-learn

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

from sentence_transformers import SentenceTransformer
import numpy as np
from sklearn.metrics.pairwise import cosine_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=lambda x: x[1], reverse=True)  # 按相似度降序

for i, (text, sim) in enumerate(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才能真正“懂你”,而不是只会“关键词匹配”的笨机器人!


在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐