news 2026/8/18 19:19:27

AI Agent从无到有45: LangChain 嵌入模型实战 — 从文本到向量

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI Agent从无到有45: LangChain 嵌入模型实战 — 从文本到向量

纲要

  • 嵌入模型的核心作用
    • 将非结构化文本转化为高维向量坐标
    • 支撑语义相似度检索,是 RAG 系统的基石
  • LangChain 嵌入模型接口
    • 统一封装:embed_documentsembed_query
    • 主流模型接入:OpenAI、Ollama、BGE、智谱等
  • 嵌入缓存机制
    • 原理:避免重复向量化,降低 API 调用成本
    • 实现:CacheBackedEmbeddings+ 本地文件存储
  • 国产嵌入模型集成
    • 以硅基流动平台的 BGE‑M3 为例
    • 配置代理地址与 API Key,无缝切换
  • 完整可运行代码:使用FakeEmbeddings演示嵌入、缓存与检索,无需外部 API Key

引言

在 RAG 流水线中,文档经过加载和切片之后,必须被转换成一种机器可以理解的数学形式——向量。嵌入模型就是将文本映射为高维空间中的坐标,使得语义相近的文本在空间中彼此靠近。

LangChain 为这些模型提供了统一的调用方式,并内置缓存来优化重复嵌入的性能与成本。本文将通过可运行的代码,展示如何在 LangChain 中使用嵌入模型,并接入国产模型。

适用版本说明:本文示例基于langchain-core==0.1.xlangchain-community==0.1.xCacheBackedEmbeddingslangchain>=0.1.0中已稳定支持。

嵌入模型的工作原理

嵌入模型本质上是一个“翻译器”:输入一句话(如“今天天气怎么样?”),输出一个固定长度的数字数组(向量)。语义相近的句子生成的向量距离更近,反之则更远。在 RAG 系统中,嵌入模型承担两项任务:

  1. 入库:将知识库中的文档片段逐一向量化,存入向量数据库。
  2. 检索:将用户查询向量化,在数据库中搜索距离最近的 Top‑K 个片段。

文档 / 用户查询

嵌入模型

高维向量

向量数据库存储 / 相似性搜索

LangChain 中的嵌入模型实现

所有嵌入模型都实现两个核心方法:

  • embed_documents(texts: List[str]):批量嵌入文档。
  • embed_query(text: str):嵌入单个查询。

常用嵌入模型一览

模型维度语言支持运行方式
OpenAItext-embedding-ada-0021536多语言API 调用
BGE‑M3(BAAI)1024多语言本地 / API
智谱嵌入模型1024中文API 调用
Ollama 托管的开源模型可配置取决于模型本地运行

选型注意事项:

  • 入库和检索必须使用同一个嵌入模型,且向量数据库的维度需与模型一致。
  • 中文应用优先选择专门优化中文的模型;混合语言场景则用多语言模型。
  • 非本地运行的嵌入模型按 token 计费,合理使用缓存可大幅降低成本。

缓存机制

同一段文本通过同一嵌入模型得到的向量始终不变。LangChain 提供了CacheBackedEmbeddings,可将向量缓存到本地文件或 Redis,再次嵌入时直接读取,避免重复计算。

完整可运行代码

以下代码使用FakeEmbeddings模拟嵌入过程,并演示缓存的效果。无需任何 API Key,可直接在本地运行。

安装依赖:

pipinstalllangchain langchain-core langchain-community chromadb

核心代码:

fromlangchain_community.embeddings.fakeimportFakeEmbeddingsfromlangchain_community.vectorstoresimportChromafromlangchain_core.documentsimportDocumentfromlangchain.embeddingsimportCacheBackedEmbeddingsfromlangchain.storageimportLocalFileStoreimporttime# 1. 准备文档docs=[Document(page_content="智能温控水杯支持手机 App 远程控温。"),Document(page_content="产品续航 48 小时,采用 316 不锈钢内胆。"),Document(page_content="充电时请使用 5V/2A 适配器。"),]base_embeddings=FakeEmbeddings(size=128)# 2. 无缓存嵌入start=time.time()vectorstore_no_cache=Chroma.from_documents(docs,base_embeddings,collection_name="no_cache")print(f"无缓存嵌入耗时:{time.time()-start:.4f}秒")# 3. 带缓存嵌入store=LocalFileStore("./embedding_cache/")cached_embeddings=CacheBackedEmbeddings.from_bytes_store(base_embeddings,store,namespace="test")start=time.time()vectorstore_cached=Chroma.from_documents(docs,cached_embeddings,collection_name="cached")print(f"首次嵌入(填充缓存)耗时:{time.time()-start:.4f}秒")# 4. 再次嵌入相同文档(命中缓存)start=time.time()vectorstore_cached2=Chroma.from_documents(docs,cached_embeddings,collection_name="cached2")print(f"再次嵌入(命中缓存)耗时:{time.time()-start:.4f}秒")# 5. 检索测试query="如何给水杯充电?"vectorstore=Chroma.from_documents(docs,cached_embeddings)result=vectorstore.similarity_search(query,k=1)print(f"检索结果:{result[0].page_content}")

运行后可以观察到第二次嵌入的耗时显著减少,验证了缓存机制的效果。

注意CacheBackedEmbeddings.from_bytes_storelangchain>=0.1.0中可用。若使用更早版本,请参考官方文档的迁移指南。

