向量与嵌入
embeddings、相似度;vectors 节点。
30 分钟
向量与嵌入
嵌入(Embeddings) 把文本变成固定维度的 向量;语义相近的句子在向量空间里 距离更近。Agent 的「长期记忆」和 RAG 检索都依赖这一层——不是关键字匹配,而是 意义相似度。
学习目标
- 理解 embedding 模型、维度、相似度度量(余弦、点积)
- 说清向量库与全文搜索引擎的分工
- 对照路线图 vectors 节点
基本概念
| 概念 | 说明 |
|---|---|
| Embedding 模型 | 如 text-embedding-3-small;同一模型才可比 |
| 向量维度 | 如 1536;越高不一定越好,看任务与成本 |
| 相似度 | 常归一化后用 余弦相似度 |
| 向量库 | 存 id + vector + metadata;支持 ANN 近邻搜索 |
流程:文档 → 分块 → embed → 入库;查询时 问题 → embed → top-k 近邻。
与 Elasticsearch 的关系
elasticsearch-essentials 教 倒排索引、BM25、聚合;现代 ES 也支持 dense_vector 与混合检索。
| 方式 | 擅长 | 弱项 |
|---|---|---|
| 关键词(BM25) | 精确 slug、类名、错误码 | 同义改写、口语问法 |
| 向量 | 语义相似、跨语言近似 | rare token、精确匹配 |
| 混合 | 生产常见 | 需调权重与 rerank |
Agent 检索 CodeRoadMap 讲义:slug 精确查 可走 keyword;「怎么学 RAG」 类问题走向量或 hybrid。
实践注意
- 分块策略 影响召回(见 agt-rag)
- metadata 存
track_slug、lesson_slug、path,便于过滤与引用 - 嵌入要 版本化:换模型通常需 全量 re-embed
- 成本:大库 embed 一次不贵,但 增量更新 要有 pipeline
与 function calling
封装工具示例:
search_vectors(query, filter: { track: "ai-agents-essentials" }, top_k: 5)
返回:[{ chunk_id, text, score, metadata }] 供 LLM 阅读——勿把整库塞进上下文。
练习
- 解释同一问题用 BM25 与向量各可能漏掉什么
- 设计 chunk metadata 字段至少 4 个,支持按 track 过滤