数据截至 (上游 commit 0d277542e927)
初级:调用、清晰、角色(第 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 交替 |
两条会直接报错的规则,课程用反例演示:
- 每条消息必须有
role和content。 反例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.ipynb 的 SYSTEM_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.ipynb 的 PROMPT):
- 去掉前言。
"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.ipynb 的 PROMPT):
- 无角色: 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.ipynb | get_completion, messages.create |
| system prompt 例子 | Anthropic 1P/01_Basic_Prompt_Structure.ipynb | SYSTEM_PROMPT |
| 去前言 / 逼下结论 | Anthropic 1P/02_Being_Clear_and_Direct.ipynb | PROMPT |
| 「只回答 Michael Jordan」判分 | Anthropic 1P/02_Being_Clear_and_Direct.ipynb | grade_exercise |
| 猫角色 / 逻辑机器人 | Anthropic 1P/03_Assigning_Roles_Role_Prompting.ipynb | SYSTEM_PROMPT |
| 角色提示语 | Anthropic 1P/hints.py | exercise_3_1_hint |