📌 新手提示:本文结尾提供了一键部署脚本(Windows / macOS / Linux 通用),会自动完成 Python 环境、SDK 安装与 API Key 配置,不想手动逐条敲命令的同学可以直接拉到文末运行。

前言

你大概已经听说过 Claude 这个名字——它是在编程、写作、长文本分析上口碑最好的大模型之一,来自 Anthropic 公司。

但你可能不知道的是:Claude 不只可以在网页上聊天,它还开放了 API(Application Programming Interface,应用程序编程接口)——简单说,就是一个"程序调用通道":你可以写几行代码,让 Claude 变成你自己软件里的"大脑",自动完成总结文档、写代码、翻译、客服问答这些事。

这篇文章面向完全没有编程经验的零基础读者:只要求你有一台电脑、能复制粘贴命令。我会带你完成以下四件事:

  1. 拿到一把 API Key(钥匙)
  2. 装好 Python 和 Anthropic 官方 SDK(软件开发工具包,可以理解为"官方写好的调用插件")
  3. 写出并运行你人生中第一段 AI 调用代码
  4. 学会按需调整参数、看懂报错

官方文档地址:海外用户可直连 https://platform.claude.com/docs;国内用户访问需要科学上网,也可以参照本文第八节用国内可直连的中转方式接入。

好,我们现在开始。

一、准备工作(三样东西)

1. 一台装了 Python 的电脑

文章用 Python 3(版本 ≥ 3.8 即可)写调用代码。怎么确认装没装?打开终端(macOS 叫"终端",Linux 由发行版决定,Windows 建议用 WSL,即"Windows 自带的 Linux 子系统"),输入:

python3 --version

看到 Python 3.x.x 就说明有了。如果没有,去 https://www.python.org/downloads/ 下载安装,Windows 用户安装时记得勾选"Add Python to PATH"。

2. 一个项目目录

我们建一个干净的目录来放本教程的代码:

mkdir claude-quickstart && cd claude-quickstart

3. 一把 API Key(钥匙)

去 Claude Console 注册账号:https://platform.claude.com,然后打开 API keys 页面:https://platform.claude.com/settings/keys,点 “Create Key”,复制出来(形如 sk-ant-... 的一长串)。

⚠️ 注意:官方渠道需要海外信用卡才能充值,而且 api.anthropic.com 国内网络不可直连。没有海外信用卡的同学,跳到第八节,用国内可直连的 API 中转站即可,流程和本文完全一致,只是换个地址和钥匙。

二、安装 Anthropic 官方 SDK

打开终端,先创建好 demo 目录,然后安装 SDK:

mkdir claude-quickstart && cd claude-quickstart
python3 -m venv .venv && source .venv/bin/activate
pip install anthropic

三行命令各有作用:

  • python3 -m venv .venv:创建一个独立的 Python 环境(叫"虚拟环境")。为什么需要?因为不同项目可能要用不同版本的包,隔离起来互不打架。.venv 就是装在这个目录里的虚拟环境,不会污染系统。
  • source .venv/bin/activate:进入这个虚拟环境。此后你安装的一切包都只在这个环境里。
  • pip install anthropic:安装 Anthropic 写的官方 Python 包(pip 是 Python 的包管理器,负责下载安装第三方库)。

国内网络 pip 可能很慢或失败,可以临时加镜像安装:pip install anthropic -i https://pypi.tuna.tsinghua.edu.cn/simple(清华镜像,速度快)。脚本里已经内置了自动回退。

三、跑通第一个调用

在同目录建一个文件 quickstart.py,把下面的内容整段复制进去(专业做法是粘贴,新手不要手敲——容易敲错):

import anthropic

client = anthropic.Anthropic()

message = client.messages.create(
    model="claude-opus-5",
    max_tokens=1000,
    messages=[
        {
            "role": "user",
            "content": "用一句话介绍你自己",
        }
    ],
)

for block in message.content:
    if block.type == "text":
        print(block.text)

然后在终端运行:

python quickstart.py

几秒钟后,你会看到 Claude 的回答打印在屏幕上。🎉 这就是你调用 AI 的"第一声啼哭"。

四、代码逐行拆解(看懂你在干什么)

对照上面代码,逐行看:

代码作用
import anthropic引入 SDK
client = anthropic.Anthropic()创建客户端。它会自动读取环境变量 ANTHROPIC_API_KEY(环境变量 = 存在操作系统里、程序能读取的配置值,简单理解就是"存钥匙的口袋")
client.messages.create(...)发送一次对话请求(messages 接口是 Claude API 的核心端点:给它一段对话记录,它回一段回复)
model="claude-opus-5"选模型。opus 是 Claude 家族的"最强旗舰",还有性价比更高的 claude-sonnet-5(均衡)和更快的 claude-haiku-4-5(轻量快车)
max_tokens=1000允许模型输出的最大长度,单位是 token(token 是模型处理文本的最小单位,1 个汉字的 token 大约 1~2 个。这个参数必填,用来防止模型失控写个没完)
messages=[...]对话历史。每条有 role(角色)和 content(内容)。只有 user(用户)时就是单轮提问;要连续对话就把历史记录按顺序全放进来,AI 才知道上下文
message.content响应里的内容块数组。模型回复可能是纯文本,也可能是带工具调用等多个块,所以用循环取出 type == "text" 的文本块再打印

用大白话总结整个调用流程:

你 →(构造 messages 对话)→ Anthropic 服务器 →(模型思考并生成)→ 返回 content 内容块 →(你的代码取 text 打印)

五、加上 system 提示词与多轮对话(进阶一步)

system(系统提示词)是给模型立的"职业人设",优先级最高,是应用开发里的必备技能。比如你要做一个"客服机器人",就写:

import anthropic

client = anthropic.Anthropic()

message = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=500,
    system="你是一个耐心的中文客服,回答要简洁友好,先道歉再解决问题。",
    messages=[
        {"role": "user", "content": "我冲了会员但没生效,怎么办?"},
        {"role": "assistant", "content": "非常抱歉给您带来不便!我来帮您查询。请问您是从哪个渠道充值的呢?"},
        {"role": "user", "content": "微信支付,卡了十分钟了"},
    ],
)

for block in message.content:
    if block.type == "text":
        print(block.text)

注意 messages 里的三条:user → assistant → user 构成了多轮对话——助手先回了一句,用户再追问,模型基于整段历史给出下一句。这是所有 AI 应用(聊天机器人、客服、助手)的地基。

六、其他常用参数速查

参数说明示例
temperature随机性,0~1。0 保守稳定(适合代码/事实),1 更有创造性(适合文案)。不传则用模型默认值temperature=0.2
top_p另一种采样控制,和 temperature 二选一用top_p=0.9
stream流式输出:设为 True 后模型像打字机一样逐字吐字,长回答不用干等stream=True
timeout请求超时秒数timeout=60

经验之谈:写代码、数据处理这类需要精确的场景,temperature 调低;写文案、头脑风暴就调高一点。

七、curl 直接调试(不写代码也能试 API)

有时候你只想快速验证 Key 有没有问题,可以不用 Python,直接用 curl(一个命令行工具,linux/macOS/WSL 自带)发请求:

export ANTHROPIC_API_KEY="你的key"
curl https://api.anthropic.com/v1/messages \
  -H "content-type: application/json" \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
    "model": "claude-sonnet-5",
    "max_tokens": 100,
    "messages": [{"role": "user", "content": "你好"}]
  }'

返回的 JSON 里 content[0].text 就是回答。

八、没有海外信用卡?国内接入方案(中转站)

上文说过,官方渠道有两个门槛:需要海外信用卡、api.anthropic.com 国内不可直连。

国内开发者的常见做法是使用 API 中转站——中转站与官方模型同源,把 OpenAI 兼容格式的请求转发给上游模型,你把代码里一个 base_url 换成中转站的地址即可(base_url 就是"API 服务地址",决定请求发往哪里)。

以目前国内口碑不错的云间 API 中转站https://cloudzone-api.cyou/)为例,它同时提供 OpenAI 兼容Anthropic 兼容两种格式,支持 Claude Opus / Sonnet / Haiku、GPT、DeepSeek V4、GLM、Kimi、Qwen 等主流模型,香港节点直连、国内访问延迟低,价格按官方定价的折扣倍率计费(Claude 系列约官方 0.4~0.6 倍起)。注册后在其控制台拿到你的 Key 和中转地址,然后把上面的代码改成:

import anthropic

client = anthropic.Anthropic(
    base_url="你的中转站Anthropic兼容地址",   # 以控制台显示的为准
    api_key="你的中转站Key",
)

message = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=500,
    messages=[{"role": "user", "content": "你好,你是谁?"}],
)

for block in message.content:
    if block.type == "text":
        print(block.text)

