开启左侧

【LangChain】LangChain 中支持的嵌入(embedding)模型

[复制链接]
xianshiyan 发表于 2025-9-7 23:38:14 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
LangChain 中支持的嵌入(embedding)模型,这些模型用于将文本转换为向量表示,以便在向量存储(如 langchain_milvus.Milvus 或 langchain_chroma.Chroma)中进行存储和检索。
本文基于 LangChain 0.3.x,详细介绍 LangChain 支持的嵌入模型(包括内置和第三方集成),并提供一个独立示例,展示如何使用其中一种嵌入模型(OpenAIEmbeddings)结合 langchain_milvus.Milvus 构建 RAG 系统。示例包含 PDF 加载(langchain_community.document_loaders.PyPDFLoader)、分割、嵌入生成和查询。

LangChain 支持的嵌入模型

LangChain 支持多种嵌入模型,通过 langchain.embeddings 模块及其子模块(如 langchain_openai, langchain_huggingface)提供。这些模型包括商业 API(如 OpenAI)、开源模型(如 HuggingFace)以及本地或专用模型。以下是 LangChain 支持的主要嵌入模型类别和具体实现,基于官方文档(Embeddings) 和源码分析。
1. 商业 API 嵌入模型

这些模型通过云服务提供高质量嵌入,适合快速开发,但需 API 密钥和网络连接。
    OpenAIEmbeddings (langchain_openai)
      描述:OpenAI 提供的嵌入模型,如 text-embedding-3-small 和 text-embedding-3-large。
    • 特点
        高质量嵌入,广泛用于 RAG。支持批量嵌入,性能优化。需要 OpenAI API 密钥。
      安装
      1. pip install langchain-openai
      复制代码
    • 示例
      1. from langchain_openai import OpenAIEmbeddings
      2. embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
      复制代码
    AzureOpenAIEmbeddings (langchain_openai)
      描述:Azure 托管的 OpenAI 嵌入模型。
    • 特点
        与 OpenAIEmbeddings 类似,但部署在 Azure 平台。支持企业级安全和合规性。
      安装
      1. pip install langchain-openai
      复制代码
    • 示例
      1. from langchain_openai import AzureOpenAIEmbeddings
      2. embeddings = AzureOpenAIEmbeddings(azure_deployment="your-embedding-deployment")
      复制代码
    GoogleGenerativeAIEmbeddings (langchain_google_genai)
      描述:Google 提供的嵌入模型,如 text-embedding-004。
    • 特点
        适合多语言任务。需要 Google Cloud API 密钥。
      安装
      1. pip install langchain-google-genai
      复制代码
    • 示例
      1. from langchain_google_genai import GoogleGenerativeAIEmbeddings
      2. embeddings = GoogleGenerativeAIEmbeddings(model="text-embedding-004")
      复制代码
    BedrockEmbeddings (langchain_aws)
      描述:AWS Bedrock 提供的嵌入模型,如 Amazon Titan Embeddings。
    • 特点
        集成 AWS 生态,适合云原生应用。支持多种嵌入模型。
      安装
      1. pip install langchain-aws
      复制代码
    • 示例
      1. from langchain_aws import BedrockEmbeddings
      2. embeddings = BedrockEmbeddings(model_id="amazon.titan-embed-text-v1")
      复制代码
    CohereEmbeddings (langchain_cohere)
      描述:Cohere 提供的嵌入模型,如 embed-english-v3.0。
    • 特点
        高效,支持多语言。需要 Cohere API 密钥。
      安装
      1. pip install langchain-cohere
      复制代码
    • 示例
      1. from langchain_cohere import CohereEmbeddings
      2. embeddings = CohereEmbeddings(model="embed-english-v3.0")
      复制代码

2. 开源嵌入模型

