使用RAG的思想进行PPT生成的框架思路-SlideCoder
手动创建幻灯片既费时又费力,如何从参考图像自动生成可编辑的幻灯片?
现有的问题:如Autopresent的方法,通过构建大批量的SFT数据生成ppt代码来生成ppt。然而,自然语言描述难以准确描述幻灯片的视觉设计,LLMs在处理复杂PPT时存在局限性,特别是包含多样元素类型和高元素密度的情况;LLMs对python-pptx库的理解不足,导致生成的代码可能存在语法错误或不可执行。
往期介绍的相关ppt生成框架,如:《PPTAgent:PPT自动生成Agent框架》、《使用多Agent进行海报生成的技术方案及评估套件-P2P、paper2poster》都提到,布局信息对于ppt生成或者海报生成都很重要。
SlideCoder提出一个基于RAG的思想-布局感知的检索增强框架,用于从参考图像生成可编辑的PPT。
方法
如下图,SlideCoder框架的目标是从参考图像生成可执行的Python幻灯片代码。由三个核心模块组成:基于颜色梯度的图像分割算法(CGSeg)、层次化检索增强代码生成模块(H-RAG)以及布局感知提示机制。
1 基于颜色梯度的图像分割算法(CGSeg)
CGSeg是一种递归的颜色梯度分割算法,用于将幻灯片设计图像分解为语义上有意义的区域。该算法通过计算图像的颜色梯度来识别和分割不同的区域,从而减少多模态大模型在理解复杂幻灯片设计时的难度。步骤如下:
- 图像分割:将输入图像划分为网格,并计算每个块的Sobel梯度幅度。
- 激活块标记:根据梯度幅度与阈值的比较,标记出激活的块。
- 区域填充:对二值激活掩码进行洪水填充操作,识别出连接的区域。
- 递归分割:对每个子图像进行递归分割,以适应不同区域的视觉复杂度。
2 层次化检索增强代码生成模块(H-RAG)
H-RAG模块基于RAG的思想,提升多模态大模型对python-pptx库的理解和代码生成能力。通过两个知识库的层次化结构,分别为描述器和编码器提供支持,确保生成的代码在结构和语法上的准确性。
两个主要知识库
-
形状类型知识库(Shape Type Knowledge Base, TS-KB):该知识库包含了python-pptx文档中定义的各种形状类型的描述。这些描述用于指导描述器生成标准化的形状描述,确保生成的描述与python-pptx的术语一致。例如,描述器在生成描述时会使用TS-KB中的术语,如“autoshape”或“textbox”,以确保描述的准确性和一致性。示例如下:
-
操作函数知识库(Operation Function Knowledge Base, OF-KB):该知识库包含了python-pptx库中各种函数的完整语法规范,包括参数、返回值和使用示例等。编码器利用OF-KB中的信息生成精确的代码片段,确保生成的代码在语法上是正确的,并且符合python-pptx库的使用规范。例如,编码器在生成代码时会参考OF-KB中的函数参数和返回值信息,以确保生成的代码能够正确调用python-pptx库的函数。示例如下:
知识库的构建与嵌入
使用了BGE M3-Embedding模型对知识库中的条目进行嵌入,并构建了一个基于向量的检索数据库。
检索与生成过程
由三个agent组成:描述器(Describer)、编码器(Coder)和组装器(Assembler)。
-
描述器生成全局和块描述:描述器首先根据输入的图像和分割结果生成全局的设计描述以及每个分割块的详细描述。在生成描述的过程中,描述器会从TS-KB中检索相关的形状类型信息,以确保描述的标准化和准确性。
-
编码器生成代码片段:编码器根据描述器生成的块描述,从OF-KB中检索相关的函数语法信息,生成相应的代码片段。这些代码片段是基于检索到的函数语法规范生成的,确保了代码的语法正确性和功能性。
-
组装器生成完整代码:组装器将编码器生成的代码片段与布局信息结合,从OF-KB中检索完整的语法模式,生成最终的幻灯片代码。组装器在生成代码时会参考OF-KB中的语法模式,以确保生成的代码在结构上是正确的,并且能够正确地布局幻灯片元素。
3 布局感知提示
布局感知提示机制通过在提示中注入布局位置信息,确保生成的代码在空间上与参考图像一致。该机制还从知识库中检索语法模式,以避免语法错误和代码冲突。提示词如下:
实验与结论
SlideCoder在所有难度等级上的总体得分均优于现有基线。
消融实验结论:在移除每个组件后,执行率和总分均表现出不同程度的下降,这证明了每个组件对整体框架的贡献。
参考文献:SlideCoder: Layout-aware RAG-enhanced Hierarchical Slide
Generation from Design,https://arxiv.org/pdf/2506.07964v1
repo:https://github.com/vinsontang1/SlideCoder(代码暂未开源)