Repository navigation
Web UI 的 Chat 时间线不显示普通上下文注入,用户无法判断模型收到了什么 #8259
YOUKNOWWHOOO
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
环境
操作系统:Windows 11 家庭版,版本 10.0.26200,64 位,AMD64。
运行时:Node.js v26.9.0(fnm 管理)、PowerShell 7.6.6。
软件:
@deepseek-ai/dsh0.1.7-rc.2(经 npx 安装,以dsh web启动);profile 组合为@deepseek-ai/dsh-base+@deepseek-ai/dsh-web-app;dsh-client-ui-chat与dsh同版本。界面:本节描述的是 dsh Web UI 的问题,不是 CLI 与其它界面的问题。浏览器为 CentBrowser 5.2.1168.83(Chromium 内核 134)。Web UI 监听回环地址
127.0.0.1:3080。观测时间:2026-09-29(CST,UTC+8)。
现象
自动注入的上下文消息(子代理结算通知、子代理来信、后台作业完成通知、压缩检查点等)在 Web UI 的 Chat 时间线里没有可见行,也不留「本轮发生过注入」的任何痕迹。这些内容在会话日志里完整存在,模型也正常收到了它们。看不到的不是内容,而是界面上的呈现。
代码证据
dsh-client-ui-chat/lib/client.js:7650-7652的isVisibleChatNode隐藏一切非turn-trigger的普通上下文行。dsh-client-ui-chat/README.zh.md:43(英文版README.md:43)逐字为「Chat 在所有工作步骤展示模式下都不显示系统提示词行、普通上下文注入和permission命令行。包含工具添加或移除记录的上下文仍然可见。该过滤不改变已记录的 Session 事件或 Trajectory 查看能力。非人工轮次触发仍作为独立通知显示,其他命令行仍保留在 Chat 中。」该句同时说明了两件事:过滤的范围覆盖普通上下文注入,且过滤不改动已记录的事件。因此本条只主张界面可见性,不主张数据丢失。版本对比
@deepseek-ai/dsh-client-ui-chat@0.1.5-rc.3的发布产物里有完整的ContextMessageNodeView→ContextInjectionRow渲染链,标题文案取自message.contextInjection(「上下文注入」),形态是可展开的折叠行。0.1.7-rc.2的发布产物里上述标识零命中。同一个界面在升级前显示过这类内容,升级后不再显示。影响
使用者从 Chat 看不出模型刚刚收到了一段注入,也判断不出注入发生在哪一刻。当模型的行为出现意外变化时,界面不提供任何线索,只能切到 Trajectory 视图或读会话日志。处在模型行为变化根因路径上的几类内容恰好都在被隐藏之列:错误处理要求决定模型在失败后是重试还是放弃,压缩衔接决定接续会话读到的约束,子代理工作方式决定委派行为。压缩是最典型的可检查项,压缩检查点若按原样显示,上下文体积的变化与缓存前缀是否保留可以直接在界面上核对。隐藏还取消了使用者的一条自主纠偏通道:注入不可见时,使用者无从发现「模型收到了一条与自己的意图不符的指令」,只能等到模型已经作出错误动作之后再倒推原因。
建议
为什么建议这样做
第一,在界面上公开信息对使用者是有利的。使用者能看见模型收到了什么,才可能在第一时间识别并纠正一条错误的注入,而不必等到模型作出错误动作之后再倒推原因。这条信息当前只存在于会话日志里,只有愿意去读日志的人才能看到,这让「模型为什么这么做」变成了一个需要读日志才能回答的问题。第二,在界面上不公开信息是有害的。隐藏使使用者的可判断范围小于模型的实际输入范围,使用者会基于「模型只看到我发的消息」这一错误前提做决策;一旦模型因某条被隐藏的注入改变行为,界面上没有任何线索可以定位它。第三,把内容显示出来并不意味着要把细节全部摊开。人机交互领域对「信息披露多少才合适」有明确的研究结论:信息过少时使用者无法判断系统行为,信息过多时认知负担上升、信任反而下降,因此合理做法是在两者之间取一个平衡,并让使用者自己决定看多少。这正是本条主张提供配置项、而不是主张改变官方默认值的原因:默认值属于产品判断,可以保留官方立场,但这条信息的读者是使用者本人,是否需要看应当由使用者决定。把入口做得明显,同时允许使用者按需展开,即可兼顾两面。
同类产品的做法(供参考,不构成必须照做的理由)
面向开发者的 AI 工具普遍把「模型实际收到了什么」列为可查看项。VS Code 的 Chat Debug 视图在其官方文档中的描述是显示每次 AI 请求与响应的原始细节,包括完整的系统提示词、上下文与工具调用载荷,官方给出的使用理由之一是理解 AI 为何给出意外回答时可以先看模型收到了哪些信息;GitHub Copilot CLI 提供
/context按类别显示上下文占用;Anthropic 的 Claude Code 文档承认存在从不出现在终端里的内容,同时提供/context这一分类级查看入口。这三者都不是把注入内容当作需要隐藏的实现细节,而是把它当作使用者排查问题的第一手材料。All reactions