# OpenAI SDK (/docs/cookbook/sdk/openai-sdk)









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

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

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

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

## 前提 [#前提]

开始前逐项确认：

* **一个 Praxis API Key**（`sk-praxis-` 开头）。没有就到 [控制台 → API Keys](https://console.deepraxis.ai/keys&#x29; 创建：点「创建 Key」，名称必填，有效期默认 90 天（可改永久），创建后立即复制保存；之后也随时可在 Key 列表行点复制图标重新获取完整 Key。新账号自带 **$1 免费额度**。完整流程见[快速开始](/docs/cloud/services/model/quickstart)。
* **Node.js 18 或更高**（`node --version` 检查；用 [Bun](https://bun.sh) 亦可）。
* **安装 SDK**：在项目目录里

  ```bash
  npm install openai
  ```

  期望：安装无报错，`node -e "require('openai')"` 不抛错。

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

新建 `hello.mjs`，原样粘贴（把 Key 换成你的）：

```javascript
import OpenAI from "openai";

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

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

console.log(completion.choices[0].message.content);
console.log(completion.usage);
```

运行：

```bash
node hello.mjs
```

期望：打印一段中文回复，随后是 `usage` 对象——注意里面有 `cost` 字段，**这次调用花了多少钱直接给你算好**（平台按次计费，控制台[用量与费用](https://console.deepraxis.ai/usage)同口径）。

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

建议把 Key 放进环境变量而不是写进代码：`export PRAXIS_API_KEY=sk-praxis-…`（PowerShell：`$env:PRAXIS_API_KEY="…"`），然后 `apiKey: process.env.PRAXIS_API_KEY`。

## Python 版 [#python-版]

```bash
pip install openai
```

先设置环境变量 `export PRAXIS_API_KEY=sk-praxis-你的Key`（PowerShell：`$env:PRAXIS_API_KEY="你的Key"`），再新建 `hello.py`：

```python
import os
from openai import OpenAI

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

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

print(completion.choices[0].message.content)
print(completion.usage)
```

运行 `python3 hello.py`。期望：打印中文回复，随后是 `CompletionUsage`——其中 `cost` 字段直接给出本次费用。流式用法与 Node 同形（`stream=True` 后迭代 `delta.content`）。

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

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

新建 `stream.mjs`：

```javascript
import OpenAI from "openai";

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

const stream = await client.chat.completions.create({
  model: "glm-5.3-flash",
  messages: [{ role: "user", content: "用两句话解释什么是 API" }],
  stream: true,
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
console.log();
```

期望：回复逐字打印、以换行收尾——这就是流式。示例用 `glm-5.3-flash`；流式支持按模型路由而异，个别路由可能暂未开放，详见下方常见问题。

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

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

| 症状                       | 原因                  | 解法                                                      |
| ------------------------ | ------------------- | ------------------------------------------------------- |
| 401 / 无效令牌               | Key 复制不完整或未设进环境变量   | 重新完整复制（注意 `sk-praxis-` 前缀）；用 `echo $PRAXIS_API_KEY` 检查  |
| 400 `STREAMING_UNPROVEN` | 该模型暂未开放流式（逐路由开通，偶发） | 去掉 `stream: true`，或换个模型重试                               |
| 模型不存在                    | 模型 ID 与目录不一致        | 到[控制台 → 模型](https://console.deepraxis.ai/models)复制确切 ID |
| 连接超时                     | 本地网络                | 重试或换网络；也可先用下面的命令测网关连通（期望 200）                           |

连通性自检：

```bash
curl -sS https://api.deepraxis.ai/openai/v1/models \
  -H "Authorization: Bearer $PRAXIS_API_KEY" -o /dev/null -w "%{http_code}"
```

期望输出 `200`。

## 进阶 [#进阶]

* **查这次调用花了多少钱**：非流式调用的 `usage.cost` 直接返回费用，无需自行按 token 换算；流式的费用在最后一个 chunk 的 `usage` 里（该 chunk 的 `choices` 为空、含 `cost`）——`stream_options: { include_usage: true }` 可加可不加，平台两种情况都会回；[控制台 → 用量与费用](https://console.deepraxis.ai/usage)有逐笔明细
* **列出可用模型**：`await client.models.list()`——和[控制台 → 模型](https://console.deepraxis.ai/models)同源
* **换模型**：改 `model` 字段即可；`deepseek-flash` 是滚动入口始终指向最新一代 Flash，`deepseek-v4-flash` 是固定版本快照

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

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