前三篇讲了加载、切分、向量化。这一篇讲第四段——Vector Stores:把向量存起来,支持相似搜索。
这一篇的核心不是讲某个具体向量库怎么用,而是讲 LangChain 用统一接口抽象它们带来的一个重要能力:可替换性。
向量库的作用
向量库干两件事:
- 存:把向量和对应的文档块存起来(建库阶段)
- 查:给一个查询向量,返回最相似的几块(查询阶段)
它本质是个「能做相似搜索的数据库」。和传统数据库(按主键/条件查)不同,向量库按「语义相似度」查——给个向量,找最近的。
主流向量库
向量库有不少选择,各有定位:
| 向量库 | 特点 | 适合 |
|---|---|---|
| Pinecone | 全托管 SaaS,省心 | 不想运维,量不大 |
| Chroma | 轻量,本地友好 | 开发、原型、小规模 |
| FAISS | Meta 开源,纯库,快 | 嵌入应用、单机、极致性能 |
| pgvector | Postgres 扩展 | 已有 PG,不想多加组件 |
| Milvus | 开源,分布式 | 大规模、生产 |
选型考虑:规模、运维成本、是否已有基础设施、数据隐私。小项目用 Chroma 起步,生产规模化上 Milvus 或 Pinecone,已有 Postgres 的直接 pgvector 省事。
核心价值:统一接口带来可替换性
这是这一篇的重点。LangChain 把所有向量库抽象成同一个 VectorStore 接口——不管底层是 Pinecone 还是 Chroma,对外暴露的方法都一样:
add_documents(...) # 存
similarity_search(...) # 查
as_retriever() # 变成 retriever
这带来一个巨大的工程价值:可替换性。你的业务代码调用的是 VectorStore 接口,不是某个具体库。想从 Chroma 换到 Pinecone,业务代码几乎不用改,只改初始化那几行。
这在实际中非常有用:开发阶段用 Chroma(本地、快、免费),上线换 Pinecone 或 Milvus(生产级)。换库不用重写 RAG 链,这是接口抽象的直接回报。
但注意:向量不能跨库迁移
可替换性指的是「代码层可替换」,但有个重要限制:已存的向量不能直接跨库迁移。
因为每个库的内部存储格式、索引结构不同。从 Chroma 换到 Pinecone,不是「把 Chroma 的数据导进 Pinecone」,而是用新的库重新跑一遍建库流程(加载→切分→向量化→存)。
所以换库的成本主要是「重建库的时间」,不是「改代码的成本」。代码改得少,但数据要重灌。规划时要意识到这点。
VectorStore 能变成 Retriever
VectorStore 有个方法 as_retriever(),能把自己转成 Retriever(下一篇讲)。转成 retriever 后,它就完全融入了 Runnable 体系,能进 LCEL 链。
这是个设计上的优雅:VectorStore 是「存储+搜索」的实体,Retriever 是「给查询返回文档」的 Runnable 协议。VectorStore 实现 Retriever 协议,于是存储层和应用层解耦——你的 RAG 链只认 Retriever,不在乎背后是哪个向量库。
收束:接口统一是工程红利
这一篇讲了 Vector Stores:
- 作用是存向量、做相似搜索
- 主流有 Pinecone/Chroma/FAISS/pgvector/Milvus,按规模和场景选
- 核心价值:统一接口带来可替换性,换库几乎不改业务代码
- 但已存向量不能跨库迁移,换库要重新建
- VectorStore 能转成 Retriever,融入 Runnable 体系
下一篇讲第五段——Retrievers:检索的抽象,以及进阶检索策略。
关于十三Tech
我是十三,All in AI Agent 方向的架构师,专注 AI 工程实践。我相信 AI 是程序员的最佳搭档。
如果你想跟完这套「图解 LangChain」,欢迎关注公众号 「十三Tech」。全系列 42 篇,会按认识基础、LangGraph 状态机、Agent 与 middleware、RAG 检索、Tools/MCP/记忆、生产化收束这条线更新。

