|
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">减少价值实现时间:激活多模态索引就像在创建RAG索引时点击一个开关一样简单。 在非结构化数据上高性能:在复杂的文档如PDF和PowerPoint中实现卓越的检索质量,无论是文本还是图像。 全面理解:利用文本和视觉信息,获得更准确、更有上下文意识的AI响应。 简化数据集成:轻松将不同类型的数据集成到你的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生产基础的多样化地理包括: 下48州(美国) 加拿大 阿拉斯加 EMENA(欧洲、中东和北非) 亚太地区

|