嵌入模型
嵌入模型创建文本片段的向量表示。您可以将向量视为一个数字数组,它捕捉了文本的语义含义。 通过这种方式表示文本,您可以执行数学运算,从而进行诸如搜索其他在意义上最相似的文本等操作。 这些自然语言搜索能力支撑着许多类型的上下文检索, 在这里,我们为大型语言模型提供其有效响应查询所需的相关数据。
相关服务:韩国服务器租用
Embeddings类
Embeddings类是一个用于与文本嵌入模型接口的类。存在许多不同的嵌入大模型供应商(OpenAI、Cohere、Hugging Face等)和本地模型,此类旨在为它们提供标准接口。以下是langchain-community V0.3.21版本提供的Embeddings 实现类的分类简要介绍。
主流云服务提供商
-
OpenAIEmbeddings
OpenAI提供的文本嵌入模型(如text-embedding-ada-002),广泛用于语义搜索和相似性计算。 -
AzureOpenAIEmbeddings
Azure云平台托管的OpenAI嵌入模型,功能与OpenAIEmbeddings相同,但通过Azure接口调用。 -
GooglePalmEmbeddings
Google PaLM模型系列的嵌入服务,适用于多模态和文本任务。 -
VertexAIEmbeddings
Google Vertex AI平台的嵌入模型,集成在GCP生态中。 -
CohereEmbeddings
Cohere公司提供的语义嵌入模型,支持多语言和高性能检索。 -
BedrockEmbeddings
AWS Bedrock服务的嵌入模型,支持多种基础模型(如Claude、Llama等)。 -
OCIGenAIEmbeddings
Oracle Cloud Infrastructure (OCI) 的生成式AI嵌入服务。
开源与本地模型
-
HuggingFaceEmbeddings
支持Hugging Face Hub中的开源嵌入模型(如BERT、RoBERTa)。 -
SentenceTransformerEmbeddings
基于Sentence-Transformers库的嵌入模型(如all-MiniLM-L6-v2)。 -
HuggingFaceInstructEmbeddings
针对指令优化的模型(如hkunlp/instructor-large)。 -
FastEmbedEmbeddings
轻量级、高性能的开源嵌入库(如BGE、FlagEmbedding)。 -
LlamaCppEmbeddings
基于Llama.cpp的本地嵌入模型,支持CPU推理。 -
LocalAIEmbeddings
本地部署的AI模型嵌入,兼容OpenAI API格式。 -
OllamaEmbeddings
通过Ollama工具运行的本地模型嵌入(如Llama 2)。
国产与区域服务
-
ErnieEmbeddings
百度文心大模型的嵌入服务,支持中文场景。 -
QianfanEmbeddingsEndpoint
百度千帆平台的嵌入模型API。 -
ZhipuAIEmbeddings
智谱AI(GLM系列)的嵌入服务。 -
BaichuanTextEmbeddings
百川智能的中文文本嵌入模型。 -
HunyuanEmbeddings
腾讯混元大模型的嵌入服务。 -
DashScopeEmbeddings
阿里云达摩院的模型服务(通义千问)。 -
YandexGPTEmbeddings
Yandex的俄语优化嵌入模型。
行业特定或企业级
-
DatabricksEmbeddings
Databricks平台的MLflow集成嵌入模型。 -
SagemakerEndpointEmbeddings
AWS SageMaker托管的自定义嵌入模型端点。 -
MosaicMLInstructorEmbeddings
MosaicML训练的指令优化嵌入模型。 -
SelfHostedEmbeddings
用户自托管的自定义嵌入模型。 -
JavelinAIGatewayEmbeddings
通过Javelin AI网关访问的嵌入服务。
小众或实验性
-
FakeEmbeddings
用于测试的虚拟嵌入,生成固定值。 -
DeterministicFakeEmbedding
确定性假嵌入,便于调试。 -
SpacyEmbeddings
基于Spacy库的轻量级词向量(如en_core_web_lg)。 -
TensorflowHubEmbeddings
从TensorFlow Hub加载的预训练嵌入。 -
LaserEmbeddings
Facebook的LASER多语言句子嵌入。 -
VoyageEmbeddings
Voyage AI的高效领域专用嵌入。
硬件优化
-
OpenVINOBgeEmbeddings
使用OpenVINO优化的BGE模型,提升Intel硬件性能。 -
IpexLLMBgeEmbeddings
Intel IPEX加速的大语言模型嵌入。
其他
-
AlephAlpha*:欧洲Aleph Alpha公司的多模态嵌入。
-
AnyscaleEmbeddings:Anyscale平台的Ray集成模型。
-
Clova/ClovaX:韩国Naver的嵌入服务。
-
SolarEmbeddings:Upstage的Solar模型嵌入。
-
JinaEmbeddings:Jina AI的多模态嵌入框架。
LangChain 文本嵌入方法
LangChain 中的基础 Embeddings 类提供了两个方法:
-
嵌入文档:使用
.embed_documents方法,可接受多个文本作为输入。 返回一个浮点数列表的列表。 -
嵌入查询:使用
.embed_query方法,接受单个文本。返回一个浮点数列表。
代码示例
接下来,我们以使用开源平台HuggingFace的Embeddings类作为示例,展示LangChain 中的两个文本嵌入方法。
-
引入HuggingFaceEmbeddings
from langchain_huggingface import HuggingFaceEmbeddings
embeddings_model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-mpnet-base-v2")
-
embed_documents 嵌入文本列表
embeddings = embeddings_model.embed_documents(
[
"Hi there!",
"Oh, hello!",
"What's your name?",
"My friends call me World",
"Hello World!"
]
)
len(embeddings), len(embeddings[0])
-
embed_query 嵌入单个文本
embedded_query = embeddings_model.embed_query("What was the name mentioned in the conversation?")
嵌入缓存
LangChain 的嵌入缓存旨在避免重复计算嵌入向量,提升应用效率,核心依托CacheBackedEmbeddings实现。CacheBackedEmbeddings作为缓存支持的嵌入器,将文本哈希处理后以哈希值为键,在键值存储中缓存嵌入结果,避免对相同文本重复进行嵌入计算,从而提高程序运行效率,降低计算资源消耗 。
-
初始化
CacheBackedEmbeddings的主要支持方式是from_bytes_store。它接受以下参数:-
underlying_embedder: 用于嵌入的嵌入器。
-
document_embedding_cache: 用于缓存文档嵌入的任何 ByteStore。
-
batch_size: (可选,默认为
None)在存储更新之间要嵌入的文档数量。 -
namespace: (可选,默认为 ``)用于文档缓存的命名空间。此命名空间用于避免与其他缓存的冲突。例如,将其设置为所使用的嵌入模型的名称。
-
query_embedding_cache: (可选,默认为
None或不缓存)用于缓存查询嵌入的 ByteStore,或True以使用与document_embedding_cache相同的存储。
-
注意:
-
确保设置
namespace参数,以避免使用不同嵌入模型嵌入相同文本时发生冲突。 -
CacheBackedEmbeddings默认不缓存查询嵌入。要启用查询缓存,需要指定query_embedding_cache。
代码示例
from langchain.embeddings import CacheBackedEmbeddings
from langchain.storage import LocalFileStore
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter
underlying_embeddings = OpenAIEmbeddings()
store = LocalFileStore("./cache/")
cached_embedder = CacheBackedEmbeddings.from_bytes_store(
underlying_embeddings, store, namespace=underlying_embeddings.model
)
raw_documents = TextLoader("state_of_the_union.txt").load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
documents = text_splitter.split_documents(raw_documents)
db = FAISS.from_documents(documents, cached_embedder)
缓存方式

