当前位置: 首页 > news >正文

零基础学AI大模型之LangChain Embedding框架全解析

大家好,我是工藤学编程 🦉一个正在努力学习的小博主,期待你的关注
实战代码系列最新文章😉C++实现图书管理系统(Qt C++ GUI界面版)
SpringBoot实战系列🐷【SpringBoot实战系列】SpringBoot3.X 整合 MinIO 存储原生方案
分库分表分库分表之实战-sharding-JDBC分库分表执行流程原理剖析
消息队列深入浅出 RabbitMQ-RabbitMQ消息确认机制(ACK)
AI大模型零基础学AI大模型之Embedding与LLM大模型对比全解析

前情摘要

前情摘要
1、零基础学AI大模型之读懂AI大模型
2、零基础学AI大模型之从0到1调用大模型API
3、零基础学AI大模型之SpringAI
4、零基础学AI大模型之AI大模型常见概念
5、零基础学AI大模型之大模型私有化部署全指南
6、零基础学AI大模型之AI大模型可视化界面
7、零基础学AI大模型之LangChain
8、零基础学AI大模型之LangChain六大核心模块与大模型IO交互链路
9、零基础学AI大模型之Prompt提示词工程
10、零基础学AI大模型之LangChain-PromptTemplate
11、零基础学AI大模型之ChatModel聊天模型与ChatPromptTemplate实战
12、零基础学AI大模型之LangChain链
13、零基础学AI大模型之Stream流式输出实战
14、零基础学AI大模型之LangChain Output Parser
15、零基础学AI大模型之解析器PydanticOutputParser
16、零基础学AI大模型之大模型的“幻觉”
17、零基础学AI大模型之RAG技术
18、零基础学AI大模型之RAG系统链路解析与Document Loaders多案例实战
19、零基础学AI大模型之LangChain PyPDFLoader实战与PDF图片提取全解析
20、零基础学AI大模型之LangChain WebBaseLoader与Docx2txtLoader实战
21、零基础学AI大模型之RAG系统链路构建:文档切割转换全解析
22、零基础学AI大模型之LangChain 文本分割器实战:CharacterTextSplitter 与 RecursiveCharacterTextSplitter 全解析
23、零基础学AI大模型之Embedding与LLM大模型对比全解析

本文章目录

    • 前情摘要
  • 零基础学AI大模型之LangChain Embedding框架全解析
    • 一、为什么需要LangChain的Embedding模块?—— 解决"模型适配难题"
    • 二、LangChain Embedding核心功能:标准化接口的威力
    • 三、源码解析:Embedding的"标准协议"是什么?
      • 关键解读:
    • 四、LangChain支持的3类Embedding模型:各自适用什么场景?
    • 五、核心API与属性:调用Embedding模型的"必知参数"
      • 5.1 两个核心方法
      • 5.2 实用属性(以云端API为例)
    • 六、实战案例:用阿里云DashScopeEmbeddings处理商品评论
      • 6.1 准备工作
      • 6.2 代码实现:商品评论向量转换
      • 6.3 输出结果解读
    • 七、避坑指南:使用LangChain Embedding的3个注意事项
    • 八、总结:LangChain Embedding是RAG的"向量转换枢纽"

零基础学AI大模型之LangChain Embedding框架全解析

一、为什么需要LangChain的Embedding模块?—— 解决"模型适配难题"

在这里插入图片描述

在之前的学习中,我们知道文本嵌入(Text Embedding)是RAG系统的核心环节——将分割后的文档片段转为向量,才能存入向量数据库进行检索。但实际开发中会遇到一个问题:

  • 不同场景需要不同的Embedding模型(比如追求精度用OpenAI的text-embedding-3,注重隐私用本地开源的Sentence-BERT);
  • 每个模型的调用方式、参数格式、返回结果都不一样(比如阿里云的API需要传入dashscope_api_key,而HuggingFace模型需要指定model_name)。

这就像你有一堆不同品牌的手机,每个手机的充电接口都不一样,每次充电都要换充电器——效率极低。而LangChain的Embedding模块,就相当于一个"万能充电头":通过标准化接口封装了各种Embedding模型,让开发者用统一的方式调用不同模型,无需关心底层实现细节

请添加图片描述

二、LangChain Embedding核心功能:标准化接口的威力

在这里插入图片描述