这些模型通常基于 HuggingFace 或其他开源框架,可本地部署,适合隐私敏感或离线场景。
    HuggingFaceEmbeddings (langchain_huggingface)
      描述:基于 HuggingFace 模型的嵌入,如 sentence-transformers/all-MiniLM-L6-v2。
    • 特点
        开源,可本地运行。支持多种预训练模型,适合多语言任务。需要 sentence-transformers 库。
      安装
      1. pip install langchain-huggingface sentence-transformers
      复制代码
    • 示例
      1. from langchain_huggingface import HuggingFaceEmbeddings
      2. embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
      复制代码
    HuggingFaceInstructEmbeddings (langchain_huggingface)
      描述:基于指令优化的 HuggingFace 嵌入模型,如 hkunlp/instructor-large。
    • 特点
        支持任务特定指令,增强嵌入质量。计算需求较高。
      安装
      1. pip install langchain-huggingface InstructorEmbedding
      复制代码
    • 示例
      1. from langchain_huggingface import HuggingFaceInstructEmbeddings
      2. embeddings = HuggingFaceInstructEmbeddings(model_name="hkunlp/instructor-large")
      复制代码
    OllamaEmbeddings (langchain_community)
      描述:Ollama 提供的本地嵌入模型,如 nomic-embed-text。
    • 特点
        完全本地运行,适合隐私敏感场景。需要运行 Ollama 服务。
      安装
      1. pip install langchain-community
      复制代码
    • 示例
      1. from langchain_community.embeddings import OllamaEmbeddings
      2. embeddings = OllamaEmbeddings(model="nomic-embed-text")
      复制代码
    LlamaCppEmbeddings (langchain_community)
      描述:基于 LLaMA.cpp 的嵌入模型。
    • 特点
        高效本地运行,支持量化模型。需要编译 LLaMA.cpp。
      安装
      1. pip install langchain-community llama-cpp-python
      复制代码
    • 示例
      1. from langchain_community.embeddings import LlamaCppEmbeddings
      2. embeddings = LlamaCppEmbeddings(model_path="path/to/llama-model.gguf")
      复制代码

3. 其他嵌入模型

LangChain 还支持一些专用或实验性嵌入模型,适用于特定场景。
    SentenceTransformerEmbeddings (langchain_community)
      描述:直接使用 sentence-transformers 库的嵌入模型。
    • 特点
        与 HuggingFaceEmbeddings 类似,但更直接调用 sentence-transformers。开源,易于定制。
      安装
      1. pip install langchain-community sentence-transformers
      复制代码
    • 示例
      1. from langchain_community.embeddings import SentenceTransformerEmbeddings
      2. embeddings = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2")
      复制代码
    FastEmbedEmbeddings (langchain_community)
      描述:基于 Qdrant FastEmbed 的轻量级嵌入模型。
    • 特点
        优化速度和内存,适合资源受限环境。支持多种开源模型。
      安装
      1. pip install langchain-community fastembed
      复制代码
    • 示例
      1. from langchain_community.embeddings import FastEmbedEmbeddings
      2. embeddings = FastEmbedEmbeddings(model_name="BAAI/bge-small-en-v1.5")
      复制代码
    JinaEmbeddings (langchain_community)
      描述:Jina AI 提供的嵌入模型,如 jina-embeddings-v2-base-en。
    • 特点
        高性能,适合多模态任务。需要 Jina API 密钥或本地部署。
      安装
      1. pip install langchain-community
      复制代码
    • 示例
      1. from langchain_community.embeddings import JinaEmbeddings
      2. embeddings = JinaEmbeddings(model_name="jina-embeddings-v2-base-en")
      复制代码
    VoyageEmbeddings (langchain_community)
      描述:Voyage AI 提供的嵌入模型,如 voyage-2。
    • 特点
        优化语义搜索和分类任务。需要 Voyage API 密钥。
      安装
      1. pip install langchain-community
      复制代码
    • 示例
      1. from langchain_community.embeddings import VoyageEmbeddings
      2. embeddings = VoyageEmbeddings(model="voyage-2")
      复制代码

4. 自定义嵌入模型

    自定义实现:通过继承 langchain_core.embeddings.Embeddings 基类,实现 embed_query 和 embed_documents 方法。场景:使用私有模型或特定领域的嵌入。
  • 示例
    1. from langchain_core.embeddings import Embeddings
    2. classCustomEmbeddings(Embeddings):defembed_query(self, text:str)-> List[float]:return[0.1]*384# 模拟嵌入defembed_documents(self, texts: List[str])-> List[List[float]]:return[[0.1]*384for _ in texts]
    3. embeddings = CustomEmbeddings()
    复制代码
