Skip to main content
Open on GitHub

多模态

概览

多模态 是指能够处理以不同形式出现的数据的能力,例如文本、音频、图像和视频。多模态可以出现在各种组件中,使模型和系统能够无缝地处理和分析这些不同类型的数据。

  • 聊天模型: 理论上,这些模型可以接受和生成多模态输入和输出,处理文本、图像、音频和视频等多种数据类型。
  • 嵌入模型: 嵌入模型可以表示多模态内容,将各种形式的数据(如文本、图像和音频)嵌入到向量空间中。
  • 向量存储: 向量存储可以搜索表示多模态数据的嵌入,从而实现跨不同类型信息的检索。

聊天模型中的多模态性

先决条件

LangChain 支持将多模态数据作为聊天模型的输入:

  1. 遵循特定提供商的格式
  2. 遵循跨提供商标准(详见 操操作指南

如何使用多模态模型

支持哪种类型的多模态?

输入

某些模型可以接受多模态输入,例如图像、音频、视频或文件。 支持的多模态输入类型取决于模型提供商。例如, OpenAIAnthropic,以及 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])
API 参考:HumanMessage

我们还可以以内联数据的形式传递图像:

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])
API 参考:HumanMessage

要将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])
API 参考:HumanMessage

否则,聊天模型通常会接受原生的、提供方特定的内容块格式。有关特定提供方的详细信息,请参阅 聊天模型集成

输出

一些聊天模型支持多模态输出,例如图像和音频。多模态输出将作为 AIMessage 响应对象的一部分出现。例如:

工具

目前,没有聊天模型被设计为在 工具调用请求ToolMessage 结果中直接处理多模态数据。

然而,聊天模型可以通过调用引用多模态数据(例如URL)的工具来轻松与多模态数据交互,而不是直接使用数据本身。例如,任何具备工具调用能力的模型都可以配备工具来下载和处理图像、音频或视频。

嵌入模型中的多模态性

先决条件

嵌入 是用于相似性搜索和检索等任务的数据的向量表示。

LangChain中当前使用的嵌入接口完全针对文本数据进行了优化,将适用于多模态数据。

随着涉及多模态搜索和检索任务的用例越来越普遍,我们预计会扩展嵌入接口,以支持图像、音频和视频等其他数据类型。

向量存储中的多模态性

先决条件

向量存储是用于存储和检索嵌入向量的数据库,通常用于搜索和检索任务。与嵌入向量类似,向量存储目前针对文本数据进行了优化。

随着涉及多模态搜索和检索任务的用例越来越普遍,我们预计会扩展向量存储接口,以支持图像、音频和视频等其他数据类型。