# Anthropic SDK (/docs/cookbook/sdk/anthropic-sdk)









把 Praxis 接入 Anthropic 官方 SDK——已有一切 Anthropic 代码不用换库，只改一个 `baseURL`。本页 Node 与 Python 均实测（其余语言同形）。

每一步都标了**期望结果**：照做即可，也可以把本页直接交给能操作电脑的 AI 助手，让它替你完成安装、运行与验证。

## 你将完成 [#你将完成]

* 用 Anthropic SDK 调 Praxis 的模型，拿到回复与用量
* 完成标志：`hello.mjs` 打印中文回复与 `usage`，`stream.mjs` 逐字打印回复
* 预计耗时：**3 分钟**（不含 Node.js 安装）
* 支持协议：Anthropic 兼容（`/anthropic`）

## 前提 [#前提]

开始前逐项确认：

* **一个 Praxis API Key**（`sk-praxis-` 开头）。没有就到 [控制台 → API Keys](https://console.deepraxis.ai/keys&#x29; 创建：点「创建 Key」，名称必填，有效期默认 90 天（可改永久）；创建成功弹窗会展示完整 Key 并带「复制 Key」，关闭后列表只显示掩码，随时可点行内复制图标重新获取完整 Key。新账号自带 **$1 免费额度**。完整流程见[快速开始](/docs/cloud/services/model/quickstart)。
* **Node.js 18 或更高**（`node --version` 检查；用 [Bun](https://bun.sh) 亦可）。
* **安装 SDK**——注意包名是 `@anthropic-ai/sdk`（npm 上的 `anthropic` 是同名的占位包，不是它）：

  ```bash
  npm install @anthropic-ai/sdk
  ```

  期望：安装无报错。

## 第一个请求 [#第一个请求]

先把 Key 放进环境变量（`export PRAXIS_API_KEY=sk-praxis-…`；PowerShell：`$env:PRAXIS_API_KEY="…"`），再新建 `hello.mjs`：

```javascript
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  baseURL: "https://api.deepraxis.ai/anthropic",
  apiKey: "sk-praxis-你的Key",
});

const message = await client.messages.create({
  model: "deepseek-flash",
  max_tokens: 256,
  messages: [{ role: "user", content: "用一句话介绍你自己" }],
});

console.log(message.content.find((b) => b.type === "text")?.text);
console.log(message.usage);
```

运行：

```bash
node hello.mjs
```

期望：打印一段中文回复，随后是 `usage`——至少包含 `input_tokens` / `output_tokens&#x60;，SDK 还会附带缓存、服务分层等字段。两处注意：**`max_tokens` 必填**（Anthropic 协议的要求）；`content` 是块数组，取 `type` 为 `text` 的块是回复文本——推理模型前面可能先带 `thinking` 块。

<img alt="终端运行示例脚本的真实输出" src="__img0" />

## Python 版 [#python-版]

```bash
pip install anthropic
```

新建 `hello.py`：

```python
import os
from anthropic import Anthropic

client = Anthropic(
    base_url="https://api.deepraxis.ai/anthropic",
    api_key=os.environ["PRAXIS_API_KEY"],
)

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

print(next(b.text for b in message.content if b.type == "text"))
print(message.usage)
```

运行 `python3 hello.py`。期望：打印中文回复，随后是 `Usage`——同样必填 `max_tokens`，`content` 是块数组。流式用 `client.messages.stream(...)` 上下文管理器，与 Node 同形。

<img alt="Python 版示例的真实输出" src="__img1" />

## 流式响应 [#流式响应]

新建 `stream.mjs`：

```javascript
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  baseURL: "https://api.deepraxis.ai/anthropic",
  apiKey: process.env.PRAXIS_API_KEY,
});

const stream = client.messages.stream({
  model: "deepseek-flash",
  max_tokens: 256,
  messages: [{ role: "user", content: "用两句话解释什么是 API" }],
});

for await (const event of stream) {
  if (event.type === "content_block_delta" && event.delta.type === "text_delta") {
    process.stdout.write(event.delta.text);
  }
}
console.log();
```

期望：回复逐字打印、以换行收尾。流式支持按模型路由而异，个别路由可能暂未开放（报 `STREAMING_UNPROVEN` 时去掉流式或换模型重试）。

<img alt="终端运行流式示例：回复逐字输出" src="__img2" />

## 常见问题 [#常见问题]

| 症状                                                                             | 原因                | 解法                                                      |
| ------------------------------------------------------------------------------ | ----------------- | ------------------------------------------------------- |
| 导入名为 `anthropic` 的包后运行失败（报错指向 `node_modules/anthropic/index.js` 缺失或 `main` 无效） | 装到了 npm 上的同名占位包   | 卸掉重装正主：卸载 `anthropic` 后安装 `@anthropic-ai/sdk`           |
| 401 / 无效令牌                                                                     | Key 复制不完整或未设进环境变量 | 重新完整复制（注意 `sk-praxis-` 前缀）；用 `echo $PRAXIS_API_KEY` 检查  |
| 400 提示缺 `max_tokens`                                                           | Anthropic 协议必填该参数 | 在 `messages.create` 里加上 `max_tokens`（如 256）             |
| 400 `STREAMING_UNPROVEN`                                                       | 该模型路由暂未开放流式       | 去掉流式用普通调用，或换个模型重试                                       |
| 模型不存在                                                                          | 模型 ID 与目录不一致      | 到[控制台 → 模型](https://console.deepraxis.ai/models)复制确切 ID |

## 进阶 [#进阶]

* **查这次调用花了多少钱**：非流式 `message.usage.cost`（Python SDK）直接返回费用；流式在 `message_delta` 事件的 `usage.cost` 上（`get_final_message().usage` 不带该字段）。JS SDK 的 `Usage` 类型不声明 cost（运行时字段仍在，`as any` 可读），Node 用户也可看[控制台 → 用量与费用](https://console.deepraxis.ai/usage)逐笔明细，或走 [OpenAI SDK](/docs/cookbook/sdk/openai-sdk)
* **换模型**：改 `model` 字段即可，Claude 系旗舰填 `claude-opus-5`；`deepseek-flash` 是滚动入口始终指向最新一代 Flash
* **拿思维链**：推理模型的 `content` 里 `type` 为 `thinking` 的块即思维链，按需读取

## 相关食谱 [#相关食谱]

* [OpenAI SDK](/docs/cookbook/sdk/openai-sdk)（OpenAI 协议姊妹篇）· [LangChain](/docs/cookbook/sdk/langchain) · [Vercel AI SDK](/docs/cookbook/sdk/vercel-ai-sdk)
* 不想写代码？看 [Cherry Studio](/docs/cookbook/chat-clients/cherry-studio) · [Claude Code](/docs/cookbook/coding-agents/claude-code)