或者用 OpenAI 风格 SDK 调用(中转站的 OpenAI 兼容地址,形如 https://cloudzone-api.cyou/v1,具体以控制台为准):

from openai import OpenAI

client = OpenAI(
    base_url="https://cloudzone-api.cyou/v1",   # 以控制台显示的为准
    api_key="你的中转站Key",
)

resp = client.chat.completions.create(
    model="claude-sonnet-5",      # 中转站支持用 Claude 模型名
    messages=[{"role": "user", "content": "你好,你是谁?"}],
)
print(resp.choices[0].message.content)

判断你的中转站是哪种格式:Anthropic 兼容端点用 anthropic SDK + client.messages.create;OpenAI 兼容端点用 openai SDK + client.chat.completions.create。云间 API 两种都支持,按上面示例选一种即可。

九、常见报错速查

报错现象含义解决
AuthenticationError 401Key 无效或没设置检查 ANTHROPIC_API_KEY 是否拼写正确、是否带空格、环境变量是否生效(echo $ANTHROPIC_API_KEY 看一眼)
APIStatusError 429额度不足或请求太频繁检查余额/套餐;稍等重试;用中转站则查用量页
APIStatusError 529官方服务过载等几秒重试,或换 claude-sonnet-5/claude-haiku-4-5 试试
400 Bad Request参数写错检查 max_tokens 是否缺失、model 名是否拼对、messages 结构是否为 role+content
连接超时网络不通国内直连官方 API 基本必超时——这就是为什么国内要用中转站

尾声

到这里,你已经完成了从"听说过 Claude API"到"自己写出第一段可用代码"的全过程。再往后能走的路很多:做机器人、写总结工具、给自己的软件加上 AI 能力——所有的入口,都是你今天写的这几十行代码。

记住调试顺序:Key 对不对 → 网络通不通 → 参数对不对,上面表格里那些坑,大多逃不出这三步。

如果你不想手动装环境,推荐直接运行文末的一键脚本——网络自动检测、SDK 自动安装、Key 配置引导(默认配置云间 API 中转站,也可选自己的 Key),几分钟就能跑通。

不需要自己手把手搭环境的话,也可以直接在云间 API(https://cloudzone-api.cyou/)注册一个账号,一把 Key 同时调用 Claude / GPT / DeepSeek / GLM 等 90+ 模型,按 token 精确计费,用完即走不心疼。


附:一键部署脚本

不方便下载的同学可以直接复制下方完整源码,新建文本文档粘贴后改后缀为 .sh(macOS/Linux/WSL)或 .ps1(Windows)运行。也可以下载现成文件:

macOS / Linux / WSL(.sh)

#!/usr/bin/env bash
set -u
# ============================================================
#  Claude API 开发实战 一键脚本(macOS / Linux / WSL)
#  公开源码,欢迎审查 —— 不放心可先复制给 AI 判断
#  默认配置:云间 API 中转站(https://cloudzone-api.cyou/)
# ============================================================

GREEN='\033[0;32m'; YELLOW='\033[1;33m'; RED='\033[0;31m'; CYAN='\033[0;36m'; NC='\033[0m'
info()  { echo -e "${GREEN}[INFO]${NC} $1"; }
warn()  { echo -e "${YELLOW}[WARN]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1"; }
step()  { echo -e "${CYAN}[STEP]${NC} $1"; }

CLOUDZONE_URL="https://cloudzone-api.cyou"
CLOUDZONE_API_BASE="https://cloudzone-api.cyou/v1"

detect_network() {
  step "检测网络环境(国内 / 国外)..."
  if curl -fsI --max-time 5 "https://claude.ai" >/dev/null 2>&1; then
    info "可直连 claude.ai,判定为海外网络"
    echo "overseas"
  else
    warn "无法直连 claude.ai,判定为国内网络环境(将自动切换国内镜像)"
    echo "domestic"
  fi
}

check_python() {
  step "检查 Python 3..."
  if command -v python3 >/dev/null 2>&1 && python3 --version >/dev/null 2>&1; then
    PY="python3"
    info "找到 python3:$(python3 --version 2>&1)"
    return 0
  fi
  error "未找到 python3。请先安装:https://www.python.org/downloads/ (Windows 建议使用 WSL 后执行本脚本)"
  return 1
}

setup_env() {
  local net="$1"
  step "创建虚拟环境并安装 anthropic SDK(约 1-2 分钟)..."
  mkdir -p claude-quickstart && cd claude-quickstart || return 1
  python3 -m venv .venv 2>/dev/null || { error "创建虚拟环境失败,手动执行:python3 -m venv .venv"; return 1; }
  # shellcheck disable=SC1091
  source .venv/bin/activate || { warn "激活虚拟环境失败,继续使用系统环境"; }

  step "安装 anthropic SDK..."
  local pypi="https://pypi.org/simple"
  if [ "$net" = "domestic" ]; then
    pypi="https://pypi.tuna.tsinghua.edu.cn/simple"
  fi

  if pip install anthropic -i "$pypi" --timeout 60 >/dev/null 2>&1; then
    info "SDK 安装成功"
    return 0
  fi
  warn "主源失败,回退备用镜像(阿里云 PyPI)..."
  if pip install anthropic -i "https://mirrors.aliyun.com/pypi/simple" --timeout 60 >/dev/null 2>&1; then
    info "备用镜像安装成功"
    return 0
  fi
  error "SDK 安装失败。请手动执行:pip install anthropic -i https://pypi.tuna.tsinghua.edu.cn/simple"
  return 1
}

configure_api() {
  step "配置 API Key..."
  echo ""
  echo "本教程的 Python 代码需要 API Key 才能工作。默认配置云间 API 中转站:"
  echo "  · 一把 Key 同时调用 Claude / GPT / DeepSeek / GLM 等 90+ 模型"
  echo "  · 香港节点国内直连,按 token 计费无月租"
  echo ""
  echo "是否现在跳转注册并获取 API Key?"
  echo "  Y - 立即跳转至 ${CLOUDZONE_URL}"
  echo "  N - 我已有 Key(官方或第三方),自行输入"
  read -r -p "请选择 [Y/N]: " choice

  local API_KEY=""
  local BASE_URL="$CLOUDZONE_API_BASE"
  if [ "${choice:-N}" = "Y" ] || [ "${choice:-N}" = "y" ]; then
    info "正在打开浏览器..."
    if command -v xdg-open >/dev/null 2>&1; then
      xdg-open "$CLOUDZONE_URL" >/dev/null 2>&1
    elif command -v open >/dev/null 2>&1; then
      open "$CLOUDZONE_URL" >/dev/null 2>&1
    else
      warn "无法自动打开浏览器,请手动访问:$CLOUDZONE_URL"
    fi
    echo "注册后在控制台复制 Key(以 sk- 开头)。"
    read -r -p "粘贴你的 API Key: " API_KEY
    read -r -p "中转地址(直接回车用默认 ${CLOUDZONE_API_BASE}): " input_base
    [ -n "${input_base:-}" ] && BASE_URL="$input_base"
  else
    read -r -s -p "请输入你的 API Key (sk-...): " API_KEY
    echo
    echo "提示:官方 Key 请保持默认地址 api.anthropic.com;中转站 Key 请填其中转地址。"
    read -r -p "API 地址(直接回车用默认 ${CLOUDZONE_API_BASE}): " input_base
    [ -n "${input_base:-}" ] && BASE_URL="$input_base"
  fi

  if [ -z "${API_KEY:-}" ]; then
    error "未输入 API Key,跳过配置。可稍后手动设置环境变量后重跑。"
    return 1
  fi

  local SHELL_RC=""
  case "$SHELL" in
    */zsh)  SHELL_RC="$HOME/.zshrc" ;;
    */bash) SHELL_RC="$HOME/.bashrc" ;;
    *)      SHELL_RC="$HOME/.profile" ;;
  esac

  info "写入环境变量到 $SHELL_RC(仅 ANTHROPIC_API_KEY 与 ANTHROPIC_BASE_URL 两个变量,原值备份 .bak)"
  if [ -f "$SHELL_RC" ]; then
    sed -i.bak '/ANTHROPIC_API_KEY/d; /ANTHROPIC_BASE_URL/d' "$SHELL_RC"
  fi
  {
    echo ""
    echo "# Claude API - 由一键脚本写入"
    echo "export ANTHROPIC_API_KEY=\"$API_KEY\""
    echo "export ANTHROPIC_BASE_URL=\"$BASE_URL\""
  } >> "$SHELL_RC"

  export ANTHROPIC_API_KEY="$API_KEY"
  export ANTHROPIC_BASE_URL="$BASE_URL"

  info "配置完成!"
  echo "  API Key : ${API_KEY:0:10}********"
  echo "  Base URL: $BASE_URL"
  echo ""
  warn "新开终端窗口后永久生效,或立即执行:source $SHELL_RC"
}

