快速结论:该问题发生在 Open WebUI 的聊天搜索中,当标题和查询词使用不同的 Unicode 编码(如 NFC/NFD、希腊语词尾 sigma、全角字符)时,搜索返回 0 结果。优先排查你使用的 Unicode 编码形式,并确认是否已升级到包含大小写折叠(case folding)修复的 dev 分支版本。
适用环境:Open WebUI v0.11.1(Pip 安装),macOS Sequoia,Brave 1.92 浏览器;Ollama 不适用(n/a)。SQLite 和 PostgreSQL 16 均已复现,但未确认具体 Python/PyTorch/CUDA 版本。
最快修复方案:暂无确认的一步修复方案。Issue 报告时(v0.11.1)存在缺陷,但维护者表示针对非 ASCII 字符的大小写折叠修复已合并到 dev 分支;若你使用的版本较旧,升级到包含该修复的最新 dev 构建是优先尝试的方向。
注意事项:NFC/NFD 归一化和全角字符折叠与此不同,维护者明确表示这是产品决策而非缺陷修复,暂无时间表。在修复可用前,从 Finder 粘贴分解(NFD)文本到标题后,唯一可靠的方法是重新用键盘输入标题文本。
问题场景
用户在 Open WebUI 中搜索聊天标题。触发场景为:标题中包含的文本与搜索关键词使用不同的 Unicode 编码形式——例如从 macOS Finder 复制文件名(通常为 NFD 分解形式)粘贴为聊天标题,而在搜索框中手动输入相同文字(通常为 NFC 组合形式)。此外还包括希腊语词尾 sigma 变体(U+03C2 ς vs U+03C3 σ)以及全角字符(如 “Luka” vs “Luka”)的匹配失败。
报错原文
feat: apply Unicode normalization to search so NFD, final sigma and fullwidth text match
0 results. Nothing in the search path normalizes either side: SQLite's builtin lower() does not normalize, Python str.lower() does not normalize, and PostgreSQL's lower()/ILIKE does not normalize either (also reproduced on PostgreSQL 16, see the PostgreSQL check in Steps to Reproduce), so this is not SQLite-specific. The comparison runs on raw codepoint sequences and the two spellings never meet.
原因分析
根本原因是搜索路径中的字符串比较基于原始码点序列,而数据库和 Python 的内置 lower() 函数均不执行 Unicode 归一化。具体表现为:
已确认原因:
- SQLite、PostgreSQL 和 Python 的 lower() 只处理 ASCII 大小写,不执行 Unicode 归一化(NFC/NFD)或大小写折叠(case folding)。
- 针对非 ASCII 字符(如 ŁĄKA、西里尔字母)的大小写不敏感搜索缺陷,维护者已在 dev 分支修复,但在 v0.11.1 中仍存在。
- 希腊语词尾 sigma 问题:Python str.lower(‘ΣΑΣ’) 生成词尾形 U+03C2 ς,而 SQLite lower() 不处理 sigma 变体;Unicode casefold 规则可同时映射两种 sigma 到 U+03C3 σ,但搜索路径未实现。
可能原因(产品决策,非缺陷):
- NFC/NFD 归一化未实现,因为兼容性折叠可能产生意外匹配(如 ㎡ 匹配 m2、① 匹配 1),维护者视为产品决策而非缺陷。
- 全角字符折叠同样属于此范畴,不在修复时间表内。
环境排查
- 确认 Open WebUI 版本:v0.11.1 已知受影响;升级到包含大小写折叠修复的 dev 分支后,非 ASCII 大小写问题可能已解决。
- 确认数据库类型:SQLite(默认)和 PostgreSQL 16 均已复现,问题与数据库无关。
- 检查剪贴板文本编码:运行
pbpaste | python3 -c "import sys, unicodedata; s = sys.stdin.read(); print(unicodedata.is_normalized('NFC', s))",输出False表示剪贴板文本为 NFD。 - 验证搜索目标字符类型:区分是大小写问题(已修复)还是归一化/全角问题(未修复)。
解决步骤
- 升级到最新 dev 分支或包含相关修复的发布版本:Issue 维护者确认“Case folding for non-ASCII landed in dev this morning”——非 ASCII 字符(如 ŁĄKA、西里尔文)的大小写匹配已在 dev 修复,升级后验证这些场景。
- 使用 Python 验证 clip 文本的归一化形式:执行
pbpaste | python3 -c "import sys, unicodedata; s = sys.stdin.read(); print(unicodedata.is_normalized('NFC', s))",判断粘贴文本是否为 NFC 标准形式。 - 针对希腊语词尾 sigma:这是维护者认为值得修复的场景,但未确认是否已包含在 dev 修复中。可优先尝试升级版本后再测试。
- 针对 NFC/NFD 和全角:维护者明确说明这是产品决策,无时间表。在修复前,唯一可行方法是:手动重新输入标题文本(而不是粘贴)以确保使用 NFC 编码。
- 如果使用旧版本且无法升级:可尝试在搜索框中输入与标题完全相同的字节序列(即复制标题文本进行搜索),而不是手动输入。
验证方法
在升级到最新 dev 版本后,创建包含以下内容的聊天标题并验证搜索匹配性:
- 非 ASCII 大小写:标题 “ŁĄKA”,搜索 “łąka”(此场景在 dev 中已修复)。
- 希腊语词尾 sigma:标题 ‘ΣΑΣ ΣΥΜΒΑΣΗ γραμμή’,分别用两种 sigma 变体搜索。
- NFC/NFD:从 Finder 复制文件名的分解(NFD)文本粘帖为标题,再手动输入相同 NFC 文本搜索——预期仍不匹配(未修复)。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[bug]: InvokeAI v6.14.0-RC1 Crashed while generating Krea-2 Image](https://www.chat-gpts.plus/wp-content/uploads/2026/09/9444-d6bdc60c-768x403.jpg)
![[Question]: Shared embedded chat URL fails to access documents after logout or when accessed by other users](https://www.chat-gpts.plus/wp-content/uploads/2026/09/15895-cf3f7033-768x403.jpg)
