模块说明
chat 提供 AI 助手体系:应用中心(助手应用列表)、对话页(默认应用 / 指定应用)、流式对话(SSE)、会话管理(新建/列表/消息增量轮询)、配额校验、套餐与我的订阅、历史会话。
鉴权级别:对话、会话、配额、我的订阅均必须登录;应用中心与套餐浏览可选(游客可见,用于引导)。
流式接口(
chat/stream)为 SSE 文本协议(非 JSON 信封),需以 chunked 方式接收;其余接口均为统一 JSON 信封。
接口一览
| 方法 | URL | 鉴权 | 说明 |
|---|---|---|---|
| GET | /api/chat |
必须 | 默认应用对话页数据 |
| GET | /api/chat/list |
可选 | 应用中心(助手应用列表) |
| GET | /api/chat/app |
必须 | 指定应用对话页数据 |
| POST | /api/chat/stream |
必须 | 流式对话(SSE) |
| GET | /api/chat/quota_check |
必须 | 配额校验 |
| POST | /api/chat/new_session |
必须 | 新建会话 |
| GET | /api/chat/sessions |
必须 | 会话列表 |
| GET | /api/chat/messages |
必须 | 会话消息(支持增量轮询) |
| GET | /api/chat/package |
可选 | 套餐列表 |
| GET | /api/user/chat |
必须 | 我的订阅 |
| GET | /api/user/chat/history |
必须 | 历史会话 |
对话页
默认应用 GET /api/chat
无可用默认应用时不报错,返回跳转标记:
{
"code": "OK",
"message": "",
"data": { "redirect_to_home": true },
"errors": {},
"request_id": "9f2a5c8e1b3d7f40"
}
正常返回:
{
"code": "OK",
"message": "",
"data": {
"title": "助手名称",
"redirect_to_home": false,
"chat": {
"id": 1, "name": "...", "slug": "...", "type": "...", "description": "...",
"icon": "https://...", "is_default": 1, "is_free": 0
},
"no_subscription": false,
"quota_status": { "...": "配额状态" },
"available_models": [ { "...": "可选模型列表" } ]
},
"errors": {},
"request_id": "9f2a5c8e1b3d7f40"
}
指定应用 GET /api/chat/app?slug=xxx
| 场景 | 响应 |
|---|---|
slug 缺失或格式非法 |
422 INVALID_PARAMS |
| 应用不存在/未启用 | 404 NOT_FOUND |
响应结构同默认应用(不含 redirect_to_home)。
应用中心 GET /api/chat/list
公开浏览(游客可用):返回 title、app_list(应用摘要列表,字段同 chat 摘要)。
流式对话 POST /api/chat/stream
| 参数 | 必填 | 说明 |
|---|---|---|
prompt |
是 | 用户提问(为空 → 422) |
session_sn |
是 | 会话编号(须属于当前会员) |
model_id |
否 | 指定模型 |
- 响应为 SSE 文本流(
text/event-stream语义),客户端以 chunked 持续接收增量内容; - 会话已关闭 →
422 BUSINESS_RULE_VIOLATION;应用不存在 →404 CHAT_NOT_FOUND; - 配额不足 →
422 QUOTA_EXCEEDED(免费应用按每日限额checkFreeAppDaily校验、不扣订阅配额;付费应用校验并扣减订阅配额); - 前置校验失败时走统一 JSON 信封短路(HTTP 错误码 +
{code,message,...}),客户端需兼容"首包可能是 JSON 错误"的情形; - 限流 20 次/60 秒。
会话管理
新建会话 POST /api/chat/new_session
| 参数 | 必填 | 说明 |
|---|---|---|
chat_id |
是 | 应用 ID |
model_id |
否 | 指定模型 |
title |
否 | 会话标题 |
成功返回 data.session(会话摘要)。模型配置不可用 → 500 AI_CONFIG_UNAVAILABLE;创建失败 → 500 CHAT_CREATE_FAILED。限流 10 次/60 秒。
会话列表 GET /api/chat/sessions
参数 chat_id;返回 data.sessions(当前会员在该应用下的会话列表)。
会话消息 GET /api/chat/messages
| 参数 | 必填 | 说明 |
|---|---|---|
session_sn |
是 | 会话编号(须属于当前会员) |
after_id |
否 | 增量拉取起点(只返回该消息 ID 之后的新消息) |
{
"code": "OK",
"message": "",
"data": {
"messages": [
{ "id": 1, "role": "user", "content": "...", "content_type": "", "has_error": 0, "created_at": "2026-01-01 10:00:00" }
],
"session": { "...": "会话摘要" }
},
"errors": {},
"request_id": "9f2a5c8e1b3d7f40"
}
单次最多返回 100 条;配合
after_id做轮询补全(流式结束后的落库消息)。
配额校验 GET /api/chat/quota_check
- 未登录 →
401 AUTH_REQUIRED; - 配额不足 →
422 QUOTA_EXCEEDED,data携带配额详情; - 充足 →
200,data为配额状态(同对话页的quota_status)。
套餐与订阅
套餐列表 GET /api/chat/package
公开浏览(游客可用):返回 title、package_list、quota_status(登录时含个人配额状态)。
我的订阅 GET /api/user/chat
| 参数 | 必填 | 说明 |
|---|---|---|
page |
否 | 页码,默认 1 |
返回 title、quota_status、subscription_list、pager。
历史会话 GET /api/user/chat/history
参数 page;返回 title、session_list(跨应用的历史会话)、pager。
注意事项
- 双重配额模型:免费应用按"每日限额"(不扣订阅配额),付费应用消耗订阅配额(按 token 计量);
quota_check返回的quota_status是统一状态视图; - 会话归属:
sessions/messages/stream均校验会话归属当前会员,越权返回错误; - 流式协议:
stream首包失败为 JSON 信封,成功则为 SSE 文本流;小程序用wx.request的enableChunked接收,通用客户端可用fetch流式读取; - AI 相关错误码:
AI_CONFIG_UNAVAILABLE(503/500)、CHAT_NOT_FOUND、CHAT_CREATE_FAILED、CHAT_SAVE_FAILED、QUOTA_EXCEEDED; - 会话消息落库与流式输出可能存在毫秒级时差,UI 建议以流式内容即时渲染、以
messages增量接口做最终校正。