多模态
概述
多模态 指的是处理来自不同形式的数据的能力,例如文本、音频、图像和视频。多模态可以出现在各种组件中,允许模型和系统无缝地处理和加工这些数据类型的混合。
- 聊天模型:理论上,这些模型可以接受和生成多模态输入和输出,处理各种数据类型,如文本、图像、音频和视频。
- 嵌入模型:嵌入模型可以表示多模态内容,将各种形式的数据(如文本、图像和音频)嵌入到向量空间中。
- 向量存储:向量存储可以搜索表示多模态数据的嵌入,从而实现跨不同类型信息的检索。
聊天模型中的多模态
多模态支持仍然相对较新且不太常见,模型提供商尚未就定义 API 的“最佳”方式达成标准化。因此,LangChain 的多模态抽象是轻量级且灵活的,旨在适应不同模型提供商的 API 和交互模式,但未在模型之间标准化。
如何使用多模态模型
支持哪种多模态?
输入
某些模型可以接受多模态输入,例如图像、音频、视频或文件。支持的多模态输入类型取决于模型提供商。例如,谷歌的 Gemini 支持 PDF 等文档作为输入。
大多数支持多模态输入的聊天模型也接受 OpenAI 的内容块格式中的这些值。到目前为止,这仅限于图像输入。对于像 Gemini 这样支持视频和其他字节输入的模型,API 也支持原生的、模型特定的表示。
将多模态输入传递给聊天模型的要点是使用内容块,指定类型和对应的数据。例如,要将图像传递给聊天模型
import { HumanMessage } from "@langchain/core/messages";
const message = new HumanMessage({
content: [
{ type: "text", text: "describe the weather in this image" },
{ type: "image_url", image_url: { url: image_url } },
],
});
const response = await model.invoke([message]);
内容块的确切格式可能因模型提供商而异。请参考聊天模型的集成文档以获取正确的格式。在聊天模型集成表中找到集成。
输出
在撰写本文时(2024 年 10 月),实际上没有流行的聊天模型支持多模态输出。
唯一的例外是 OpenAI 的聊天模型 (gpt-4o-audio-preview),它可以生成音频输出。
多模态输出将作为 AIMessage 响应对象的一部分出现。
请参阅 ChatOpenAI 以获取有关如何使用多模态输出的更多信息。
工具
目前,没有聊天模型被设计为在工具调用请求或 ToolMessage 结果中直接处理多模态数据。
但是,聊天模型可以通过使用对多模态数据的引用(例如 URL)而不是数据本身来调用工具,从而轻松地与多模态数据交互。例如,任何能够工具调用的模型都可以配备下载和处理图像、音频或视频的工具。
嵌入模型中的多模态
嵌入 是数据的向量表示,用于相似性搜索和检索等任务。
LangChain 中使用的当前嵌入接口完全针对基于文本的数据进行了优化,不适用于多模态数据。
随着涉及多模态搜索和检索任务的用例变得越来越普遍,我们希望扩展嵌入接口以适应其他数据类型,如图像、音频和视频。
向量存储中的多模态
向量存储是用于存储和检索嵌入的数据库,嵌入通常用于搜索和检索任务。与嵌入类似,向量存储目前针对基于文本的数据进行了优化。
随着涉及多模态搜索和检索任务的用例变得越来越普遍,我们希望扩展向量存储接口以适应其他数据类型,如图像、音频和视频。