AI
Workers AI Text Rewrite、流式协议、配额、取消和隐私边界。
Product AI 是 Manifest 控制、默认关闭且可完整移除的可选模块。首版只提供登录用户的 Text Rewrite,不包含聊天历史、通用 Agent、RAG 或模型市场。
启用
在 project.manifest.json 中把 features.productAi.enabled 设为 true,保留已批准模型和固定 limits,然后运行:
pnpm init:template
pnpm check:environment初始化器会为 Web Worker 的 Production 和 Preview profile 生成 { "ai": { "binding": "AI" } }。浏览器只访问同源 /api/product-ai/rewrite,不会获得 binding 或 Provider token。Production/Preview 缺少 AI binding 时,preflight 和运行时都会显式失败。
Text Rewrite
登录后打开 /rewrite,输入最多 2,000 个 Unicode 字符,并选择 concise、friendly 或 professional。Worker 在调用 Provider 前执行 Session、输入、单并发 lease、每分钟 5 次和每 UTC 小时 20 次的门禁,再请求 @cf/meta/llama-3.1-8b-instruct,输出最多 1,024 tokens。
成功响应使用 application/x-ndjson:
{"type":"delta","text":"Rewritten "}
{"type":"delta","text":"text."}
{"type":"done"}流中失败返回 { "type": "error", "code": "..." }。Provider 建立流前失败则使用稳定 JSON error envelope。客户端可随时取消;30 秒超时或断开连接会中止上游读取并在 finally 释放 45 秒 owner lease。Provider 不自动重试。
配额和错误
AI_INPUT_INVALID:输入为空、字段未知、style 非法或超过 2,000 字符。AI_STREAM_ACTIVE:当前用户已有活动流。AI_MINUTE_QUOTA_EXCEEDED/AI_HOURLY_QUOTA_EXCEEDED:配额耗尽,并带Retry-After。AI_PROVIDER_UNAVAILABLE:启用模块但运行时没有 Workers AI binding。AI_TIMEOUT/AI_PROVIDER_FAILED:超时或 Provider 流失败。
数据和测试
D1 只保存 (userId, utcHour) 聚合请求/结果计数与短期活动 lease,聚合记录保留 30 天;不保存 Prompt、改写正文或历史。Analytics、普通日志和错误 envelope 也不得包含输入或输出。
单元、D1 和 Playwright 测试使用合成 stream/fake provider,不调用真实或付费模型。关闭模块后,初始化器移除 AI binding,Vite 不生成 /rewrite、API route 或导航入口,其他应用仍可构建。