嵌入与向量库
embeddings、Pinecone、FAISS、Qdrant。
30 分钟
嵌入与向量库
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。