# 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` |