大家好,我是程序员柏风,AI 最全的 Vibecoding 学习地图 http://coderoadmap.cn 作者。
嵌入与向量库
Embedding 把文本映射为稠密向量,使「语义相近」的句子在空间中距离更近。RAG、推荐、去重都依赖它。本课覆盖 模型选择、向量库对比与索引基础——对应 ai-engineer 的 embeddings 节点。
学习目标
- 理解 embedding 在 RAG 中的角色(离线索引 + 在线相似度检索)
- 对比 FAISS、Qdrant、Pinecone 等方案的适用场景
- 会设计 metadata 过滤与维度/距离度量
工作原理
def index_documents(chunks: list[dict], embed_fn, store):
for c in chunks:
vec = embed_fn(c["text"]) # 如 1536 维 float[]
store.upsert(
id=c["id"],
vector=vec,
metadata={"track": c["track"], "slug": c["slug"]},
)
def search(query: str, embed_fn, store, top_k=5, filters=None):
q = embed_fn(query)
return store.query(vector=q, top_k=top_k, filter=filters)
| 概念 | 说明 |
|---|---|
| 向量维度 | 由模型决定(384 / 1536 / 3072…) |
| 距离 | 常见 cosine、L2;需与模型训练一致 |
| metadata | 按 track、语言、版本过滤,减少误检索 |
向量库选型
| 方案 | 特点 | 适合 |
|---|---|---|
| FAISS | 本地库、高性能 ANN | 单机原型、离线批处理 |
| Qdrant | 开源、filter 丰富、可自托管 | 中小生产、混合云 |
| Pinecone | 全托管 SaaS | 快速上线、少运维 |
| pgvector | Postgres 扩展 | 已有 PG、数据量中等 |
CodeRoadMap 场景:索引 content/课程/*/drafts/*.md,metadata 标 published: false 的 draft 不对用户检索开放——与 ai-engineering-essentials 内容审核流程对齐。
模型与质量
- 通用文本:OpenAI text-embedding-3、Cohere、开源 bge-m3 等
- 多语言:中文讲义优先选 中英兼顾 的模型,避免英文-only 语义漂移
- 维度截断:部分 API 支持
dimensions=降维以省存储
嵌入模型与生成模型应分开选型;换 embedding 模型通常需 全量 re-index。
常见问题
| 现象 | 排查 |
|---|---|
| 检索偏题 | chunk 过大;query 未改写;模型不匹配 |
| 重复结果 | 分块重叠过高;未 dedupe |
| 慢 | 未建 ANN 索引;top_k 过大;冷启动 |
与 elasticsearch-essentials 的 混合检索(BM25 + 向量)可互补:专有名词用关键词,语义用向量。
练习
- 选 5 段站内 Markdown,手写 metadata 设计
- 用 FAISS 或 Qdrant 本地跑通 upsert + query
- 对比同一 query 在「仅向量」与「BM25+向量」下的 top-3
小结
Embedding 是 RAG 的地基;向量库选型看规模、运维与过滤需求。 下一课把分块、检索、重排串成完整 RAG 管线。