嵌入模型总结

类别模型特点使用场景
商业 APIOpenAIEmbeddingslangchain-openai高质量,易用RAG、语义搜索
商业 APIAzureOpenAIEmbeddingslangchain-openai企业级,Azure 集成企业应用
商业 APIGoogleGenerativeAIEmbeddingslangchain-google-genai多语言支持跨语言任务
商业 APIBedrockEmbeddingslangchain-awsAWS 生态云原生应用
商业 APICohereEmbeddingslangchain-cohere高效,多语言快速原型
开源HuggingFaceEmbeddingslangchain-huggingface开源,本地运行隐私敏感场景
开源OllamaEmbeddingslangchain-community完全本地离线环境
开源LlamaCppEmbeddingslangchain-community高效量化本地高性能
其他FastEmbedEmbeddingslangchain-community轻量快速资源受限环境
其他JinaEmbeddingslangchain-community多模态支持复杂任务
推荐模型
    开发/测试:OpenAIEmbeddings(简单、高质量)、HuggingFaceEmbeddings(开源、免费)。生产环境:AzureOpenAIEmbeddings(企业级)、BedrockEmbeddings(AWS 集成)。本地部署:OllamaEmbeddings、LlamaCppEmbeddings。

使用嵌入模型的 RAG 示例

以下是一个独立示例,展示如何使用 OpenAIEmbeddings(LangChain 中最常用的嵌入模型之一)结合 langchain_milvus.Milvus 构建 RAG 系统,加载 PDF 文档(关于云计算主题),回答查询。
准备文件
创建一个 PDF 文件 cloud_computing_knowledge.pdf,内容如下(可使用 Word 保存为 PDF):
  1. 云计算通过互联网提供按需计算资源,如服务器和存储。
  2. IaaS(基础设施即服务)提供虚拟机和存储,如 AWS EC2。
  3. SaaS(软件即服务)提供在线应用,如 Google Workspace。
复制代码
代码
  1. import os
  2. os.environ["OPENAI_API_KEY"]="Your OpenAI API Key"from langchain_openai import ChatOpenAI, OpenAIEmbeddings
  3. from langchain_milvus import Milvus
  4. from langchain_core.prompts import ChatPromptTemplate
  5. from langchain_core.output_parsers import StrOutputParser
  6. from langchain_core.runnables import RunnablePassthrough
  7. from langchain.text_splitter import RecursiveCharacterTextSplitter
  8. from langchain_community.document_loaders import PyPDFLoader
  9. # 加载 PDF 文档
  10. loader = PyPDFLoader(file_path="cloud_computing_knowledge.pdf")
  11. documents = loader.load()# 分割文档
  12. splitter = RecursiveCharacterTextSplitter(
  13.     chunk_size=100,
  14.     chunk_overlap=20,
  15.     separators=["\n\n","\n"," ",""])
  16. split_documents = splitter.split_documents(documents)# 初始化嵌入模型和 Milvus 向量存储
  17. embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
  18. vectorstore = Milvus(
  19.     embedding_function=embeddings,
  20.     connection_args={"uri":"http://localhost:19530"},
  21.     collection_name="cloud_computing_collection",
  22.     drop_old=True,
  23.     auto_id=True)
  24. vectorstore.add_documents(split_documents)# 初始化 LLM
  25. llm = ChatOpenAI(temperature=0, model="gpt-4")# 提示模板
  26. prompt = ChatPromptTemplate.from_template("""根据以下上下文回答问题:
  27. 上下文:{context}
  28. 问题:{question}
  29. 回答:""")# 格式化文档函数defformat_docs(docs):return"\n\n".join(doc.page_content for doc in docs)# 创建 RAG 链
  30. rag_chain =({"context": vectorstore.as_retriever(search_kwargs={"k":2})| format_docs,"question": RunnablePassthrough()}| prompt
  31.     | llm
  32.     | StrOutputParser())# 调用链print("RAG 链输出:")
  33. response = rag_chain.invoke("什么是云计算?")print(response)
  34. response = rag_chain.invoke("它有哪些服务模型?")print(response)
