功能描述
背景
目前越来越多具备推理能力的大模型提供了可调节的推理强度,例如 low、medium、high 等档位。对应的 Agent / Coding Harness 也逐渐将推理强度作为对话时的常用控制项,允许用户根据当前任务复杂度快速调整推理深度,而不需要进入模型配置页面修改参数。
AstrBot 目前已经可以通过模型 Provider 的自定义请求体传递类似 reasoning_effort 的参数,但如果希望从 medium 切换到 high,通常仍需要进入 Provider 设置页,找到对应模型后修改自定义参数并保存。
对于一个长期运行、经常在聊天、搜索、工具调用、Coding 等不同复杂度任务间切换的 Agent Harness 来说,这类参数更适合作为会话过程中可以快速调整的运行时选项,而不仅是 Provider 的静态高级配置。
与 Issue #9483 及现有插件的关系
Related: #9483
#9483 已经提出为思考模型增加 Off / Minimal / Low / Medium / High 等思考等级,并提到了 WebChat、模型单独设置和对话指令。
本 Issue 的目标与其相近,但希望进一步补充 AstrBot 作为 多 Provider、多模型 Harness 时比较关键的一个问题:
WebChat 可以提供统一的推理强度选择,但不同模型实际支持的档位和参数并不完全一致,因此需要有一层模型级的档位映射,而不能简单假定所有模型都原生支持相同的 reasoning_effort 值。
目前也已经存在类似插件:
https://github.com/CMKH1337/astrbot_plugin_ideal_reasoning
该插件已经尝试针对 OpenAI、Anthropic、Gemini、DeepSeek、xAI 等不同模型厂商适配不同的推理参数,并提供会话级临时切换能力。
这说明该需求可以通过插件实现,但个人认为如果 WebChat 希望将推理强度作为类似模型选择器一样的常用交互项,更适合由 AstrBot Core / ChatUI 提供统一抽象,而不是要求用户自行安装插件并维护厂商分类。
为什么需要模型级映射
由于 Codex、Claude Code、DeepSeek-Harness 等厂商自己的 Harness 通常只服务于自家模型,因此可以直接内置一套固定的推理强度选项。
但 AstrBot 的情况不同。
AstrBot 同时支持:
- 官方模型 API;
- OpenAI-compatible API;
- 第三方中转;
- 本地部署模型;
- 用户自行添加的未知模型。
即使不同 Provider 都兼容 OpenAI API,它们实际支持的推理档位也不一定一致。
例如,AstrBot 可以在 ChatUI 中统一提供Off / Minimal / Low / Medium / High思考强度滑块,但由于某个模型实际可能只支持其中一部分,这时可以允许用户在添加 / 编辑模型时为该模型配置点对点映射。例如某模型的实际档位关系为:
AstrBot Model
Off → off
Low → low
Medium → high
High → high
Max → max
这样 WebChat 不需要理解每一家厂商具体有哪些档位,只需要维护一套统一的用户界面,最终请求再根据当前模型配置转换为实际支持的值。
对于 OpenAI、Anthropic、Gemini、DeepSeek、xAI 等常见模型,可以考虑由 AstrBot 或模型 metadata 提供预设映射;对于无法识别的小模型、自部署模型或特殊兼容 API,则允许用户在添加 / 编辑模型时自行配置推理档位映射。
如果 AstrBot 无法从 metadata 判断模型支持的推理档位,同时用户也没有进行额外配置,则可以采用一套尽量保守的同名直接映射作为 fallback 策略。
这种情况下 AstrBot 不尝试猜测模型厂商或额外转换档位,而是将用户选择直接传递给上游,由模型厂商、OpenAI-compatible 兼容层、vLLM 等实际后端自行处理。
同时,该状态下的推理强度控件应默认保持在 Default,即不主动覆盖模型当前的 Provider 配置或厂商默认行为。因此,对于没有 metadata、没有手动映射、甚至完全不支持推理强度控制的模型,现有行为也不会因为该功能而发生变化;只有用户主动选择 Off / Low / Medium / High / Max 时,AstrBot 才应用对应的会话级覆盖。
建议实现
希望最终可以在 WebChat 的模型选择区域附近增加一个推理强度选择控件,例如:
切换模型后,该控件仍使用统一档位:
DeepSeek-v4-flash [ Medium ▾ ]
但实际发送给 Provider 的参数由当前模型自己的映射决定。
在统一提供六个可调档位中,Default 状态,用于表示“不进行会话级覆盖,继续使用该模型原本的 Provider 配置或厂商默认值”。
其与 Off 有如下不同:
Default:不覆盖当前模型的默认推理行为;
Off:如果模型支持,则显式关闭推理。
具体的数据结构、映射保存方式以及 Provider 层如何注入参数,可以由维护者根据 AstrBot 现有架构决定,本 Issue 主要希望明确用户侧的行为和兼容需求。
使用场景
1. 根据任务复杂度快速调整推理强度
日常聊天或简单查询时:
遇到复杂搜索、长工具链、代码分析等任务时,可以直接在当前聊天窗口调整为:
任务结束后再快速切回较低档位,而无需反复进入 Provider 设置修改 reasoning_effort。
2. 同一会话中切换不同厂商模型
例如在同一个会话中:
ChatUI 始终显示同一套推理强度选项。
AstrBot 根据当前模型自己的映射,将用户选择转换成对应 Provider 实际支持的参数,从而避免要求用户记忆每一家模型的具体参数格式。
3. 自部署或小众模型
AstrBot 无法预先知道所有模型支持哪些推理档位。
对于这类模型,可以由用户在添加模型时手动配置支持情况和点对点映射。
这样既不会限制 AstrBot 对未知模型的兼容性,也不需要 Core 长期维护一个包含所有模型的硬编码厂商列表。
预期效果
希望最终推理强度能够像“选择模型”一样成为 WebChat 中一个轻量、常用的会话级控制项,例如:
模型 推理强度
GPT-5.x [ Medium ▾ ]
用户面对的是统一的抽象档位,而 AstrBot 负责根据当前模型的能力映射到实际 Provider 参数。
这样既可以获得类似 Codex、Claude Code 等 Harness 中快速调整推理深度的体验,又能够保留 AstrBot 作为通用多模型 Harness 对不同 Provider、自部署模型和 OpenAI-compatible API 的兼容性。
检查清单
功能描述
背景
目前越来越多具备推理能力的大模型提供了可调节的推理强度,例如
low、medium、high等档位。对应的 Agent / Coding Harness 也逐渐将推理强度作为对话时的常用控制项,允许用户根据当前任务复杂度快速调整推理深度,而不需要进入模型配置页面修改参数。AstrBot 目前已经可以通过模型 Provider 的自定义请求体传递类似
reasoning_effort的参数,但如果希望从medium切换到high,通常仍需要进入 Provider 设置页,找到对应模型后修改自定义参数并保存。对于一个长期运行、经常在聊天、搜索、工具调用、Coding 等不同复杂度任务间切换的 Agent Harness 来说,这类参数更适合作为会话过程中可以快速调整的运行时选项,而不仅是 Provider 的静态高级配置。
与 Issue #9483 及现有插件的关系
Related: #9483
#9483 已经提出为思考模型增加
Off / Minimal / Low / Medium / High等思考等级,并提到了 WebChat、模型单独设置和对话指令。本 Issue 的目标与其相近,但希望进一步补充 AstrBot 作为 多 Provider、多模型 Harness 时比较关键的一个问题:
WebChat 可以提供统一的推理强度选择,但不同模型实际支持的档位和参数并不完全一致,因此需要有一层模型级的档位映射,而不能简单假定所有模型都原生支持相同的
reasoning_effort值。目前也已经存在类似插件:
https://github.com/CMKH1337/astrbot_plugin_ideal_reasoning
该插件已经尝试针对 OpenAI、Anthropic、Gemini、DeepSeek、xAI 等不同模型厂商适配不同的推理参数,并提供会话级临时切换能力。
这说明该需求可以通过插件实现,但个人认为如果 WebChat 希望将推理强度作为类似模型选择器一样的常用交互项,更适合由 AstrBot Core / ChatUI 提供统一抽象,而不是要求用户自行安装插件并维护厂商分类。
为什么需要模型级映射
由于 Codex、Claude Code、DeepSeek-Harness 等厂商自己的 Harness 通常只服务于自家模型,因此可以直接内置一套固定的推理强度选项。
但 AstrBot 的情况不同。
AstrBot 同时支持:
即使不同 Provider 都兼容 OpenAI API,它们实际支持的推理档位也不一定一致。
例如,AstrBot 可以在 ChatUI 中统一提供
Off / Minimal / Low / Medium / High思考强度滑块,但由于某个模型实际可能只支持其中一部分,这时可以允许用户在添加 / 编辑模型时为该模型配置点对点映射。例如某模型的实际档位关系为:这样 WebChat 不需要理解每一家厂商具体有哪些档位,只需要维护一套统一的用户界面,最终请求再根据当前模型配置转换为实际支持的值。
对于 OpenAI、Anthropic、Gemini、DeepSeek、xAI 等常见模型,可以考虑由 AstrBot 或模型 metadata 提供预设映射;对于无法识别的小模型、自部署模型或特殊兼容 API,则允许用户在添加 / 编辑模型时自行配置推理档位映射。
如果 AstrBot 无法从 metadata 判断模型支持的推理档位,同时用户也没有进行额外配置,则可以采用一套尽量保守的同名直接映射作为 fallback 策略。
这种情况下 AstrBot 不尝试猜测模型厂商或额外转换档位,而是将用户选择直接传递给上游,由模型厂商、OpenAI-compatible 兼容层、vLLM 等实际后端自行处理。
同时,该状态下的推理强度控件应默认保持在
Default,即不主动覆盖模型当前的 Provider 配置或厂商默认行为。因此,对于没有 metadata、没有手动映射、甚至完全不支持推理强度控制的模型,现有行为也不会因为该功能而发生变化;只有用户主动选择 Off / Low / Medium / High / Max 时,AstrBot 才应用对应的会话级覆盖。建议实现
希望最终可以在 WebChat 的模型选择区域附近增加一个推理强度选择控件,例如:
切换模型后,该控件仍使用统一档位:
但实际发送给 Provider 的参数由当前模型自己的映射决定。
在统一提供六个可调档位中,
Default状态,用于表示“不进行会话级覆盖,继续使用该模型原本的 Provider 配置或厂商默认值”。其与
Off有如下不同:Default:不覆盖当前模型的默认推理行为;Off:如果模型支持,则显式关闭推理。具体的数据结构、映射保存方式以及 Provider 层如何注入参数,可以由维护者根据 AstrBot 现有架构决定,本 Issue 主要希望明确用户侧的行为和兼容需求。
使用场景
1. 根据任务复杂度快速调整推理强度
日常聊天或简单查询时:
遇到复杂搜索、长工具链、代码分析等任务时,可以直接在当前聊天窗口调整为:
任务结束后再快速切回较低档位,而无需反复进入 Provider 设置修改 reasoning_effort。
2. 同一会话中切换不同厂商模型
例如在同一个会话中:
ChatUI 始终显示同一套推理强度选项。
AstrBot 根据当前模型自己的映射,将用户选择转换成对应 Provider 实际支持的参数,从而避免要求用户记忆每一家模型的具体参数格式。
3. 自部署或小众模型
AstrBot 无法预先知道所有模型支持哪些推理档位。
对于这类模型,可以由用户在添加模型时手动配置支持情况和点对点映射。
这样既不会限制 AstrBot 对未知模型的兼容性,也不需要 Core 长期维护一个包含所有模型的硬编码厂商列表。
预期效果
希望最终推理强度能够像“选择模型”一样成为 WebChat 中一个轻量、常用的会话级控制项,例如:
用户面对的是统一的抽象档位,而 AstrBot 负责根据当前模型的能力映射到实际 Provider 参数。
这样既可以获得类似 Codex、Claude Code 等 Harness 中快速调整推理深度的体验,又能够保留 AstrBot 作为通用多模型 Harness 对不同 Provider、自部署模型和 OpenAI-compatible API 的兼容性。
检查清单