本页目录

📘 第 2 课:Your first API call(你的第一次 API 调用)

所属课程:the AI Platform 101(课程 003) 官方课时定位:Section 1「What is the the AI Platform?」— Lesson 2 / 共 12 课时 ID:486251 | 官方地址:https://anthropic.skilljar.com/claude-platform-101/486251 形式:Video(视频课 + 文稿) 针对认证:CCAR-P(架构师 Professional) 整理日期:2026-10-14 ⚠️ 语料来源:官方 Skilljar 课程正文(用户提供,需登录)。CC BY-NC-SA 4.0,仅供个人学习。 ⭐ 本课权重提示:全课最小可运行单元课。本课给出了 messages.create 的必填三要素与响应结构(block 数组)—— 这两个知识点是领域 2(13%)与领域 3(19%)最密集的交界,且几乎每年必考「密钥该放哪」与「响应怎么取」两道题。


🎯 本课学习目标

⚠️ 本课官方未提供 What you'll learn 区块。以下按文稿结构反推:

  1. 能完成开工准备:取 API key、安全地存放、安装 SDK。
  2. 能说出一次请求必填的三个要素。
  3. 能读懂并写出一个约 20 行的最小可用调用。
  4. 理解 system 提示词塑造人格的作用。
  5. ⭐ 理解响应 content 是 block 数组(不是字符串),并知道要循环 + 判类型。
  6. 能把同一个调用从脚本包装成产品接口。

📖 一、视频导读

官方原句: Saying hi to the AI might warm your heart, but it's not really useful.* In this lesson we'll send the AI something real and get structured insight back — in just under 20 lines of code*.

精译:跟 AI 打个招呼也许能暖你的心,但它其实没什么用。 这一课我们要给 AI 送点真实的东西,并拿回结构化的洞见 —— 而且用不到 20 行代码。

⭐ 官方一上来就否定了 Hello, the AI 式的调用 —— 呼应第 1 课「不是聊天,是构建」的立场。 structured insight(结构化的洞见)与第 1 课的 structured request / structured response 是同一族词。


🔧 二、开工准备(Get set up)

1. 取 API key

First, grab an API key from platform.claude.com. You'll need to purchase some credits beforehand.

精译:首先,从 platform.claude.com 取一个 API key。你需要事先购买一些额度。

2. ⭐⭐ 把 key 放进 .env.local(本课第一个必考点)

官方原句: Take the API key and store it in a .env.local file so it stays out of your version control. Hardcoding keys in source files is how they end up leaked on GitHub — keep them in environment files instead.

精译:把 API key 存进 .env.local 文件,让它不进你的版本控制。把密钥硬编码进源文件,正是它们最终泄露到 GitHub 上的方式 —— 请改放在环境变量文件里。

❌ 错误做法 ✅ 官方口径
把 key 写进 .ts / .py 源文件(hardcoding) 放 .env.local 等环境文件
提交进仓库(进 version control) 让它留在版本控制之外(配合 .gitignore)
事后靠"小心一点" 机制上隔离(环境变量注入)

⭐⭐ CCAR-P 考点(领域 5 治理安全,14%): 题干给「开发把 API key 提交到了公开仓库」→ 正解一定是改用环境变量/密钥管理服务 + 轮换已泄露的密钥; 陷阱选项:「把仓库设为私有」「删掉提交历史」「加日志监控」—— 这些都是补救,不是根因修复。根因是密钥进了版本控制。 记忆锚:硬编码 = 泄露的路径。环境文件 = 隔离的机制。

3. 安装 SDK

Next, install the SDK:

npm install @anthropic-ai/sdk

官方在 About 里已说明:示例用 TypeScript SDK(@anthropic-ai/sdk)配 Node 与 npm;平台另有 Python SDK,但本课程示例是 TypeScript。 第 1 课的示例是 Python 风格,本课起改为 TypeScript/Node —— 两处都要认识,考题不保证语言一致。


🧬 三、⭐ 请求的解剖(The anatomy of a request)

官方原句:Every API call goes through the messages.create function. You specify three things:

# 必填项 官方原句 中文
1 A model which the AI model handles the request 由哪个模型处理这次请求
2 A max tokens limit a cap on how long the response can be 封顶响应能有多长
3 A list of messages objects with either user or assistant roles, structured similarly to how you'd have a conversation with the AI elsewhere 带 user 或 assistant 角色的对象,结构类似你在别处与 AI 对话的方式

⭐⭐ 「三个必填」是枚举题的高频考点 —— 必须和第 1 课的「四个控制权」区分开:

第 1 课:四个控制权 第 2 课:三个必填项
内容 model / 花多少 token / 能用哪些工具 / 遵循什么系统指令 model / max_tokens / messages
性质 平台给你的控制维度 一次调用必须给的东西
是否必填 否(是"你可以控制什么") ✅ 是

⚠️ 关键辨析:system 不在必填三要素里 —— 它是第 4 个、可选的参数(本课后面才加入)。 题干问「一次 messages.create 最少需要什么」→ 选 model + max_tokens + messages; 题干问「平台让你控制什么」→ 选第 1 课那四项。 记忆锚:三个必填是「调用」,四个控制是「平台」。

最小形式(官方代码,保持原样)

import the AI provider from "@anthropic-ai/sdk";

const client = new the AI provider();

const msg = await client.messages.create({
  model: "current-model",
  max_tokens: 1024,
  messages: [{
    role: "user",
    content: "Hello, the AI",
  }],
});

⚠️ 抓取件说明:the AI provider 与 model: "current-model" 为去品牌化/环境替换残留(第 1 课为 "current-model-lite")。实际写法是 SDK 的默认导出类与具体模型名(如 Haiku / Sonnet 档)。不要背这些字符串。 💡 官方自己吐槽了这个调用:"Saying hi to the AI ... is not really useful" —— 这段只是结构演示,不是推荐用法。


🐛 四、真实案例:审查有 bug 的代码(Reviewing buggy code)

官方原句:Let's give the AI something a little more interesting than "hello." We'll point it at some buggy code and ask for a review. Here's the whole thing — one file, about 20 lines of code:

精译:我们给 AI 一点比「hello」更有意思的东西。我们把它指向一段有 bug 的代码,并要求一次审查。这就是全部 —— 一个文件,大约 20 行代码。

官方代码(保持原样)

import the AI provider from "@anthropic-ai/sdk";

const client = new the AI provider();

const buggyCode = `
function add(a, b) {
  return a - b;
}
`;

const response = await client.messages.create({
  model: "current-model",
  max_tokens: 1024,
  system: "You are a terse senior code reviewer. Give feedback in one paragraph.",
  messages: [
    { role: "user", content: `Review this code:\n${buggyCode}` },
  ],
});

for (const block of response.content) {
  if (block.type === "text") {
    console.log(block.text);
  }
}

⭐ 官方点名的「两个注意点」(Two things to notice)

1. system 提示词塑造人格(persona)

The system prompt is where you shape the persona. I want a terse senior reviewer, not a chatty one — so I just say that.

精译:system 提示词就是你塑造人格的地方。 我要的是一个惜字如金的高级审查者,而不是一个话痨 —— 所以我就直接这么说。

指令 作用
You are a terse senior code reviewer. 定角色(senior)+ 定语气(terse 简洁)
Give feedback in one paragraph. 定输出形态与长度约束

⭐ 这是 system 提示词最教科书的用法:角色 + 语气 + 输出约束,一句话三层。 呼应第 1 课:system 是「你定义 AI 扮演的角色」的地方;第 1 课把 tone and guidelines(语气与准则)放进去,本课把人格与格式也放进去。 ⭐⭐ just say that(直接说就好) —— 官方在强调:不需要复杂技巧,把要求直说出来就行。这与考纲领域 2 的「系统提示词、模板与护栏」一致:清晰优于机巧。

2. ⭐⭐ 响应 content 是 block 数组,不是字符串

官方原句: The message.content in the response is an array of blocks, not a string. For a basic text reply there's usually just one block of type text, but the AI can return multiple blocks — text, tool calls, thinking — so we always loop and check the type.

精译:响应里的 message.content 是一个 block 数组,不是字符串。对于一次基础文本回复,通常只有一个 text 类型的 block,但 AI 可能返回多个 block —— 文本、工具调用、思考 —— 所以我们要始终循环并检查类型。

关键点 说明
结构 response.content = 数组(for (const block of response.content))
判类型 block.type —— 本课只处理 "text"
⭐ 三种 block text(文本)/ tool calls(工具调用)/ thinking(思考)
官方要求 ⭐ always loop and check the type(永远循环 + 判类型)

⭐⭐ 这是本课技术含量最高的一句,极可能出代码/结构题: * 为什么必须判类型:因为一次响应可能同时含文本、工具调用、思考 —— 直接当字符串用会漏内容或报错。 * 前向呼应:tool calls → 第 5 课 What is tool use?;thinking → 第 6 课 What is thinking?。本课先把三种 block 的名字给你,后面两课再展开。 * ⚠️ 与第 1 课的对照:第 1 课写的是 draft = response.content(直接整体赋值,教学简化);本课纠正为「必须循环 + 判类型」。以本课为准。 * 记忆锚:响应不是一句话,是一串积木;不看类型就取,等于蒙着眼拿。