AstraDBByteStore
-
特性:这是一种非本地存储方案,依托 DataStax 服务,运行于 Cassandra 之上,具备矢量能力与无服务器架构,适用于大型分布式系统,可应对大规模数据存储与高并发访问需求。
-
使用方式:使用前需创建 DataStax 账户获取 API 访问凭证,接着安装
langchain_astradb包来实现与 AstraDB 的集成,示例代码如下:
from langchain_astradb import AstraDBByteStore
kv_store = AstraDBByteStore(
api_endpoint="YOUR_API_ENDPOINT",
api_token="YOUR_API_TOKEN"
)
CassandraByteStore
-
特性:基于 Apache Cassandra 这一免费开源、分布式宽列存储的 NoSQL 数据库管理系统构建,能处理海量数据,在跨多个普通服务器场景下提供高可用性,无单点故障。从版本 5.0 起,Cassandra 自带向量搜索功能,为数据存储与检索带来更多便利。
-
使用方式:属于非本地存储,需安装
langchain_community包进行相关操作。
from langchain_community.storage import CassandraByteStore
from cassandra.cluster import Cluster
# 配置 Cassandra 连接
cluster = Cluster(['127.0.0.1']) # 替换为您的 Cassandra 节点地址
session = cluster.connect('langchain_keyspace') # 替换为您的 Keyspace 名称
# 初始化 CassandraByteStore
byte_store = CassandraByteStore(
session=session,
table_name="byte_store" # 替换为您的表名
)
ElasticsearchEmbeddingsCache
-
特性:作为本地存储方式,借助 Elasticsearch 实现嵌入缓存。它不仅能高效存储嵌入数据,还适合需要全文搜索功能的应用场景,方便开发者在大量文本数据中快速定位相关信息。
-
使用方式:通过安装
langchain_elasticsearch包来使用,示例代码如下:
from langchain_elasticsearch import ElasticsearchEmbeddingsCache
cache = ElasticsearchEmbeddingsCache(
elasticsearch_url="http://localhost:9200",
index_name="embedding_cache"
)
InMemoryByteStore
-
特性:采用内存存储方式,数据直接存储在运行程序的内存中。这种方式速度极快,能在短时间内完成数据的读写操作,不过由于受内存容量限制,数据持久性差,适合存储临时数据,比如在应用运行过程中产生的短暂性缓存数据。
-
使用方式:属于 LangChain 核心功能,无需额外安装特定包。使用示例如下:
from langchain_core import InMemoryByteStore
store = InMemoryByteStore()
store.put("key1", "value1")
value = store.get("key1")
LocalFileStore
-
特性:将数据存储在本地文件系统中,是一种本地存储方案,适合持久化小规模数据。相比内存存储,它不受内存容量限制,数据可长期保存;但读写速度相对内存存储会慢一些。
-
使用方式:属于 LangChain 自带功能,示例代码如下:
from langchain import LocalFileStore
store = LocalFileStore("path/to/store")
store.put("key1", "value1")
value = store.get("key1")
RedisStore
-
特性:基于 Redis 这一高性能的内存数据库实现存储,具备出色的读写性能,非常适合高并发场景。同时,Redis 支持多种数据结构,为数据存储与处理提供了丰富的操作方式,且数据可持久化保存。
-
使用方式:安装
langchain_community包后使用,示例代码如下:
from langchain_community import RedisStore
store = RedisStore(host='localhost', port=6379)
store.put("key1", "value1")
value = store.get("key1")
UpstashRedisByteStore
-
特性:这是一种云端 Redis 存储选项,属于非本地存储。它结合了 Redis 的优势与云端服务的便利性,能在云端环境中提供高效的存储服务,适合对数据存储有高可用性和可扩展性需求的应用场景 。
-
使用方式:需安装
langchain_community包来集成
from langchain_community.storage import UpstashRedisByteStore
from upstash_redis import Redis
# 配置 Upstash Redis 连接
redis_client = Redis(
url="https://your-upstash-redis-url",
token="your-upstash-redis-token"
)
# 初始化 UpstashRedisByteStore
byte_store = UpstashRedisByteStore(client=redis_client)