【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统

基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。

功能特点

  • Markdown解析:自动解析Markdown文档结构
  • PPT模板分析:分析PPT模板的布局和风格
  • 智能布局决策:匹配内容与合适的PPT布局
  • 自动生成PPT:根据解析结果生成最终的PPT文件

演示Demo

通过多模态+Agent实现的PPT辅助编辑助手演示视频

部署方法

项目地址:https://github.com/BJSS-China/ppt_assistant

方式一:使用Docker部署

cd docker# 编辑.env文件
cp .env.example .env# 执行部署脚本
./deploy.sh build
# 执行启动脚本
./deploy.sh start

备注:

  • 需要提前安装好docker和docker-compose

方式二:使用本地环境部署(适用于开发调试)

1. 安装依赖
# 创建虚拟环境
conda create -n ppt_gen python=3.12
conda activate ppt_gen# 安装依赖
pip install -r requirements.txt# 初始化子模块
git submodule update --init# 安装ppt_manager
cd libs/ppt_manager
pip install -e .
2. 安装LibreOffice

Mac用户可以通过brew安装LibreOffice

brew install --cask libreoffice

安装之后创建soffice的命令脚本

# 创建软链接
sudo tee /usr/local/bin/soffice <<EOF
#!/bin/bash
/Applications/LibreOffice.app/Contents/MacOS/soffice "\$@"
EOF# 赋予执行权限
sudo chmod +x /usr/local/bin/soffice

验证安装

soffice --version
3. 安装poppler

Mac用户可以通过brew安装poppler

brew install poppler

Linux用户可以通过apt安装poppler

sudo apt-get install poppler-utils

Windows用户需要手动下载安装
下载地址:https://poppler.freedesktop.org/

4. 运行
4.1 复制配置文件
cp .env.example .env
4.2 启动redis服务
docker-compose -f docker/docker-compose-dev.yml up -d
4.3 启动后端FastAPI服务
uvicorn apps.api.main:app --reload --host 0.0.0.0 --port 8000
4.4 启动celery服务
celery -A apps.api.celery_app worker --loglevel=info --concurrency=2 --pool=solo -Q celery,template_analysis,ppt_generation
4.5 启动前端Vue服务
cd apps/web
npm install --legacy-peer-deps
npm run dev

使用方法

  1. 访问前端页面
  • docker部署:http://localhost
  • 本地部署:http://localhost:5173
  1. 访问管理后台:点击前端页面右上角管理后台按钮,进入管理后台页面(admin/admin123)

  2. 配置API_KEY:点击管理后台,分别配置LLM、VLLM、deepthink的API Key

备注:

  • 模型配置中的文本模型(LLM)和深度思考(deepthink),本质都是文本大模型。
  • 前者一般承担比较轻量级的任务,后者一般承担上下文比较长的分析任务,为了节省token消耗,区分使用,但都需要配置。
  1. 上传PPT模板:在管理后台,上传PPT模板文件,稍等分析完毕后,即可在管理后台看到分析结果

  2. 在前端页面,输入Markdown文档,点击生成PPT按钮

  3. 下载PPT:待提示PPT生成完毕后,点击PPT文件,即可下载PPT文件

常见问题

  • 问题1: PPT生成过程中,提示"内容规划失败,无法获取内容规划结果".

问题原因:这种情况是大模型返回的内容存在异常,比如:未按照要求返回。具体可以通过mlflow调试页面查看返回内容。

  • 问题2: PPT生成过程中,生成的PPT文件内容不全,存在部分内容缺失。

问题原因:这种情况是因为大模型在进行内容规划时,对部分内容进行了删减所致。该问题解决方式同问题1。

  • 问题3: 开启多模态能力检测,PPT生成时间变得很长。

问题原因:由于目前PPT的视觉检测,主要是依赖于soffice的PPT转图片,这一过程速度慢且无法优化干预,所以暂时没有好的解决方案。

备注:各个模型在不同任务上的表现,可以参考模型对比

