AI
对话与摘要
基于 Workers AI 的流式对话、对话上下文、在 Queues 上执行的文档摘要、价格与限制。
模型
对话、摘要与提示词优化使用 packages/ai/src/text.ts 中的 TEXT_MODEL,当前为 Workers AI 上的 @cf/google/gemma-4-26b-a4b-it,通过 AI 绑定调用,不需要模型密钥。Mock 模式下由 mockText 返回确定性回答,对话可离线使用。
更换模型时需要一并核对输入格式、流式输出、上下文长度、成本与测试;本模板不是自动配置所有提供方的通用网关。
对话
POST /api/chat:
{
"prompt": "为一款 AI 生图应用写三条宣传语",
"requestId": "e60b2e4b-32b1-42a5-bfd0-dbb20ecb37e9",
"history": [{ "prompt": "之前的问题", "answer": "之前的回答" }]
}prompt为 1 至 16,000 个字符。requestId可选,提供时必须是 UUID,每条消息新生成一个。history最多 8 轮最近的对话(每条提问 4,000 字符、每条回答 8,000 字符),让模型保留上下文。/app/ai工作室会自动带上。- 响应为
text/event-stream,需要逐段读取并处理断流,不要调用response.json()。工作室会边接收边渲染 Markdown。
每条消息消耗 quotas.chatCredits(1 积分)。服务端先检查余额,写入一条生成记录预占积分,再调用模型。回答完成即结算;失败或断流只退还一次积分。
文档摘要
- 在
/app/files上传你自己的text/plain或text/markdown文件(最大 1 MiB)。 - 调用
POST /api/summary,正文为{ "fileId": "your-owned-file-uuid" }。 - 响应是已创建的任务,而不是摘要全文。任务在 JOBS 队列中执行,在工作台中查看状态。
每次摘要消耗 quotas.summaryCredits(5 积分),只读取前 16,000 个字符,不会自动拆分长文、OCR 图片或解析任意 PDF。
验证
- 空输入、超长输入、积分不足、非本人文件都应失败且不扣费。
- 正常对话会流式输出并留下一条账目;中断的流不会改变余额。
- 即使队列重复投递,同一份摘要也只成功一次。