运行结果

Run it, and the AI spots that add is subtracting and tells you in one paragraph. That's it. That's the whole API call.

精译:跑起来,AI 会发现 add 其实在做减法,并用一段话告诉你。就这样。这就是整个 API 调用。

(官方终端输出:AI 指出函数名为 add 却使用了减法,并建议把 return a - b 改为 return a + b。)


🚀 五、⭐ 从脚本到产品(From script to product)

官方原句: In a real product, this same messages.create shape is the engine behind something like a summarize endpoint. Pull a meeting transcript out of the database, hand it to the AI with a system prompt that says "extract insights and risks," save the result back on the row, and return it to the UI. It's the same call — just wrapped in a route handler.**

精译:在真实产品里,同样的这个 messages.create 形态,就是类似"摘要接口"背后的引擎。做法是:从数据库取出一份会议转录,把它交给 AI,配上一句「提取洞见与风险」的系统提示词,把结果存回那一行,再返回给界面。还是同一次调用 —— 只是被包在了一个路由处理函数里。

⭐ 端到端链路(正好对应考纲领域 1 的「输入 → 处理 → 输出 → 反馈回路」)

步 官方动作 中文
① 输入 Pull a meeting transcript out of the database** 从数据库取会议转录
② 处理 hand it to the AI with system: "extract insights and risks" 交给 AI + 系统提示词定任务
③ 输出 save the result back on the row 把结果存回那一行(持久化)
④ 交付 return it to the UI** 返回给界面
包装 wrapped in a route handler** 包在路由处理函数里

⭐⭐ 本课最重要的架构论断: It's the same call — just wrapped in a route handler. (还是同一次调用 —— 只是被包在了一个路由处理函数里。)

这句话把「演示脚本」和「生产功能」之间的差距,压缩成了一层包装。它直接回答了第 1 课留下的那个转向 —— 从「问 AI 一个问题」到「AI 成为产品的一部分」,在工程上只需要:数据库取数 → 同一次调用 → 存回 → 返回 UI。

⭐ 注意 save the result back on the row(把结果存回那一行) —— 这是有状态的产品做法,不是无状态的问答。对应领域 1 的反馈回路与领域 6 的生命周期管理。

记忆锚:产品化 = 同一次调用 + 数据进出 + 一层路由。

与第 1 课的案例对照

第 1 课:起草客服回复 第 2 课:会议摘要接口
输入来源 取出工单内容 从数据库取转录
system 团队的语气与准则 "extract insights and risks"
输出去向 回给按钮渲染 存回那一行 + 返回 UI
形态 一次调用 同一次调用 + 路由包装

💡 两次都是同一个 messages.create 形态 —— 这就是官方反复强调的「从这里开始,一切都建立在这个模式之上」。


🔑 六、核心要点(Recap)· 官方五条

  1. Your first API call is a messages.create function with a model, a token limit, and messages. 你的第一次 API 调用就是一个 messages.create —— 带一个模型、一个 token 上限和一组消息。
  2. Store your API key in a .env.local file to keep it out of version control. 把 API key 存进 .env.local,让它不进版本控制。
  3. Add a system prompt to shape the AI's behavior. 加一个系统提示词来塑造 AI 的行为。
  4. The response content is an array of blocks — loop and check each block's type. 响应的 content 是一个 block 数组 —— 循环并检查每个 block 的 type。
  5. From here, everything builds on this pattern. 从这里开始,一切都建立在这个模式之上。

⭐ 第 5 条是全课的承上启下句:后面 10 节课(tool use / thinking / 内置工具 / Skills / MCP / 上下文管理 / 托管智能体)全部是往这个模式上加东西,不是换模式。


🧠 本课 → CCAR-P 考点映射

本课知识点 命中考纲条目 领域
⭐⭐ 密钥进 .env.local、硬编码导致泄露 治理与安全:凭据管理、识别安全缺口 领域 5(14%)
⭐⭐ messages.create 必填三要素 模型选型与调用配置 领域 2(13%)
⭐⭐ 响应 content 为 block 数组,须判 type 集成实现;解析模型输出(text / tool_use / thinking) 领域 3(19%)
system 塑造人格与输出约束 设计系统提示词、模板与护栏 领域 2(13%)
max_tokens 控制响应长度与成本 优化上下文窗口与管理 token 消耗 领域 2
⭐ 从脚本到产品:DB → AI → 存回行 → 返回 UI 端到端架构(输入 → 处理 → 输出 → 反馈回路) 领域 1(17%)
事先购买额度、成本可控 权衡准确率与延迟并论证配置决策 领域 4(16%)
SDK 安装与本地跑通(Node/npm) 开发者生产力与运维赋能 领域 7(7%)

