Embeddings 和向量数据库入门
一、什么是 Embedding
Embedding 可以理解为:把文本、图片、音频或视频映射成一组数值向量。
这些数值不是给人直接阅读的,而是给模型和检索系统计算“相似度”用的。
举个最简单的例子:
- “苹果手机”
- “iPhone”
虽然文本不同,但语义接近,所以它们生成出来的向量通常也会更接近。
这就是 Embedding 的核心价值:让机器能计算语义上的相近程度。
1.1 Embedding 常见类型
- 文本 Embedding:最常见,用于搜索、推荐、RAG
- 图片 Embedding:用于以图搜图、图像相似检索
- 多模态 Embedding:把文本和图片映射到同一语义空间
二、为什么需要向量数据库
如果只有少量数据,向量可以直接存在内存或普通数据库里。
但一旦数据规模变大,就会遇到两个问题:
- 向量维度高,普通精确检索成本高
- 相似度搜索会随着数据量增加而变慢
这时就需要向量数据库,或者带向量索引能力的数据库。
它们的主要作用是:
- 高效存储向量
- 支持相似度搜索
- 提供 ANN(近似最近邻)索引
- 搭配元数据过滤做更实用的检索
三、向量数据库到底在查什么
本质上不是“按关键词匹配”,而是在查:
哪些向量和当前查询向量距离最近
所以向量检索更偏语义,而关键词检索更偏字面。
3.1 常见距离度量
1. 余弦相似度
衡量两个向量方向是否接近。
文本语义检索中非常常见。
2. 欧氏距离
衡量两个点在空间中的直线距离。
3. 点积
在一些模型和实现里也常被使用。
不同模型、不同库,对距离度量支持会不同,不能混用。
四、向量数据库的工作流
一条典型链路通常是:
- 准备原始文本
- 切分文档
- 调 Embedding 模型把每个 chunk 编码成向量
- 把向量和元数据写入数据库
- 查询时把用户问题也编码成向量
- 到数据库里做 Top-K 相似检索
- 返回最相关片段给上层应用
如果用于 RAG,最后还会多一步:
- 把检索结果拼进 Prompt,再交给大模型生成答案
五、为什么 RAG 离不开 Embedding
RAG 的关键不是“把文档塞给模型”,而是:
- 先从大量文档里找到真正相关的片段
- 再把这些片段作为上下文提供给大模型
而这个“找到相关片段”的过程,最主流的实现方式就是:
Embedding + 向量检索
所以可以简单记成:
- Embedding 负责“表示语义”
- 向量数据库负责“高效召回”
- LLM 负责“基于召回结果组织答案”
六、主流向量数据库与方案
6.1 专用向量数据库
代表:
- Milvus
- Weaviate
- Qdrant
- Pinecone
优点:
- 向量检索能力强
- 索引与检索能力成熟
- 适合大规模语义搜索
缺点:
- 系统栈更复杂
- 运维与学习成本更高
6.2 带向量能力的通用数据库
代表:
- PostgreSQL + pgvector
- Elasticsearch / OpenSearch
- Redis Vector Similarity
优点:
- 可以和现有业务数据放在一起
- 上手门槛更低
- 便于做结构化过滤
缺点:
- 在超大规模纯向量检索场景下,可能不如专用方案
七、如何选择方案
7.1 小规模项目
如果你是:
- 个人项目
- 内部知识库
- 文档量有限
优先建议:
- PostgreSQL + pgvector
- Elasticsearch / OpenSearch
原因是:
- 部署简单
- 成本低
- 和现有业务系统更容易集成
7.2 中大规模检索系统
如果你是:
- 大规模知识库
- 高并发搜索
- 多租户 RAG 平台
可以考虑:
- Qdrant
- Milvus
- Weaviate
重点看:
- 检索延迟
- 索引能力
- 过滤能力
- 运维复杂度
八、做 Embedding 时最容易踩的坑
8.1 文档不切分,直接整篇编码
问题:
- 向量过粗
- 检索命中不精准
正确做法:
- 按语义或长度切 chunk
- 控制 chunk size
- 保留适度 overlap
8.2 混用不同模型的向量
不同模型生成的向量空间通常不兼容。
所以:
- 入库和查询必须使用同一个 Embedding 模型
8.3 只存向量,不存元数据
检索结果真正可用,往往依赖元数据:
- 标题
- 来源
- 页码
- 时间
- 作者
- 业务标签
元数据会直接影响检索后的可解释性和可过滤性。
九、和关键词搜索的关系
向量检索不一定替代关键词搜索,很多场景里它们是互补关系。
9.1 关键词搜索适合
- 查专有名词
- 查准确字段
- 查编号、产品名、报错码
9.2 向量检索适合
- 查语义近义表达
- 用户问题表达不标准
- 需要召回“意思接近”的内容
9.3 实践建议
很多成熟系统会做“混合检索”:
- BM25 / 关键词检索
- 向量检索
- 最后再融合排序
这通常比单一方案更稳。
十、总结
Embedding 和向量数据库不是“高深黑盒”,它们可以简单记成:
- Embedding:把内容变成可计算语义相似度的向量
- 向量数据库:把这些向量高效存起来,并支持相似度检索
如果你想真正学好 RAG,这一块是绕不过去的基础。
延伸阅读
- OpenAI Embeddings Guide: https://platform.openai.com/docs/guides/embeddings
- pgvector 官方仓库: https://github.com/pgvector/pgvector


