Repository navigation
建议:不要将英文 runtime-context 快照 / 技能目录追加在用户消息之后,避免冲淡"过程叙述"对用户语言的跟随 #4117
buhuikongpan
started this conversation in
Ideas
Replies: 1 comment
|
求帮顶 |
0 replies
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.
问题:为什么"过程叙述"常常不跟随用户语言?
现象
在 dsh 里,用户用中文提问(且没有明确写"用中文"),模型在第一轮就产出英文的"过程叙述"(自述/旁白)。即使把"用中文"写进提示词,思考通道也常因为消息流结尾是英文而回落英文。
用会话日志验证后,结论是:模型是否用中文,靠的是采样时是否捕到语言信号,而不是"它读懂了意思"。当上下文末尾充斥着英文、语言信号被稀释时,模型就回落英文默认态。
真正的根因(代码级,藏得较深)
用户的第一条消息本身是干净的,但模型实际看到的"用户消息流"末尾被 dsh 硬叠加了两大段英文:
两段合计近 5800 字符的英文,且都排在最末尾、最靠近"现在"的位置。
语言跟随几乎只看"最近/最主导的用户消息语言"。而模型在这个"最近"位置上看到的全是大段英文,于是"用户语言"信号被稀释到约等于 0——所以"过程叙述"就回落成英文。
佐证
去掉这两段英文(或把它们挪到用户消息之前)后,模型在同一中文输入下会回归中文。这说明问题不在"模型不懂中文",而在"消息流末尾的语言信号分布"。
代码位置
建议的优化
核心不是"多写一句中文",而是别让英文占据消息流末尾这个决定语言的位置。
方案 A(推荐,改动最小)
把 runtime-context 快照挪到消息流开头(紧跟 system,作为 current context 前缀),而不是追加在用户消息之后。这样:用户消息回到末尾,语言跟随恢复;context 仍在最前面、权重也高。
方案 B(更彻底)
对快照/技能目录这类英文系统文本,inject 时明确标注为非用户角色或打上 system-guidance 标记,避免模型把它当成"用户最近在说的语言"。dsh 已经在 user/message 里加了 source.kind='plugin' 标记,但 deriveEventMessage() 在转成模型消息时直接 return event.data 把它当普通 user 消息,标记丢了——这本身是个可改的代码点。
All reactions