根据用户提供的主题、内容或文件,自动生成PPT演示文稿项目。
以下规则必须严格执行,不得跳过、变通或使用替代方案:
⚠️ 以下想法是错误的,如果你发现自己在这样想,请立即停止:
在调用任何 API 之前,先检查凭证状态。
bash scripts/aitubiao-cli.sh check-auth
sk_v1_...)。如果没有,引导用户前往 API Key 管理页面 创建一个新的 API Key,然后将创建好的 Key 粘贴回来。bash scripts/aitubiao-cli.sh auth <用户提供的key>
bash scripts/aitubiao-cli.sh check-auth 确认配置成功。凭证保存在 ~/.aitubiao/credentials,跨会话持久生效。
在 Windows 上通过 Git Bash 运行本 CLI 时,禁止把含中文等非 ASCII 字符的 JSON 直接写在 heredoc 里——MSYS 会按 Windows 系统代码页(常为 GBK/CP936)转换 argv 字节,传到后端就是乱码。
正确做法:先用 Write 工具把完整 UTF-8 JSON 写到一个临时文件,然后用 --body-file 让 CLI 从文件读取(绕过任何 argv/控制台编码转换):
# 第一步:用 Write 工具把请求体写到 /tmp/aitubiao-payload.json(内容必须是 UTF-8)
# 第二步:用 --body-file 调用 CLI
bash scripts/aitubiao-cli.sh --body-file /tmp/aitubiao-payload.json create-chart
--body-file 可用于所有读取 stdin JSON 的命令:create-chart / create-ppt / create-sankey / create-3d / download-project。CLI 会自动剥离 UTF-8 BOM 和 CRLF。
macOS / Linux 上无需改动,仍然可以使用 heredoc。
| 输入方式 | 处理方法 |
|---|---|
| --------- | --------- |
| 主题文本 | 用户直接输入主题(如"人工智能发展趋势"),直接作为 prompt |
| 粘贴内容 | 用户粘贴完整文本,作为 prompt |
| 本地文件(TXT/MD/CSV) | 用 Read 工具读取文件内容,作为 prompt |
| Excel 文件(.xlsx/.xls) | 使用 xlsx skill 或 Read 工具读取,禁止手动编写 Python 脚本解析 |
每一步必须在前一步完成后才能开始。禁止跳步。
运行检查凭证流程。认证未通过时按"认证"章节流程处理。
认证未通过时,停止。不要读取用户数据,不要做任何分析。
获取用户内容后,向用户确认以下信息:
pptGeneratePageLimit)light / 深色 dark,默认浅色)#004eff、橙色#f16f0b、红色#ee4646、天蓝#2197fc、紫色#8a61ec、绿色#35b13f、动态配色dynamic)requirements)在创建PPT前,必须检查用户的 AI贝余额和项目配额,并向用户确认费用后才能继续。
bash scripts/aitubiao-cli.sh quota --skill ppt
PPT 项目按"页"计费:每生成一页扣 .feature.cost 个 AI贝。
总费用 = .feature.cost × pageCount
(pageCount 上限由顶层字段 pptGeneratePageLimit 决定,超过会被拒绝。)
| billingModel | 计算方式 | 示例 |
|---|---|---|
| ------------- | --------- | ------ |
per-page | 总费用 = cost × pageCount | 生成6页PPT: 10 × 6 = 60 AI贝 |
必须在调用生成接口前向用户展示费用确认信息,并等待用户确认后才能继续:
本次操作将消耗 {totalCost} 个 AI贝(PPT/图文生成,按页计费:{cost} AI贝/页 × {pageCount} 页)
当前余额: {shellBalance} 个 AI贝
操作后余额: {shellBalance - totalCost} 个 AI贝
项目数: 已用 {projectsUsed}/{projectsLimit}
是否继续?
shellBalance < totalCost:告知用户当前 AI贝余额不足,需前往 aitubiao 网站购买会员或充值后再继续,不要继续projectsRemaining <= 0:告知用户当前项目数已满,需前往 aitubiao 网站升级会员,或在网站中删除旧项目后再继续,不要继续pageCount > pptGeneratePageLimit:告知用户请求的页数超过当前会员等级限制(最多 pptGeneratePageLimit 页),请减少页数或升级会员,不要继续只有用户明确确认费用后才能执行此步骤。
API 会在项目创建后立即返回项目地址(不等待所有页面生成完成)。用户可以通过项目地址实时查看生成进度。
bash scripts/aitubiao-cli.sh create-ppt <<'EOF'
{
"prompt": "<用户的主题或内容>",
"pageCount": 6,
"theme": "light",
"projectName": "<项目名称>"
}
EOF
请求体字段说明:
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| ------ | ------ | ------ | ------- | ------ |
| prompt | string | 是 | - | 用户输入的主题或内容文本 |
| pageCount | number | 否 | 6 | 页数(最小 1,上限由 pptGeneratePageLimit 决定) |
| theme | string | 否 | "light" | "light"(浅色)或 "dark"(深色) |
| color | string | 否 | - | 主题色:#004eff/#f16f0b/#ee4646/#2197fc/#8a61ec/#35b13f/dynamic |
| projectName | string | 否 | - | 项目名称 |
| requirements | string | 否 | - | 附加要求(风格偏好、内容侧重等) |
| title | string | 否 | - | 大纲标题 |
检查 CLI 退出码:
响应字段说明详见下方"响应字段参考"。
立即向用户展示项目 URL(从 project.projectUrl 获取)。PPT 页面仍在后台生成中,用户可以在浏览器中打开此链接实时查看生成进度和最终效果。格式示例:
您的 PPT 项目已创建成功!页面正在后台生成中(通常需要 5-10 分钟)。
请点击下方链接实时查看生成进度和编辑 PPT:
https://app.aitubiao.com/workspace/xxxxxxxxx
同时提供以下补充信息:
project.id 获取)如果用户在 PPT 项目创建后要求“帮我下载或者导出这个项目”,先提醒用户 PPT 页面仍可能在后台生成。优先让用户通过 projectUrl 确认内容已生成完成,再执行下载。
下载命令:
bash scripts/aitubiao-cli.sh download-project <本地保存路径> <<'EOF'
{
"projectId": "<project.id>",
"format": "png"
}
EOF
规则:
projectId 使用上一步返回的 project.idformat 按用户需求填写:PPT 项目可用 ppt/pdf/png,图表/桑基图项目可用 png/jpg/pdf/pptpng/jpg/pdf 任何用户均可免费导出;ppt 需要 PPT 导出权限(付费会员);其它特殊格式(svg/gif/mp4/mov/透明 PNG/2x 及以上倍率)也需对应会员权益。如果用户尝试受限格式但权益不足,CLI 会返回 exit 2 并附服务端错误,应告知用户升级会员或改用免费格式$HOME/Downloads/ 或当前工作目录下的具体文件名),不要省略命令参数not writable 或 cannot be created),此时禁止自动改路径重试——必须先告诉用户当前路径不可写,请用户给一个可写的位置projectId 并发执行 download-project:服务端默认每个项目只允许 1 个 API Key 并发导出任务。需要重试时,等待上一次下载彻底完成(成功或失败)再重新发起*.partial 临时文件,校验文件大小与已知格式(png/jpg/pdf/ppt/zip)的魔数后再原子重命名为最终路径。如果 CLI 返回 exit 3 且 stderr 含 integrity check failed,说明服务端返回的文件已损坏;不要伪装成功,告知用户重试或联系支持png/jpg/pdf 格式导出多页时,服务端会把所有页面压缩成一个 ZIP 包返回。CLI 检测到这种情况会自动把保存路径改为 .zip(例如 report.png → report.zip),并在 stderr 输出 Note: server returned a multi-page ZIP bundle ...。返回 JSON 中的 savedPath 和 fileName 是真实落盘路径——告诉用户文件位置时必须使用这两个字段,不要使用最初传入的路径savedPath(绝对路径)告诉用户文件保存在哪里| CLI Exit Code | 含义 | 处理方式 |
|---|---|---|
| -------------- | ------ | --------- |
| 1 | 认证失败(HTTP 401/403 或凭证无效) | 立即停止,引导用户前往 API Key 管理页面 |
| 2 | 业务错误(code 90001=AI贝不足,40007=项目数已满,40015=创建失败,15009=同一项目已有 API Key 导出任务进行中) | 向用户展示详情;遇到 15009 时,提示用户等待上一个导出完成后再重试 |
| 3 | 网络/超时错误 | 告知用户稍后重试 |
| 字段 | 类型 | 说明 |
|---|---|---|
| ------ | ------ | ------ |
| success | boolean | 项目是否创建成功 |
| outlineId | string | 大纲会话 ID |
| project.id | string | 项目 ID |
| project.title | string | 项目标题 |
| project.status | string | 通常为 generating(页面在后台异步生成) |
| project.projectUrl | string? | 项目 URL,用户打开可查看生成进度和编辑 PPT |
| quota | object? | 配额快照(可能为 null) |
| quota.shellCoinCost | number | 本次消耗 AI贝 |
| quota.shellBalance | number | 剩余 AI贝 |
| totalPages | number | 总页数 |
| completedPages | number | 已完成页数(API 返回时为 0,页面后台异步生成) |
| processingTime | string | API 响应时间(不含页面生成时间) |
异步生成行为:API 立即返回,页面在后台生成(5-10 分钟)。projectUrl 必须醒目展示给用户。
共 1 个版本