# aippt **Repository Path**: io123/aippt ## Basic Information - **Project Name**: aippt - **Description**: aippt - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-16 - **Last Updated**: 2026-07-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AI PPT Generator AI 驱动的 PPT 自动生成平台,输入需求描述,一键生成精美可编辑演示文稿。 ## 项目架构 ``` windsurf-project/ ├── backend/ # Python 后端 │ ├── app/ │ │ ├── api/ │ │ │ ├── auth.py # 认证(注册/登录/JWT) │ │ │ ├── ppt.py # PPT 生成核心 API │ │ │ ├── payment.py # 支付(支付宝/微信) │ │ │ └── admin.py # 管理后台 API │ │ ├── models/ │ │ │ ├── user.py # 用户模型 │ │ │ ├── ppt_task.py # PPT 任务模型 │ │ │ ├── membership.py # 会员/订单/额度日志 │ │ │ └── template.py # 预设模板 │ │ ├── services/ │ │ │ ├── ai_service.py # AI 多模型调用(核心提示词) │ │ │ ├── template_renderer.py # DSL → python-pptx 渲染 │ │ │ ├── preview_renderer.py # DSL → HTML → Playwright 截图预览 │ │ │ ├── html_renderer.py # Playwright 浏览器管理 │ │ │ ├── image_service.py # 图片搜索服务 │ │ │ ├── payment_service.py # 支付宝/微信支付 │ │ │ ├── credit_service.py # 用量管理(扣减/重置/日志) │ │ │ ├── auth_service.py # JWT/密码 │ │ │ ├── task_events.py # SSE 事件管理 │ │ │ └── sandbox.py # 代码沙箱(兼容旧逻辑) │ │ ├── schemas/schemas.py # Pydantic 请求/响应模型 │ │ ├── config.py # 配置(环境变量) │ │ ├── database.py # SQLAlchemy 数据库 │ │ └── main.py # FastAPI 入口 │ ├── scripts/ │ │ └── set_admin.py # 设置管理员脚本 │ ├── outputs/ # 生成的 PPT/预览图 │ └── .env.example # 环境变量模板 │ ├── frontend/ # React 前端 │ ├── src/ │ │ ├── components/ │ │ │ ├── MainLayout.tsx # 主布局(顶部导航) │ │ │ └── LoginModal.tsx # 登录弹窗组件 │ │ ├── pages/ │ │ │ ├── CreatePPTPage.tsx # 首页/创建页 │ │ │ ├── TaskDetailPage.tsx # 任务详情/预览/AI优化 │ │ │ ├── TaskListPage.tsx # 任务列表 │ │ │ ├── MembershipPage.tsx # 会员中心 │ │ │ ├── LoginPage.tsx # 登录页(兼容) │ │ │ ├── RegisterPage.tsx # 注册页(兼容) │ │ │ └── admin/ # 管理后台 │ │ │ ├── AdminLayout.tsx │ │ │ ├── AdminDashboard.tsx │ │ │ ├── AdminOrders.tsx │ │ │ ├── AdminUsers.tsx │ │ │ └── AdminPaymentConfig.tsx │ │ ├── services/api.ts # API 请求封装 │ │ ├── store/useStore.ts # Zustand 状态管理 │ │ ├── App.tsx # 路由配置 │ │ └── main.tsx # 入口 │ ├── vite.config.ts # Vite 配置(代理/host) │ └── package.json │ └── README.md ``` ## 核心流程 ``` 用户输入需求 → 创建任务 → 后台异步生成 │ ┌───────────────┼───────────────┐ ▼ ▼ ▼ 1. AI 生成大纲 2. 并行生成逐页 DSL 3. 渲染 (6-8页,custom) (8并发,DeepSeek V3) (python-pptx) │ ▼ 4. DSL → HTML → Playwright 截图预览 │ SSE 实时推送进度 ◄┘ │ ▼ 5. 用户可对单页 AI 优化/指令修改 ``` ## 提示词设计 ### 大纲生成提示词(OUTLINE_PROMPT) ``` 你是PPT大纲规划专家。根据用户需求,输出PPT大纲(JSON数组)。 每页对象字段: - slide_number: 序号 - title: 标题 - layout_type: "custom"(所有页面统一用custom布局) - content_description: 详细描述本页展示什么内容 要求: - 总页数 6-8 页 - 第1页为封面,最后一页为结尾致谢 - 中间页包含:目录/数据展示/核心内容/对比分析等 - content_description 要详细,包含具体的数据或要点 只输出JSON数组,不要解释。 ``` ### 单页 DSL 生成提示词(SLIDE_DSL_PROMPT) ``` 你是世界顶级的PPT视觉设计师(曾为Apple、McKinsey设计演示文稿)。 输出单页slide的JSON,后端用python-pptx渲染。 输出格式:```json 包裹的单个JSON对象。 布局:layout="custom" 用elements数组精确摆放每个元素。坐标单位:英寸(画布13.33×7.5)。 元素类型: - shape: 形状 + fill + opacity + shadow + gradient - text: 文本框 + font_size + font_color + bold + align - line: 装饰线 + color - chart: 嵌入图表 配色方案(6套): - 商务蓝:bg #0f172a→#1e293b,强调 #60a5fa,文字 #f1f5f9 - 科技紫:bg #0f0720→#1a0f3a,强调 #a78bfa,文字 #f5f3ff - 自然绿:bg #052e16→#14532d,强调 #4ade80,文字 #f0fdf4 - 暖橙金:bg #1c1917→#292524,强调 #fb923c,文字 #fef3c7 - 极简白:bg #ffffff→#f8fafc,强调 #3b82f6,文字 #1e293b - 高级灰:bg #18181b→#27272a,强调 #e4e4e7,文字 #fafafa 排版规则: - 标题:40-48pt,bold,≤12字 - 副标题:18-22pt - 数据大字:44-56pt,强调色 - 标签小字:12-14pt - ⚠️ 深色背景必须用浅色文字! - ⚠️ 元素间y间距≥1.2英寸,不重叠! 视觉层次: - 装饰圆/光晕:oval, 大尺寸, 角落溢出, opacity:0.08-0.15 - 强调竖条:rectangle, w:0.12-0.18, h:1.5-2.5 - 分隔线:line, w:1.5-3, h:0.04 - 卡片:rounded_rectangle, shadow:true ``` ### 用户提示词构建(_build_slide_prompt) 每页生成时,user prompt 包含: 1. PPT 主题和整体要求 2. 本页标题、layout_type、content_description 3. 用户数据(如有) 4. 配色自由选择指令 5. layout-specific hint(封面/数据/结尾等具体指令) ## 技术栈 | 层 | 技术 | |---|---| | 前端框架 | React 18 + TypeScript + Vite 5 | | UI 组件 | Ant Design 5 + TailwindCSS 3.4 | | 状态管理 | Zustand | | 后端框架 | FastAPI (Python) | | 数据库 | SQLAlchemy + SQLite | | PPT 生成 | python-pptx | | 预览渲染 | Playwright (DSL→HTML→PNG) | | AI 模型 | DeepSeek V3 (默认), GPT-4o, Claude, Qwen | | 实时通信 | SSE (Server-Sent Events) | | 认证 | JWT (jose) | | 支付 | 支付宝 RSA2 + 微信支付 V2 | ## 数据模型 | 模型 | 说明 | |---|---| | User | 用户(会员等级、额度、过期时间) | | PPTTask | 生成任务(状态、进度、DSL代码、输出路径) | | Membership | 会员套餐(月/季/年价、额度、功能列表、上下架) | | Order | 支付订单(支付方式、状态、流水号) | | CreditLog | 额度变动日志(消耗、重置、手动添加) | | PPTTemplate | 首页预设模板(标题、prompt、颜色、排序) | ## API 端点 ### 认证 - `POST /api/auth/register` — 注册 - `POST /api/auth/login` — 登录 - `GET /api/auth/me` — 获取当前用户 ### PPT 生成 - `GET /api/ppt/templates` — 获取预设模板 - `GET /api/ppt/models` — 可用 AI 模型列表 - `POST /api/ppt/create` — 创建生成任务 - `GET /api/ppt/stream/{id}` — SSE 实时进度 - `GET /api/ppt/task/{id}` — 任务详情 - `GET /api/ppt/tasks` — 任务列表 - `GET /api/ppt/download/{file}` — 下载 PPTX - `GET /api/ppt/preview/{file}` — 预览图 - `POST /api/ppt/regenerate-slide/{id}/{num}` — 单页 AI 优化 - `POST /api/ppt/retry/{id}` — 重试失败任务 - `POST /api/ppt/stop/{id}` — 取消任务 - `POST /api/ppt/parse-excel` — 解析 Excel ### 支付 - `GET /api/payment/memberships` — 套餐列表(已上架) - `POST /api/payment/create-order` — 创建订单 - `POST /api/payment/simulate-pay/{no}` — 沙箱模拟支付 - `POST /api/payment/callback/alipay` — 支付宝回调 - `POST /api/payment/callback/wechat` — 微信回调 - `GET /api/payment/status` — 支付配置状态 ### 管理后台 - `GET /api/admin/dashboard` — 仪表盘统计 - `GET /api/admin/orders` — 订单管理 - `POST /api/admin/orders/{no}/refund` — 退款 - `POST /api/admin/orders/{no}/confirm` — 手动确认 - `GET /api/admin/users` — 用户管理 - `PUT /api/admin/users/{id}` — 更新用户 - `GET/POST/PUT/DELETE /api/admin/memberships` — 套餐 CRUD - `GET/POST/PUT/DELETE /api/admin/templates` — 模板 CRUD - `GET /api/admin/credit-logs/{id}` — 额度日志 - `POST /api/admin/add-credits/{id}` — 手动加额度 - `GET /api/admin/payment-config` — 支付配置 ## 快速开始 ### 后端 ```bash cd backend python3 -m venv venv source venv/bin/activate pip install -r requirements.txt cp .env.example .env # 编辑 .env 填入 DEEPSEEK_API_KEY python3 -m app.main ``` ### 前端 ```bash cd frontend npm install npm run dev ``` ### 设置管理员 ```bash cd backend python3 -m scripts.set_admin ``` ## 环境变量 ```env # AI 模型(必填至少一个) DEEPSEEK_API_KEY=sk-xxx DEEPSEEK_BASE_URL=https://api.deepseek.com/v1 # 支付模式:sandbox(模拟)/ live(正式) PAYMENT_MODE=sandbox # 支付宝(正式模式需要) ALIPAY_APP_ID= ALIPAY_PRIVATE_KEY= ALIPAY_PUBLIC_KEY= # 微信支付(正式模式需要) WECHAT_APP_ID= WECHAT_MCH_ID= WECHAT_API_KEY= # JWT JWT_SECRET_KEY=your-random-secret # 数据库 DATABASE_URL=sqlite:///./ai_ppt.db ``` ## 关键设计决策 1. **全 custom 布局** — 所有页面用 elements 数组精确控制,不使用预设模板,确保每次生成都独特 2. **DSL → python-pptx** — 生成的 PPT 完全可编辑(每个文字、形状都可修改) 3. **DSL → HTML → Playwright 截图** — 预览图和真实 PPT 视觉一致 4. **并行 AI 生成** — 8 页同时调用 AI,Semaphore 控制并发 5. **单页 AI 优化** — 用户可对任意页面发送修改指令,AI 重新生成 6. **沙箱支付模式** — 开发时无需配置真实支付,一键模拟 7. **配色多样化** — 不固定主题,AI 根据内容自由选择 6 套配色方案 8. **移动端适配** — 响应式布局,移动端缩略图横向滚动