复制代码
输出示例
  1. RAG 链输出:
  2. 云计算通过互联网提供按需计算资源,如服务器和存储。
  3. 云计算的服务模型包括 IaaS(基础设施即服务)和 SaaS(软件即服务)。
复制代码
代码说明


  • 嵌入模型
      OpenAIEmbeddings(text-embedding-3-small)生成文档和查询的嵌入向量。

  • 文档加载与分割
      PyPDFLoader 加载 cloud_computing_knowledge.pdf。RecursiveCharacterTextSplitter 分割为 100 字符块,chunk_overlap=20。

  • 向量存储
      Milvus 使用 connection_args={"uri": "http://localhost:19530"} 存储嵌入,集合名为 cloud_computing_collection。

  • RAG 链
      retriever 检索 2 个相关文档。prompt 结合上下文和问题,llm(gpt-4)生成答案。

运行要求
    Milvus 服务运行(http://localhost:19530)。cloud_computing_knowledge.pdf 存在且可读。OpenAI API 密钥有效。

注意事项


  • API 密钥

    • 对于商业嵌入模型(如 OpenAIEmbeddings),使用 .env:
      1. from dotenv import load_dotenv
      2. load_dotenv()
      复制代码
      确保密钥支持指定模型。

  • 依赖
      安装示例所需:
      1. pip install --upgrade langchain langchain-openai langchain-milvus pymilvus langchain-community pypdf
      复制代码
      其他嵌入模型可能需要额外包(如 langchain-huggingface)。

  • 嵌入模型选择
      维度兼容性:确保嵌入模型的输出维度与向量存储兼容(如 Milvus 默认支持任意维度)。性能:商业模型(如 OpenAI)速度快但需网络;开源模型(如 HuggingFace)可本地运行但计算密集。成本:开源模型免费,商业模型按 API 调用计费。

  • 本地部署
      对于 HuggingFaceEmbeddings 或 OllamaEmbeddings,确保 GPU(若可用)加速:
      1. embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2", model_kwargs={"device":"cuda"})
      复制代码

  • 调试
      验证嵌入维度:
      1. vector = embeddings.embed_query("测试")print(len(vector))# 输出维度,如 1536
      复制代码
    • 检查 Milvus 连接:
      1. from pymilvus import connections
      2. connections.connect(uri="http://localhost:19530")
      复制代码


常见问题

Q1:如何选择合适的嵌入模型?
A:根据需求:
    快速开发:OpenAIEmbeddings(高性能、简单)。隐私敏感:HuggingFaceEmbeddings 或 OllamaEmbeddings(本地运行)。多语言:GoogleGenerativeAIEmbeddings 或 CohereEmbeddings。资源受限:FastEmbedEmbeddings(轻量)。
Q2:可以混合使用嵌入模型吗?
A:不推荐,同一向量存储应使用相同的嵌入模型,确保向量维度和语义一致。若需切换,重建集合:
  1. vectorstore.drop_old =True
  2. vectorstore.add_documents(documents)
复制代码
Q3:如何处理嵌入模型的维度不匹配?
A:检查模型输出维度,调整向量存储配置:
  1. vectorstore = Milvus(..., dimension=1536)# 匹配 OpenAI 维度
复制代码
Q4:支持多模态嵌入吗?
A:部分模型(如 JinaEmbeddings)支持多模态,但 LangChain 主要聚焦文本嵌入。多模态需自定义实现。

总结

LangChain 支持多种嵌入模型,包括:
    商业 API:OpenAIEmbeddings, AzureOpenAIEmbeddings, GoogleGenerativeAIEmbeddings, BedrockEmbeddings, CohereEmbeddings。开源模型:HuggingFaceEmbeddings, OllamaEmbeddings, LlamaCppEmbeddings。其他:FastEmbedEmbeddings, JinaEmbeddings, VoyageEmbeddings。自定义:继承 Embeddings 基类。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
阅读排行更多+

Powered by Discuz! X3.4© 2001-2013 Discuz Team.( 京ICP备17022993号-3 )