快速结论:这个报错发生在 Open WebUI 聊天输入框启用 Prompt Autocompletion 后,你在自动补全的防抖等待窗口内(约 1 秒)清空或发送了多段落消息,导致插件拿着旧的绝对光标位置去访问已被清空的编辑器文档,从而抛出 RangeError: Position N outside of fragment (<paragraph>)。优先排查你输入框的 Autocomplete 设置以及输入内容是否同时包含多个段落。
适用环境:Issue 已确认为 Open WebUI dev 分支(commit 8a42aa53e),通过 Git Clone 方式安装,Linux 操作系统;Firefox 首现,Chromium 系浏览器亦可复现。未涉及 Ollama(Not applicable),未提供 Python、CUDA、显卡等环境信息。
最快修复方案:暂无确认的一步修复方案。该 Issue 状态为已关闭,但评论与讨论链中未给出官方验证过的补丁或 workaround;需等待上游代码修复,或临时关闭 Prompt Autocompletion 功能规避。
注意事项:报错本身被认定为“cosmetic”(仅控制台报错,不影响用户界面和消息发送),且错误发生在自动补全请求发出之前,服务端未受影响;关闭自动补全会同时失去该功能,属于权衡取舍。
问题场景
在 Open WebUI 聊天输入框中开启 Prompt Autocompletion(用户 Settings > Interface)且管理员已启用 Autocomplete Generation 时,用户输入多段落文本后,在最后一次按键后的 1 秒内执行“全选删除”或直接发送消息(发送也会清空编辑器),控制台随即抛出未捕获的 RangeError。该错误在普通日常操作(如写完多行消息后立即回车发送)中即可触发。
报错原文
Uncaught RangeError: Position 7 outside of fragment (<paragraph>)
findIndex index.js:281
nodeAt index.js:1340
debounceTimer AutoCompletion.js:89
setTimeout handler*handleAICompletion AutoCompletion.js:84
handleKeyDown AutoCompletion.js:191
keydown index.js:3169
说明:报错中的位置数字随内容变化(Issue 中观察到 7、62、77),文档位于 src/lib/components/common/RichTextInput/AutoCompletion.js 第 82 行和第 89 行附近。
原因分析
根据 Issue 中的代码定位与分析,根本原因已经明确:
自动补全插件在用户按下按键时(handleKeyDown)捕获了当前文档中的一个绝对位置(absolute document position),随后设置一个约 1 秒的防抖定时器(handleAICompletion)。当定时器到期时,代码(第 89 行的 debounceTimer 回调)用当时保存的旧位置去访问“现在”的编辑器文档(nodeAt)。如果在防抖窗口内用户清空了输入框(全选删除或发送消息导致编辑器重置),文档结构发生变化,旧位置超出新文档的有效范围,于是抛出 RangeError: Position N outside of fragment。
Issue 作者还提供了一个确定性的复现:一个大小为 106 的两段文档,光标置于末尾时捕获位置 62,在定时器触发前将文档清空为 2,随即抛出形状完全一致的 RangeError: Position 62 outside of fragment (<paragraph>)。
环境排查
- 确认 Open WebUI 版本:
dev分支,commit8a42aa53e(报错文件路径位于该 commit 下)。 - 确认安装方式:Git Clone(非 Docker,但 Issue 未排除 Docker 环境下的影响)。
- 确认浏览器:Firefox(首现),Chromium 系浏览器也可复现;两类浏览器均有问题,说明与浏览器内核无关。
- 确认服务端:
POST /api/v1/tasks/auto/completions在错误发生前后的调用均返回 200,说明服务端逻辑未参与此异常。 - 无需关注 Ollama:该场景为未使用状态(Not applicable)。
解决步骤
- 临时规避(可优先尝试):在用户
Settings>Interface中关闭Prompt Autocompletion。这能直接消除控制台报错,但会失去自动补全提示功能。 - 跟踪上游修复:关注
dev分支的后续提交,检查AutoCompletion.js文件(尤其是handleAICompletion和handleKeyDown附近的代码)是否有针对“防抖期间文档被清空”的保护逻辑(例如在 dereference 前校验位置是否仍在文档范围内)。 - 复现确认(可选):若需验证是否已修复,可按照 Issue 中的复现步骤操作:先在输入框粘贴多段落文本,在末尾输入一个字符,随后 1 秒内全选删除或发送消息,观察控制台是否仍出现
RangeError。
验证方法
在输入框中粘贴多段落文本,在末尾任意输入一个字符,然后在 1 秒内全选删除(或直接发送消息),打开浏览器开发者工具控制台,观察是否还有未捕获的 RangeError: Position N outside of fragment。若控制台无此错误(或仅剩其他无关警告),则说明问题已解决。若关闭 Prompt Autocompletion 后不再出现错误,也可佐证问题定位准确。
注意事项补充
该报错被 Issue 作者描述为“cosmetic”(仅影响控制台输出,不干扰用户界面与消息发送流程)。错误抛出时机在自动补全请求发出之前,因此不会产生无效的服务端请求。但若你有自动化测试或脚本依赖控制台无错误输出,该问题仍需修复后才能通过。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[deepseek-v4-flash-sm86 fork] PP8 + DSpark: recurring deadlock in the V2-runner PP sampled-token/draft broadcast protocol (PPHandler)](https://www.chat-gpts.plus/wp-content/uploads/2026/08/53402-1007c917-768x403.jpg)

