[Beta] 多模态模型#
概念#
大型语言模型(LLMs)是文本输入,文本输出。大型多模态模型(LMMs)将其推广到文本以外的模态。例如,像 GPT-4V 这样的模型允许您同时输入图像和文本,并输出文本。
我们已经包含了一个基础的 MultiModalLLM
抽象,以便支持文本+图像模型。注意:这个命名可能会更改!
使用模式#
- 以下代码片段展示了如何开始使用 LMMs,例如使用 GPT-4V。
from llama_index.multi_modal_llms.openai import OpenAIMultiModal
from llama_index.core.multi_modal_llms.generic_utils import load_image_urls
from llama_index.core import SimpleDirectoryReader
# 从 URL 加载图像文档
image_documents = load_image_urls(image_urls)
# 从本地目录加载图像文档
image_documents = SimpleDirectoryReader(local_directory).load_data()
# 非流式
openai_mm_llm = OpenAIMultiModal(
model="gpt-4-vision-preview", api_key=OPENAI_API_KEY, max_new_tokens=300
)
response = openai_mm_llm.complete(
prompt="图像中有什么?", image_documents=image_documents
)
- 以下代码片段展示了如何构建多模态向量存储/索引。
from llama_index.core.indices import MultiModalVectorStoreIndex
from llama_index.vector_stores.qdrant import QdrantVectorStore
from llama_index.core import SimpleDirectoryReader, StorageContext
import qdrant_client
from llama_index.core import SimpleDirectoryReader
# 创建本地 Qdrant 向量存储
client = qdrant_client.QdrantClient(path="qdrant_mm_db")
# 如果您只需要图像存储来进行图像检索,
# 您可以移除文本存储
text_store = QdrantVectorStore(
client=client, collection_name="text_collection"
)
image_store = QdrantVectorStore(
client=client, collection_name="image_collection"
)
storage_context = StorageContext.from_defaults(
vector_store=text_store, image_store=image_store
)
# 从本地文件夹加载文本和图像文档
documents = SimpleDirectoryReader("./data_folder/").load_data()
# 创建多模态索引
index = MultiModalVectorStoreIndex.from_documents(
documents,
storage_context=storage_context,
)
- 以下代码片段展示了如何使用多模态检索器和查询引擎。
from llama_index.multi_modal_llms.openai import OpenAIMultiModal
from llama_index.core import PromptTemplate
from llama_index.core.query_engine import SimpleMultiModalQueryEngine
retriever_engine = index.as_retriever(
similarity_top_k=3, image_similarity_top_k=3
)
# 从 GPT4V 响应中检索更多信息
retrieval_results = retriever_engine.retrieve(response)
# 如果您只需要图像检索而不需要文本检索
# 您可以使用 `text_to_image_retrieve`
# retrieval_results = retriever_engine.text_to_image_retrieve(response)
qa_tmpl_str = (
"下面是上下文信息。\n"
"---------------------\n"
"{context_str}\n"
"---------------------\n"
"根据上下文信息和非先验知识,"
"回答查询。\n"
"查询:{query_str}\n"
"答案:"
)
qa_tmpl = PromptTemplate(qa_tmpl_str)
query_engine = index.as_query_engine(
multi_modal_llm=openai_mm_llm, text_qa_template=qa_tmpl
)
query_str = "告诉我更多关于保时捷"
response = query_engine.query(query_str)
图例
- ✅ = 应该能正常工作
- ⚠️ = 有时不可靠,可能需要更多调整以改进
- 🛑 = 目前不可用。
全流程多模态工作流程#
下表尝试展示使用各种 LlamaIndex 功能构建自己的多模态 RAGs(检索增强生成)的初始步骤。您可以组合不同的模块/步骤来组成自己的多模态 RAG 编排。
查询类型 | 多模态向量存储/索引的数据源 | 多模态嵌入 | 检索器 | 查询引擎 | 输出数据类型 |
---|---|---|---|---|---|
文本 ✅ | 文本 ✅ | 文本 ✅ | 前 k 个检索 ✅ 简单融合检索 ✅ |
简单查询引擎 ✅ | 检索到的文本 ✅ 生成的文本 ✅ |
图像 ✅ | 图像 ✅ | 图像 ✅ 图像到文本嵌入 ✅ |
前 k 个检索 ✅ 简单融合检索 ✅ |
简单查询引擎 ✅ | 检索到的图像 ✅ 生成的图像 🛑 |
音频 🛑 | 音频 🛑 | 音频 🛑 | 🛑 | 🛑 | 音频 🛑 |
视频 🛑 | 视频 🛑 | 视频 🛑 | 🛑 | 🛑 | 视频 🛑 |
多模态LLM模型#
这些笔记本作为示例,展示了如何利用和整合多模态LLM模型、多模态嵌入、多模态向量存储、检索器和查询引擎,以构建多模态检索增强生成(RAG)编排。
多模态视觉模型 | 单一图像推理 | 多图像推理 | 图像嵌入 | 简单查询引擎 | Pydantic结构化输出 |
---|---|---|---|---|---|
GPT4V (OpenAI API) |
✅ | ✅ | 🛑 | ✅ | ✅ |
GPT4V-Azure (Azure API) |
✅ | ✅ | 🛑 | ✅ | ✅ |
Gemini (Google) |
✅ | ✅ | 🛑 | ✅ | ✅ |
CLIP (Local host) |
🛑 | 🛑 | ✅ | 🛑 | 🛑 |
LLaVa (replicate) |
✅ | 🛑 | 🛑 | ✅ | ⚠️ |
Fuyu-8B (replicate) |
✅ | 🛑 | 🛑 | ✅ | ⚠️ |
ImageBind [集成中] |
🛑 | 🛑 | ✅ | 🛑 | 🛑 |
MiniGPT-4 |
✅ | 🛑 | 🛑 | ✅ | ⚠️ |
CogVLM |
✅ | 🛑 | 🛑 | ✅ | ⚠️ |
Qwen-VL [集成中] |
✅ | 🛑 | 🛑 | ✅ | ⚠️ |
多模态向量存储#
下表列出了支持多模态用例的一些向量存储。我们的LlamaIndex内置的MultiModalVectorStoreIndex
支持构建图像和文本嵌入向量存储。MultiModalRetriever
和SimpleMultiModalQueryEngine
支持文本到文本/图像和图像到图像的检索,以及简单的排名融合功能,用于组合文本和图像检索结果。
多模态向量存储 | 单一向量存储 | 多个向量存储 | 文本嵌入 | 图像嵌入 |
---|---|---|---|---|
LlamaIndex自建 多模态索引 |
🛑 | ✅ | 可以是任意的 文本嵌入 (默认为GPT3.5) |
可以是任意的 图像嵌入 (默认为CLIP) |
Chroma | ✅ | 🛑 | CLIP ✅ | CLIP ✅ |
Weaviate [集成中] |
✅ | 🛑 | CLIP ✅ ImageBind ✅ |
CLIP ✅ ImageBind ✅ |
多模态LLM模块#
我们支持与GPT4-V、Anthropic(Opus,Sonnet)、Gemini(Google)、CLIP(OpenAI)、BLIP(Salesforce)和Replicate(LLaVA、Fuyu-8B、MiniGPT-4、CogVLM)等的集成。 - OpenAI - Gemini - Anthropic - Replicate - Pydantic Multi-Modal - GPT-4v COT Experiments - Llava Tesla 10q
多模态检索增强生成#
我们支持使用不同的多模态LLM和多模态向量存储进行多模态检索增强生成。
评估#
我们支持对多模态LLM和检索增强生成进行基本评估。