国产嵌入模型集成示例

以硅基流动平台的 BGE‑M3 为例,它完全兼容 OpenAI 的 API 格式,只需修改模型名、API Key 和 Base URL 即可接入。

fromlangchain_openaiimportOpenAIEmbeddings embeddings=OpenAIEmbeddings(model="BAAI/bge-m3",openai_api_key="your_api_key",# 替换为实际 Keyopenai_api_base="https://api.siliconflow.cn/v1"# 平台代理地址)vectors=embeddings.embed_documents(["智能温控水杯","明天天气"])print(f"向量维度:{len(vectors[0])}")# 输出 1024

版本兼容提示langchain-openai包在v0.1.0之后支持openai_api_base参数。若使用langchain>=0.3.0,推荐使用base_url替代openai_api_base,两者在过渡期均有效。

API 速览

本节汇总博客中涉及的核心 API:

API所属库方法签名说明
FakeEmbeddingslangchain_community.embeddings.fake__init__(size: int)生成指定维度的随机向量,用于测试
CacheBackedEmbeddingslangchain.embeddingsfrom_bytes_store(underlying_embeddings, document_embedding_store, namespace)包装嵌入模型,提供缓存能力
LocalFileStorelangchain.storage__init__(root_path: str)本地文件系统存储,用于缓存持久化
Chromalangchain_community.vectorstoresfrom_documents(documents, embedding, collection_name)从文档列表创建向量数据库
OpenAIEmbeddingslangchain_openai__init__(model, openai_api_key, openai_api_base)调用 OpenAI 兼容接口的嵌入模型

Demo 示例

以下是一个完整的、可直接运行的 HTML 文件(使用 Python 后端),演示了嵌入、缓存与检索的完整流程。

运行说明

  1. 将上述核心代码保存为embedding_demo.py
  2. 在终端执行python embedding_demo.py
  3. 观察控制台输出的耗时对比和检索结果。

代码说明

  • 使用FakeEmbeddings模拟嵌入,无需真实 API Key。
  • 通过CacheBackedEmbeddings实现缓存,第二次嵌入耗时明显降低。
  • 使用Chroma向量数据库进行相似性检索,验证嵌入质量。

技术点总结

  • LangChain 统一的嵌入接口设计。
  • 缓存机制的原理与实现方式。
  • 向量数据库的创建与检索流程。

参考文档

官方文档

  • LangChain Embeddings 概念文档
  • LangChain CacheBackedEmbeddings API 参考
  • LangChain Chroma 向量存储文档
  • OpenAI Embeddings API 参考

参考链接

  • 硅基流动平台 API 文档
  • BGE‑M3 模型页面 (HuggingFace)
  • Ollama 嵌入模型支持

总结

嵌入模型是连接文本与向量计算的桥梁,也是 RAG 检索质量的决定性因素之一。LangChain 通过embed_documentsembed_query两个方法统一了调用接口,配合缓存机制可有效控制成本。

无论是使用 OpenAI 还是国产 BGE 系列,掌握好嵌入模型的选型和接入方式,就能为 RAG 应用打下坚实基础。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/18 19:19:10

Windows GDI编程与双缓冲技术实战指南

1. Windows GDI编程概述 Windows图形设备接口(GDI)是Windows操作系统中最基础的图形子系统,它提供了一系列API函数用于在显示器、打印机等输出设备上绘制图形和文本。作为一名Windows开发者,掌握GDI编程是深入理解Windows图形系统…

作者头像 李华
网站建设 2026/8/18 19:16:51

云计算运维学习day15--rocky Linux部署zabbix

目录 一.rocky Linux 1.1rocky Linux的诞生 1.2官网下载rocky Linux9镜像,配置好虚拟机 1.3修改网卡的命名规则 1.4设置静态IP 1.5关闭防火墙 1.6关闭selinux 1.7设置主机名 1.8配置解析文件 二.部署zabbix 2.1简单介绍 2.2官网查看下载zabbix-server服务端的步骤 …

作者头像 李华
网站建设 2026/8/18 19:14:25

【2014-04-27】windows用户管理命令

[历史归档] 本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。 发布时间: 2014-04-27 | 标题:windows用户管理命令 | 分类: 操作系统 / windows | 标签&…

作者头像 李华
网站建设 2026/8/18 19:13:45

UI组件库Kendo UI for Angular入门指南 - 从代码中动态过滤网格

Kendo UI for Angular是Kendo UI系列商业产品的最新产品。Kendo UI for Angular是专用于Angular开发的专业级Angular组件。telerik致力于提供纯粹的高性能Angular UI组件,无需任何jQuery依赖关系。虽然Kendo UI for Angular网格带有内置的过滤功能,但开发…

作者头像 李华
网站建设 2026/8/18 19:12:08

计算机单片机毕设实战-基于 STM32/51 单片机的水环境 pH、温度、浊度检测与报警系统设计 基于 STM32/51 单片机的智能水体监测阈值设置与自动换水装置实现(021503)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华
网站建设 2026/8/18 19:11:50

VS插件CodeRush全新发布v22.2.4——改进对VS 17.5的支持

CodeRush是一个强大的Visual Studio .NET 插件,它利用整合技术,通过促进开发者和团队效率来提升开发者体验。CodeRush能帮助你以极高的效率创建和维护源代码。Consume-first 申明,强大的模板,智能的选择工具,智能代码分…

作者头像 李华