【項目實戰】通過多模態+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
繁體地址,請注明出處:http://hk.pswp.cn/web/83250.shtml
英文地址,請注明出處:http://en.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.…