综合
概述
多模态是指能够处理不同形式的数据,例如文本、音频、图像和视频。多模态可以出现在各种组件中,允许模型和系统无缝处理和处理这些数据类型的混合。
- 聊天模型:理论上,这些可以接受并生成多模态输入和输出,处理各种数据类型,如文本、图像、音频和视频。
- 嵌入模型:嵌入模型可以表示多模态内容,将各种形式的数据(例如文本、图像和音频)嵌入到向量空间中。
- 向量存储:向量存储可以搜索表示多模态数据的嵌入,从而支持跨不同类型的信息进行检索。
聊天模型中的多模态
LangChain 支持将多模态数据作为聊天模型的输入:
- 遵循特定于提供商的格式
- 遵守跨提供商标准(有关详细信息,请参阅操作指南)
如何使用多模态模型
支持哪种类型的多模态?
输入
某些模型可以接受多模态输入,例如图像、音频、视频或文件。 支持的多模态输入类型取决于模型提供商。例如,OpenAI、Anthropic 和 Google Gemini 支持将 PDF 等文档作为输入。
将多模式输入传递给聊天模型的要点是使用 指定 type 和相应的 data。例如,要将图像传递给聊天模型 作为 URL:
from langchain_core.messages import HumanMessage
message = HumanMessage(
content=[
{"type": "text", "text": "Describe the weather in this image:"},
{
"type": "image",
"source_type": "url",
"url": "https://...",
},
],
)
response = model.invoke([message])
我们还可以将图像作为内联数据传递:
from langchain_core.messages import HumanMessage
message = HumanMessage(
content=[
{"type": "text", "text": "Describe the weather in this image:"},
{
"type": "image",
"source_type": "base64",
"data": "<base64 string>",
"mime_type": "image/jpeg",
},
],
)
response = model.invoke([message])
要将 PDF 文件作为内嵌数据(或 URL,由提供程序(如
Anthropic),只是改变"type"自"file"和"mime_type"自"application/pdf".
有关更多详细信息,请参阅操作指南。
大多数支持多模态图像输入的聊天模型也接受 OpenAI 的聊天完成格式:
from langchain_core.messages import HumanMessage
message = HumanMessage(
content=[
{"type": "text", "text": "Describe the weather in this image:"},
{"type": "image_url", "image_url": {"url": image_url}},
],
)
response = model.invoke([message])
否则,聊天模型通常会接受特定于提供商的原生内容 块格式。有关详细信息,请参阅聊天模型集成 在特定提供商上。
输出
某些聊天模型支持多模式输出,例如图像和音频。模 态 输出将作为 AIMessage 响应对象的一部分显示。例如:
工具
目前,没有聊天模型设计为直接处理工具调用请求或 ToolMessage 结果中的多模式数据。
但是,聊天模型可以通过调用带有多模态数据引用(例如 URL)而不是数据本身的工具,轻松地与多模态数据进行交互。例如,任何能够进行工具调用的模型都可以配备用于下载和处理图像、音频或视频的工具。
嵌入模型中的多模态
嵌入是用于相似性搜索和检索等任务的数据的向量表示。
当前 LangChain 中使用的 embedding 接口完全针对基于文本的数据进行了优化,不适用于多模态数据。
随着涉及多模态搜索和检索任务的使用案例变得越来越普遍,我们希望扩展嵌入接口以适应其他数据类型,如图像、音频和视频。
载体存储中的多模态
向量存储是用于存储和检索嵌入的数据库,通常用于搜索和检索任务。与嵌入类似,向量存储目前针对基于文本的数据进行了优化。
随着涉及多模式搜索和检索任务的使用案例变得越来越普遍,我们希望扩展向量存储接口以容纳其他数据类型,如图像、音频和视频。