Skip to content

[Feature] 为 WebChat 增加会话级推理强度切换与多模型档位映射 #9731

Description

@C10H14N2O5

功能描述

背景

目前越来越多具备推理能力的大模型提供了可调节的推理强度,例如 lowmediumhigh 等档位。对应的 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 的模型选择区域附近增加一个推理强度选择控件,例如:

GPT-5.x     [ Medium ▾ ]

切换模型后,该控件仍使用统一档位:

DeepSeek-v4-flash  [ Medium ▾ ]

但实际发送给 Provider 的参数由当前模型自己的映射决定。

在统一提供六个可调档位中,Default 状态,用于表示“不进行会话级覆盖,继续使用该模型原本的 Provider 配置或厂商默认值”。

其与 Off 有如下不同:

Default不覆盖当前模型的默认推理行为;
Off:如果模型支持,则显式关闭推理。

具体的数据结构、映射保存方式以及 Provider 层如何注入参数,可以由维护者根据 AstrBot 现有架构决定,本 Issue 主要希望明确用户侧的行为和兼容需求。


使用场景

1. 根据任务复杂度快速调整推理强度

日常聊天或简单查询时:

Low / Medium

遇到复杂搜索、长工具链、代码分析等任务时,可以直接在当前聊天窗口调整为:

High / Max

任务结束后再快速切回较低档位,而无需反复进入 Provider 设置修改 reasoning_effort。

2. 同一会话中切换不同厂商模型

例如在同一个会话中:

GPT → DeepSeek → Gemini

ChatUI 始终显示同一套推理强度选项。

AstrBot 根据当前模型自己的映射,将用户选择转换成对应 Provider 实际支持的参数,从而避免要求用户记忆每一家模型的具体参数格式。

3. 自部署或小众模型

AstrBot 无法预先知道所有模型支持哪些推理档位。

对于这类模型,可以由用户在添加模型时手动配置支持情况和点对点映射。

这样既不会限制 AstrBot 对未知模型的兼容性,也不需要 Core 长期维护一个包含所有模型的硬编码厂商列表。


预期效果

希望最终推理强度能够像“选择模型”一样成为 WebChat 中一个轻量、常用的会话级控制项,例如:

模型                 推理强度

GPT-5.x          [ Medium ▾ ]

用户面对的是统一的抽象档位,而 AstrBot 负责根据当前模型的能力映射到实际 Provider 参数。

这样既可以获得类似 Codex、Claude Code 等 Harness 中快速调整推理深度的体验,又能够保留 AstrBot 作为通用多模型 Harness 对不同 Provider、自部署模型和 OpenAI-compatible API 的兼容性。


检查清单

  • 我已在 Issue 列表中搜索过相关功能,并注意到相似提议 [Feature]增加思考等级设置 #9483;本 Issue 主要进一步补充会话级控制与多模型档位映射的设计需求。
  • 我建议的功能与 AstrBot 本体相关,而非在建议某一插件的功能。
  • 我已阅读并同意本项目的贡献者行为准则
  • (可选)我愿意提交 PR 以帮助实现该功能。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:providerThe bug / feature is about AI Provider, Models, LLM Agent, LLM Agent Runner.area:webuiThe bug / feature is about webui(dashboard) of astrbot.enhancementNew feature or requestfeature:chatuiThe bug / feature is about astrbot's chatui, webchat

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions