Embedding 嵌入
Embedding嵌入创建一段文本的矢量表示。这很有用,因为这意味着我们可以考虑向量空间中的文本,并执行语义搜索之类的操作,在其中查找向量空间中最相似的文本片段。
LangChain 中的基类 Embeddings
提供了两种方法:一种用于嵌入文档
,另一种用于嵌入查询
。前者 embed_documents
采用多个文本作为输入,而后者 embed_query
采用单个文本。
embed_documents
embed-documents
将文本嵌入为embeddings(向量)。
python
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
embed_query
其实和embed-documents
差不多,区别在于embed-query
嵌入单段文本,而embed-documents
嵌入的是一个文本列表。
python
embedded_query = embeddings_model.embed_query("What was the name mentioned in the conversation?")
embedded_query[:5]
官方教程使用的openai的api作为示例,需要付费才能使用,因此我们选择使用国产的智谱ai开源的嵌入模型来进行实验。
首先我们需要获取到智谱AI的api-key,前往 https://bigmodel.cn/)https://bigmodel.cn/注册智普 AI 并生成 API 密钥。完成此操作后,设置 ZHIPUAI_API_KEY 环境变量即可。
然后我们只需要导入ZhipuAIEmbeddings,并且声名所使用的的模型即可。
python3
from langchain_community.embeddings import ZhipuAIEmbeddings
embeddings = ZhipuAIEmbeddings(
model="embedding-3",
)
embed_query嵌入单个文本
python3
text = "LangChain is the framework for building context-aware reasoning applications"
single_vector = embeddings_model.embed_query(text)
len(single_vector)
2048
eimbed_documents嵌入多个文本
python3
text2 = (
"LangGraph is a library for building stateful, multi-actor applications with LLMs"
)
two_vectors = embeddings_model.embed_documents([text, text2])
print(len(two_vectors), len(two_vectors[0]))
2 2028