在为特定用例构建AI聊天机器人时,您需要一种方法来控制AI的响应方式。系统提示是将通用AI转变为遵循特定准则并保持主题聚焦的专业助手的关键。

用户级指令的问题
您可能认为解决方案是将所有要求都包含在用户消息本身中。例如,在每次对话中告诉AI"提及AWS服务"和"不要提及竞争对手"。这种方法有严重的局限性:
- 您需要预见每一个可能的问题和边缘情况
- 指令列表变得笨重且重复
- 用户会看到所有内部指令,使对话变得杂乱
- 要求会根据所提出的具体问题而变化

系统提示:更好的方法
系统提示通过赋予Claude一个角色来解决这个问题。您不是列出具体的该做和不该做的事项,而是告诉Claude表现得像某种特定类型的专业人士。然后AI会像那个人自然会做的那样做出回应。

系统提示提供了几个关键优势:
- Claude获得关于如何一致响应的指导
- AI采用指定角色的思维方式和约束
- 响应自动保持聚焦且符合品牌调性
- 您不需要预见每一个可能的场景
实现系统提示
要将系统提示添加到您的Claude对话中,您需要将其作为参数传递给converse函数:
system_prompt = """
You are an AWS cloud support specialist. Your job is to answer user queries related
to cloud hosting services on AWS.
"""
response = client.converse(
modelId=model_id,
messages=messages,
system=[{"text": system_prompt}]
)系统提示作为包含带有"text"键的字典的列表传递。这会在Claude看到任何用户消息之前告诉它应该采用什么角色。
构建灵活的聊天函数
这是一个能够优雅处理系统提示的可重用聊天函数:
def chat(messages, system=None):
params = {"modelId": model_id, "messages": messages}
if system:
params["system"] = [{"text": system}]
response = client.converse(**params)
return response["output"]["message"]["content"][0]["text"]这种方法让您可以选择性地包含系统提示。当没有提供系统提示时,Claude会以其默认身份响应。当您包含一个系统提示时,Claude会采用该特定角色。
系统提示的实际效果
当您用同一个问题分别测试有系统提示和没有系统提示的情况时,差异立即显现。在没有系统提示的情况下问"我如何托管Postgres数据库?",您会得到一个涵盖多个云服务提供商和自托管选项的全面答案。

使用AWS支持专家系统提示时,响应专门聚焦于AWS解决方案,如RDS、Aurora和基于EC2的部署。没有提及竞争对手,答案还包括AWS特定的设置步骤。
更令人印象深刻的是系统提示如何处理偏离主题的问题。在AWS专家提示激活的情况下询问面包食谱,Claude会礼貌地拒绝,同时保持角色设定:

重要技术细节
在使用系统提示时,请记住以下要求:
- 系统提示不能为空字符串——它们必须包含至少一个字符
- system参数期望一个包含"text"键的字典列表
- 系统提示在对话中的任何用户消息之前被处理
- 您可以在请求之间更改顶层的
system值,但不能在单个messages列表的中途更改
如果您曾直接使用过Anthropic的Claude API,您可能知道某些Claude模型支持对话中途的系统消息——即在messages数组中添加一条带有system角色的消息,而不是更改顶层字段。该功能在Amazon Bedrock上不可用。在本课程中,您将始终通过每次converse调用上的顶层system参数来设置系统指令。
系统提示让您能够强大地控制AI行为,而无需复杂的规则系统。通过为Claude分配一个特定的专业角色,您可以获得一致、恰当的响应,这些响应自然遵循该角色的约束和专业知识。