加载中

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

用户级指令的问题

您可能认为解决方案是将所有要求都包含在用户消息本身中。例如,在每次对话中告诉AI"提及AWS服务"和"不要提及竞争对手"。这种方法有严重的局限性:

  • 您需要预见每一个可能的问题和边缘情况
  • 指令列表变得笨重且重复
  • 用户会看到所有内部指令,使对话变得杂乱
  • 要求会根据所提出的具体问题而变化

系统提示:更好的方法

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

系统提示提供了几个关键优势:

  • Claude获得关于如何一致响应的指导
  • AI采用指定角色的思维方式和约束
  • 响应自动保持聚焦且符合品牌调性
  • 您不需要预见每一个可能的场景

实现系统提示

要将系统提示添加到您的Claude对话中,您需要将其作为参数传递给converse函数:

python
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看到任何用户消息之前告诉它应该采用什么角色。

构建灵活的聊天函数

这是一个能够优雅处理系统提示的可重用聊天函数:

python
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分配一个特定的专业角色,您可以获得一致、恰当的响应,这些响应自然遵循该角色的约束和专业知识。