Add chat endpoint failover for resilience against unstable LLM APIs

Configure a list of fallback chat endpoints (chatFallbacks); each blank
field inherits the primary, so you can swap just the API key, just the
model, or the whole vendor. On LLM streaming failure the retry loop
advances to the next endpoint, and a failed endpoint enters a cooldown
(fallbackCooldownMinutes) so a dead primary is skipped instead of
wasting a timeout on every message.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
This commit is contained in:
2026-06-24 22:23:43 +08:00
co-authored by Claude Opus 4.8
parent 13329b5fa3
commit 826dc460df
4 changed files with 188 additions and 16 deletions
+41
View File
@@ -5,6 +5,7 @@ JChatGPT 是一个基于 Kotlin 的 Mirai Console 插件,它将大型语言模
## 功能特性
- **多模型支持**:支持聊天模型、推理模型和视觉模型
- **接入点容灾**:聊天模型可配置多个备用接入点,主接入点 key 到期 / 限流 / 服务不稳定时自动切换
- **丰富的工具系统**:包括网络搜索、代码执行、图像识别、群管理等
- **上下文记忆**:支持持久化记忆存储
- **技能系统**:Bot 可在群聊中自我沉淀可复用知识,全局跨群、按需加载、低上下文污染
@@ -88,6 +89,15 @@ visualModelToken: ''
visualModel: 'qwen-vl-plus'
# 聊天模型额外请求体JSON,会合并到请求体中。例如DeepSeek关闭思维: {"thinking": {"type": "disabled"}}
chatModelExtraBody: ''
# 聊天模型备用接入点列表(容灾)。主接入点连续失败时按顺序切换;每项留空的字段会继承主接入点
# 例如只换API KEY就只填token,只换模型就只填model,整体换服务商就都填
chatFallbacks: []
# - api: 'https://api.deepseek.com/v1/'
# token: 'sk-xxxx'
# model: 'deepseek-chat'
# extraBody: ''
# 备用接入点冷却时间(分钟)。某接入点失败后在此时间内会被排到重试队尾,避免每条消息都先卡在故障接入点上。0为禁用
fallbackCooldownMinutes: 5
# 推理模型额外请求体JSON,会合并到请求体中。例如DeepSeek启用思维: {"thinking": {"type": "enabled"}}
reasoningModelExtraBody: ''
# 视觉模型额外请求体JSON,会合并到请求体中。
@@ -276,6 +286,37 @@ JChatGPT 默认配置为使用阿里云百炼平台的通义千问系列模型
当然,也可以配置为使用其他兼容 OpenAI API 的模型,如 GPT 系列模型。
## 接入点容灾
聊天模型支持配置多个**备用接入点**,当主接入点连续调用失败(key 到期、用量超限、服务不稳定、超时等)时自动切换,提升可用性。
### 配置方式
`chatFallbacks` 中按优先级顺序列出备用接入点。每项的任意字段**留空则继承主接入点**对应配置,因此三种容灾场景都覆盖:
```yaml
chatFallbacks:
# 只换 API KEY(同服务商备用 key)
- token: 'sk-备用key'
# 只换模型(同接入点降级到更稳定/更便宜的模型)
- model: 'qwen-plus'
# 整体换一个服务商
- api: 'https://api.deepseek.com/v1/'
token: 'sk-deepseek-xxxx'
model: 'deepseek-chat'
extraBody: ''
fallbackCooldownMinutes: 5
```
### 工作机制
- 主接入点为列表首位,备用接入点按配置顺序排在其后。
- **单次对话内**:某接入点流式调用失败时,立即切换到下一个接入点重试,而非反复重试同一个故障点。
- **跨对话冷却**:失败的接入点进入冷却期(`fallbackCooldownMinutes` 分钟),冷却期内会被排到重试队尾。这样主接入点 key 到期后,后续消息会直接走健康的备用接入点,不必每条都先卡一次超时。调用成功或冷却到期后自动恢复。
- 仅在**LLM 调用本身失败**时才切换接入点,后续工具执行异常不会误判正常接入点为故障。
- 推理模型、视觉模型不受影响,仍各自独立配置。
- `/jgpt reload` 会重建接入点列表并清空冷却状态。
## 工具系统
插件内置了丰富的工具供 AI 调用: