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 应用提供强大的知识检索基座。

相关新闻

如何快速配置炉石佣兵自动化脚本:终极解放游戏时间指南

如何快速配置炉石佣兵自动化脚本:终极解放游戏时间指南

如何快速配置炉石佣兵自动化脚本:终极解放游戏时间指南 【免费下载链接】lushi_script This script is to save your time from Mercenaries mode of Hearthstone 项目地址: https://gitcode.com/gh_mirrors/lu/lushi_script 还在为炉石传说佣兵战记的重复操…

2026/10/19 12:28:31 阅读更多 →
剪切板与URL操作全解析:从基础读写到自动化集成实战

剪切板与URL操作全解析:从基础读写到自动化集成实战

这次我们来看一个非常实用的技术主题:剪切板操作与应用URL操作。这听起来可能不像AI模型那样酷炫,但却是日常开发、自动化脚本、浏览器插件乃至跨应用数据流转的核心基础。无论是想实现一键复制网页内容到本地,还是通过URL Scheme深度链接唤醒…

2026/10/20 14:47:21 阅读更多 →
基于Codex与DeepSeek构建AI办公自动化工作流实战指南

基于Codex与DeepSeek构建AI办公自动化工作流实战指南

你是不是也遇到过这样的场景:周一早上,老板在飞书群里你:“下午的周会PPT做好了吗?还有上周的数据分析报告,最好能可视化一下。”你看着电脑里零散的文档、表格和图片,心里一算,光是整理素材、排…

2026/10/17 6:09:12 阅读更多 →

最新新闻

系统化提升个人技能:从技能地图到学习闭环

系统化提升个人技能:从技能地图到学习闭环

今年我陆续和朋友聊了十几场关于个人成长的私话,发现大家焦虑的点出奇一致:不是没在学,而是学的东西太多太散——今天刷两节剪辑课,明天收藏几个AI工具,后天又报名一个Excel进阶班,忙活大半年,最…

2026/10/21 4:14:42 阅读更多 →
M1 Mac上VS Code配置C++调试环境:从编译器到launch.json完整指南

M1 Mac上VS Code配置C++调试环境:从编译器到launch.json完整指南

先把结论放在前面:M1芯片的Mac配置VS Code的C调试环境,核心就三件事——装好编译器、配好编译任务、配好调试任务。听起来很简单,但网上能找到的教程,十有八九还是Intel Mac时代的写法,直接照搬到Apple Silicon上&…

2026/10/21 4:14:42 阅读更多 →
大模型+阿里云生态:呼叫中心智能升级的架构设计与落地实践

大模型+阿里云生态:呼叫中心智能升级的架构设计与落地实践

做呼叫中心系统这些年,我见过太多团队在“智能升级”这件事上反复折腾。传统的IVR导航让用户按到抓狂,人工坐席被重复问题淹没,质检靠抽检基本形同虚设,知识库更新永远追不上业务变化。这些问题不是靠换一套软件就能解决的。直到大…

2026/10/21 4:14:42 阅读更多 →
Docker常用命令实战指南:镜像、容器、网络与故障排查速查手册

Docker常用命令实战指南:镜像、容器、网络与故障排查速查手册

搞技术这么多年,Docker 的命令翻来覆去就那些,但每次一到关键场景,总有人开始现场查文档。尤其是现在容器化已经成了标配,连写个小的演示项目都要起个数据库容器,Docker 用得熟不熟,直接决定你排查问题的效…

2026/10/21 4:14:42 阅读更多 →
OpenCV day4实战:从灰度化到轮廓提取的图像预处理全流程

OpenCV day4实战:从灰度化到轮廓提取的图像预处理全流程

学习OpenCV到了第4天,正好处在一个很容易让人迷茫,也很容易让人开窍的节点。我经常被刚入门的朋友问到“opencv day_4到底该学什么”,还有人已经跟着教程跑完了前3天,看完图像读取、像素操作、ROI裁剪之后,突然不知道下…

2026/10/21 4:14:42 阅读更多 →
Skills不是标签:构建可验证的能力坐标系

Skills不是标签:构建可验证的能力坐标系

1. “skills”不是标签,是能力坐标系的动态刻度最近在几个技术社区和职业发展类平台反复看到一个现象:大量简历、项目介绍、自我介绍里高频出现“skills”这个词,但点开一看,要么是堆砌一长串技术名词,要么是“精通Pyt…

2026/10/21 4:13:41 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起:用户到底在追求什么“封号重开”这四个字,放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流,背后是大量的时间和精力成本。正常情况下,没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”,而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时,就意识到:单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →