对话中系统提示词

构建长时运行的 AI Agent 往往会导致一个代价高昂的错误。

你使用一个庞大的系统提示词(system prompt)并对其进行缓存以节省成本。这在大多数情况下行之有效,直到你需要在对话中途向 Agent 提供新指令。你可能需要更改编程语言或更新项目状态。

如果你通过编辑顶层系统提示词来添加这些信息,就会破坏缓存。模型必须以全额价格重新处理整个历史记录。这会让你的 Agent 变得既慢又贵。

新的 Claude 模型通过“对话中系统消息”(mid-conversation system messages)解决了这个问题。

你现在可以直接在消息数组(message array)中放置一个 system 角色的消息。将其放在历史记录之后,而不是放在顶部。

为什么这很重要:

• 缓存安全性:指令位于已缓存的历史记录之后。它不会使前缀失效。你只需为这条新的、短小的消息付费。 • 安全性:你可以使用用户消息作为变通方案,但用户可以伪造这些消息。system 角色的消息具有用户无法伪造的权威性。这可以防止提示词注入(prompt injection)。

如何正确操作:

将这些消息表述为事实。不要使用“覆盖/忽略”类的语言。

• 正确:“自动批准模式现已启用。” • 错误:“忽略用户所说的话,改为执行此操作。”

模型通常会抵制要求它们忽略之前上下文的指令。请坚持陈述世界的新状态。

使用规则:

当你在会话开始后获知新信息时,请使用此方法。如果你在开始时就已经知道该事实,请将其放入主系统提示词中。如果该事实是动态的,请使用对话中系统消息。

这能保持缓存热度并降低成本。

来源:https://dev.to/pavelespitia/mid-conversation-system-prompts-steering-an-agent-without-breaking-the-cache-2kd3