一、前言
- 向量数据库和向量查询是大语言模型(LLM)应用的核心之一。
二、什么是向量数据库?
1.🧠 一句话解释
- 向量数据库就是用来存放「文本、图片等非结构化数据」的“数学表达(向量)”的数据库;
- 它支持模糊语义搜索,而不是精确匹配。
2.✅ 关键概念:向量(Vector)
- 向量是一个数字数组,比如:
[0.23, -0.91, 0.15, ..., 0.07]
- 这些数字表示一段文本的语义特征,是用大模型(如 BERT, OpenAI embedding)生成的。
3.拓展:❓ “同一个问题,每次生成的向量表示会一样吗?”
✅ 简短回答:通常是一致的,只要你使用的是确定性(非随机)的 embedding 模型。
🧠 详细解释:
✅ 如果你用的是常见的嵌入模型,例如:
- OpenAI text-embedding-ada-002
- HuggingFace 的 sentence-transformers
- Cohere、百度 ERNIE、阿里 AliceMind 等
- 这些模型都是 确定性模型(deterministic):【同一个输入 → 得到的向量始终相同】
⚠️ 有例外吗?:有,以下情况会导致向量不一致:
情况 | 原因 |
---|---|
模型内部用了随机性(少见) | 某些训练中的 embedding 可能存在 Dropout 等 |
输入前处理不一致 | 比如去没去掉空格、换行、大小写 |
你使用了多个模型版本 | 模型参数或训练数据不同 |
使用了 ChatGPT 直接嵌入生成 | GPT 模型不是 embedding 模型,非稳定输出 |
✅ 如何保证一致性?
- ✅ 使用专门的嵌入模型(如 text-embedding-ada-002)
- ✅ 保证输入文本一致(大小写、空格、标点)
- ✅ 控制版本和参数不变
🧪 示例验证(用 OpenAI)
from openai import OpenAIEmbeddings
emb = OpenAIEmbeddings()
v1 = emb.embed_query("What is vector search?")
v2 = emb.embed_query("What is vector search?")
print(v1 == v2) # ✅ True(完全一致)
三、向量数据库能做什么?
- 传统数据库只能问:“这个名字等于 Alice 的记录在哪里?” ✅ 支持精确搜索!
- 向量数据库可以问:“哪些内容的意思跟 ‘如何学 AI’ 类似?” ✅ 支持语义搜索!
四、类比 / 举例
✅ 类比:图书馆 vs 图书推荐机器人
系统 | 功能说明 |
---|---|
传统数据库 📚 | 像图书馆按编号精确查找一本书 |
向量数据库 🤖 | 像智能机器人按“你说的话”推荐相关书籍 |
✅ 举个具体例子
- 1.假设你有 3 段知识内容:
- a.“大模型是如何工作的?”
- b.“向量数据库用于保存嵌入向量。”
- c.“北京的天气很好。”
- 2.现在你问了一个问题:“什么是向量搜索?”
- 3.👇 系统怎么做:
- a.把你的问题用 OpenAI 的嵌入模型转成向量:
[0.12, -0.88, ..., 0.01]
- b.把这个向量在数据库中“找最近的”:
- 发现 #2 “向量数据库…” 和它最相近 ✅
- 对 [步骤b] 的拓展:怎么理解或者衡量“最接近”?
- 在向量数据库中,“最接近”通常指:两个向量之间的距离最短,或者方向最相似。
- 常用的两种衡量方法:
- 欧氏距离(L2):看两个点之间的“直线距离”
- 余弦相似度(cos):看两个向量夹角有多小(方向是否一致)
- 图像理解:
- 余弦相似度 = 1:两个向量方向完全一致 → 高相似度
- 距离越短:内容语义越接近
- c.返回这条相关知识作为答案参考!
✅ 图示理解(简化版)
你提问:“向量搜索是啥?”
↓
→ [0.12, 0.85, ..., -0.33] ← 向量表示
↓
在向量数据库中找“最接近”的向量
↓
匹配结果 → “向量数据库用于保存嵌入向量。”
五、常用的向量数据库工具
工具 | 特点 |
---|---|
FAISS | Facebook 开源,超快 |
Milvus | 商用级向量数据库 |
Weaviate | 自带 REST/GraphQL 接口 |
Chroma | Python 原生,轻量 |
六、总结类比表
概念 | 类比或说明 |
---|---|
向量 | 把文本转成数学坐标,表示“含义” |
向量数据库 | 存这些向量,并支持模糊语义查询 |
向量查询 | 查“意思最接近”的内容,不是精确关键词匹配 |
应用场景 | 知识问答、语义搜索、推荐系统、RAG 模型等 |