本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Mid-conversation 系统消息
您可以将{"role": "system", ...}消息追加到messages数组中。这会在对话中途添加或更新系统指令,而不会使缓存的前缀失效。
以前,只能通过顶级system参数提供系统指令。这样就可以在不重置之前的上下文的情况下更新指令。
这在代理工作流程中很有用,在这种工作流程中,模型需要随着任务的进展进行调整。示例包括在任务中途引入新的约束条件、刷新权威上下文或更改工具指导以备以后的回合。
支持的模型
此功能仅在 Claude Opus 4.8 上可用。不需要测试版标题。不支持的型号role: "system"中包含messages[]的请求会返回。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 示例演示了如何在 Amazon 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"])