issue: Need to strip `reasoning_effort` param from OpenAI params, transitioning Completions to Responses API

把 OpenAI 连接切换为 Responses API(API Type: Responses)后,Open WebUI 仍会在请求体顶层注入 reasoning_effort ,导致 OpenAI 直接拒绝;优先排查请求体中是否残留该平铺参数,把它剥掉即可恢复。

快速结论:把 OpenAI 连接切换为 Responses API(API Type: Responses)后,Open WebUI 仍会在请求体顶层注入 reasoning_effort,导致 OpenAI 直接拒绝;优先排查请求体中是否残留该平铺参数,把它剥掉即可恢复。

适用环境:Open WebUI v0.11.0(Issue 报告版本);评论中另有用户使用 v0.12.0 复现;安装方式 Git Clone;系统 Ubuntu 24.04;浏览器 Chrome 150.0.7871.124;连接配置为 Admin → Connections → https://api.openai.com/v1 → API Type: Responses。

最快修复方案:Issue 评论中已验证的做法:在 Admin → Functions 新建一个 Filter 函数,用 Filter.request 在请求发出前执行 body.pop("reasoning_effort", None),然后启用该函数(并在设置中打开 global),在聊天中确认函数 chip 生效。

注意事项:该 Filter 只删除 reasoning_effort,不会补上 Responses API 需要的 reasoning.effort,因此如果模型或业务需要显式推理强度,相关效果会缺失;Filter.request 需要 v0.11.2 及以上版本(本 Issue 的 v0.11.0 可用 Filter.inlet 但可能不是每次请求都触发,一致性较差)。正文中提到的 OPENAI_API_PARAMS_OVERRIDE 尝试在 Issue 中未标记为已验证成功。

问题场景

用户在 Open WebUI 后台把 OpenAI 连接改为 Responses API(Admin → Connections → https://api.openai.com/v1 → API Type: Responses)后,直接向 GPT 系列模型发消息即触发报错;有用户是在刚完成 OpenAI API 连接配置后就立刻遇到,并在多个 GPT 模型上复现。触发场景还包括 GPT-5.6 系列(Sol、Terra、Luna)默认推理与函数工具并用,以及设置了 Reasoning Effort(包括设为 none 也无法绕过)的情况。

报错原文

Unsupported parameter: 'reasoning_effort'. In the Responses API, this parameter
has moved to 'reasoning.effort'. Try again with the new parameter.
See the API documentation for more information:
https://platform.openai.com/docs/api-reference/responses/create.

相关场景下 Chat Completions 侧的报错原文:

Function tools with reasoning_effort are not supported in /v1/chat/completions.
To use function tools, use /v1/responses or set reasoning_effort to 'none'.

原因分析

最可能的原因是:当 OpenAI 连接切到 Responses API 后,Open WebUI 仍按 Chat Completions 的扁平结构,把 reasoning_effort 作为顶层 key 写进发往 OpenAI 的 payload,例如 {"model": "gpt-5.6-terra", "reasoning_effort": "medium", ...}。Responses API 已把该参数迁移到嵌套对象 reasoning.effort,即期望 {"model": "gpt-5.6-terra", "reasoning": {"effort": "medium"}, ...},且不接受点号形式的 key,因此服务端直接拒绝该请求。该值可能由用户显式设置产生,也可能因先前的模型配置而被带出(包含非 null 值的情况)。

环境排查

  • 确认 Open WebUI 版本(Issue 报告为 v0.11.0,评论复现为 v0.12.0);若要用 Filter.request,需 v0.11.2 及以上。
  • 确认 OpenAI 连接配置:Admin → Connections 中 API 端点与 API Type(Responses)。
  • 确认发往 OpenAI 的请求体中是否存在顶层 reasoning_effort,以及是否有非 null 值。
  • 确认模型:是否使用 GPT-5.6 系列或其它会默认推理的模型。
  • 确认是否同时启用了函数工具(function tools),这与推理参数组合会触发更严格的限制。
  • 确认安装方式与运行环境(Git Clone、Ubuntu 24.04)与复现环境一致。

解决步骤

  1. 进入 Admin panel → Functions → Create,新建一个 Filter 函数。
  2. 把示例 Filter 类替换为以下代码,保存后退出回到 Functions 菜单:
    """
    title: Strip reasoning_effort from payload body for OpenAI API compatibility
    description: https://github.com/open-webui/open-webui/issues/28418
    """
    
    from typing import Optional
    
    class Filter:
        def __init__(self):
            self.toggle = True # This allows it to be turned on/off using the [integrations] menu in the chat
        def request(self, body: dict, __user__: Optional[dict] = None) -> dict:
            body.pop("reasoning_effort", None) # updated to avoid del
            return body
  3. 在 Functions 菜单中打开该函数的开关(toggle)。
  4. 同时在该函数的小设置菜单中打开 “global”,否则在聊天中不可访问。
  5. 打开一个新聊天,确认出现该函数的 chip(评论中提供了未启用/已启用的对比截图)。
  6. 说明:Filter.request 在 v0.11.2 引入;v0.11.0 可优先尝试 Filter.inlet,但评论指出它可能只应用一次而非每次请求,一致性可能较差。

验证方法

打开一个新聊天,确认函数 chip 已出现;发送消息后不再返回 Unsupported parameter: 'reasoning_effort' 报错即表示剥离生效。注意该修复只删除 reasoning_effort,并不会添加 reasoning.effort,因此可同时确认后续请求是否仍符合你的推理强度预期。

参考来源

open-webui/open-webui #28418

相关 Issue:#23566、#22343、#24855

Filter 文档:docs.openwebui.com — Filter request step

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 28824

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注