Skip to content

多模态模型#

概念#

大型语言模型(LLMs)是文本输入、文本输出的系统。大型多模态模型(LMMs)将这一概念扩展到文本模态之外。例如,像GPT-4V这样的模型允许同时输入图像和文本,并输出文本。

我们提供了一个基础的MultiModalLLM抽象类来支持文本+图像模型。注意:此命名可能会变更!

使用模式#

  1. 以下代码片段展示了如何开始使用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="what is in the image?", image_documents=image_documents
)
  1. 以下代码片段展示了如何构建多模态向量存储/索引。
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
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,
)
  1. 以下代码片段展示了如何使用多模态检索器和查询引擎。
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 = (
    "Context information is below.\n"
    "---------------------\n"
    "{context_str}\n"
    "---------------------\n"
    "Given the context information and not prior knowledge, "
    "answer the query.\n"
    "Query: {query_str}\n"
    "Answer: "
)
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 = "Tell me more about the Porsche"
response = query_engine.query(query_str)

图例说明

  • ✅ = 可正常使用
  • ⚠️ = 有时不可靠,可能需要进一步调优
  • 🛑 = 当前不可用

端到端多模态工作流#

下表展示了使用各种LlamaIndex功能构建自定义多模态RAG(检索增强生成)的初始步骤。您可以组合不同的模块/步骤来构建自己的多模态RAG编排流程。

查询类型 多模态向量存储/索引
数据源
多模态
嵌入
检索器 查询
引擎
输出
数据
类型
文本 ✅ 文本 ✅ 文本 ✅ Top-k检索 ✅
简单融合检索 ✅
简单查询引擎 ✅ 检索文本 ✅
生成文本 ✅
图像 ✅ 图像 ✅ 图像 ✅
图像转文本嵌入 ✅
Top-k检索 ✅
简单融合检索 ✅
简单查询引擎 ✅ 检索图像 ✅
生成图像 🛑
音频 🛑 音频 🛑 音频 🛑 🛑 🛑 音频 🛑
视频 🛑 视频 🛑 视频 🛑 🛑 🛑 视频 🛑

多模态LLM模型#

这些笔记本示例展示了如何利用和集成多模态LLM模型、多模态嵌入、多模态向量存储、检索器和查询引擎来构建多模态检索增强生成(RAG)编排流程。

多模态
视觉模型
单张
图像
推理
多张
图像
推理
图像
嵌入
简单
查询
引擎
Pydantic
结构化
输出
GPT4V
(OpenAI API)
🛑
GPT4V-Azure
(Azure API)
🛑
Gemini
(Google)
🛑
CLIP
(本地主机)
🛑 🛑 🛑 🛑
LLaVa
(replicate)
🛑 🛑 ⚠️
Fuyu-8B
(replicate)
🛑 🛑 ⚠️
ImageBind
[待集成]
🛑 🛑 🛑 🛑
MiniGPT-4
🛑 🛑 ⚠️
CogVLM
🛑 🛑 ⚠️
Qwen-VL
[待集成]
🛑 🛑 ⚠️

多模态向量存储#

下表列出了一些支持多模态应用场景的向量存储。我们的LlamaIndex内置MultiModalVectorStoreIndex支持为图像和文本嵌入向量存储构建独立的向量存储。MultiModalRetrieverSimpleMultiModalQueryEngine支持文本到文本/图像以及图像到图像的检索,并提供简单的排序融合功能以结合文本和图像检索结果。

多模态
向量存储
单一
向量
存储
多重
向量
存储
文本
嵌入
图像
嵌入
LLamaIndex自建
多模态索引
🛑 支持任意
文本嵌入
(默认为GPT3.5)
支持任意
图像嵌入
(默认为CLIP)
Chroma 🛑 CLIP ✅ CLIP ✅
Weaviate
[待集成]
🛑 CLIP ✅
ImageBind ✅
CLIP ✅
ImageBind ✅

多模态大语言模型模块#

我们支持与GPT4-V、Anthropic(Opus、Sonnet)、Gemini(谷歌)、CLIP(OpenAI)、BLIP(Salesforce)、Replicate(LLaVA、Fuyu-8B、MiniGPT-4、CogVLM)等模型的集成。

多模态检索增强生成#

我们支持结合不同多模态大语言模型与多模态向量存储实现多模态检索增强生成。

评估#

我们支持对多模态大语言模型和检索增强生成进行基础评估。