issue: OpenAPI tool server sends path and query parameters in the JSON request body

该报错发生在 Open WebUI 调用 OpenAPI 工具服务器时,若端点同时包含路径参数和请求体,路径参数会被错误地写入 JSON 请求体,导致严格校验( additionalProperties: false )的服务端返回 422。优先检查 Open WebUI 是否为包含修复的 dev

快速结论:该报错发生在 Open WebUI 调用 OpenAPI 工具服务器时,若端点同时包含路径参数和请求体,路径参数会被错误地写入 JSON 请求体,导致严格校验(additionalProperties: false)的服务端返回 422。优先检查 Open WebUI 是否为包含修复的 dev 版本,并确认工具调用使用的模型是否按预期分离参数。

适用环境:Open WebUI v0.11.3(安装于 Docker),操作系统 Windows 11,浏览器 Chrome;OpenAPI 工具服务器示例为 Vikunja(通过 HTTP 192.168.2.22:3456/api/v2 访问)。

最快修复方案:暂无针对受影响版本的确认补丁;Issue 关联的修复 PR(#29717)已合并至 dev 分支,拉取最新 dev 版 Docker 镜像后问题可解决。可优先尝试升级至包含该修复的版本。

注意事项:此修复尚未说明是否已向后移植到稳定版;若继续使用 v0.11.3 或早期 dev 版本,问题仍可能复现。建议升级前备份当前配置。

问题场景

在使用 Open WebUI 通过 OpenAPI 工具服务器调用 REST API 时触发。具体场景是模型被要求调用一个既有路径参数又有请求体的“写”操作端点(例如 POST /tasks/{task}/relations),工具调用会失败。Issue 报告显示“读”操作(GET)正常,但“写”操作(POST/PUT/PATCH)会报错。

报错原文

问题标题: OpenAPI tool server sends path and query parameters in the JSON request body
服务端响应(例如 Vikunja):
{"error": "unexpected property", "property": "task", ...}
实际发送的请求体(含不应出现的路径参数):
{"task": 274, "relation_kind": "subtask", "other_task_id": 318}

原因分析

根本原因指向 backend/open_webui/utils/tools.py 文件中的 execute_tool_server() 函数。代码虽能正确拆分模型返回的参数为路径参数(path_params)和查询参数(query_params),但在构造请求体时,却将模型的完整参数字典(包含路径参数、查询参数和请求体参数)直接赋给了 body_params,即 Issue 中提到的 body_params = params。这导致路径参数(如 task)被错误地序列化进 JSON 请求体;对于启用了严格模式(additionalProperties: false)的服务端,就会因出现未声明的属性而拒绝该请求,返回 422 错误。Issue 作者已确认该问题在 dev 分支上依然存在,且与 #18287(DELETE 请求不发送 body)是同一函数中的不同缺陷。

环境排查

  • 确认 Open WebUI 的部署方式和版本:Docker 镜像是否仍为 v0.11.3,或已更新到包含修复的 dev 分支版本。
  • 检查远端 OpenAPI 服务是否启用了严格的请求体校验(additionalProperties: false),这决定了问题是否必然触发。
  • 复现时使用的模型需要能正确识别 URL 路径参数与请求体 JSON 字段的区别,否则可能产生额外干扰变量。

解决步骤

  1. 首先明确当前运行的 Open WebUI 版本和分支,本地或 Docker 均可通过容器管理界面或 docker inspect 查看镜像标签。
  2. 拉取最新的 dev 分支 Docker 镜像:docker pull ghcr.io/open-webui/open-webui:dev(具体标签以官方文档为准),然后重建容器。该版本包含作者验证过的 PR #29717 修复。
  3. 若无法升级到 dev 版本,则需等待官方将修复合并进后续稳定版再升级,或在严格校验的服务端暂时放宽 additionalProperties 限制以规避报错(仅限临时测试环境)。
  4. 升级后,在 Open WebUI 的聊天中重新触发会失败的工具调用(例如让模型执行“将任务 X 设为任务 Y 的子任务”的操作),确认工具调用不再返回 422。

验证方法

成功标准是执行同一步骤时,Open WebUI 的聊天不再显示工具调用失败,服务端也不再返回包含 "unexpected property" 的 422 响应。建议同时检查服务端访问日志,确认发出的请求 JSON body 中不再包含路径参数(例如 task 字段)。Issue 作者在拉取并运行 dev Docker 镜像后确认“works correctly here now”。

参考来源

open-webui/open-webui #29716

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 22199

发表回复

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