AI 交互接口规范
核心原则
所有与 AI 模型交互的接口必须采用异步轮询模式,严禁前端同步等待 AI 响应。
接口模式
POST /api/xxx/start → 立即返回 { genStage: 'xxx_generating' }
GET /api/xxx/status → 轮询返回 { genStage, result?, error? }
超时规范
| 接口类型 |
超时 |
说明 |
| POST 启动接口 |
10s |
仅做参数校验 + 投递异步任务 |
| GET 轮询接口 |
5s |
查询数据库状态,不涉及 AI |
| 前端整体等待上限 |
600s |
超时后提示用户重试 |
状态流转
plan_generating → plan_ready (Plan 生成完成)
→ plan_failed (Plan 生成失败)
outline_generating → outline_ready (大纲生成完成)
→ outline_failed (大纲生成失败)
generating_content → completed (内容生成完成)
→ failed (内容生成失败)
实现要点
后端
- POST 端点在
setImmediate 中执行 AI 调用,不 await
- AI 结果写入数据库对应字段(bookAnalysis / outlineJson)
- 完成后更新
genStage 为 xxx_ready
- 失败时更新
genStage 为 xxx_failed + errorMsg
前端
- POST 后立即进入
setInterval 轮询,间隔 3s
- 收到
xxx_ready 后停止轮询,渲染结果
- 收到
xxx_failed 后显示错误,允许重试
- 超过 600s 整体上限后提示超时
禁止事项
- 禁止在 POST 端点中
await 异步 AI 调用
- 禁止前端设置超过 10s 的 POST 超时
- 禁止在轮询回调中重新 POST 启动新任务
已有交互式接口对照
| 步骤 |
POST (启动) |
GET (轮询) |
完成标记 |
| Step 2 Plan |
POST /books/:id/interactive/plan |
GET /books/:id/interactive/plan |
plan_ready |
| Step 3 Outline |
POST /books/:id/interactive/outline |
GET /books/:id/interactive/outline |
outline_ready |
| Step 4 Content |
POST /books/:id/interactive/generate |
GET /books/:id/progress |
progress >= 100 |