LangChain对Embedding的核心设计理念是"接口统一,实现多样"。简单说就是:

  • 不管你用的是OpenAI、阿里云还是本地开源模型,都通过相同的方法(如embed_queryembed_documents)调用;
  • 输出结果的格式完全一致(都是浮点型向量列表),后续的向量存储、相似度计算逻辑可以复用。

这种设计带来两个显著优势:

  1. 降低切换成本:今天用OpenAI的模型,明天想换成开源的BERT?只需修改初始化代码,其他逻辑不用动;
  2. 简化协作开发:团队中有人熟悉阿里云模型,有人擅长本地部署?统一接口让代码兼容无压力。

三、源码解析:Embedding的"标准协议"是什么?

LangChain通过抽象基类(ABC)定义了Embedding的"标准协议",所有集成的模型都必须遵守这个协议。我们来看核心源码:

from abc import ABC, abstractmethod
from langchain_core.runnables.config import run_in_executorclass Embeddings(ABC):@abstractmethoddef embed_documents(self, texts: list[str]) -> list[list[float]]:"""将多个文本转换为向量(批量处理)Args:texts: 待转换的文本列表(如分割后的文档片段)Returns:向量列表,每个元素对应一个文本的向量"""@abstractmethoddef embed_query(self, text: str) -> list[float]:"""将单个文本转换为向量(通常用于用户查询)Args:text: 待转换的单个文本(如用户的问题)Returns:单个文本的向量"""

关键解读:

  • Embeddings是所有嵌入模型的父类,通过@abstractmethod强制子类实现两个核心方法;
  • embed_documents:处理批量文档(比如初始化向量数据库时,把1000个文档片段转成向量);
  • embed_query:处理单个查询(比如用户实时提问时,把问题转成向量去匹配数据库)。

这种设计就像"电器接口标准"——只要符合标准,不管是哪个品牌的电器(模型),都能插上电源(接入LangChain流程)。

四、LangChain支持的3类Embedding模型:各自适用什么场景?

LangChain几乎兼容市面上所有主流的Embedding模型,按部署方式可分为3类,各自有明确的适用场景:

模型类型代表模型核心特点适用场景
云端APIOpenAI的text-embedding-3系列、阿里云DashScope、Google PaLM Embedding无需本地资源,调用简单;但需要联网,按调用量付费快速原型开发、中小规模应用(如企业客服知识库)
本地开源模型Sentence-BERT、E5、FastText数据无需上传云端,隐私性好;但需要本地算力支持(建议至少8G内存)医疗、金融等对数据隐私敏感的场景,或离线部署需求
自定义微调模型基于BERT微调的行业模型(如法律、医疗领域)针对特定领域优化,语义理解更精准;需要数据标注和训练资源垂直领域应用(如法律文档检索、医学文献分析)

五、核心API与属性:调用Embedding模型的"必知参数"

无论使用哪种模型,LangChain的调用方式都高度统一,掌握以下API和属性即可应对大部分场景:

5.1 两个核心方法

  1. embed_query(text: str) → list[float]

    • 功能:将单个文本(如用户问题)转为向量
    • 示例:
      query_vector = embedding.embed_query("如何解决订单延迟问题?")
      print(len(query_vector))  # 输出向量维度,如1536
      
  2. embed_documents(texts: list[str]) → list[list[float]]

    • 功能:批量转换多个文本(如分割后的文档片段)
    • 示例:
      docs = ["订单延迟可能由物流拥堵导致", "解决方法:联系客服查询物流状态"]
      doc_vectors = embedding.embed_documents(docs)
      print(len(doc_vectors))  # 输出2(对应2个文档)
      print(len(doc_vectors[0]))  # 输出向量维度,如1536
      

5.2 实用属性(以云端API为例)

  • max_retries:API调用失败时的重试次数(默认1,建议设为3应对网络波动);
  • request_timeout:单次请求超时时间(单位秒,默认60,长文本处理可设为120);
  • api_key:云端模型的密钥(如OpenAI的openai_api_key、阿里云的dashscope_api_key)。

六、实战案例:用阿里云DashScopeEmbeddings处理商品评论

下面以阿里云的文本嵌入模型为例,演示如何在LangChain中实现文本转向量,并用向量分析商品评论的语义特征。

