多模态
概览
多模态指的是能够处理以不同形式(如文本、音频、图像和视频)出现的数据的能力。多模态可以出现在各个组件中,使模型和系统能够无缝地处理和混合这些数据类型。
- 聊天模型: 理论上,这些模型可以接受并生成多模态输入和输出,处理各种数据类型,如文本、图像、音频和视频。
- 嵌入模型: 嵌入模型可以表示多模态内容,将各种形式的数据——如文本、图像和音频——嵌入到向量空间中。
- 向量存储: 向量存储可以搜索表示多模态数据的嵌入,从而实现在不同类型信息之间的检索。
聊天模型中的多模态
LangChain 支持将多模态数据作为聊天模型的输入:
- 遵循特定提供者的格式
- 遵循跨提供商标准(详情参见操操作指南)
如何使用多模态模型
支持哪种多模态?
输入
一些模型可以接受多模态输入,例如图像、音频、视频或文件。 支持的多模态输入类型取决于模型提供商。例如, OpenAI、 Anthropic 和 Google Gemini 支持将 PDF 等文档作为输入。
将多模态输入传递给聊天模型的核心在于使用指定类型和对应数据的内容块。例如,要将图像作为 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])
要作为内联数据(或 URL,如 Anthropic 等提供商所支持)传递 PDF 文件,只需将 "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)的工具来轻松与多模态数据交互,而不是直接使用数据本身。例如,任何能够调用工具的模型都可以配备用于下载和处理图像、音频或视频的工具。
嵌入模型中的多模态
嵌入(Embeddings)是用于相似度搜索和检索等任务的数据向量表示。
LangChain 当前使用的嵌入接口完全针对文本数据进行了优化,无法与多模态数据配合使用。
随着涉及多模态搜索和检索任务的使用案例变得越来越普遍,我们预计将扩展嵌入接口以容纳其他数据类型,如图像、音频和视频。
向量存储中的多模态
向量存储是用于存储和检索嵌入的数据库,通常用于搜索和检索任务。与嵌入类似,向量存储目前针对基于文本的数据进行了优化。
随着涉及多模态搜索和检索任务的使用案例变得越来越普遍,我们预计将扩展向量存储接口以容纳其他数据类型,如图像、音频和视频。