View a markdown version of this page

Mid-conversation 系统消息 - Amazon Bedrock

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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"])