向量检索(Vector Search) 上下文与记忆
别名:
语义检索
按向量相似度而非关键词匹配来召回文本的检索方式,解决「同义不同词」的问题。本章手写暴力检索:embed 查询 → 逐条比对 → 阈值过滤 → top-k 排序,不依赖向量库。见[第 11 章](/chapters/11-memory-retrieval/)。
它是什么
向量检索(Vector Search)是按向量相似度而非关键词匹配来召回文本的检索方式。关键词匹配(grep 风格)解决不了「同义不同词」:库里存着「用户偏好茶饮」,查询是「他平时喝什么」,一个字都不重合。向量检索把查询也 embed 成向量,在库里找夹角最小(余弦相似度最高)的向量对应的文本——措辞错位不再是召回障碍。
暴力检索三步
记忆库规模只有几百上千条时,不需要向量数据库:embed 查询 → 逐条算余弦相似度 → 过滤 → 排序 → 截断的 O(n) 扫描几毫秒完事。三步是 minScore 阈值过滤、降序排序、topK 截断——返回的每一项带 score,调用方据此决定「注入哪些记忆、什么顺序」。向量库(以及它的 ANN 近似最近邻索引)是在记忆膨胀到几千上万条、延迟成为瓶颈时才值得引入的优化;先手写暴力检索,是为了看清机制全貌,将来才读得懂向量库在「快」什么。
与本教程的关系
第 11 章手写这套暴力检索作为长期记忆的召回层;生产级的混合检索(embedding + BM25 + 重排)可以对照 Anthropic 的 Contextual Retrieval 实践了解。
小结
一句话:向量检索把「按字面找」变成「按语义找」,是检索从关键词时代升级到 embedding 时代的核心机制。