【LangChain】核心技术:嵌入模型与向量存储完全指南 草莓熊Lotso个人主页❄️个人专栏:《C知识分享》 《Linux 入门到实践零基础也能懂》✨生活是默默的坚持毅力是永久的享受 博主简介文章目录前言一. 什么是向量与嵌入1.1 向量的基本概念1.2 语义相似度计算二. 嵌入模型详解2.1 嵌入模型 vs 生成式模型2.2 LangChain 嵌入模型接口2.3 嵌入模型的应用场景三. 向量数据库核心原理3.1 为什么需要向量数据库3.2 向量数据库的三大核心能力四. LangChain 向量存储实战这里可以先简单看看后续还会有更加详细的讲解4.1 内存存储 InMemoryVectorStore4.2 Redis 向量存储推荐生产环境4.3 Pinecone 云向量存储结尾前言在大语言模型LLM应用开发中检索增强生成RAG已经成为解决大模型 “知识截止” 和 “私有数据访问” 问题的标准方案。而 RAG 系统的核心基石正是嵌入模型Embedding Models和向量存储Vector Stores。很多开发者在入门时容易混淆这两个概念嵌入模型负责将人类语言转换为计算机能理解的数值向量而向量存储则负责高效管理和检索这些高维向量。本文将从底层原理到实战代码全面拆解 LangChain 中这两个核心组件的使用方法帮助你构建稳定高效的 RAG 系统。一. 什么是向量与嵌入1.1 向量的基本概念计算机天生擅长处理数字但无法直接理解文字、图片等人类符号。嵌入Embedding的核心思想就是将人类世界的符号单词、句子、图片、用户等转换为计算机能够理解的数值向量本质是一个数字列表并且要求这种转换能够保留原始符号的语义和关系。我们可以把它想象成一个 “翻译” 过程我喜欢猫 → 嵌入模型 → [0.023, 0.487, -0.129, ..., 0.325] (3072维向量)向量有两个关键属性向量维度向量列表的固定长度。例如 OpenAI 的text-embedding-3-large生成 3072 维向量而早期的text-embedding-ada-002只有 1536 维。维度越高能捕捉的语义信息越细微但计算和存储成本也越高。向量空间可以想象成一个拥有无数维度的 “宇宙”每个向量都是这个宇宙中的一个点。语义相近的内容在向量空间中的距离也会更近。1.2 语义相似度计算有了向量表示我们就可以用数学方法衡量两段文本的语义相似度最常用的两种计算方式是计算方式原理适用场景欧氏距离两点之间的直线距离距离越短相似度越高数据规模小、维度低的场景余弦相似度忽略向量绝对长度只关注方向差异。方向越一致相似度越高文本语义匹配推荐因为文本长度不影响语义在文本处理中余弦相似度几乎是标准选择因为它只关心 “含义是否相同”而不关心 “文本长短”。二. 嵌入模型详解2.1 嵌入模型 vs 生成式模型很多人容易混淆这两种模型它们的核心目标完全不同生成式模型如 GPT-4o、DeepSeek理解输入并生成新的文本回答问题、写文章目标是 “创造”。嵌入模型如 text-embedding-3-large、Qwen3-Embedding为输入文本创建富含语义的数值表示目标是 “表示”。2.2 LangChain 嵌入模型接口LangChain 提供了统一的Embeddings抽象接口支持几乎所有主流嵌入模型提供商OpenAIpip install -U langchain-openaiOllamapip install -U langchain-ollamaGoogle Geminipip install -U langchain-google-genai通义千问pip install -U langchain-community嵌入模型有两个核心方法这是很多初学者容易混淆的点fromlangchain_openaiimportOpenAIEmbeddings# 初始化嵌入模型embeddingsOpenAIEmbeddings(modeltext-embedding-3-large)# 1. 嵌入单个查询用于搜索query_vectorembeddings.embed_query(项目中遇到了哪些挑战)print(f查询向量维度:{len(query_vector)})# 输出: 3072# 2. 嵌入多个文档用于构建知识库documents[狗是很好的伴侣以忠诚和友好而闻名。,猫是独立的宠物经常享受自己的空间。]docs_vectorsembeddings.embed_documents(documents)print(f生成了{len(docs_vectors)}个文档向量)# 输出: 2为什么要分两个方法某些嵌入模型提供商如 OpenAI、Cohere会针对 “被搜索的文档” 和 “搜索查询本身” 采用不同的优化策略即使底层是同一个模型也可能添加不同的指令前缀以获得更好的搜索效果。2.3 嵌入模型的应用场景语义搜索不依赖关键词匹配而是根据含义搜索。例如搜索 “一种红色的水果”能找到关于 “苹果” 的文档。检索增强生成RAG这是当前最主流的应用先从知识库中检索相关内容再交给 LLM 生成答案。推荐系统将用户和物品都转换为向量根据相似度进行推荐。异常检测正常数据的向量会聚集在一起远离聚集区的向量就是异常点。三. 向量数据库核心原理3.1 为什么需要向量数据库如果只有几个文档我们可以手动计算余弦相似度进行搜索。但当文档数量达到百万、千万级时暴力搜索的时间复杂度是 O (n)完全无法接受。向量数据库就是专门为解决这个问题设计的它的核心任务是高效存储和检索高维向量实现基于内容的相似性搜索。3.2 向量数据库的三大核心能力1. 专门的索引结构灵魂向量数据库不会使用暴力搜索而是采用近似最近邻ANN搜索为了追求极致速度愿意牺牲一点点精度以极高的概率找到非常相似的向量。主流的索引技术IVF倒排文件基于聚类的方法先将向量空间分成多个簇搜索时只在最相关的几个簇中查找。HNSW分层导航小世界基于图结构的方法也是当前最主流的索引。可以用 “找城市” 的比喻理解第一层顶层只有国家节点先定位到中国第二层中国的省份节点定位到湖北省第三层湖北省的城市节点最终找到武汉市优势查询速度极快支持高并发2. 向量相似度计算优化向量数据库底层使用高度优化的库如 Facebook 的 FAISS充分利用 CPU 的SIMD 指令集单指令多数据流和 GPU 的并行计算能力让大规模向量运算速度提升几个数量级。3. 完整的数据管理功能CRUD 操作支持动态增删改查向量数据元数据过滤这是非常关键的功能可以先根据元数据如创建时间、作者、类别过滤文档再在缩小的范围内进行向量搜索可扩展性与持久化支持分布式部署保证数据不丢失集成方便提供友好的 API与 LangChain 等框架无缝集成四. LangChain 向量存储实战这里可以先简单看看后续还会有更加详细的讲解LangChain 支持几乎所有主流向量数据库本文将演示最常用的三种内存存储开发测试、Redis生产环境和 Pinecone云服务。4.1 内存存储 InMemoryVectorStore适合开发和测试环境数据存储在内存中程序退出后丢失。fromlangchain_openaiimportOpenAIEmbeddingsfromlangchain_core.vectorstoresimportInMemoryVectorStorefromlangchain_community.document_loadersimportUnstructuredMarkdownLoaderfromlangchain_text_splittersimportCharacterTextSplitter# 1. 初始化嵌入模型和向量存储embeddingsOpenAIEmbeddings(modeltext-embedding-3-large)vector_storeInMemoryVectorStore(embeddingembeddings)# 2. 加载并分割文档loaderUnstructuredMarkdownLoader(../Docs/脚手架级微服务租房平台QA.md)dataloader.load()text_splitterCharacterTextSplitter.from_tiktoken_encoder(encoding_namecl100k_base,chunk_size200,chunk_overlap50)documentstext_splitter.split_documents(data)# 3. 添加文档到向量存储自动生成向量idsvector_store.add_documents(documentsdocuments)print(f共添加了{len(ids)}个文档)# 4. 相似性搜索search_docsvector_store.similarity_search(query数据库表怎么设计的?,k2# 返回最相似的2个文档)fori,docinenumerate(search_docs):print(f\n 相似文档{i1})print(doc.page_content[:200])4.2 Redis 向量存储推荐生产环境大多数开发者都熟悉 Redis从 Redis 7.2 开始RediSearch 模块原生支持向量存储和搜索无需额外部署其他组件。前置准备启动 Redis 服务docker run -d -p 6379:6379 redis/redis-stack:latest安装依赖pip install redis langchain-redisfromlangchain_openaiimportOpenAIEmbeddingsfromlangchain_redisimportRedisConfig,RedisVectorStorefromredisvl.query.filterimportTag,Num# 1. 配置 Redis 连接redis_urlredis://localhost:6379configRedisConfig(index_nameqa,# 索引名称redis_urlredis_url,# 定义元数据字段类型用于后续过滤metadata_schema[{name:category,type:tag},{name:num,type:numeric},],)# 2. 初始化向量存储embeddingsOpenAIEmbeddings(modeltext-embedding-3-large)vector_storeRedisVectorStore(embeddings,configconfig)# 3. 添加文档并设置元数据fori,docinenumerate(documents,start1):doc.metadata[category]QAdoc.metadata[num]i vector_store.add_documents(documentsdocuments)# 4. 带元数据过滤的相似性搜索filter_conditionTag(category)QANum(num)50scored_resultsvector_store.similarity_search_with_score(query数据库表怎么设计的?,k2,filterfilter_condition)fordoc,scoreinscored_results:print(f\n 相似度得分:{score:.4f})print(f文档编号:{doc.metadata[num]})print(doc.page_content[:200])# 5. 最大边际相关性搜索MMR# 既保证相关性又保证结果多样性避免信息重复mmr_resultsvector_store.max_marginal_relevance_search(query数据库表怎么设计的?,k2,fetch_k10# 先获取10个最相似的文档再从中选2个最多样化的)4.3 Pinecone 云向量存储Pinecone 是全托管的云向量数据库服务无需自己运维支持自动扩展适合大规模生产环境。fromlangchain_openaiimportOpenAIEmbeddingsfromlangchain_pineconeimportPineconeVectorStorefrompineconeimportPinecone,ServerlessSpec# 1. 初始化 Pinecone 客户端需要先设置 PINECONE_API_KEY 环境变量pcPinecone()index_nameqa# 2. 创建索引如果不存在ifnotpc.has_index(index_name):pc.create_index(nameindex_name,dimension3072,# 必须与嵌入模型维度一致metriccosine,specServerlessSpec(cloudaws,regionus-east-1),)# 3. 初始化向量存储indexpc.Index(index_name)vector_storePineconeVectorStore(embeddingembeddings,indexindex)# 4. 添加文档和搜索用法与 Redis 完全一致vector_store.add_documents(documentsdocuments)search_docsvector_store.similarity_search(数据库表怎么设计的?,k2)核心考点总结嵌入模型的两个核心方法embed_query()用于嵌入单个查询返回一维向量embed_documents()用于嵌入多个文档返回二维向量列表分开设计是为了针对不同场景进行优化获得更好的搜索效果向量数据库的核心优势采用 ANN 近似最近邻搜索用精度换速度支持大规模数据检索支持元数据过滤先过滤再搜索提升准确性和效率提供完整的 CRUD 和分布式部署能力常见向量数据库对比InMemoryVectorStore开发测试用数据不持久化Redis适合已有 Redis 基础设施的团队部署简单Pinecone全托管云服务无需运维适合大规模应用Chroma轻量级本地向量数据库适合个人项目RAG 完整流程回顾离线阶段加载文档 → 分割文档 → 嵌入文档 → 存储到向量数据库在线阶段嵌入用户查询 → 向量数据库搜索相似文档 → 将查询和文档一起交给 LLM → 生成答案结尾 我是草莓熊 Lotso若这篇技术干货帮你打通了学习中的卡点 【关注】跟我一起深耕技术领域从基础到进阶见证每一次成长 ❤️ 【点赞】让优质内容被更多人看见让知识传递更有力量 ⭐ 【收藏】把核心知识点、实战技巧存好需要时直接查、随时用 【评论】分享你的经验或疑问比如曾踩过的技术坑一起交流避坑 ️ 【投票】用你的选择助力社区内容方向告诉大家哪个技术点最该重点拆解 技术之路难免有困惑但同行的人会让前进更有方向愿我们都能在自己专注的领域里一步步靠近心中的技术目标结语嵌入模型和向量存储是构建现代 AI 应用的基础技术它们让大模型能够访问和利用私有数据、实时数据极大地扩展了 LLM 的能力边界。本文从底层原理到实战代码全面讲解了 LangChain 中这两个核心组件的使用方法。在下一篇文章中我们将基于今天的内容完整实现一个生产级的 RAG 问答系统包括检索器的优化、提示词工程和流式输出等高级特性。如果本文对你有帮助欢迎点赞、收藏、关注我会持续分享更多 LangChain 和 AI 应用开发的实战内容。✨把这些内容吃透超牛的放松下吧✨ʕ˘ᴥ˘ʔづきらど