AI 积分

有账可查的按量 AI 积分

可选的 AI 模块是一个按量 chat 端点,背后是只追加的积分账本。它不是图片或视频工作台,也不声称未配置的 provider 会自动响应。

核对于 2026-10-22

已经接好的部分

`POST /api/ai/generate` 接受登录会话或带 scope 的 Bearer API key。API key 在存储前哈希;撤销、账号状态和固定窗口速率限制会在一次原子 D1 更新中重新检查,然后才继续请求。

积分账本只追加。请求在调用 provider 前预扣积分,调用后按实际 usage 结算。provider 明确拒绝时释放预扣;成功调用则留下已结算的扣减记录。

账本与计费不变量使用 D1 batch 语句,避免一个请求既失败又留下扣费,或重复结算。每个请求都有幂等 request id。

请求生命周期

请求先从会话或 API key 解析身份,再应用按 key 的速率限制;随后预扣积分额度、调用已配置的 OpenAI 兼容 provider,并按 provider 报告的 usage 结算。响应返回结果和新的余额状态。

如果 provider 明确拒绝,预扣会释放。如果网络或响应不确定,端点返回失败,而不是假装成功。客户端不能提交价格、积分数量或已支付标记。

  • 会话或带 scope 的 `vib_` API key。
  • 工作开始前按 key 做固定窗口限流。
  • 预扣 → provider 调用 → 结算。
  • 只有 provider 明确拒绝才退款。
  • 不接受客户端金额或积分值。

配置

在 live 模式设置 `CREDITS_ENABLED=true`,并为 OpenAI 兼容端点配置 `AI_BASE_URL`、`AI_API_KEY`、`AI_MODEL`。可选的 `CREDIT_PACKS` 指定服务端拥有的价格、数量和授予;留空则不显示一次性积分包。

预览模式禁用按量 AI。配置存在不证明 provider 接受请求:开启付费使用前,先对配置的端点做一次真实调用。[积分与计费](/docs/credits-and-billing)说明账本模型,[Provider 适配](/docs/providers)说明 provider 层。

边界

这个模块只做 chat completions。图片、视频、音频/语音和模型训练工作台没有包含;它们需要单独的 provider、UI 与成本控制。没有配置 provider 时,端点不会承诺免费或本地模型。

积分额度和价格由服务端拥有。克隆模板时应设置自己的数字,而不是沿用 VibeShip 示例。账本记录使用量;它不保证 provider 可用,也不保证固定 token 价格。

账本不变量

余额由账本行推导,不存成可变数字。预扣是一行,结算是另一行,释放也是一行;当前余额是这条序列的期末值。数据库拒绝透支和重复 request id。

顺序比名称更重要:provider 调用前预扣,拿到响应后才结算,明确拒绝时释放。如果进程在步骤之间退出,request id 和账本让重试可以核对,而不是重复扣费。

API key 与成本控制

带 scope 的 Bearer key 让无浏览器会话的用户也能调用。key 在存储前哈希,每次调用都检查撤销状态,按 key 的固定窗口限流在同一条原子语句中更新。限流控制请求频率,积分预扣控制花费。

积分是预算,不是价格承诺。额度与积分包在服务端配置,开启付费前先做一次真实 provider 调用并观察账本。图片、视频和语音生成不在此模块内;加入它们需要单独的成本控制与 UI。

常见问题

不能。`AI_BASE_URL`、`AI_API_KEY` 和 `AI_MODEL` 必须指向可用的 OpenAI 兼容端点,live 模式还要 `CREDITS_ENABLED=true`。配置缺失时 fail closed。

从模板指南开始

文档覆盖完整设置顺序:数据库、认证、计费、AI 积分与 Cloudflare 部署。

相关指南