6.1 准备工作

  1. 注册阿里云账号,获取dashscope_api_key(地址:https://bailian.console.aliyun.com/);
  2. 安装依赖:
    pip install langchain_community dashscope
    

在这里插入图片描述

6.2 代码实现:商品评论向量转换

from langchain_community.embeddings import DashScopeEmbeddings# 1. 初始化阿里云Embedding模型
ali_embedding = DashScopeEmbeddings(model="text-embedding-v2",  # 阿里云第二代通用嵌入模型dashscope_api_key="你的api_key",  # 替换为实际密钥max_retries=3,  # 失败重试3次request_timeout=60  # 超时时间60秒
)# 2. 准备3条商品评论(模拟分割后的文档片段)
comments = ["衣服质量很好,但是物流太慢了","性价比超高,会回购!","尺寸偏小,建议买大一号"
]# 3. 批量转换为向量
comment_vectors = ali_embedding.embed_documents(comments)# 4. 分析输出结果
print(f"评论数量:{len(comment_vectors)}")  # 输出3(3条评论)
print(f"向量维度:{len(comment_vectors[0])}")  # 输出1536(阿里云v2模型固定维度)
print(f"第一条评论的向量前5位:{comment_vectors[0][:5]}")  # 打印部分向量值

6.3 输出结果解读

评论数量:3
向量维度:1536
第一条评论的向量前5位:[0.0234, -0.0125, 0.0567, -0.0342, 0.0189]
  • 每条评论都被转换为1536维的向量(模型固定维度);
  • 向量中的数值是模型对文本语义的编码,后续可通过计算向量距离(如余弦相似度)分析评论的相似性(比如“物流太慢”和“尺寸偏小”都是负面反馈,向量距离会较近)。

七、避坑指南:使用LangChain Embedding的3个注意事项

在这里插入图片描述

  1. 向量维度匹配:不同模型的向量维度不同(如OpenAI是1536维,Sentence-BERT是384维),同一向量数据库必须使用相同维度的模型,否则无法计算相似度;
  2. 长文本处理:部分模型对输入文本长度有限制(如OpenAI单文本最多8191 tokens),超过会截断,建议结合之前学的文本分割器预处理;
  3. 本地模型性能:开源模型在CPU上运行速度较慢(1000条文本可能需要几分钟),生产环境建议部署到GPU服务器(如NVIDIA T4以上)。

八、总结:LangChain Embedding是RAG的"向量转换枢纽"

在这里插入图片描述

LangChain的Embedding模块通过标准化接口,解决了不同嵌入模型的兼容问题,让开发者可以"一键切换"模型,专注于业务逻辑而非底层调用。

  • 云端API适合快速开发,本地模型适合隐私场景;
  • 核心方法embed_queryembed_documents是所有模型的通用入口;
  • 实际应用中需根据数据量、隐私要求、成本预算选择合适的模型。
http://www.dtcms.com/a/585529.html

相关文章:

  • 使用Procise打包和烧写BOOT.bin文件
  • 哪个网站做课件能赚钱网站建设的费用是不是含税的
  • 大朗仿做网站深圳做网站推广哪家好
  • 电力分配的艺术:从城市供电到二分查找的奇妙旅程
  • CentOS7 使用RDO部署单节点Train版OpenStack
  • Verilog运算符
  • Redis入门 - 基本概念和九种数据类型
  • mc数学库
  • CodeBuddy接入GLM4.6:新一代AI编程助手的能力革命与性能突破
  • 网站备案个人好还是企业好wordpress新文章数据库
  • 用html5写一个打巴掌大赛
  • 基于python大数据的高考志愿推荐系统
  • Web APIs 学习第五天:日期对象与DOM节点
  • windows 根据端口号关闭进程脚本
  • 推荐电商网站建设微信小程序商城制作一个需要多少钱
  • 【Web3】web3概念术语
  • 自己做的网站403企业咨询合同
  • 深海智脑:全球首个深海生境智能多模态大模型的技术突破与产业展望
  • 流程图绘制进阶:复杂分支与循环结构的优化方案
  • 浙江网站建设推广公司哪家好网站有收录但是没排名
  • 某个网址的爬虫——mitmproxy的简单使用
  • 【Spring/SpringBoot】SSM(Spring+Spring MVC+Mybatis)方案、各部分职责、与Springboot关系
  • Java 多线程机制专项(二)
  • 服务器后台继续任务
  • 拼图小游戏
  • DNS正反向解析转发服务器主从服务
  • 免费咨询问题的网站腾讯建设网站视频视频下载
  • GME 和MGRE综合实验
  • Linux下,获取子进程退出值和异常终止信号
  • 计算机网络自顶向下方法38——网络层 泛化转发与SDN