🔤 本课新生词(已回灌 30-单词表/03,2026-10-14)

词汇 音标 释义 备注
warm your heart — 让人心里一暖 官方吐槽式开场
structured insight — 结构化的洞见 呼应第 1 课 structured request
in just under 20 lines — 用不到 20 行
⭐ get set up — 完成开工准备 小节标题
grab /ɡræb/ 取、拿(口语) grab an API key
credits /ˈkredɪts/ 额度、点数 不是「学分」
beforehand /bɪˈfɔːrhænd/ 事先
⭐⭐ .env.local — 本地环境变量文件 本课必考
⭐⭐ version control — 版本控制
⭐⭐ hardcode(v.) /ˈhɑːrdkoʊrd/ 硬编码 ⭐ 安全考点核心词
leak(v.) /liːk/ 泄露 end up leaked on GitHub
end up — 最终落到(某种结局) 常接不好的结果
⭐ anatomy /əˈnætəmi/ 解剖、结构拆解 ⭐ 本课小节标题;比 structure 更强调"逐层拆开"
go through — 经由、通过 every API call goes through ...
specify /ˈspesɪfaɪ/ 指定
cap(n./v.) /kæp/ 上限 / 封顶 第 1 课为动词,本课名词
token limit — token 上限 = max_tokens
roles — 角色 user / assistant
buggy /ˈbʌɡi/ 有 bug 的
point it at — 把它指向 point it at some buggy code
review(n./v.) /rɪˈvjuː/ 审查 / 评审 双词性
⭐ terse /tɜːrs/ 简洁、惜字如金 ⭐ 与 concise 近义,但 terse 更"冷"
chatty /ˈtʃæti/ 话痨的、啰嗦的 ⭐ terse 的反义,官方成对使用
⭐ persona /pərˈsoʊnə/ 人格、人设 shape the persona
shape(v.) /ʃeɪp/ 塑造 动词,不是名词「形状」
just say that — 直接那么说就好 官方的方法论暗示
⭐⭐ block /blɑːk/ 内容块 ⭐ 响应结构核心词
loop(v.) /luːp/ 循环 动词
check the type — 检查类型 block.type
tool calls — 工具调用(block 类型) → 第 5 课
thinking — 思考(block 类型) → 第 6 课
spot(v.) /spɑːt/ 发现、看出 不是名词「地点」
That's it. — 就这样。
⭐ endpoint /ˈendpɔɪnt/ 接口、端点 a summarize endpoint
transcript /ˈtrænskrɪpt/ 转录文本 不是「成绩单」
extract /ɪkˈstrækt/ 提取 extract insights and risks
insights and risks — 洞见与风险
row /roʊ/ (数据库)一行 不是「划船」
⭐ route handler — 路由处理函数 产品化包装层
wrapped in — 被包装在……里
dashboard /ˈdæʃbɔːrd/ 仪表盘 第 1 课 Controls 成员,此处为产品 UI
preview /ˈpriːvjuː/ 预览
Generate summary — 生成摘要(按钮)
builds on this pattern — 建立在这个模式之上 Recap 第 5 条

✅ 本课进度

  • [x] 全文精译与架构师级拆解(2026-10-14)
  • [x] ⭐⭐ 记录必填三要素 vs 第 1 课四个控制权(辨析表)
  • [x] ⭐⭐ 记录响应 block 数组与「循环 + 判类型」要求,并标注对第 1 课的修正
  • [x] ⭐ 记录「从脚本到产品」端到端链路与 same call, route handler 论断
  • [x] ⭐⭐ 记录密钥管理安全考点(.env.local / hardcoding / version control)
  • [x] 英文原文已存:17-English-02-Your-first-API-call.md
  • [x] 生词回灌 30-单词表/03-考试核心生词与术语表.md(2026-10-14 建表,301 条入速查区,⭐⭐ 28 条精讲)
  • [ ] 官方未提供 What you'll learn 区块 —— 若后续页面补全,需回填

🔗 关联

⚠️ 语料说明:英文原文中的 the AI provider 与 model: "current-model" 为抓取/去品牌化残留,已在代码段下方说明;其余英文引句均为官方原句,未作改动。

输入至少 2 个字符,检索全部课程与单词表