

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

# Mid-conversation 系统消息
<a name="claude-messages-mid-conversation-system"></a>

您可以将`{"role": "system", ...}`消息追加到`messages`数组中。这会在对话中途添加或更新系统指令，而不会使缓存的前缀失效。

以前，只能通过顶级`system`参数提供系统指令。这样就可以在不重置之前的上下文的情况下更新指令。

这在代理工作流程中很有用，在这种工作流程中，模型需要随着任务的进展进行调整。示例包括在任务中途引入新的约束条件、刷新权威上下文或更改工具指导以备以后的回合。

## 支持的模型
<a name="claude-messages-mid-conversation-system-supported-models"></a>

此功能仅在 Claude Opus 4.8 上可用。不需要测试版标题。不支持的型号`role: "system"`中包含`messages[]`的请求会返回。`400 invalid_request_error`

## 消息字段
<a name="claude-messages-mid-conversation-system-fields"></a>


| **字段** | **Type** | **描述** | 
| --- | --- | --- | 
| role | 字符串 | 必需。必须是 system | 
| content | 字符串或文本块列表 | 必需。使用纯字符串或内容块，与用户或助手消息相同。 | 
| cache\_control | 对象 | 可选。与顶级系统参数的语义相同。 | 

## 放置规则
<a name="claude-messages-mid-conversation-system-placement"></a>

中的`{"role": "system"}`消息`messages`具有以下放置限制：
+ 不能是中的第一个条目`messages`。使用顶级`system`字段获取从一开始就适用的说明。
+ 必须紧随以服务器工具使用结尾的用户消息或助手消息。
+ 必须是最后一个参赛作品，`messages`或者之后是助手回合。
+ 不能与其他系统消息相邻。不允许连续发送系统消息。

违反这些放置规则的请求会返回`400 invalid_request_error`。

## 内容规则
<a name="claude-messages-mid-conversation-system-content-rules"></a>

System-role 消息内容仅支持文本块。不支持图片、文档、工具栏和引文。

设置`content`为纯字符串或内容块。该说明从对话的那一刻起适用。使用顶级`system`字段获取应适用于整个对话的说明，使用对话中部的系统消息获取以后相关的说明。

## 提示缓存
<a name="claude-messages-mid-conversation-system-caching"></a>

Mid-conversation 系统消息专为使用提示缓存而设计。像往常一样缓存稳定前缀，方法是将前缀`cache_control`放在所有请求之间保持不变的最后一个块上。然后将系统消息附加到该断点之后。由于新指令出现在缓存的前缀之后，因此它不会更改前缀哈希，并且缓存仍然可以命中。

一旦对话中途的系统消息成为稳定历史记录的一部分，它本身就可以在随后的回合中从缓存中读取。避免编辑或删除之前在对话中途发送的系统消息，因为更改之前的消息会使缓存从那时起失效。

有关提示缓存的更多信息，请参阅[提示缓存以加快模型推断](https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-caching.html)速度。

## 响应行为
<a name="claude-messages-mid-conversation-system-response"></a>

响应形状不变。 System-role 消息不会出现在响应内容数组中。模型处理系统指令，但不会在响应中回显这些指令。

## 代码示例
<a name="claude-messages-mid-conversation-system-example"></a>

以下 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"])
```