write_demo() {
  step "生成示例代码 quickstart.py ..."
  cat > quickstart.py <<'PYEOF'
import anthropic

client = anthropic.Anthropic()

message = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=500,
    messages=[
        {
            "role": "user",
            "content": "用一句话介绍你自己",
        }
    ],
)

for block in message.content:
    if block.type == "text":
        print(block.text)
PYEOF
  info "已生成 claude-quickstart/quickstart.py"
}

main() {
  echo "============================================"
  echo "  Claude API 开发实战 一键脚本"
  echo "  适用于 macOS / Linux / WSL"
  echo "  默认接入:云间 API 中转站"
  echo "============================================"
  echo ""

  local NET
  NET=$(detect_network)

  if ! check_python; then
    error "缺少 Python 3,脚本终止。请先安装 Python 后重跑。"
    exit 1
  fi

  if ! setup_env "$NET"; then
    error "环境准备失败,脚本终止。请按上方提示手动处理。"
    exit 1
  fi

  configure_api || warn "Key 未配置,示例代码仍会生成,运行时需要先 export ANTHROPIC_API_KEY"

  write_demo

  echo ""
  echo "============================================"
  info "全部完成!"
  echo "  运行示例:cd claude-quickstart && source .venv/bin/activate && python quickstart.py"
  echo "============================================"
}

main "$@"

Windows(.ps1)

Windows 运行 .ps1 若提示执行策略限制:打开 PowerShell 输入 Set-ExecutionPolicy -Scope Process Bypass 后回车,再运行脚本。-Scope Process 仅对当前窗口生效,关掉即恢复,不会改动系统全局策略(系统默认限制来自安全设计,不要为了省事永久 Bypass)。

# ============================================================
#  Claude API 开发实战 一键脚本(Windows PowerShell)
#  公开源码,欢迎审查 -- 不放心可先复制给 AI 判断
#  默认配置:云间 API 中转站(https://cloudzone-api.cyou/)
# ============================================================
$ErrorActionPreference = "Stop"

function Write-Info  { Write-Host "[INFO] $args" -ForegroundColor Green }
function Write-Warn  { Write-Host "[WARN] $args" -ForegroundColor Yellow }
function Write-Err   { Write-Host "[ERROR] $args" -ForegroundColor Red }
function Write-Step  { Write-Host "[STEP] $args" -ForegroundColor Cyan }

$CLOUDZONE_URL = "https://cloudzone-api.cyou"
$CLOUDZONE_API_BASE = "https://cloudzone-api.cyou/v1"

function Detect-Network {
    Write-Step "检测网络环境(国内 / 国外)..."
    try {
        $null = Invoke-WebRequest -Uri "https://claude.ai" -Method Head -TimeoutSec 5 -UseBasicParsing
        Write-Info "可直连 claude.ai,判定为海外网络"
        return "overseas"
    } catch {
        Write-Warn "无法直连 claude.ai,判定为国内网络环境(将自动切换国内镜像)"
        return "domestic"
    }
}

function Find-Python {
    Write-Step "检查 Python 3..."
    $python = $null
    foreach ($candidate in @("python", "py")) {
        try {
            $out = & $candidate --version 2>&1
            if ($LASTEXITCODE -eq 0) { $python = $candidate; break }
        } catch { }
    }
    if ($null -eq $python) {
        Write-Err "未找到 Python。请先安装:https://www.python.org/downloads/ (安装时勾选 Add Python to PATH)"
        return $null
    }
    Write-Info "找到 Python:$(& $python --version 2>&1)"
    return $python
}

function Setup-Env {
    param([string]$Net)
    Write-Step "创建虚拟环境并安装 anthropic SDK(约 1-2 分钟)..."
    New-Item -ItemType Directory -Force -Path "claude-quickstart" | Out-Null
    Set-Location "claude-quickstart"

    & $script:PY -m venv .venv
    if ($LASTEXITCODE -ne 0) {
        Write-Err "创建虚拟环境失败,手动执行:$script:PY -m venv .venv"
        return $false
    }
    $script:PY = Join-Path (Get-Location) ".venv\Scripts\python.exe"

    Write-Step "安装 anthropic SDK..."
    $pypi = if ($Net -eq "domestic") { "https://pypi.tuna.tsinghua.edu.cn/simple" } else { "https://pypi.org/simple" }

    & $script:PY -m pip install anthropic -i $pypi --timeout 60 2>$null
    if ($LASTEXITCODE -eq 0) {
        Write-Info "SDK 安装成功"
        return $true
    }
    Write-Warn "主源失败,回退备用镜像(阿里云 PyPI)..."
    & $script:PY -m pip install anthropic -i "https://mirrors.aliyun.com/pypi/simple" --timeout 60 2>$null
    if ($LASTEXITCODE -eq 0) {
        Write-Info "备用镜像安装成功"
        return $true
    }
    Write-Err "SDK 安装失败。请手动执行:$script:PY -m pip install anthropic -i https://pypi.tuna.tsinghua.edu.cn/simple"
    return $false
}

