跳到主要内容

初级:调用、清晰、角色(第 1-3 章)

这章讲什么: 先让你会调用 Claude(Messages API 的硬规则 + system prompt), 再教两条几乎零成本就能涨分的技巧:把指令写清楚给 Claude 一个角色

1. 基本提示结构(Chapter 1)

1.1 要解决的小问题

你得先知道一次合法的调用长什么样——哪些字段必填,什么排列方式会直接报错。

1.2 Messages API 的硬规则

一次最小调用必须有三样(见 Anthropic 1P/01_Basic_Prompt_Structure.ipynb Lesson 段):

字段作用
model调哪个模型
max_tokens硬上限,到了就截断,可能截在句中
messages输入消息数组,user/assistant 交替

两条会直接报错的规则,课程用反例演示:

  • 每条消息必须有 rolecontent 反例 messages=[{"Hi Claude"}] 报错。
  • user / assistant 必须交替,且首条必须是 user 反例:连发两条 user 报错。
合法: user → assistant → user → assistant ... (首条必是 user)
非法: user → user (没交替)
非法: [{"无 role 无 content"}] (字段缺失)

1.3 system prompt:在提问之前给背景

system prompt 是在 user 提问之前给 Claude 的上下文/规则,它单独放在 system 参数里, 不属于 messages 数组。一个写得好的 system prompt 能显著提升 Claude 遵守规则的能力。

# 示意,非源码 —— 来自 ch1 的 system prompt 例子
SYSTEM_PROMPT = "你的回答永远只能是一串推动对话的反问,不要直接回答用户。"
PROMPT = "Why is the sky blue?"
print(get_completion(PROMPT, SYSTEM_PROMPT))
# 重点看:Claude 反过来不停发问,而不是解释天为什么蓝

真实例子在 Anthropic 1P/01_Basic_Prompt_Structure.ipynbSYSTEM_PROMPT 单元格; get_completion(prompt, system_prompt="")system_prompt 参数就对应 API 的 system 字段。

2. 清楚而直接(Chapter 2)

2.1 思路:把 Claude 当第一天上岗的新人

Claude 没有任何上下文,只知道你字面说的。 你越是直白、具体地说清你要什么,它答得越准。

课程给了一条可操作的判断法——清晰提示的黄金法则:

把你的提示拿给一个同事照着做。如果他困惑,Claude 也会困惑。

2.2 例子:要什么就直接说

两组对照(Anthropic 1P/02_Being_Clear_and_Direct.ipynbPROMPT):

  • 去掉前言。 "Write a haiku about robots." 会带「Here is a haiku」开场白; 加一句 "Skip the preamble; go straight into the poem." 就直接进正文。
  • 逼它下结论。 「谁是史上最强篮球运动员?」Claude 含糊列几个名字; 追加「如果必须只选一个,你选谁?」它就给出明确答案。

练习的判分函数暴露了「直接」的威力:exercise 2.2 要求输出恰好等于 "Michael Jordan" ——grade_exercise 写的是 text == "Michael Jordan",任何多余的字或标点都算错。 这逼你学会让 Claude「只回答,别废话」。

3. 分配角色(Chapter 3)

3.1 要解决的小问题

同一个问题,你想要的语气/风格/严谨度可能差别很大。怎么一句话切换?

3.2 思路:给它一个身份

给 Claude 一个角色(role prompting),它的语气、风格、内容都会随之改变,而且在写作、 编码、数学、总结等领域常常提升表现——就像对人说「你现在是个 ____,来想这个问题」。 角色可以放 system prompt,也可以放在 user 消息里。

# 示意,非源码 —— ch3 角色对照
# 无角色:
get_completion("In one sentence, what do you think about skateboarding?")
# 有角色(放 system):
get_completion("In one sentence, what do you think about skateboarding?",
system_prompt="You are a cat.") # 回答会变成猫的口吻

3.3 关键细节:角色能提升「推理」

课程用一道经典逻辑题演示(Jack/Anne/George 谁在看谁, Anthropic 1P/03_Assigning_Roles_Role_Prompting.ipynbPROMPT):

  • 无角色: Claude 错答「信息不足」。
  • SYSTEM_PROMPT = "You are a logic bot designed to answer complex logic problems.": Claude 答对了(尽管课程诚实地标注:未必全因为对的理由)。

练习 3.1 的判分:让 Claude 把一道算错的方程判为 incorrect—— grade_exercise 找回答里是否含 "incorrect""not correct"

3.4 一个反复出现的元信息

课程反复强调:同一个结果常有多种提示技巧能达到。 用哪种看你偏好,鼓励你实验出自己的风格。 这点在后面章节会一再出现(同一个「去前言」既能靠「直接要求」也能靠「XML 标签」做到)。

代码地图

主题文件符号
API 最小调用 + 反例Anthropic 1P/01_Basic_Prompt_Structure.ipynbget_completion, messages.create
system prompt 例子Anthropic 1P/01_Basic_Prompt_Structure.ipynbSYSTEM_PROMPT
去前言 / 逼下结论Anthropic 1P/02_Being_Clear_and_Direct.ipynbPROMPT
「只回答 Michael Jordan」判分Anthropic 1P/02_Being_Clear_and_Direct.ipynbgrade_exercise
猫角色 / 逻辑机器人Anthropic 1P/03_Assigning_Roles_Role_Prompting.ipynbSYSTEM_PROMPT
角色提示语Anthropic 1P/hints.pyexercise_3_1_hint