项目结构

ppt-assisstant/
├── apps/                  # 应用层
│   ├── api/               # FastAPI接口服务
│   │   ├── routers/       # 接口路由
│   │   │   ├── agent.py   # Agent能力接口
│   │   │   └── file.py    # 文件处理接口
│   │   ├── models/        # 接口数据模型
│   │   ├── dependencies/  # 接口依赖项
│   │   └── main.py        # FastAPI入口
│   │
│   └── web/               # 前端工程
│       ├── public/        # 静态资源
│       ├── src/           # 前端源码
│       └── package.json   # 前端依赖
│
├── core/                  # 核心业务
│   ├── agents/            # LangGraph Agent实现
│   │   ├── markdown_agent.py           # Markdown解析
│   │   ├── ppt_analysis_agent.py       # PPT分析
│   │   ├── content_planning_agent.py   # 内容规划
│   │   ├── slide_generator_agent.py    # 幻灯片生成
│   │   ├── ppt_finalizer_agent.py      # PPT清理与保存
│   │   └── base_agent.py               # 基础Agent
│   │
│   ├── workflows/         # 工作流配置
│   │   ├── ppt_gen.yaml   # 主工作流配置
│   │   └── utils.py       # 工作流工具
│   │
│   └── engine/            # 执行引擎
│       ├── state.py       # 状态管理
│       └── workflow.py    # 工作流引擎
│
├── libs/                  # 第三方库
│   ├── ppt_manager/       # PPT操作库(git子模块)
│   └── ...                # 其他子模块
│
├── workspace/             # 运行时文件
│   ├── sessions/          # 会话数据
│   │   └── {session_id}/  # 按会话隔离
│   ├── cache/             # 缓存文件
│   ├── logs/              # 系统日志
│   ├── mlflow/            # mlflow调试日志
│   ├── outputs/           # 输出文件
│   ├── data/              # 数据文件
│   └── temp/              # 临时文件
│
├── config/                # 配置中心
│   ├── prompts/           # 提示词
│   ├── settings.py        # 应用配置
│   └── model_config.yaml  # 模型配置
│
├── docs/                  # 文档中心
│   ├── arch/              # 架构设计
│   ├── report/            # 报告
│   ├── prd/               # 需求文档
│   └── api/               # API文档
│
├── tests/                 # 测试体系
│   ├── test_files/        # 测试文件
│   └── test_utils.py      # 测试工具
│
├── Dockerfile             # 容器化构建
├── docker-compose.yml     # 服务编排
└── requirements.txt       # Python依赖

实现原理

file

PPT分析agent(ppt_analysis_agent):

主要负责对PPT模板文件进行逐页的图像生成和调用多模态大模型分析布局,生成详细的PPT特征信息,以Json数据格式保存。

Markdown解析Agent(markdown_agent):

主要负责对PPT的底稿内容进行分析解析,得到title(标题)、content(内容)、内容之间的关系等信息,以Json数据格式保存。

PPT内容规划Agent(Content_plannning_agent):

主要负责基于ppt_analysis_agent提供的PPT特征信息和markdown_agent提供的底稿内容,进行PPT每一页幻灯片的规划,包括:幻灯片的顺序、幻灯片的标题、幻灯片的内容、内容计划展现的形式。

PPT生成Agent(slide_generator_agent):

主要职责:
1.基于Content_plannning_agent提供的规划内容和PPT文件的Dom内容结构,通过大模型分析每一页PPT需要修改的Dom节点内容,生成相应的操作指令提供给slide_generator_agent
2.执行操作指令,修改PPT中对应的幻灯片
3.将修改的幻灯片生成图片后,利用多模态大模型进行排版、内容、样式的检查,进而提供修改指令,直到满足要求或者达到最大修改次数阈值。

PPT归档Agent(PPTFinalizerAgent):

主要负责基于Content_plannning_agent规划的内容和顺序,调整PPT中幻灯片的顺序,去除多余的幻灯片,最后保存PPT文件。

