issue: pasted large text stays attached to the chat and is re-injected as a source on every later message

当开启 “Paste Large Text as File” 后,长文本会被自动上传为 Pasted_Text_.txt 并挂到整个对话(chat)而不是当时那条消息上,此后每一轮对话都会把这份全文重新注入模型上下文,表现为后续消息也显示 “Found N sources” 且

快速结论:当开启 “Paste Large Text as File” 后,长文本会被自动上传为 Pasted_Text_<timestamp>.txt 并挂到整个对话(chat)而不是当时那条消息上,此后每一轮对话都会把这份全文重新注入模型上下文,表现为后续消息也显示 “Found N sources” 且模型一直围绕粘贴内容回答。

适用环境:Open WebUI 0.11.4,Docker 部署;开启 “Paste Large Text as File”,并关闭 “Bypass Embedding and Retrieval” 与 “Full Context”。

最快修复方案:暂无确认的一步修复方案。Issue 中唯一被验证有效的处理方式是:在不再需要该粘贴内容时,从对话历史(chat history)中删除这个粘贴生成的 Pasted_Text_<timestamp>.txt 文件。

注意事项:该 Issue 最终被维护者标记为 “Intended”(预期行为)关闭,即当前的对话级文件续传可能是设计取舍,而非计划修复的缺陷;因此下述步骤属于规避手段。删除文件会同时移除该粘贴内容的引用,无法只针对某一轮关闭注入;关闭 “Paste Large Text as File” 可以避免产生这类文件,但长文本会留在消息里,界面滚动体验会变差。

问题场景

在 Open WebUI 会话界面(网页前端)中开启 “Paste Large Text as File” 后,粘贴超过 PASTED_TEXT_CHARACTER_LIMIT(1000 字符)的文本,会折叠为 Pasted_Text_<timestamp>.txt 文件。该文件以 context: "full" 上传并存到 chat.files(对话级文件列表)。之后在同一对话里再发送任意新消息,即使没有附件,前端请求的 files 数组仍由“对话级文件列表 + 父消息文件”组成,把该 paste 文件一路带上;后端 chat_completion_files_handler 读出 context == "full" 的整段内容并注入 RAG 模板,于是每条后续回复都显示 “Found N sources” 并围绕粘贴文本作答。此问题与浏览器重传文件字节导致的 413 问题(#15846)不同,字节始终留在服务端,重复的是前端重复提交文件引用、后端重复读取存储内容。

报错原文

issue: pasted large text stays attached to the chat and is re-injected as a source on every later message
Found N sources

原因分析

核心原因是文件作用域不对:paste 生成的文本文件被绑定在对话(chat)上,而不是它粘贴进去的那条用户消息上。可能原因链条如下:

  • 前端 MessageInput 的粘贴处理:超过 1000 字符的粘贴走普通文件上传路径,并带上 {context: "full"}。
  • 前端提交:请求的 files 数组由对话级文件列表加上父消息的文件共同构成,因此 paste 文件会出现在每一轮后续消息中。
  • 后端 chat_completion_files_handler:只要条目的 context == "full",就从存储中读取完整内容并通过 RAG 模板注入,这也就是 UI 上 “Found N sources” 的来源。

Issue 中的 trace 显示,紧跟 “hello” 的后续问题 “how is your mood?” 没有任何自己的文件,却仍显示 2 个来源,且 prompt_tokens 基本一致(44619 对 44672),说明整段粘贴内容被第二次发送。多个 paste 还共享同一个内容哈希,导致同一段文本被注入两次。

环境排查

  • 确认 Open WebUI 版本与部署方式(Issue 为 0.11.4,Docker)。
  • 确认界面设置中 “Paste Large Text as File” 是否开启。
  • 确认 “Bypass Embedding and Retrieval” 与 “Full Context” 的状态(本例均为关闭)。
  • 检查对话历史里是否存在 Pasted_Text_<timestamp>.txt 这类对话级文件(chat.files),以及其是否带 "context": "full"。
  • 对比连续两轮的 prompt_tokens:若后续轮次没有自带文件却与首轮相近,基本可判定粘贴内容被重复注入。

解决步骤

  1. 定位问题文件:打开该对话的文件/历史记录,找到由粘贴自动生成的 Pasted_Text_<timestamp>.txt。
  2. 从对话历史中删除该粘贴文件,这是 Issue 中唯一确认能停止重复注入的操作。
  3. 若不想每次手动删除,可在界面设置中关闭 “Paste Large Text as File”(Issue 作者采用的做法)。关闭后长文本会保留在消息正文中并影响滚动,但不会再作为对话级文件被反复注入。
  4. (可优先尝试,但 Issue 未验证)关注社区中关于把粘贴内容改为“文件引用 + 按需读取”的方案,Open WebUI 已有 query_chat_files 工具,但当前粘贴路径未使用它;该改进是否落地请以官方后续版本为准。

验证方法

删除粘贴文件或关闭该设置后,发送一条与粘贴内容无关的新消息,检查其助手回复下方是否仍显示 “Found N sources”,并对比该轮的 prompt_tokens 是否明显低于首轮。若后续消息不再出现粘贴来源、token 数回落且模型按新问题作答,说明重复注入已停止。

参考来源

open-webui/open-webui #31983

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 27735

发表回复

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