本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Mid-conversation 系统消息
您可以将{"role": "system", ...}消息附加到messages阵列中。这会在对话中途添加或更新系统指令,而不会使缓存的前缀失效。
以前,系统指令只能通过顶级system参数提供。这样就可以在不重置先前上下文的情况下更新指令。
这在代理工作流程中很有用,在这些工作流程中,模型需要随着任务的进展进行调整。示例包括在任务中引入新的约束条件、刷新权威上下文或更改工具指南以备日后回合。
支持的模型
此功能仅在 Claude Opus 4.8 上可用。不需要测试版标题。role: "system"在不支持的模型messages[]上包含的请求会返回 a。400 invalid_request_error
消息字段
| 字段 | Type | 描述 |
|---|---|---|
role |
字符串 | 必需。必须是 system |
content |
字符串或文本块列表 | 必需。使用纯字符串或内容块,与用户或助手消息相同。 |
cache_control |
对象 | 可选。与顶级系统参数的语义相同。 |
放置规则
中的{"role": "system"}消息messages具有以下放置限制:
不能成为第一个条目
messages。使用顶级system字段获取从一开始就适用的说明。必须立即关注以使用服务器工具而结尾的用户消息或助手消息。
必须是最后一个参赛作品,
messages或者之后是助手回合。不能与另一条系统消息相邻。不允许连续的系统消息。
违反这些放置规则的请求会返回400 invalid_request_error。
内容规则
System-role 消息内容仅支持文本块。不支持图像、文档、工具块和引文。
设置content为纯字符串或内容块。该指令从那时起在对话中适用。使用顶级system字段显示应适用于整个对话的说明,使用对话中系统消息来获取日后相关的说明。
提示缓存
Mid-conversation 系统消息专为使用提示缓存而设计。像往常一样缓存稳定的前缀,方法是将每个请求中保持不变的最后一个区块放在cache_control上面。然后在该断点之后附加系统消息。由于新指令出现在缓存的前缀之后,因此它不会更改前缀哈希,并且缓存仍然可以命中。
一旦对话中的系统消息成为稳定历史记录的一部分,它本身就可以在后续回合中从缓存中读取。避免编辑或删除先前在对话中发送的系统消息,因为更改之前的消息会使缓存从那时起失效。
有关提示缓存的更多信息,请参阅提示缓存以加快模型推断。
响应行为
响应形状保持不变。 System-role 消息不出现在响应内容数组中。该模型处理系统指令,但不会在响应中回显这些指令。
代码示例
以下 Python 示例演示了如何在亚马逊 Bedrock 中使用对话中系统提示:
import boto3 import json client = boto3.client("bedrock-runtime", region_name="us-east-1") response = client.invoke_model( modelId="us.anthropic.claude-opus-4-8", body=json.dumps({ "anthropic_version": "bedrock-2023-05-31", "max_tokens": 1024, "system": "You are a helpful travel planning assistant.", "messages": [ {"role": "user", "content": "Help me plan a week in Paris."}, {"role": "assistant", "content": "I'd love to help! What kind of experience are you looking for?"}, {"role": "user", "content": "I want to see the major sights. What should I do on day one?"}, {"role": "system", "content": "The user has a budget of $150/day. Only suggest options that fit within this budget. Prioritize free attractions and affordable dining."} ] }) ) result = json.loads(response["body"].read()) print(result["content"][0]["text"])