📄 许可证

本项目采用 Apache License 2.0 开源许可证。

商业使用说明

  • 开源免费使用:您可以自由使用、修改和分发本软件
  • 商业用途友好:允许在商业项目中使用,无需支付许可费
  • 专利保护:提供明确的专利许可条款
  • ⚠️ 版权声明要求:使用时必须保留原始版权声明

🙏 致谢

本项目核心思想来源于PPTAgent提出的多模态大语言模型+Agent框架。我们诚挚感谢该项目提供的创新思路,这为本工程的设计和实现奠定了关键基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/83250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

贝叶斯优化+LSTM+时序预测=Nature子刊!

贝叶斯优化与LSTM的融合在时间序列预测领域取得了显著成效&#xff0c;特别是在处理那些涉及众多超参数调整的复杂问题时。 1.这种结合不仅极大提高了预测的精确度&#xff0c;还优化了模型训练流程&#xff0c;提升了效率和成本效益。超参数优化的新篇章&#xff1a;LSTM因其…

AWSLambda之设置时区

目标 希望Lambda运行的时区是东八区。 解决 只需要设置lambda的环境变量TZ为东八区时区即可&#xff0c;即Asia/Shanghai。 参考 使用 Lambda 环境变量

RAG系统向量数据库选型与Prompt Engineering鲁棒性测试实践

引言 在AI应用不断落地的今天&#xff0c;RAG&#xff08;Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff09;和Prompt Engineering&#xff08;提示工程&#xff09;成为大模型工程师和测试工程师的核心武器。 一方面&#xff0c;RAG系统依赖强大的向量数据…

2.Socket 编程 UDP

1.UDP网络编程 0.背景知识 自实现IP转化 相关函数理解 IP相关理解 1. V2版本 - DictServer封装版 实现一个简单的英译汉的网络字典 Dict.hpp dictionary.txt InetAddr.hpp • 在 InetAddr 中&#xff0c;重载一下方便对用户是否是同一个进行比较 Log.hpp makefile Mutex.hpp…

数据可视化交互

目录 【实验目的】 【实验原理】 【实验环境】 【实验步骤】 一、安装 pyecharts 二、下载数据 三、实验任务 实验 1&#xff1a;AQI 横向对比条形图 代码说明&#xff1a; 运行结果&#xff1a; 实验 2&#xff1a;AQI 等级分布饼图 实验 3&#xff1a;多城市 AQI…

【MATLAB去噪算法】基于CEEMDAN联合小波阈值去噪算法(第四期)

CEEMDAN联合小波阈值去噪算法相关文献 一、EMD 与 EEMD 的局限性 &#xff08;1&#xff09;EMD (经验模态分解) 旨在自适应地将非线性、非平稳信号分解成一系列 本征模态函数 (IMFs)&#xff0c;这些 IMFs 从高频到低频排列。 核心问题&#xff1a;模态混合 (Mode Mixing) 同…

大话软工笔记—架构模型

1. 架构模型1—拓扑图 &#xff08;1&#xff09;拓扑图概念 拓扑图&#xff0c;将多个软件系统用网络图连接起来的表达方式。 &#xff08;2&#xff09;拓扑图分类 总线型结构 比较普遍采用的方式&#xff0c;将所有的系统接到一条总线上。 星状结构 各个系统通过点到…

24-Oracle 23 ai ​Lock-Free Reservations​(无锁列值保留)

数据库领域为了解决ACID的平衡&#xff0c;尝试了各种锁、各种模式&#xff0c; 引擎技术特性、厂家实现方式各放异彩&#xff0c;被各种锁折磨的小伙伴&#xff0c;是不是感同身受。 一、数据库锁 1. 锁的类型与特点 ​全局锁​&#xff1a;锁定整个数据库实例&#xff0c;备…

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding

从零写一个ALSA声卡驱动学习(1)

