标题有点开玩笑,别当真。其实是发现最后一条user消息的末尾塞system prompt,能很大程度影响它的思考过程,看起来就跟完美执行了系统指令一样。不过也不是百分之百灵,最好一直保持系统指令在最后的格式,万一中间格式乱了可能就救不回来了。
感觉DSv4这特性挺有意思的,我已经在想怎么用它搞Agent了。那以前像ClaudeCode、OpenCode那种系统指令放开头的Agent,是不是就不适合DSv4了?希望后面更新别把这特性改没了。它感觉特别配DS那个100%命中缓存、缓存不要钱还带1M上下文的特性,在Agent里能无限切换角色,直接把计划和状态当角色扮演提示词打进思维链里。
注意点:
- 这方法大概率能解决工具调用的问题。
- 不是100%听话,如果上下文有点冲突或者转换太快,可能当前这次对话不生效。
- 多次塞系统指令后,永远以最新塞的那条为准,但上下文太长注意力可能会崩,搞不好就以它最后“注意到”的那条生效了。
- 不是每次都要塞,我演示的对话里每次都塞而已。塞一次就能稳定对话了,要换角色的时候再塞新的,之后不塞也能接着稳定聊,测过了。
两个对话都是deepseek v4 pro,没塞官方的max提示词,没测过flash。
【对话1】试着把指令放中间和开头,结果模型完全不按角色扮演的指令走了
【对话2】重新手动fork,一直保持系统指令在最后,这次听话多了,但有一次转太快导致没立刻听。
ReAct注入:
ClaudeCode的compact模拟:
改注入格式开始崩坏:系统提示放中间了,虽然这次听了,但下一次就开始崩,跟对话2里转太快的情况一样,都是下一次才听话。思维链我没展开,确实按要求没带入角色,如果不强调禁止带入,DS会自动带助手角色去分析(我自己单独测过),之前看论文好像说带入的话评估会作弊。
开始崩坏,不知道是因为我提示词放开头了,还是上一轮格式不对:
后面就算格式对也继续崩,注入系统指令完全没用了:
对话2里某个注入只在第二轮生效:以前测是能直接生效的,不知道这次为啥不行了,可能太短了。
后面对话都保持指令在最后的格式,没再崩过:但我才发现,他压缩用了之前的规则,也就是意图理解不到位,这种场景得明确要求他理解到这次输出不能默认引用以前的上下文。