{{ loginError }}
defaults.stream:false,
会强制上游走非流式请求(对生图模型等流式不稳定的上游更稳)。模型未选择模板时,以下参数作为兜底注入上游请求:客户端显式传的参数优先,客户端没传才用这里的默认值。已选择模板的模型走模板自身的 forward_params,不受这里影响。
Cherry Studio 图片生成、图片编辑功能使用这两个端点。
处理逻辑:优先用 image 格式请求上游,上游不支持时自动降级为 chat 格式请求。
客户端通过 chat 端口请求生图模型(如 gpt-image-2-pro)时,命中下方关键词的模型
自动优先用 image 格式请求上游,上游不支持时降级为普通 chat 请求。
✅ 流式自动适配:image 格式上游是一次性返回(无流式),客户端要求流式时中转自动把结果
翻译成 SSE 流式返回,客户端照常收到流式;要非流式则直接返回非流式。无需配 no-stream 模板。
示例:勾选"模型名" + 关键词 image → gpt-image-2-pro 自动触发
勾选"上游模型 id" + 关键词 image → 上游模型 gpt-image-2 触发
选择图片识别方式:OCR提取文字 或 视觉模型理解
{user_text} = 用户输入的文字
独立文件处理服务,用于处理 PDF 等文档(独立于 OCR/视觉模型)。
在模型编辑中开启「自定义文件处理」标志后生效,处理顺序:文件服务 → OCR/视觉识图。
⚡ 同步模式:将文本内容 POST 到指定 API,适合通用文本处理服务。
📄 MinerU 模式:自动上传 PDF 原文件到 MinerU API,异步解析后返回 Markdown。
自定义某类上游错误判定为「重试(换Key/供应商)」或「直接报错(不再尝试)」。判定顺序:例外规则(自上而下、第一条命中生效)→ 内置判定(代码兜底)。
例外规则匹配说明:状态码=精确;错误类型=包含;消息关键词=空格分隔,默认任一命中,勾选"全部命中"才要求全出现;上游报错原文=默认仅参考,勾选"参与匹配"才参与。所有填了的条件都满足才命中。规则命中即覆盖内置判定(优先级最高)。
某个模型算力不足/维护中时,命中下方规则的模型请求不请求上游,直接返回你配置的报错文案(如"grok-4.1系列当前按量维护,请选择grok-4.5/4.6使用")。判定顺序:规则自上而下、第一条命中生效。
上游返回 429(限流) / 401/403(认证) / 410(已下线) 时,自动将该 Key 冷却指定秒数,冷却期间不参与负载均衡。冷却中的 Key 在 Key健康页面有标注。
自定义各类错误返回给客户端的提示信息,隐藏上游细节。
错误信息中出现以下关键词时自动替换,防止泄露上游供应商名称
对话消息过多时自动压缩历史消息,避免上游API报错(如讯飞10163)
模型思考期间是否先发一个空壳帧占位。开启可防客户端「首字节超时」断连,但会让日志里的「首字」偏小、与真实等待对不上。
定义载荷参数规则,不同供应商/模型可选用不同模板。直接编辑 JSON,修改自动保存。
defaults 里加 "stream": false(如内置 no-stream 模板),
该模板下的模型会强制上游走非流式请求(保稳定)。stream 的模板不受影响,仍按客户端请求的流式/非流式转发。
修改即生效,保存后写入 config.yaml
/v1/chat/completions,Anthropic格式走 /v1/messages
将以下配置填入任何支持 OpenAI 格式的程序中即可使用
{{ m.name }} ({{ m.provider }} → {{ m.model_id }})
使用 Anthropic SDK 或兼容客户端调用 /v1/messages 端点
示例 (Python SDK):
| 供应商 | Key | 总次 | 成功率 | 平均耗时 | 模型数 | 冷却 | 常见报错 | 处置 |
|---|---|---|---|---|---|---|---|---|
| {{ r.provider }} | {{ r.api_key }} | {{ r.total.toLocaleString() }} | {{ r.success_rate }}% | {{ r.avg_ms > 0 ? (r.avg_ms/1000).toFixed(1)+'s' : '-' }} | {{ r.model_count }} | ⏳ {{ keyCooldownInfo(r).code }} · {{ keyCooldownInfo(r).remaining_secs }}s— |
|
|
| {{ keysHealthDisabledExpanded ? '▼' : '▶' }} 📁 已禁用 {{ keysHealthDisabledRows.length }} 个 Key 成功率 {{ keysHealthDisabledSummary }} · 点击{{ keysHealthDisabledExpanded ? '收起' : '展开' }} | ||||||||
| {{ r.provider }} | {{ r.api_key }} | {{ r.total.toLocaleString() }} | {{ r.success_rate }}% | {{ r.avg_ms > 0 ? (r.avg_ms/1000).toFixed(1)+'s' : '-' }} | {{ r.model_count }} | ⏳ {{ keyCooldownInfo(r).code }} · {{ keyCooldownInfo(r).remaining_secs }}s— |
|
|
| 模型 | 总次 | 成功率 |
|---|---|---|
| {{ m.model }} | {{ m.total.toLocaleString() }} | {{ m.success_rate }}% |
| 无模型明细 | ||
| 模型 \ 供应商 | {{ p }} | 合计 |
|---|---|---|
| {{ row.cells[p] && row.cells[p].total ? (row.cells[p].avg_ms > 0 ? (row.cells[p].avg_ms/1000).toFixed(1) + 's' : '-') : '·' }} | {{ row.total }}次 |
| 时间段 | {{ pv.name }} |
|---|---|
| {{ row.hour }} |
{{ cell.rate }}%
{{ (cell.avg_ms/1000).toFixed(1) }}s
{{ cell.total }}次
-
|
| 时间段 | {{ c }} |
|---|---|
| {{ row.hour }} |
{{ row.cells[c].rate }}%
{{ (row.cells[c].avg_ms/1000).toFixed(1) }}s
{{ row.cells[c].total }}次
|
| 暂无数据(需有带 vision_time_ms 的请求日志) |
{{ errorDetailContent }}