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