快速结论:此报错指出 filter 函数通过 model.meta.filterIds 分配给具体模型时,需要在函数设置中同时启用 is_global=True 才能触发 inlet(),这与文档描述“全局过滤器和模型专属过滤器是两个独立池子”相矛盾。优先排查 filter 函数的内部 ID 是否与模型 filterIds 中存储的 ID 一致,以及实际对话请求是否发送给了正确的模型(工作区模型 vs 基础模型)。
适用环境:Open WebUI v0.10.2(Docker 安装),Ollama 0.30.10,Debian 13.6 Trixie,Firefox 140.13.0esr。维护者测试表明同样行为在 v0.10.2 tag 上未能复现。
最快修复方案:暂无确认的一步修复方案。请按照“解决步骤”中的排查方法确定函数 ID 是否匹配、模型是否正确引用。
注意事项:以下方案基于维护者分析,属于推测性排查;如果确认所有条件均正确后问题仍存在,则可能是未被复现的真正 Bug,需要向官方提交更多细节。
问题场景
用户在 Open WebUI 中创建 Filter 函数(inlet 方法),并通过模型编辑界面的“Filter”字段将函数分配给特定模型。期望该函数仅在对话使用该模型时触发,但实际上函数只在 is_global=True 时才生效,导致函数对所有模型生效,失去模型级作用域。
报错原文
issue: Filter function via model.meta.filterIds requires is_global=True to fire (contradicts docs)
具体表现为:通过查询数据库中函数的 is_active/is_global 字段,发现仅当两者均为 True 时 inlet() 才会被调用。
原因分析
维护者通过直接测试代码逻辑认为文档所述行为应该正确,并在 v0.10.2 自身环境下无法复现。因此该问题极有可能源自用户侧的两个常见误区:
- Filter 函数的 ID 在删除重建后发生改变(ID 基于函数名称自动生成),但模型中存储的
filterIds仍然指向旧 ID,导致模型级过滤池无法匹配到该函数。 - 用户实际对话时使用的模型是基础模型(base model)而非保存了 filter 配置的工作区模型(workspace model)。基础模型不携带
meta.filterIds,因此仅全局过滤器生效。
环境排查
- 确认 Open WebUI 版本(v0.10.2,但维护者测试表明该版本逻辑正常,可能需检查是否有自定义配置或环境差异)
- 检查 filter 函数在数据库
function表中的实际 ID(SELECT id FROM function WHERE type='filter';) - 获取通过模型 API 返回的模型元数据:
curl -H "Authorization: Bearer $TOKEN" http://localhost:3000/api/models | jq '.data[] | {id, filterIds: .info.meta.filterIds}' - 确认对话请求中
model字段的值是否与该 API 返回的模型 ID 完全一致
解决步骤
- 登录 Open WebUI 管理后台,进入“Functions”页面,找到出问题的 filter 函数,记录其显示的名称与内部 ID(通常在编辑页面的 URL 或函数定义顶部可看到)。
- 通过数据库查询确认函数 ID:
docker exec python3 -c "import sqlite3; con = sqlite3.connect('/app/backend/data/webui.db'); cur = con.cursor(); cur.execute('SELECT id, is_active, is_global FROM function WHERE type=\'filter\''); print(cur.fetchall())"。 - 找到该模型的 JSON 配置(通过模型编辑页面的“导出”或直接查询 API),检查
meta.filterIds列表中的 ID 是否与上一步查出的函数 ID 完全一致。如果不同,说明模型指向了旧的或错误的函数 ID。 - 如有不一致,在模型编辑器中重新添加该 filter(选择当前正确的函数),或直接删除并重新创建具有相同名称的函数(确保名称不变,因 ID 由名称生成)。
- 确认对话使用的模型是工作区模型而非基础模型。在 Open WebUI 中,建议从模型选择器中选取显示有自定义设置(如 filter 标识)的模型条目。如果使用的是 Ollama 直接暴露的基础模型,则不会应用模型级 filter。
- 使用浏览器开发者工具检查 POST
/api/chat/completions请求中的model字段,确保其值与步骤 3 中 API 返回的模型 ID 匹配。 - 如果以上步骤均正确但问题依旧,请提供步骤 2 和 3 的完整输出以及请求的 model 字段,向官方提交新的 Issue。
验证方法
在 filter 函数的 inlet() 中增加打印日志(如 print("### PING FILTER CALLED ###", flush=True)),然后向指定模型发送对话消息,观察 Docker 日志中是否出现该打印输出。如果没有出现,检查函数 is_active=True 且 is_global=False 时,模型 API 返回的 meta.filterIds 是否包含该函数的 ID。如果包含但仍不触发,说明可能存在更深层次问题。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Bug]: OffloadingConnector corrupts outputs with per-token-head quantized KV cache (cross-layer allocation lacks scale packing)](https://www.chat-gpts.plus/wp-content/uploads/2026/07/48412-9800d6c7-768x403.jpg)

