返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

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

[复制链接]
链载Ai 显示全部楼层 发表于 昨天 11:29 |阅读模式 打印 上一主题 下一主题


ingFang SC", miui, "Hiragino Sans GB", "Microsoft Yahei", sans-serif;letter-spacing: 0.5px;text-align: start;text-wrap: wrap;background-color: rgb(255, 255, 255);">文档RAG的未来是多模态的

ingFang SC", miui, "Hiragino Sans GB", "Microsoft Yahei", sans-serif;text-align: start;background-color: rgb(255, 255, 255);white-space-collapse: preserve !important;word-break: break-word !important;">许多实际中的文档不仅包含文本,还包含复杂的视觉元素,如图像、图表和图解。传统的RAG系统往往只关注文本。这导致文档理解能力下降,响应质量降低,幻觉率增加。

ingFang SC", miui, "Hiragino Sans GB", "Microsoft Yahei", sans-serif;text-align: start;background-color: rgb(255, 255, 255);white-space-collapse: preserve !important;word-break: break-word !important;">多模态LLM和RAG系统可以解决这些复杂性——像Pixtral、Sonnet 3.5和GPT-4o这样的多模态LLM在文档理解方面越来越好。我们的客户要求我们提供这些功能,用于高级知识助手用例,比如生成包含图表和图像的结构化报告。

ingFang SC", miui, "Hiragino Sans GB", "Microsoft Yahei", sans-serif;text-align: start;background-color: rgb(255, 255, 255);white-space-collapse: preserve !important;word-break: break-word !important;">然而,这些系统设置和生产化都很复杂。一个理想的多模态管道不仅要将图像提取成文本,还要存储原生图像块,这些图像块与文本块一起被索引。这允许LLM在合成阶段将检索到的文本和图像作为输入。要做好这一点需要巧妙的算法来处理解析、索引和检索,以及基础设施来提供文本和图像。我们在核心LlamaIndex仓库和LlamaParse中有笔记本来帮助你构建多模态RAG设置,但它们包含很多代码,针对少量本地文件优化,并且避免了如何将这种索引扩展到生产的系统级复杂性。

ingFang SC", miui, "Hiragino Sans GB", "Microsoft Yahei", sans-serif;text-align: start;background-color: rgb(255, 255, 255);white-space-collapse: preserve !important;word-break: break-word !important;">LlamaCloud的新多模态特性让你在几分钟内构建一个完整的多模态RAG管道。索引文本和图像块。检索文本和图像,并在响应中提供这些作为源。

ingFang SC", miui, "Hiragino Sans GB", "Microsoft Yahei", sans-serif;letter-spacing: 0.5px;text-align: start;text-wrap: wrap;background-color: rgb(255, 255, 255);">LlamaCloud多模态特性概述

ingFang SC", miui, "Hiragino Sans GB", "Microsoft Yahei", sans-serif;text-align: start;background-color: rgb(255, 255, 255);white-space-collapse: preserve !important;word-break: break-word !important;">从高层次来看,我们的多模态特性让你构建一个RAG管道,可以索引和检索文本和图像块。你可以通过我们的聊天界面轻松验证你的管道(见下面的图像),或者通过API将其插入你的应用程序。

ingFang SC", miui, "Hiragino Sans GB", "Microsoft Yahei", sans-serif;text-align: start;background-color: rgb(255, 255, 255);white-space-collapse: preserve !important;word-break: break-word !important;">关键优势

    ingFang SC", miui, "Hiragino Sans GB", "Microsoft Yahei", sans-serif;letter-spacing: 0.5px;text-align: start;text-wrap: wrap;background-color: rgb(255, 255, 255);" class="list-paddingleft-1">
  1. 减少价值实现时间:激活多模态索引就像在创建RAG索引时点击一个开关一样简单。

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

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

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

ingFang SC", miui, "Hiragino Sans GB", "Microsoft Yahei", sans-serif;letter-spacing: 0.5px;text-align: start;text-wrap: wrap;background-color: rgb(255, 255, 255);">真实世界示例:分析公司演示文稿

为了展示多模态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("Tellmeaboutthediversegeographieswhichrepresenttheproductionbases")

print(str(response))

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

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

  1. 下48州(美国)

  2. 加拿大

  3. 阿拉斯加

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

  5. 亚太地区


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