
issue: native tool calling via API doesn’t work and breaks knowledge access
快速结论:该问题通常发生在通过 Open WebUI API(chat completions 端点)调用已配置工具或知识库的模型时。优先确认你是否使用了 Open WebUI 默认启用的 “Native” 工具调用模式,该模式依赖服务端工具调用,而 OpenAI 兼容的 chat completions API 本身不支持服务端工具调用,导致工具和依赖工具调用的知识库均失效。
问题场景
用户在 Open WebUI v0.10.2(Docker 安装)中创建模型,为模型启用工具(如网络搜索)并关联知识库。随后通过 /api/chat/completions 端点(使用个人 API Key)以 stream: false 方式请求该模型,期望工具调用和知识库检索生效。实际表现是工具不可用,且知识库也无法响应。
报错原文
# 用户 curl 请求(无显式报错,但返回内容不包含工具调用或知识库检索结果)
curl -s -k -X POST "<base_url>/api/chat/completions" \
-H "Authorization: Bearer <api-key>" \
-H "Content-Type: application/json" \
-d '{
"model": "my-model",
"messages": [
{"role": "user", "content": "Who is the current chancellor of Germany?"}
],
"stream": false
}' | python3 -m json.tool
# 返回只包含基础模型回答,无工具调用相关字段
原因分析
社区核心成员 tjbck 在相关讨论中明确指出:Chat Completions API 本质上不支持服务端工具调用(server-side tool calling)。Open WebUI 默认使用 “Native” 工具调用模式,该模式依赖服务端自动触发工具调用,因此通过 chat completions 端点调用时,工具和需要工具调用作为中介的知识库(Knowledge Base)均不会被使用。这是 API 协议层面的限制,而非纯粹的 bug。
可能原因(Issue 作者在回复中补充):即使将 stream 改为 true,问题依然存在,说明问题不在于流式开关,而在于 chat completions API 不具备该能力的底层设计。另,知识库访问依赖工具调用(检索文件),因此当工具调用被阻断时,知识库也必然失效。
环境排查
- Open WebUI 版本:v0.10.2(请确认是否为最新版本,尽管用户已声称使用最新版)
- 安装方式:Docker
- 后端模型:任意(用户示例中使用 gemma-4-31b)
- API 端点:
/api/chat/completions(OpenAI 兼容接口) - 工具调用模式:默认 “Native”(非 Legacy)
- 请求参数:
stream: false或stream: true(均不影响)
解决步骤
- 检查工具调用模式:登录 Open WebUI 浏览器界面,进入「管理员设置」→「工具」或「模型设置」,确认当前工具调用模式是否为 “Native”。如果是,尝试切换为 “Legacy” 模式。
- 使用 Legacy 模式测试 API:切换为 Legacy 模式后,重新通过 API 发送相同的请求,检查工具是否可用。
- 检查 stream 参数(可优先尝试):将请求中的
"stream": false改为"stream": true,因为部分 Legacy 模式下也依赖流式响应才能正常触发工具调用。但请注意,Issue 作者亲测此修改对 Native 模式无效。 - 考虑使用 Responses API 端点(如可用):Open WebUI 未来可能支持
/api/responses端点(类似 OpenAI 的 Responses API),该端点原生支持服务端工具调用。当前版本如未提供,可向社区提交功能请求。 - 降级或等待官方修复:如果业务场景必须通过 API 使用工具和知识库,且 Legacy 模式也无法满足需求,可以考虑降级到工具调用模式切换前的版本,或关注 Open WebUI 后续更新。
验证方法
发送一个需要工具调用(如 “搜索当前德国总理是谁”)或知识库(如“根据我上传的文档回答”)的请求到 /api/chat/completions,观察返回的 JSON 中是否包含工具调用相关字段(如 tool_calls)或知识库内具体信息,而非仅有通用知识回答。如果返回内容正确命中外部数据源,则问题解决。



