--- title: 公开 Demo description: 固定 API 提供商、个人密钥隔离与 PPT 链接分享 --- 公开 Demo 使用与主线一致的创作界面,提供简化设置。它适合通过个人 API Key 体验生成、编辑、PPT 翻新和导出。 ## 配置与使用 首页设置页和预览页的「项目设置 → 个人设置」提供相同的个人配置。两处复用开源版的表单样式、供应商悬浮介绍和 Key 获取指引。APIMart 按钮显示价格提示,火山 Agent Plan 显示国内直连提示;悬停或键盘聚焦可展开完整优势介绍,选择火山后还会展示品牌说明和申请步骤。两处配置互通,保存和重置只影响当前访客。 1. 打开设置页,选择 Inferera、APIMart 或火山 Agent Plan。 2. 填写该 API 提供商的 API Key 并保存。每个 API 提供商的密钥分别保存,切换配置不会把上一家的 Key 发给下一家。 3. 返回首页创作。若因缺少 Key 跳转到设置,返回后会恢复刚才的文字输入。 4. 第一次进入每个 PPT 的预览页时,保存提示框中的链接。之后也可点击「分享 / 保存链接」重新复制。 | API 提供商 | 文本 / 图片识别模型 | 图像模型 | | --- | --- | --- | | Inferera | gemini-3-flash-preview | gemini-3-pro-image-preview | | APIMart | gpt-5.6-sol / gpt-5.6-luna | gpt-image-2 | | 火山 Agent Plan | doubao-seed-2.1-turbo | doubao-seedream-5.0-lite | 固定的接口地址、模型名称和模型提供商不会显示在个人设置中,由所选供应商自动配置。并发数、描述生成模式及推理参数在「高级设置」中展开调整;推理预算仅在对应推理开关开启后显示,关闭开关不会清除已有预算。火山选项仅支持 **Agent Plan 订阅专属 Key**,普通方舟按量 Key 不适用。服务测试使用已保存的个人配置,会实际调用供应商接口。文本、图片识别、图像生成、MinerU、百度 OCR 和百度图像修复可同时测试,各自显示进度、结果和重试入口,最长等待十分钟。修改配置后请先保存再开始新测试;已经启动的测试继续使用启动时的配置。 从首页发起生成或翻新前,会用个人文本模型做轻量 Key 校验。校验失败时会引导返回设置页,保留文字草稿,不创建项目。 需要文档解析、OCR 或视频配音时,在个人设置中填写相应的 MinerU、百度 OCR 或 ElevenLabs 凭据。除站主按下文显式开启的共享服务外,公开版不会使用服务器的普通备用密钥;缺少个人凭据时,相应服务不能完成调用。 ## 字段、历史与分享 - 描述的额外字段固定为「配图与素材」「版式与重点」「演讲者备注」,不能增删、开关或排序。传入生图的字段固定为前两项。 - 每页描述正文、这些字段的内容及生成要求仍可编辑。 - 公开版不提供历史列表,也不支持删除项目。直接请求历史列表接口同样会被拒绝。 - 分享链接就是当前 PPT 的预览地址,不包含访客标识或 API Key。它打开现有预览和编辑页面,并非另外创建的只读副本。 - **如果想回来查看,请保存该链接后续访问。如果链接丢失,将无法再次访问此 PPT。** 浏览器保存的访客标识用于识别个人设置;清除浏览器数据或换浏览器后需要重新填写 Key。保存 PPT 链接与保存个人设置是两件独立的事。重置设置只清空当前访客的配置与各 API 提供商密钥,不影响其他访客。 ## 自行部署公开版 普通部署默认关闭公开模式。公开版使用独立的配置文件: ```bash docker compose -f docker-compose.demo.yml build docker compose -f docker-compose.demo.yml up -d ``` 不要与普通 `docker-compose.yml` 合并使用。此配置启用 `PUBLIC_DEMO=true`,默认主机端口为前端 3000、后端 5000,使用独立容器与网络名称;`.env` 的 `FRONTEND_PORT` / `BACKEND_PORT` 可以覆盖主机端口。仍需按普通部署准备 `.env` 和上传文件目录。已有数据库的升级请先阅读下方迁移说明。 ## 站主查看历史 在服务端 `.env` 设置 `PUBLIC_DEMO_ADMIN_PASSWORD` 为一个长随机口令,重启后端后访问 `/admin/history`,输入口令即可查看历史列表和分页。使用 Docker Compose 时,修改 `.env` 后执行 `docker compose -f docker-compose.demo.yml up -d --force-recreate backend` 使配置生效。留空则关闭入口。 入口不出现在公开导航中,普通 `/history` 和公开历史接口仍关闭。页面只提供查看,点击项目会在新标签页打开现有预览,不提供改名或删除。口令只保留在当前页面内存中,每次读取列表都由后端校验;退出或刷新后需重新输入,不写入浏览器存储,也不放进 URL。对外部署应使用 HTTPS。 ## 站点提供 MinerU 与百度服务 站主可以在公开版后端的 `.env` 中显式配置共享服务: ```dotenv PUBLIC_DEMO_MINERU_TOKEN= PUBLIC_DEMO_BAIDU_API_KEY= ``` 这两个变量只在 `PUBLIC_DEMO=true` 时生效,分别供所有访客使用 MinerU 解析,以及百度 OCR 和百度图像修复。配置后,个人设置页会隐藏对应凭据输入区,并标明这些服务由站点提供;响应只返回启用状态和密钥长度,不返回密钥内容。普通的 `MINERU_TOKEN`、`BAIDU_API_KEY` 和数据库设置仍不会自动共享。 共享调用会消耗站主账户的额度。留空即可关闭对应共享能力并恢复访客自己的凭据输入。修改后重启后端容器使配置生效。 ## 旧 sponsor Demo 的迁移 旧 sponsor 数据库中的 `013` / `014` 与主线同名迁移含义不同,不能直接执行主线的 `alembic upgrade head`。使用迁移工具把数据复制到一个**不存在的新文件**: ```bash uv run python scripts/migrate-public-demo.py \ --source /backup/legacy-demo.db \ --destination /staging/current-demo.db ``` 工具只读源数据库,在新文件创建当前完整表结构,保留项目、页面、文件路径及任务;旧浏览器 token 转为哈希标识,旧个人密钥归入 Inferera 配置,并记录实际数据库迁移版本。它拒绝覆盖既有目标文件,校验行数和 SQLite 完整性,输出不包含密钥的 JSON 结果。 正式切换前先在副本演练。最终切换时暂停旧站写入,重新备份数据库与 uploads 并迁移最后一份数据;把目标文件放入新版 `backend/instance/database.db`,沿用配套 uploads,再启动新版容器。验证旧 PPT 链接、旧浏览器个人设置和新访客隔离后恢复访问。保留旧容器镜像、旧数据库与 uploads 备份用于回滚;不要将新数据库交回旧程序。回滚到旧备份不会包含切换后新产生的数据。 数据库含个人服务凭据,应限制文件权限,不要提交到 Git、放进镜像或作为验收附件分享。 ## 验证 `frontend/e2e/public-demo.spec.ts` 覆盖真实设置保存、重载、API 提供商切换、密钥隔离、重置、历史拦截、分享与复制、首访提醒、正文和生成要求编辑,以及公开模式加载失败的处理。 `frontend/e2e/admin-history.spec.ts` 覆盖真实口令校验、分页、预览打开、退出与刷新、公开接口继续拦截,以及普通历史页的编辑和选择行为。运行真实用例时,通过环境变量传入验收后端 `.env` 中的 `PUBLIC_DEMO_ADMIN_PASSWORD`;此文件关闭截图、视频和网络追踪,避免记录口令。 `frontend/e2e/public-settings-behavior.spec.ts` 进一步覆盖全部可编辑设置的保存与重载、提供商密钥草稿切换、六项测试并发、独立失败与重试、超时恢复,以及离开设置页后停止轮询。 `scripts/verify-public-demo.py --partner apimart --flow` 从标准输入读取一行 Key,真实验证文本、图片识别、生成及 PPTX 导出。加 `--stream` 验证流式大纲与描述;`--image` 单独测试图像服务。其他 API 提供商可使用 `--partner inferera` 或 `--partner volcengine`,并提供对应类型的 Key。 `--browser-tests` 在浏览器中同时调用真实文本和图片识别服务,确认缺失 OCR 凭据的独立失败不阻塞其他测试,且结果不能被其他访客读取。此模式关闭截图、视频和网络追踪,并在结束时清空测试凭据。 `--tools-project <测试项目ID>` 需要一个已生成图片的测试项目,并从标准输入第二行读取 MinerU Token,验证 PDF 翻新和可编辑 PPTX 导出。脚本使用临时访客,结束时清除保存的测试凭据;测试项目保留以便查看结果。请只在验收环境运行,服务调用会产生供应商用量。