# Vercel AI SDK (/docs/cookbook/sdk/vercel-ai-sdk)







把 Praxis 接入 [Vercel AI SDK](https://ai-sdk.dev)——React/Vue/Svelte 里做 AI 应用的事实标准库。自定义 provider 两个参数即接通，`generateText` / `streamText` 及全家能力照常用。本页以 Node 实测。

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

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

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

## 前提 [#前提]

开始前逐项确认：

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

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

  期望：安装无报错。空目录直接装即可，无需先 `npm init`。

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

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

```javascript
import { createOpenAI } from "@ai-sdk/openai";
import { generateText } from "ai";

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

const { text, usage } = await generateText({
  model: praxis("deepseek-flash"),
  prompt: "用一句话介绍你自己",
});

console.log(text);
console.log(usage);
```

运行：

```bash
node hello.mjs
```

期望：打印一段中文回复，随后是 `usage` 对象——驼峰形态，含 `inputTokens` / `outputTokens` / `totalTokens` 与 `raw` 原始字段；推理模型的 `reasoningTokens` 在 `outputTokenDetails` 明细里。

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

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

新建 `stream.mjs`：

```javascript
import { createOpenAI } from "@ai-sdk/openai";
import { streamText } from "ai";

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

const stream = streamText({
  model: praxis("deepseek-flash"),
  prompt: "用两句话解释什么是 API",
});

for await (const chunk of stream.textStream) {
  process.stdout.write(chunk);
}
console.log();
```

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

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

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

| 症状                       | 原因                           | 解法                                                             |
| ------------------------ | ---------------------------- | -------------------------------------------------------------- |
| 401 / 无效令牌               | Key 复制不完整或未设进环境变量            | 重新完整复制（注意 `sk-praxis-` 前缀）；用 `echo $PRAXIS_API_KEY` 检查         |
| 404 / 路径不存在              | `baseURL` 少了 `/openai/v1` 后缀 | 必须是 `https://api.deepraxis.ai/openai/v1`（以 `/v1` 结尾）           |
| 400 `STREAMING_UNPROVEN` | 该模型路由暂未开放流式                  | 去掉流式用 `generateText`，或换个模型重试                                   |
| 模型不存在                    | 模型 ID 与目录不一致                 | 到[控制台 → 模型 → 模型目录](https://console.deepraxis.ai/models)复制确切 ID |

## 进阶 [#进阶]

* **前端聊天组件**：AI SDK 的 `useChat` 等 React Hooks 与后端 `streamText` 天然配套（见 [AI SDK 官方文档](https://ai-sdk.dev)），provider 写法与本页相同
* **查这次调用花了多少钱**：AI SDK 的 `usage` 不带费用；用 [OpenAI SDK](/docs/cookbook/sdk/openai-sdk) 那条路 `usage.cost` 直接返回，或看[控制台 → 用量与费用](https://console.deepraxis.ai/usage)
* **换模型**：改 `praxis("…")` 里的模型 ID；`deepseek-flash` 是滚动入口始终指向最新一代 Flash

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

* [OpenAI SDK](/docs/cookbook/sdk/openai-sdk) · [Anthropic SDK](/docs/cookbook/sdk/anthropic-sdk) · [LangChain](/docs/cookbook/sdk/langchain)
* 不想写代码？看 [Cherry Studio](/docs/cookbook/chat-clients/cherry-studio) · [Codex](/docs/cookbook/coding-agents/codex)
