AI Agent白手起家46: LangChain 向量数据库实战 — 从增删查到高级检索
纲要向量数据库基础在 RAG 系统中的核心位置与传统关系型数据库的本质区别LangChain 向量数据库接口统一方法add_documents、delete、similarity_search常用向量数据库概览Chroma、FAISS、Pinecone、Milvus 等基本操作实战文档添加支持自定义 ID文档删除按 ID文本相似性搜索与向量搜索高级检索技巧最大边际相关性MMR搜索混合搜索关键词 向量完整可运行代码使用FakeEmbeddings与内存向量库模拟增删查与 MMR引言在 RAG检索增强生成系统中经过加载、切片和向量化的文档最终需要一个高效的存储和检索容器——这就是向量数据库。它不仅仅是一个存放向量的仓库更承担着语义搜索的核心任务根据查询向量快速找到最相似的文档片段。LangChain 通过统一的接口封装了各类向量数据库让开发者可以像操作普通数据一样进行增删查同时提供了 MMR、混合搜索等高级功能。本文将通过可运行的代码手把手带你掌握向量数据库的关键操作。向量数据库基础向量数据库与传统的关系型数据库如 MySQL有着本质不同维度关系型数据库向量数据库存储内容结构化数据表格、字段高维向量数组浮点数序列查询方式精确匹配SQL where、join相似度搜索余弦距离、欧氏距离典型场景交易处理、用户管理语义检索、图像搜索、推荐系统数据模式固定 Schema灵活无需预定义结构在 RAG 系统中向量数据库负责存储所有外部知识片段的向量表示当用户查询到来时同样经过嵌入模型转为向量然后在库中通过相似度算法检索出最相关的 Top‑K 个文档片段。文档切片嵌入模型向量化存入向量数据库用户查询查询向量化相似度搜索返回相关片段LangChain 向量数据库接口LangChain 为向量数据库抽象出了统一的接口所有实现该接口的数据库都支持以下方法add_documents(documents)批量添加文档含向量。delete(ids)按 ID 删除文档。similarity_search(query, k)纯文本查询返回最相似的 k 个文档。similarity_search_by_vector(vector, k)直接传入向量进行查询。部分数据库还支持max_marginal_relevance_searchMMR和混合检索。常见向量数据库有 Chroma、FAISS、Pinecone、Milvus、Weaviate 等其中 Chroma 和 FAISS 适合本地轻量级使用Pinecone 和 Milvus 面向生产环境。向量库基本操作增、删、查下面使用FakeEmbeddings模拟向量嵌入搭配 Chroma 内存向量库演示完整的增删查流程。无需任何外部 API。安装依赖pipinstalllangchain langchain-core langchain-community chromadb文档添加fromlangchain_community.embeddings.fakeimportFakeEmbeddingsfromlangchain_community.vectorstoresimportChromafromlangchain_core.documentsimportDocument# 模拟嵌入模型维度 128embeddingsFakeEmbeddings(size128)# 准备文档docs[Document(page_content智能温控水杯支持手机 App 远程控温。,metadata{source:product}),Document(page_content产品续航 48 小时采用 316 不锈钢内胆。,metadata{source:product}),Document(page_content充电时请使用 5V/2A 适配器。,metadata{source:product}),]# 创建内存向量库并添加文档可指定 IDvectorstoreChroma(embedding_functionembeddings,collection_namedemo)ids[doc_1,doc_2,doc_3]vectorstore.add_documents(docs,idsids)print(已添加文档数:,vectorstore._collection.count())删除文档按 ID 删除某条记录vectorstore.delete(ids[doc_2])print(删除后文档数:,vectorstore._collection.count())# 输出 2相似性搜索使用纯文本查询resultsvectorstore.similarity_search(怎么充电,k1)fordocinresults:print(doc.page_content)# 应返回充电相关文档也可以先将查询向量化再搜索query_vectorembeddings.embed_query(怎么充电)resultsvectorstore.similarity_search_by_vector(query_vector,k1)print(results[0].page_content)高级检索MMR 搜索最大边际相关性MMR算法在保持结果与查询相关的同时尽量增加结果之间的多样性避免返回过于相似的内容。Chroma 支持max_marginal_relevance_search。# 添加一些内容相近的文档以便观察 MMR 效果additional_docs[Document(page_content水杯过热保护功能详解,metadata{source:manual}),Document(page_content如何正确清洗保温杯内胆,metadata{source:manual}),Document(page_content电池续航测试及充电注意事项,metadata{source:manual}),]vectorstore.add_documents(additional_docs)# MMR 搜索取 3 条结果多样性参数 lambda_mult0.5值越小越注重多样性mmr_resultsvectorstore.max_marginal_relevance_search(充电,k3,lambda_mult0.5)fordocinmmr_results:print(doc.page_content)MMR 会尽量避免只返回三篇全都是充电的文章而是可能混入一篇关于清洗或过热保护的文档提供更丰富的上下文。混合搜索简介一些高级向量数据库如 Pinecone支持混合搜索先通过关键词如 BM25 算法过滤候选文档再在缩小后的集合中进行向量相似度匹配。这种方式能结合关键词的精确性和语义的泛化性显著提升检索质量。LangChain 提供了相应的 Retrieval 封装如 Pinecone 的HybridSearchRetriever。因需要外部服务本文不展开运行但其理念与 MMR 相似用更智能的算法提升召回率和答案质量。完整可运行代码整合以下代码将增、删、查、MMR 整合于一个脚本使用内存向量库无需任何 API Key。fromlangchain_community.embeddings.fakeimportFakeEmbeddingsfromlangchain_community.vectorstoresimportChromafromlangchain_core.documentsimportDocument embeddingsFakeEmbeddings(size128)# 初始文档docs[Document(page_content智能温控水杯支持手机 App 远程控温。,metadata{type:feature}),Document(page_content产品续航 48 小时采用 316 不锈钢内胆。,metadata{type:feature}),Document(page_content充电时请使用 5V/2A 适配器。,metadata{type:caution}),Document(page_content请勿将杯体浸入水中清洗。,metadata{type:caution}),Document(page_content可通过 App 调节温度范围 40~100°C。,metadata{type:feature}),]vectorstoreChroma(embedding_functionembeddings,collection_namecup)ids[d1,d2,d3,d4,d5]vectorstore.add_documents(docs,idsids)# 删除一条vectorstore.delete(ids[d4])print(剩余文档数:,vectorstore._collection.count())# 文本搜索print(\n--- 相似性搜索充电 ---)fordocinvectorstore.similarity_search(如何充电,k2):print(doc.page_content)# MMR 搜索print(\n--- MMR 搜索充电多样性优先 ---)fordocinvectorstore.max_marginal_relevance_search(充电,k2,lambda_mult0.3):print(doc.page_content)总结向量数据库是 RAG 应用的数据心脏LangChain 通过统一接口让开发者无需关心底层差异即可完成增删查。掌握基本的add_documents、delete、similarity_search后根据场景选用 MMR 或混合搜索能显著提升检索质量和最终回答的准确度。从本地 Chroma/FAISS 到云端 Pinecone/MilvusLangChain 都能丝滑切换为你的 AI 应用提供强大的知识检索基座。