#为什么我在 Control UI 中会无缘无故发送系统消息?

36 messages · Page 1 of 1 (latest)

bold hare
#

System (untrusted): [2026-04-13 21:45:39 GMT+8] Exec completed (swift-da, code 0) :: 25h[?2026l[?2026h[?25l[A[1Gpulling manifest [K pulling 2b0cf8f17b4c: 5% ▕ ▏ 135 MB/2.5 GB 12 MB/s 3m5s[K[?25h[?2026l[?2026h[?25l[A[1Gpulling manifest [K pulling 2b0cf8f17b4c: 5% ▕…

An async command you ran earlier has completed. The result is shown in the system messages above. Handle the result internally. Do not relay it to the user unless explicitly requested.
Current time: Monday, April 13th, 2026 - 9:46 PM (Asia/Shanghai) / 2026-04-13 13:46 UTC

frozen raftBOT
halcyon inletBOT
#

To help others find answers, you can mark your question as solved via Right click solution message -> Apps -> ✅ Mark Solution

frozen raftBOT
bold hare
#

这个是我看到的消息

#

我使用的是 4.12 版本,刚刚更新的,模型用的是 DeepSeek-Chat

#

对话过程中我会自动发送上面那个消息

#

很奇怪

quick spadeBOT
#

Let me check the local docs path first so I don’t guess.

#

I found the current docs layout. Now I’m checking the actual code/docs for this Control UI behavior so I can give a precise answer.

#

I found the relevant code path. One more pass to see whether this is expected UI transcript behavior or an actual leak/bug, then I’ll answer clearly.

#

这通常不是 Control UI 在“无缘无故”发消息,而是一个后台异步任务完成后的 followup

你贴的这段:

  • Exec completed (...)
  • An async command you ran earlier has completed...

就是 OpenClaw 的内部完成事件
如果这个会话原本是绑定到 Discord 线程的,那么你后来在 Control UI 里继续操作同一个会话时,完成通知还是会优先沿着原来的外部路由回到 Discord,而不是只留在 UI 里。

这块文档里是明确这么设计的:

  • 有外部目标时,followup 走外部频道
  • 只有纯 WebChat / internal session 才会 session-only

文档:

#

如果你想只在 Control UI 里看到结果,最简单的方法是:

  1. 在 Control UI 里开一个新的纯 UI 会话
  2. 不要复用那个已经绑定到 Discord 的 session/thread

不过,有一点我有点怀疑:
如果发出来的是这段原始内部提示本身,而不是正常的人话总结,那更像是个 bug,不是理想表现。

如果你愿意,我可以继续帮你判断是不是 bug。先贴一下:

openclaw --version

如果能稳定复现,也建议提 issue,并附上最小复现步骤:

#

对,这条不是正常用户消息

它本质上就是 OpenClaw 的内部 async exec completion prompt,也就是“后台命令跑完了,唤醒 agent 继续处理”的那段内部文本。
这段原文不应该直接暴露给你看,更不应该原样发到 Discord 线程里。

所以结论很简单:

  • 这不是你操作错了
  • 这也不是“正常聊天内容”
  • 如果它被原样显示/发出,我会把它算成 bug

从你这条内容看,触发源大概率是某个后台 exec,比如模型拉取 / 下载完成后,系统生成了 completion event,但最后没有被正确消化,而是直接漏出来了。

先给我两个信息,我就能更准确判断:

  1. openclaw --version
  2. 这条是
#
  • 出现在 Control UI 聊天界面里
    • 还是被真的发回了 Discord 线程

这两个路径不一样。

如果它是真的发回 Discord 线程,那更明确是 bug。
如果你愿意,建议开个 issue,并附上这条原文 + 复现步骤:

https://github.com/openclaw/openclaw/issues

你也可以把复现步骤贴这里,我帮你整理成最小复现。

#

明白了,这个信息很有用。

如果你是 2026.4.12 + DeepSeek-Chat,那我现在的判断是:

  • 触发本身是正常的,后台 exec 跑完会产生一个内部 completion event
  • 显示方式是不正常的,这段内部提示不该被原样露出来

所以更准确地说是:

预期的是“内部唤醒”
不预期的是“把内部唤醒文本直接显示/发出去”

我会优先怀疑两种情况:

  1. 模型没有正确处理这类内部 followup
    DeepSeek-Chat 在这类 tool / completion-event 路径上,确实更容易把内部脚手架漏出来
#
  1. 4.12 这一版在这个路径上有个展示/路由 bug
    尤其如果这段文字是真的发回 Discord 线程,那更像产品 bug,不只是模型理解问题

我建议你做个很快的 A/B:

  • 用同样操作
  • 只换一个更稳一点的 agentic / tool-reliable 模型
  • 看这段内部文本还会不会冒出来

如果换模型就没了,那基本是模型兼容性问题。
如果换模型还有,那就很值得提 issue 了。

参考:

#

如果你愿意,再补一句:

这条是只出现在 Control UI 里,还是被真的发到了 Discord?

这个细节能直接判断是“UI 展示漏了”还是“外发路由也漏了”。

#

那这就更明确了, 这是 bug / prompt leak, 不是正常行为。

因为你说的是:

  • 在对话过程中
  • 它会自动发送
  • 发送的还是那段内部 completion 文本

这说明不是单纯 Control UI 里“看到了内部日志”,而是:

后台 exec 完成事件被喂回模型后,模型又把那段内部提示原样发出来了。

结合你前面说的 2026.4.12 + DeepSeek-Chat,我会很怀疑是:

  • 这个版本的 completion-event 路由/展示链路有泄漏点
  • 再加上 DeepSeek-Chat 对内部 followup / tool 结果处理不够稳,直接把内部提示复读出来了
#

先给你一个实用结论

这不是你配置错了。

临时 workaround

  1. 先换一个更稳的 tool-reliable 模型测一下
    如果马上不复现,基本就是模型兼容性问题放大了这个路径

  2. 在 Control UI 里单独开纯 UI session 做测试
    不要复用已经绑定到外部频道的会话

  3. 尽量避免让这个模型处理后台 exec followup
    因为它现在明显会把内部 completion prompt 泄出来

我建议直接提 issue

把这几个信息一起带上:

  • 版本:2026.4.12
#
  • 模型:DeepSeek-Chat
  • 现象:对话中会自动向外发送内部 completion 文本
  • 样例:你上面贴的那段完整消息
  • 是否复现:稳定复现
  • 触发场景:后台 exec / pull 完成后

GitHub issues:
https://github.com/openclaw/openclaw/issues

如果你愿意,我可以下一条直接帮你整理一份可复制粘贴的 issue 模板

#

对,确实很怪 😅

而且这种怪法基本不是“正常但难懂”,而是不该发生的那种怪。
内部 completion 提示被自动发出来,这个现象我会直接按 bug 看。

短期先这么绕一下:

  • 换个更稳的模型试一次
  • 或者别让这个会话去处理后台 exec followup

如果你愿意,我现在就给你写一份 GitHub issue 模板,你直接贴到
https://github.com/openclaw/openclaw/issues 就行。

bold hare
#

其他模型偶尔也会遇到

#

我不清楚为什么会泄露出来

quick spadeBOT
#

那这个信息很关键。

如果其他模型偶尔也会遇到,那我就不会再把它归因成“某个模型不稳”了,结论会变成:

这是 OpenClaw 在 async exec completion 这条链路上的通用 bug,模型只是在放大或缩小复现概率。

也就是说:

  • 根因更像是 内部 completion event 被错误暴露/外发
  • 不同模型只是“谁更容易把它说出来”的区别
  • 不是 DeepSeek-Chat 独有问题

我会建议直接报 issue,标题都可以用这个:

Internal async exec completion prompt leaks into user-facing chat

你可以直接贴这个简版:

#
### Version
2026.4.12

### What happened
During a normal conversation, OpenClaw sometimes automatically sends an internal async exec completion message into the user-facing chat.

Example leaked message:

System (untrusted): [timestamp] Exec completed (...)
An async command you ran earlier has completed. The result is shown in the system messages above. Handle the result internally. Do not relay it to the user unless explicitly requested.

### Expected
This internal completion event should be handled silently by the agent, or transformed into a normal user-facing response.
It should never be leaked verbatim into chat.
#
### Actual
The raw internal completion prompt is sometimes sent into the conversation automatically.

### Notes
- Reproduced on 2026.4.12
- Happens with DeepSeek-Chat, but occasionally also with other models
- Seems related to background exec / async completion followups
- Observed while using Control UI / active conversation flow

Issue 地址:
https://github.com/openclaw/openclaw/issues

如果你想,我也可以下一条帮你把这段整理成中文 + 英文都能发的版本

#

大概率是这条链路里有一步“把内部事件当成了普通对话内容”。

简单说就是:

  1. 你触发了一个后台 exec
  2. exec 跑完后,OpenClaw 会生成一个内部 completion event
  3. 这个 event 会重新唤醒 agent,告诉它:
    “这个结果只在内部处理,不要直接发给用户”
  4. 正常情况下,agent 应该把它消化掉,或者转成人话
  5. 现在出问题的情况是,这段内部文本本身被当成了可见消息,最后漏到了外面

所以“为什么会泄露”,本质上通常是两类原因之一:

  • 模型复读了内部提示
  • 发送前的清理/过滤没有拦住这段内部文本

你现在这个现象之所以像 bug,是因为它不是一次单纯的“模型答错了”,而是:

#

OpenClaw 的内部唤醒文本,进入了用户可见输出链路。

而且你前面说了,别的模型偶尔也会遇到,这更说明问题不只是模型本身,应该是这条 completion-event 路径本来就有泄漏口,只是有的模型更容易触发。

所以一句话总结:

内部事件本来该留在系统里,但有时候被当成聊天消息发出来了。

如果你愿意,我可以继续帮你把这个“原因解释”整理成 issue 里的技术描述。

bold hare
#

是我自动发出去,不是模型发过来

#

界面上显示的是我发出去的系统内部消息

quick spadeBOT
#

啊,这个澄清很关键。那我前面的“模型复读”判断要修正一下。

如果是系统自己自动发出去,不是模型回的,那更像是:

async exec completion event 被错误地当成了可外发消息。

也就是这条链路出了问题:

  1. 后台 exec 完成
  2. OpenClaw 生成一个内部 completion event
  3. 这个 event 本来应该只在 session 内部处理
  4. 但它被错误带上了当前会话的外部路由(比如 Discord thread)
  5. 于是就被自动外发

所以现在更准确的结论是:

  • 不是模型把内部提示说出来了
#
  • 而是 OpenClaw / Control UI / session delivery 这层把内部事件直接发出去了
  • 这也解释了为什么其他模型偶尔也会遇到,因为根因不在模型

我现在会把它定性成:

internal exec completion event routing leak
或者更直白一点,内部完成事件被错误外发

临时绕法

在修之前,尽量:

  • 不要在已经绑定外部频道的会话里跑这类后台任务
  • 在 Control UI 里新开一个纯 UI session 测试

更适合的 issue 标题

Async exec completion system event is auto-delivered to external chat

#

如果你愿意,我可以直接把 issue 文案按这个新判断给你重写一版。

#

对,这就基本坐实了。

这说明不是单纯“看到了内部日志”,而是:

  • 内部 completion event 被当成了一条 outbound message
  • 然后 UI 又把它显示成了你发出去的消息

所以这里至少有一个明确 bug,甚至可能是两个连着的:

  1. 内部系统消息不该被外发
  2. UI 不该把这种内部事件显示成正常已发送消息

也就是说,问题已经可以很明确地描述成:

Control UI / session delivery 把内部 async exec completion event 当成了用户可见的已发送消息。

这个信息已经足够报 issue 了。