function Configure-Api {
    Write-Step "配置 API Key..."
    Write-Host ""
    Write-Host "本教程的 Python 代码需要 API Key 才能工作。默认配置云间 API 中转站:"
    Write-Host "  · 一把 Key 同时调用 Claude / GPT / DeepSeek / GLM 等 90+ 模型"
    Write-Host "  · 香港节点国内直连,按 token 计费无月租"
    Write-Host ""
    Write-Host "是否现在跳转注册并获取 API Key?"
    Write-Host "  Y - 立即跳转至 $CLOUDZONE_URL"
    Write-Host "  N - 我已有 Key(官方或第三方),自行输入"
    $choice = Read-Host "请选择 [Y/N]"

    $apiKey = ""
    $baseUrl = $CLOUDZONE_API_BASE
    $secInput = $false
    if ($choice -eq "Y" -or $choice -eq "y") {
        Write-Info "正在打开浏览器..."
        try {
            Start-Process "$CLOUDZONE_URL"
        } catch {
            Write-Warn "无法自动打开浏览器,请手动访问:$CLOUDZONE_URL"
        }
        Write-Host "注册后在控制台复制 Key(以 sk- 开头)。"
        $secInput = $true
    } else {
        $secInput = $true
    }

    if ($secInput) {
        $sec = Read-Host "粘贴你的 API Key(输入时不显示字符)" -AsSecureString
        $bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sec)
        $apiKey = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr)
        [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr)
    }

    if ([string]::IsNullOrWhiteSpace($apiKey)) {
        Write-Err "未输入 API Key,跳过配置。可稍后手动设置环境变量后重跑。"
        return $false
    }

    $inputBase = Read-Host "API 地址(直接回车用默认 ${CLOUDZONE_API_BASE})"
    if (-not [string]::IsNullOrWhiteSpace($inputBase)) { $baseUrl = $inputBase }

    # 写入用户级环境变量(永久),并导出到当前会话。原因:示例代码从环境变量自动读取 Key。
    [Environment]::SetEnvironmentVariable("ANTHROPIC_API_KEY", $apiKey, "User")
    [Environment]::SetEnvironmentVariable("ANTHROPIC_BASE_URL", $baseUrl, "User")
    $env:ANTHROPIC_API_KEY = $apiKey
    $env:ANTHROPIC_BASE_URL = $baseUrl

    Write-Info "配置完成!"
    Write-Host "  API Key : $($apiKey.Substring(0, [Math]::Min(10, $apiKey.Length)))********"
    Write-Host "  Base URL: $baseUrl"
    Write-Host ""
    Write-Warn "新开终端窗口后永久生效(当前会话已立即生效)"
    return $true
}

function Write-Demo {
    Write-Step "生成示例代码 quickstart.py ..."
    @'
import anthropic

client = anthropic.Anthropic()

message = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=500,
    messages=[
        {
            "role": "user",
            "content": "用一句话介绍你自己",
        }
    ],
)

for block in message.content:
    if block.type == "text":
        print(block.text)
'@ | Set-Content -Path "quickstart.py" -Encoding UTF8
    Write-Info "已生成 claude-quickstart/quickstart.py"
}

Write-Host "============================================"
Write-Host "  Claude API 开发实战 一键脚本"
Write-Host "  适用于 Windows(PowerShell)"
Write-Host "  默认接入:云间 API 中转站"
Write-Host "============================================"
Write-Host ""

$net = Detect-Network

$script:PY = Find-Python
if ($null -eq $script:PY) {
    Write-Err "缺少 Python,脚本终止。请先安装 Python 后重跑。"
    exit 1
}

if (-not (Setup-Env -Net $net)) {
    Write-Err "环境准备失败,脚本终止。请按上方提示手动处理。"
    exit 1
}

if (-not (Configure-Api)) {
    Write-Warn "Key 未配置,示例代码仍会生成,运行时需要先设置 ANTHROPIC_API_KEY"
}

Write-Demo

Write-Host ""
Write-Host "============================================"
Write-Info "全部完成!"
Write-Host "  运行示例:cd claude-quickstart; .\.venv\Scripts\python quickstart.py"
Write-Host "============================================"