前言&#xff1a; 本文档描述了如何编写 ALSA&#xff08;高级 Linux 音频架构&#xff09;驱动程序。文档主要聚焦于 PCI 声卡的实现。对于其他类型的设备&#xff0c;可能会使用不同的 API。不过&#xff0c;至少 ALSA 的内核 API 是一致的&#xff0c;因此本文档在编写这些驱…

链结构与工作量证明7️⃣:用 Go 实现比特币的核心机制

链结构与工作量证明:用 Go 实现比特币的核心机制 如果你用 Go 写过区块、算过哈希,也大致理解了非对称加密、数据序列化这些“硬核知识”,那么恭喜你,现在我们终于可以把这些拼成一条完整的“区块链”。 不过别急,这一节我们重点搞懂两件事: 区块之间是怎么连接成“链”…

深入理解 React 样式方案

React 的样式方案较多,在应用开发初期,开发者需要根据项目业务具体情况选择对应样式方案。React 样式方案主要有: 1. 内联样式 2. module css 3. css in js 4. tailwind css 这些方案中,均有各自的优势和缺点。 1. 方案优劣势 1. 内联样式: 简单直观,适合动态样式和…

YOLO电力物目标检测训练

最近需要进行电力物检测相关的业务&#xff0c;因此制作了一个电力物数据集&#xff0c;使用YOLO目标检测方法进行实验&#xff0c;记录实验过程如下&#xff1a; 数据集标注 首先需要对电力物相关设备进行标注&#xff0c;这里我们选用labelme进行标注&#xff0c;使用无人机…

从阿里云域名解析异常事件看下域名解析过程

近日阿里云核心域名aliyuncs.com解析异常&#xff0c;涉及众多依赖阿里云服务的网站和应用&#xff0c;故障从发现到修复耗时5个多小时。本文简要分析下整个事件的过程&#xff0c;并分析域名解析的过程&#xff0c;了解根域名服务器在其中的作用&#xff0c;以了解。 1、aliyu…

应用分享 | 精准生成和时序控制!AWG在确定性三量子比特纠缠光子源中的应用

在量子技术飞速发展的今天&#xff0c;实现高效稳定的量子态操控是推动量子计算、量子通信等领域迈向实用化的关键。任意波形发生器&#xff08;AWG&#xff09;作为精准信号控制的核心设备&#xff0c;在量子实验中发挥着不可或缺的作用。丹麦哥本哈根大学的研究团队基于单个量…

基于规则的自然语言处理

基于规则的自然语言处理 规则方法形态还原&#xff08;针对英语、德语、法语等&#xff09;中文分词切分歧义分词方法歧义字段消歧方法分词带来的问题 词性标注命名实体分类机器翻译规则方法的问题 规则方法 以规则形式表示语言知识&#xff0c;强调人对语言知识的理性整理&am…

Vue Fragment vs React Fragment

文章目录 前言&#x1f9e9; 一、概念对比&#xff1a;Vue Fragment vs React Fragment&#x1f4e6; 二、使用示例对比✅ Vue 3 中使用 Fragment✅ React 中使用 Fragment &#x1f50d; 三、差异解析1. **使用方式**2. **传递属性&#xff08;如 key&#xff09;**3. **插槽系…

3D图像渲染和threejs交互坐标系入门知识整理

1. Games101 b站上面就有&#xff0c;看到第9节课基本对于图形渲染的原理和渲染过程有所了解。然后就可以使用openGL和GLSL。 点输入->投影到二维&#xff08;生成三角形面&#xff09;->光栅化为像素->z-buffer深度缓存判断层级->着色shading 2. openGL和GLSL 参…

跨平台架构区别

文章目录 重编译时轻运行时&#xff08;uniapp&#xff09;轻编译时重运行时&#xff08;Taro&#xff09; 重编译时轻运行时&#xff08;uniapp&#xff09; 对 vue 语法直接进行编译转换成对应平台代码&#xff0c;再通过添加运行时代码去补充能力&#xff0c;比如 nextTick…

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…