支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


【深入浅出RAG】通过LlamaCloud打造多模态RAG

发布日期:2024-09-25 08:32:49 浏览次数: 1959 作者:AI模数师


文档RAG的未来是多模态的

许多实际中的文档不仅包含文本,还包含复杂的视觉元素,如图像、图表和图解。传统的RAG系统往往只关注文本。这导致文档理解能力下降,响应质量降低,幻觉率增加。

多模态LLM和RAG系统可以解决这些复杂性——像Pixtral、Sonnet 3.5和GPT-4o这样的多模态LLM在文档理解方面越来越好。我们的客户要求我们提供这些功能,用于高级知识助手用例,比如生成包含图表和图像的结构化报告。

然而,这些系统设置和生产化都很复杂。一个理想的多模态管道不仅要将图像提取成文本,还要存储原生图像块,这些图像块与文本块一起被索引。这允许LLM在合成阶段将检索到的文本和图像作为输入。要做好这一点需要巧妙的算法来处理解析、索引和检索,以及基础设施来提供文本和图像。我们在核心LlamaIndex仓库和LlamaParse中有笔记本来帮助你构建多模态RAG设置,但它们包含很多代码,针对少量本地文件优化,并且避免了如何将这种索引扩展到生产的系统级复杂性。

LlamaCloud的新多模态特性让你在几分钟内构建一个完整的多模态RAG管道。索引文本和图像块。检索文本和图像,并在响应中提供这些作为源。

LlamaCloud多模态特性概述

从高层次来看,我们的多模态特性让你构建一个RAG管道,可以索引和检索文本和图像块。你可以通过我们的聊天界面轻松验证你的管道(见下面的图像),或者通过API将其插入你的应用程序。

关键优势

  1. 减少价值实现时间:激活多模态索引就像在创建RAG索引时点击一个开关一样简单。

  2. 在非结构化数据上高性能:在复杂的文档如PDF和PowerPoint中实现卓越的检索质量,无论是文本还是图像。

  3. 全面理解:利用文本和视觉信息,获得更准确、更有上下文意识的AI响应。

  4. 简化数据集成:轻松将不同类型的数据集成到你的RAG管道中,无需广泛的预处理。

真实世界示例:分析公司演示文稿

为了展示多模态RAG的有效性,让我们考虑一个使用ConocoPhillips投资者演示文稿的真实世界示例。让我们逐步走过这个过程:

1. 创建多模态索引

首先,创建一个新的LlamaCloud索引并启用多模态索引选项。这个特性自动生成并存储页面截图以及提取的文本,允许检索文本和图像。

2. 将索引集成到你的代码中

一旦你的索引创建,你可以轻松地将其集成到你的Python代码中:


from llama_index.indices.managed.llama_cloud import LlamaCloudIndex

index
= LlamaCloudIndex(
name
="<index_name>",
project_name
="<project_name>",
organization_id
="...",
api_key
="llx-..."
)

3. 设置多模态检索

要启用多模态检索,请创建一个可以处理文本和图像节点的检索器:


retriever = index.as_retriever(retrieve_image_nodes=True)

4. 构建自定义多模态查询引擎

要充分利用多模态RAG的强大功能,我们建议创建一个自定义查询引擎,它可以充分利用这个多模态检索器。它将从检索器中分离文本和图像节点,并通过我们的多模态LLM抽象将它们输入到多模态模型中:


from llama_index.core.query_engine import CustomQueryEngine
from llama_index.multi_modal_llms.openai import OpenAIMultiModal

class MultimodalQueryEngine(CustomQueryEngine):
"""自定义多模态查询引擎。

接受一个检索器来检索一组文档节点。
还接受一个提示模板和多模态模型。

"""


qa_prompt: PromptTemplate
retriever: BaseRetriever
multi_modal_llm: OpenAIMultiModal

def__init__(self, qa_prompt: Optional[PromptTemplate] =None, **kwargs) ->None:
"""初始化。"""
super().__init__(qa_prompt=qa_prompt or QA_PROMPT, **kwargs)

defcustom_query(self, query_str: str):
# 检索文本节点
nodes
= self.retriever.retrieve(query_str)
img_nodes
=[n for n in nodes ifisinstance(n.node, ImageNode)]
text_nodes
=[n for n in nodes ifisinstance(n.node, TextNode)]

# 从文本节点创建上下文字符串,将其转储到提示中
context_str
="\\n\\n".join(
[r.get_content(metadata_mode
=MetadataMode.LLM) for r in nodes]
)
fmt_prompt
= self.qa_prompt.format(context_str=context_str, query_str=query_str)

# 从格式化的文本和图像中合成答案
llm_response
= self.multi_modal_llm.complete(
prompt
=fmt_prompt,
image_documents
=[n.node for n in img_nodes],
)
return Response(
response
=str(llm_response),
source_nodes
=nodes,
metadata
={"text_nodes": text_nodes, "image_nodes": img_nodes},
)

return response

query_engine
= MultimodalQueryEngine(
retriever
=retriever, multi_modal_llm=gpt_4o
)

**注意:**我们希望使这种体验成为一行代码——敬请期待!

5. 查询你的多模态索引

现在你已经准备好查询你的多模态索引,并接收包含文本和视觉信息的响应:


response = query_engine.query("Tell me about the diverse geographies which represent the production bases")

print(str(response))

当被问及公司的多样化生产基地时,我们的多模态RAG系统提供了一个全面的回答:

"代表ConocoPhillips生产基础的多样化地理包括:

  1. 下48州(美国)

  2. 加拿大

  3. 阿拉斯加

  4. EMENA(欧洲、中东和北非)

  5. 亚太地区


53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询