Skip to content

API 与密钥 ​

每个 AI API 的工作方式都一样:发送请求,得到响应。细节会变,模式不变。

类型: 构建 语言: Python, TypeScript 前置条件: 阶段 0,第 01 课 时间: ~30 分钟

学习目标 ​

  • 使用环境变量和 .env 文件安全地存储 API key
  • 分别使用 Anthropic Python SDK 和原始 HTTP 发起一次 LLM API 调用
  • 对比基于 SDK 与原始 HTTP 的请求/响应格式,以便调试
  • 识别并处理常见 API 错误,包括身份验证和速率限制

问题 ​

从阶段 11 开始,你将调用 LLM API(Anthropic、OpenAI、Google)。在阶段 13-16 中,你将构建会在循环中使用这些 API 的智能体。你需要知道 API key 如何工作、如何安全存储它们,以及如何发起第一次 API 调用。

概念 ​

mermaid
sequenceDiagram
    participant C as 你的代码
    participant S as API 服务器
    C->>S: HTTP 请求(带 API key)
    S->>C: HTTP 响应(JSON)

每一次 API 调用都包含:

  1. 一个端点 (endpoint / URL)
  2. 一个 API key(身份验证)
  3. 一个请求体 (request body)(你想要什么)
  4. 一个响应体 (response body)(你得到什么)

动手构建 ​

第 1 步:安全存储 API key ​

绝不要把 API key 写进代码中。请使用环境变量 (environment variables)。

bash
export ANTHROPIC_API_KEY="sk-ant-..."
export OPENAI_API_KEY="sk-..."

或者使用 .env 文件(把它加入 .gitignore):

ANTHROPIC_API_KEY=sk-ant-...
OPENAI_API_KEY=sk-...

第 2 步:第一次 API 调用(Python) ​

python
import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=256,
    messages=[{"role": "user", "content": "What is a neural network in one sentence?"}]
)

print(response.content[0].text)

第 3 步:第一次 API 调用(TypeScript) ​

typescript
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic();

const response = await client.messages.create({
  model: "claude-sonnet-4-20250514",
  max_tokens: 256,
  messages: [{ role: "user", content: "What is a neural network in one sentence?" }],
});

console.log(response.content[0].text);

第 4 步:原始 HTTP(不使用 SDK) ​

python
import os
import urllib.request
import json

url = "https://api.anthropic.com/v1/messages"
headers = {
    "Content-Type": "application/json",
    "x-api-key": os.environ["ANTHROPIC_API_KEY"],
    "anthropic-version": "2023-06-01",
}
body = json.dumps({
    "model": "claude-sonnet-4-20250514",
    "max_tokens": 256,
    "messages": [{"role": "user", "content": "What is a neural network in one sentence?"}],
}).encode()

req = urllib.request.Request(url, data=body, headers=headers, method="POST")
with urllib.request.urlopen(req) as resp:
    result = json.loads(resp.read())
    print(result["content"][0]["text"])

这就是 SDK 在底层所做的事情。理解原始 HTTP 调用有助于调试。

使用它 ​

对于本课程:

API何时需要免费额度
Anthropic (Claude)阶段 11-16(智能体、工具)注册赠送 $5 额度
OpenAI阶段 11(对比)注册赠送 $5 额度
Hugging Face阶段 4-10(模型、数据集)免费

你现在不需要把它们全部准备好。在课程需要时再进行配置即可。

交付 ​

本课会产出:

  • outputs/prompt-api-troubleshooter.md - 诊断常见 API 错误

练习 ​

  1. 获取一个 Anthropic API key,并发起你的第一次 API 调用
  2. 试试原始 HTTP 版本,并把响应格式与 SDK 版本进行比较
  3. 故意使用错误的 API key,并阅读错误信息

关键术语 ​

术语人们常说实际含义
API 密钥 (API key)“API 的密码”用于标识你的账户并授权请求的唯一字符串
速率限制 (Rate limit)“他们在限流我”每分钟/每小时允许的最大请求数,用于防止滥用并确保公平使用
Token“一个词”(在 API 语境中)一种计费单位:输入和输出 token 会分别计数并收费
流式输出 (Streaming)“实时响应”按词逐步获取响应,而不是等待完整响应返回