2026-10-14
Cookbook 只回答一个问题:怎么把 Praxis 接进你手上的东西。概念与架构在开发者文档,端点与参数在 API,这里只放可复制的接入步骤。
绝大多数工具只需要三件事:Base URL、API Key、模型 ID。
| 你在用什么 | 推荐入口 | 协议 |
|---|---|---|
| Claude Code、Codex、Gemini CLI 等编程 Agent | 客户端与 Coding Agent | Anthropic / OpenAI / Google |
| Cursor、Windsurf、Trae 等 IDE | IDE 接入 | OpenAI 兼容 |
| Cherry Studio、Open WebUI、Chatbox 等聊天客户端 | 聊天客户端 | OpenAI 兼容 |
| Dify、Coze、FastGPT、n8n 等应用平台 | 框架与应用 | OpenAI 兼容 |
| 自己写的服务端代码 | 模型任务 | 任意协议 |
| Cloudflare Workers、Next.js 等运行时 | 部署与运行时 | 服务端代理 |
| 食谱 | 解决什么 |
|---|---|
| 客户端与 Coding Agent | 把 Praxis 接进已经在用的工具 |
| 框架与应用 | SDK、低代码平台与自己的应用 |
| 模型任务 | 第一个请求、流式、结构化输出、多模态 |
| 智能体与沙箱 | Managed Agent、沙箱执行、浏览器与 RAG |
| 部署与运行时 | Cloudflare Workers、Next.js、服务端代理 |
| 生产化 | Key 安全、重试降级、成本与观测 |
Authorization: Bearer <key>,详见鉴权与 Key。https://api.deepraxis.ai。deepseek-v4-flash。curl https://api.deepraxis.ai/openai/v1/chat/completions \
-H "Authorization: Bearer $PRAXIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"deepseek-v4-flash","messages":[{"role":"user","content":"你好"}]}'遇到 401 / 404 / 模型不存在?先看限流与错误。
把 Praxis 接入 Claude Code,在终端里用你的 Key 驱动编程智能体——改代码、跑命令、答问题。
每一步都标了期望结果:照做即可,也可以把本页直接交给能操作电脑的 AI 助手,让它替你完成安装、配置与验证。
claude 命令调用 Praxis 的模型claude -p "…" 收到模型回复开始前逐项确认:
一个 Praxis API Key(sk-praxis- 开头)。没有就到 控制台 → API Keys 创建:点「创建 Key」,弹窗中名称必填,有效期默认 90 天(可改永久),点创建后立即复制保存;之后也随时可在 Key 列表行点「复制」重新获取完整 Key。新账号自带 $1 免费额度。完整流程见快速开始。
Node.js 18 或更高。终端运行 node --version 检查;没有就到 nodejs.org 装 LTS 版。
安装 Claude Code:
npm install -g @anthropic-ai/claude-code期望:claude --version 输出版本号(本页以 2.1.211 为准)。
第 1 步:写入配置文件
创建 ~/.claude/settings.json(Windows 原生版为 %USERPROFILE%\.claude\settings.json),填入:
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.deepraxis.ai/anthropic",
"ANTHROPIC_AUTH_TOKEN": "sk-praxis-你的Key"
},
"model": "deepseek-flash"
}两处说明:
model 必须指定。Claude Code 默认请求的模型不在 Praxis 目录里,不指定会在首次对话时报「Model does not exist」。deepseek-flash 是平台示例模型——便宜、快、中英文都好;目录里的其他模型同样可填。ANTHROPIC_AUTH_TOKEN,不是 ANTHROPIC_API_KEY——后者是官方直连时用的,配网关时无效。期望:文件保存即生效,无需重启任何服务。

第 2 步(可选):临时会话不落盘
不想把 Key 写进文件时,可以用一次性环境变量:
ANTHROPIC_BASE_URL=https://api.deepraxis.ai/anthropic \
ANTHROPIC_AUTH_TOKEN=sk-praxis-你的Key \
claude --model deepseek-flash -p "你好"期望:收到中文回复。Windows PowerShell 用户不必用此方式,直接按第 1 步写入配置文件即可。在代码项目目录里运行时,回复可能带上该项目 AGENTS.md / CLAUDE.md 的上下文口吻,属正常。
claude -p "用中文回复四个字:连接成功"期望:终端直接输出 连接成功——收到回复即接入成功。

去掉 -p 进入交互模式,就是完整的编程智能体工作台。首次启动会先让你选界面主题,选完即进入主界面:

也可以在命令行完成等价验证。先设置变量(不然照抄 curl 会得到 401):
export PRAXIS_API_KEY=sk-praxis-你的Key以下命令为 macOS / Linux / WSL(bash)写法。Windows PowerShell 用户:上面 claude -p 已收到回复即接入成功,可跳过;如需命令行验证,先执行 $env:PRAXIS_API_KEY="你的Key",再把 curl 写成一行(去掉每行末尾的 \)。
curl https://api.deepraxis.ai/anthropic/v1/messages \
-H "x-api-key: $PRAXIS_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{"model": "deepseek-flash", "max_tokens": 256, "messages": [{"role": "user", "content": "你好"}]}'期望:HTTP 200 即接入成功。content 中 type 为 text 的块是回复文本——deepseek-flash 是推理模型,前面可能先带一段 thinking 块,属正常。
最后看一眼 控制台 → 用量与费用:刚才的调用已经记在账上——每一次调用都有账、可追溯。

| 症状 | 原因 | 解法 |
|---|---|---|
首次对话报「issue with the selected model … may not exist」或 Model … does not exist | 没有指定 model,Claude Code 用了它的默认模型,而它不在 Praxis 目录里 | 在 settings.json 加 "model",或命令加 --model,填目录内的模型(如 deepseek-flash) |
| 提示无效令牌 / 401 | Key 复制不完整或已吊销;或把 Key 写进了 ANTHROPIC_API_KEY | 重新完整复制(注意 sk-praxis- 前缀);确认写在 ANTHROPIC_AUTH_TOKEN;仍失败到控制台重建一个 |
Connection closed mid-response | 网络瞬断 | 直接重试一次即可 |
npm install -g 报权限错误 | 系统 npm 全局目录不可写 | 设用户级前缀重装,或改用官方脚本安装(命令见下);两法细节见 npm 官方指南 |
官方安装脚本:
curl -fsSL https://claude.ai/install.sh | bashsettings.json 的 model(或临时用 --model)。要 Claude 系旗舰就填 claude-opus-5;要固定版本快照用 deepseek-v4-flash,deepseek-flash 则始终指向最新一代 Flashclaude,它能读文件、改代码、执行命令——每一项动作都会先征求你的确认把 Praxis 接入 Codex,在终端里用你的 Key 驱动 OpenAI 的编程智能体——改代码、跑命令、答问题。密钥只存环境变量,不落配置文件。
每一步都标了期望结果:照做即可,也可以把本页直接交给能操作电脑的 AI 助手,让它替你完成安装、配置与验证。
codex 命令调用 Praxis 的模型codex exec "…" 收到模型回复开始前逐项确认:
一个 Praxis API Key(sk-praxis- 开头)。没有就到 控制台 → API Keys 创建:点「创建 Key」,弹窗中名称必填,有效期默认 90 天(可改永久),点创建后弹窗会展示完整 Key 一次——立即复制保存;之后也随时可在 Key 列表行点复制图标(悬停行时出现)重新获取完整 Key。若弹窗长时间停在「创建中…」,刷新列表确认 Key 已生成即可,行内复制同样能拿到完整 Key。新账号自带 $1 免费额度。完整流程见快速开始。
Node.js 18 或更高。终端运行 node --version 检查;没有就到 nodejs.org 装 LTS 版。
安装 Codex CLI:
npm install -g @openai/codex期望:codex --version 输出 codex-cli <版本号>(本页以 0.162.1 为准)。
第 1 步:写配置文件
创建 ~/.codex/config.toml(Windows 为 %USERPROFILE%\.codex\config.toml):
model = "deepseek-flash"
model_provider = "praxis"
[model_providers.praxis]
name = "Praxis"
base_url = "https://api.deepraxis.ai/openai/v1"
env_key = "PRAXIS_API_KEY"
wire_api = "responses"三处说明:
env_key 声明从环境变量 PRAXIS_API_KEY 读取,下一步设置。wire_api 必须是 responses:Codex 走的是 OpenAI Responses 协议,不是传统 chat completions。model 填目录内的模型 ID;deepseek-flash 是平台示例模型——便宜、快、中英文都好。期望:文件保存后,下一次启动的 codex 命令即使用新配置(已开着的会话需退出重进)。

第 2 步:设置密钥环境变量
macOS / Linux(WSL 同):
export PRAXIS_API_KEY=sk-praxis-你的Key想持久化就把这行加进 ~/.bashrc 或 ~/.zshrc。Windows PowerShell:$env:PRAXIS_API_KEY="你的Key"(或设置系统级环境变量后重开终端)。
期望:echo $PRAXIS_API_KEY 输出你的 Key(PowerShell 用 echo $env:PRAXIS_API_KEY)。
进入一个代码项目目录(git 仓库),运行:
codex exec "用中文回复四个字:连接成功"期望:回复正文包含 连接成功,末尾附 tokens used 统计——收到回复即接入成功。首次运行可能提示「Model metadata for deepseek-flash not found … Defaulting to fallback metadata」,这是自定义模型的正常回退提示,不影响使用。

去掉 exec 直接运行 codex,进入交互式工作台(出现版本横幅与输入框即进入;本页不验证此项)。
也可以在命令行完成等价验证。先设置变量(不然照抄 curl 会得到 401):
export PRAXIS_API_KEY=sk-praxis-你的Keycurl https://api.deepraxis.ai/openai/v1/responses \
-H "Authorization: Bearer $PRAXIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "deepseek-flash", "input": "你好", "max_output_tokens": 256}'期望:HTTP 200 即接入成功。output 里 type 为 text 的块是回复文本——deepseek-flash 是推理模型,前面可能先带 reasoning 块,属正常。
上述命令为 macOS / Linux / WSL(bash)写法。Windows PowerShell 用户:上面的
codex exec已成功即接入完成,可跳过;如需命令行验证,先$env:PRAXIS_API_KEY="你的Key",用curl.exe(PowerShell 的curl是别名,语法不同),并把命令并成一行(去掉行尾\)。
最后看一眼 控制台 → 用量与费用:刚才的调用已经记在账上——每一次调用都有账、可追溯。
| 症状 | 原因 | 解法 |
|---|---|---|
提示 Model metadata … not found | 自定义模型不在 Codex 内置元数据表里 | 正常回退提示,直接用;不影响对话与工具调用 |
| 提示无效令牌 / 401 | PRAXIS_API_KEY 未导出、复制不完整,或改完 shellrc 没重开终端 | echo $PRAXIS_API_KEY 检查;重新完整复制;重开终端让配置生效 |
报 Not inside a trusted directory … | 不在 git 仓库目录里运行 | 进项目目录运行;或临时加 --skip-git-repo-check |
报 unknown configuration field | Codex 版本较旧,不认识新配置键 | npm install -g @openai/codex 升级后重试 |
| 报模型不存在 | 模型 ID 与目录不一致 | 到控制台 → 模型复制确切 ID |
config.toml 的 model,或运行 codex -m <模型ID>。可选 deepseek-flash、deepseek-v4-flash。Codex 只能使用声明了 Responses 协议的模型;在模型目录打开模型详情,确认支持协议包含 Responses 后再选择。codex 交互模式能读文件、改代码、执行命令,敏感动作会先征求你的确认把 Praxis 接入 OpenCode——开源终端编程智能体。项目里放一个 opencode.json 声明 provider,密钥走环境变量,opencode run 即通。
每一步都标了期望结果:照做即可,也可以把本页直接交给能操作电脑的 AI 助手,让它替你完成安装、配置与验证。
opencode run 调 Praxis 的模型opencode run "…" 收到模型回复/openai/v1)开始前逐项确认:
一个 Praxis API Key(sk-praxis- 开头)。没有就到 控制台 → API Keys 创建:点「创建 Key」,名称必填,有效期可选 30/60/90 天或永久、默认 90 天;创建成功弹窗会展示完整 Key 并带「复制 Key」,关闭后列表只显示掩码,随时可点行内复制图标重新获取完整 Key。期望:弹出「创建 API Key」对话框,提交后弹窗展示完整 Key 与「复制 Key」按钮。新账号自带 $1 免费额度。完整流程见快速开始。
Node.js 18 或更高(node --version 检查)。
安装 OpenCode:
npm install -g opencode-ai期望:opencode --version 输出版本号(本页以 1.19.0 为准)。若 npm 提示平台包问题,按提示补装对应平台包(Linux x64 为 npm install -g opencode-linux-x64)。
第 1 步:设置密钥环境变量
export PRAXIS_API_KEY=sk-praxis-你的Key想持久化就把这行加进 ~/.bashrc 或 ~/.zshrc。Windows PowerShell:$env:PRAXIS_API_KEY="你的Key"。
期望:echo $PRAXIS_API_KEY 输出你的 Key(PowerShell 用 echo $env:PRAXIS_API_KEY)。
第 2 步:在项目里声明 provider
进入你的代码项目目录,创建 opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"praxis": {
"npm": "@ai-sdk/openai-compatible",
"name": "Praxis",
"options": {
"baseURL": "https://api.deepraxis.ai/openai/v1",
"apiKey": "{env:PRAXIS_API_KEY}"
},
"models": {
"deepseek-flash": {}
}
}
},
"model": "praxis/deepseek-flash"
}三处说明:
npm 指定 OpenCode 用 @ai-sdk/openai-compatible 驱动对话——OpenCode 的 provider 体系建立在 AI SDK 之上,首次运行会自动装驱动。apiKey 用 {env:PRAXIS_API_KEY} 引用环境变量——密钥不落文件。provider/模型ID 的命名空间引用;deepseek-flash 是平台示例模型。期望:文件保存即生效。

在项目目录里运行:
opencode run "用中文回复四个字:连接成功"期望:末行为模型回复 连接成功(其前有一行会话标题,如 > build · deepseek-flash)——收到回复即接入成功。去掉 run 直接运行 opencode,进入交互式终端界面。

也可以在命令行完成等价验证。以下命令为 macOS / Linux / WSL(bash)写法;Windows PowerShell 用户:上面的 opencode run 已成功即可跳过;如需命令行验证,先执行 $env:PRAXIS_API_KEY="你的Key",用 curl.exe(PowerShell 的 curl 是别名,语法不同),并把命令并成一行(去掉行尾 \)。
export PRAXIS_API_KEY=sk-praxis-你的Keycurl https://api.deepraxis.ai/openai/v1/chat/completions \
-H "Authorization: Bearer $PRAXIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "deepseek-flash", "messages": [{"role": "user", "content": "你好"}]}' \
-w '\nHTTP %{http_code}\n'期望:HTTP 200 即接入成功,choices[0].message.content 是回复文本(响应出现 reasoning / reasoning_details 字段也正常——推理模型的思维链)。
最后看一眼 控制台 → 用量与费用:刚才的调用已经记在账上——每一次调用都有账、可追溯。用量页默认按资源聚合展示,点「查看用量明细」或某资源行可逐笔核对。
| 症状 | 原因 | 解法 |
|---|---|---|
| 401 / Missing authentication | 密钥未导出,或 apiKey 没用 {env:…} 引用 | 先 echo $PRAXIS_API_KEY 检查;确认 apiKey 写的是 {env:PRAXIS_API_KEY} |
报 EACCES(mkdir ~/.local/share 或 ~/.config 等) | OpenCode 需要可写的用户数据目录,当前环境不可写 | 把 XDG_DATA_HOME/XDG_CONFIG_HOME/XDG_STATE_HOME/XDG_CACHE_HOME 指向可写目录后重试 |
| 报平台包安装失败 | npm 没装对平台的二进制包 | 按报错提示补装(Linux x64 为 opencode-linux-x64) |
| 404 / 路径不存在 | baseURL 写错 | 必须是 https://api.deepraxis.ai/openai/v1(以 /openai/v1 结尾) |
| 模型不存在 | 模型 ID 与目录不一致 | 到控制台 → 模型 → 模型目录复制确切 ID |
models 里加目录中的其他 ID(如 claude-opus-5),并把 model 改成 praxis/<新ID>把 Praxis 接入 Cherry Studio,用一个 Key 聊所有模型——全程不写代码。
每一步都标了期望结果:照做即可,也可以把本页直接交给能操作电脑的 AI 助手,让它替你完成配置与验证。
deepseek-flash 发送「你好」并收到回复开始前逐项确认:
sk-praxis- 开头)。没有就到 控制台 → API Keys 创建:点「创建 Key」,弹窗中名称必填,有效期默认 90 天(可改永久),点创建后立即复制保存;之后也随时可在 Key 列表行点「复制」重新获取完整 Key。新账号自带 $1 免费额度,跑完本页绰绰有余。完整流程见快速开始。-setup.exe(安装版)或 -portable.exe(免安装);macOS 选 .dmg(Intel 芯片选 x64,Apple 芯片选 arm64);Linux 选 .AppImage(下载后 chmod +x 加执行权限再运行)。第 1 步:打开模型服务设置
主界面左下角的齿轮图标「设置」,再点左侧菜单「模型服务」。
期望:右侧出现提供商列表(OpenAI、硅基流动、智谱开放平台……)。

第 2 步:添加服务商,一次填齐名称、密钥、地址
点提供商列表底部的「添加服务商」按钮,弹窗「添加自定义提供商」里填三处:
| 字段 | 填什么 |
|---|---|
| 提供商名称(必填) | Praxis(显示名,可任取) |
| API 密钥 | sk-praxis- 开头的你的 Key |
| 端点设置 → OpenAI 根地址 | https://api.deepraxis.ai/openai/v1 |
地址必须以 /v1 结尾——弹窗会实时显示「请求路径」预览,看到 …/openai/v1/chat/completions 即为正确。填完点「添加」。
期望:提供商列表末尾出现 Praxis 条目,卡片上密钥显示为掩码。

第 3 步:添加模型
添加成功后,Cherry Studio 会自动拉取 Praxis 的模型目录并弹出「选择模型」对话框。在列表中勾选 deepseek-flash——平台示例模型:便宜、快、中英文都好——点「添加所选模型」,应用会自动检测并启用。
期望:模型出现在 Praxis 的模型列表中,启用开关为开。

拉取失败或列表为空时,点 Praxis 卡片上的「手动添加模型」,模型 ID 填 deepseek-flash,其余留空即可。
回到对话页,点右上角的模型选择器,切到 Praxis 下的 deepseek-flash,发送「你好」。
期望:几秒内收到一段中文回复——收到回复即接入成功。

也可以在命令行完成等价验证。先设置变量(不然照抄 curl 会得到 401):
export PRAXIS_API_KEY=sk-praxis-你的Key以下命令为 macOS / Linux / WSL(bash)写法。Windows PowerShell 用户:界面已收到回复即接入成功,可跳过;如需命令行验证,先执行 $env:PRAXIS_API_KEY="你的Key",再把 curl 写成一行(去掉每行末尾的 \)。
curl https://api.deepraxis.ai/openai/v1/chat/completions \
-H "Authorization: Bearer $PRAXIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "deepseek-flash", "messages": [{"role": "user", "content": "你好"}]}'期望:返回 HTTP 200,choices[0].message.content 是一段中文回复(响应里出现 reasoning 字段也正常——那是推理模型的思维链)。返回 401 是密钥问题,报「模型不存在」是 ID 拼写问题——对照下方常见问题。
最后看一眼 控制台 → 用量与费用:刚才的调用已经记在账上——每一次调用都有账、可追溯。
| 症状 | 原因 | 解法 |
|---|---|---|
| 提示无效令牌 / 401 | 密钥复制不完整,或 Key 已被吊销 | 重新完整复制(注意 sk-praxis- 前缀);仍失败就到控制台重建一个 |
| 首次发消息报「需要通过本地 API Gateway 桥接,网关已禁用」 | 本地网关默认关闭 | 按弹窗提示点「启用」,再重发一次 |
| 模型列表拉取失败或为空 | API 地址路径不对 | 地址必须是 https://api.deepraxis.ai/openai/v1(以 /v1 结尾,弹窗的请求路径预览可自查);先跑上面 curl 分辨是网络还是配置问题;拉取不成用「手动添加模型」 |
| 报「模型不存在」 | 模型 ID 与目录不一致 | 到控制台 → 模型复制确切 ID |
| 请求超时 / 无响应 | 本地网络环境 | 换网络或代理后重试;若 curl 同样超时,则是网络问题,与配置无关 |
deepseek-flash 是滚动入口,始终指向最新一代 Flash(随官方更新换代);需要固定版本时改用 deepseek-v4-flash(版本快照)https://api.deepraxis.ai/anthropic(不加 /v1,客户端自动拼 /v1/messages,弹窗预览可核对),其余步骤相同把 Praxis 接入 OpenAI 官方 SDK——已有一切 OpenAI 代码不用换库,只改一个 baseURL。本页 Node 与 Python 均实测(其余语言同形)。
每一步都标了期望结果:照做即可,也可以把本页直接交给能操作电脑的 AI 助手,让它替你完成安装、运行与验证。
hello.mjs 打印中文回复与 usage,stream.mjs 逐字打印回复/openai/v1)开始前逐项确认:
一个 Praxis API Key(sk-praxis- 开头)。没有就到 控制台 → API Keys 创建:点「创建 Key」,名称必填,有效期默认 90 天(可改永久),创建后立即复制保存;之后也随时可在 Key 列表行点复制图标重新获取完整 Key。新账号自带 $1 免费额度。完整流程见快速开始。
Node.js 18 或更高(node --version 检查;用 Bun 亦可)。
安装 SDK:在项目目录里
npm install openai期望:安装无报错,node -e "require('openai')" 不抛错。
新建 hello.mjs,原样粘贴(把 Key 换成你的):
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);运行:
node hello.mjs期望:打印一段中文回复,随后是 usage 对象——注意里面有 cost 字段,这次调用花了多少钱直接给你算好(平台按次计费,控制台用量与费用同口径)。

建议把 Key 放进环境变量而不是写进代码:export PRAXIS_API_KEY=sk-praxis-…(PowerShell:$env:PRAXIS_API_KEY="…"),然后 apiKey: process.env.PRAXIS_API_KEY。
pip install openai先设置环境变量 export PRAXIS_API_KEY=sk-praxis-你的Key(PowerShell:$env:PRAXIS_API_KEY="你的Key"),再新建 hello.py:
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)。

新建 stream.mjs:
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;流式支持按模型路由而异,个别路由可能暂未开放,详见下方常见问题。

| 症状 | 原因 | 解法 |
|---|---|---|
| 401 / 无效令牌 | Key 复制不完整或未设进环境变量 | 重新完整复制(注意 sk-praxis- 前缀);用 echo $PRAXIS_API_KEY 检查 |
400 STREAMING_UNPROVEN | 该模型暂未开放流式(逐路由开通,偶发) | 去掉 stream: true,或换个模型重试 |
| 模型不存在 | 模型 ID 与目录不一致 | 到控制台 → 模型复制确切 ID |
| 连接超时 | 本地网络 | 重试或换网络;也可先用下面的命令测网关连通(期望 200) |
连通性自检:
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 } 可加可不加,平台两种情况都会回;控制台 → 用量与费用有逐笔明细await client.models.list()——和控制台 → 模型同源model 字段即可;deepseek-flash 是滚动入口始终指向最新一代 Flash,deepseek-v4-flash 是固定版本快照把 Praxis 接入 Anthropic 官方 SDK——已有一切 Anthropic 代码不用换库,只改一个 baseURL。本页 Node 与 Python 均实测(其余语言同形)。
每一步都标了期望结果:照做即可,也可以把本页直接交给能操作电脑的 AI 助手,让它替你完成安装、运行与验证。
hello.mjs 打印中文回复与 usage,stream.mjs 逐字打印回复/anthropic)开始前逐项确认:
一个 Praxis API Key(sk-praxis- 开头)。没有就到 控制台 → API Keys 创建:点「创建 Key」,名称必填,有效期默认 90 天(可改永久);创建成功弹窗会展示完整 Key 并带「复制 Key」,关闭后列表只显示掩码,随时可点行内复制图标重新获取完整 Key。新账号自带 $1 免费额度。完整流程见快速开始。
Node.js 18 或更高(node --version 检查;用 Bun 亦可)。
安装 SDK——注意包名是 @anthropic-ai/sdk(npm 上的 anthropic 是同名的占位包,不是它):
npm install @anthropic-ai/sdk期望:安装无报错。
先把 Key 放进环境变量(export PRAXIS_API_KEY=sk-praxis-…;PowerShell:$env:PRAXIS_API_KEY="…"),再新建 hello.mjs:
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);运行:
node hello.mjs期望:打印一段中文回复,随后是 usage——至少包含 input_tokens / output_tokens,SDK 还会附带缓存、服务分层等字段。两处注意:max_tokens 必填(Anthropic 协议的要求);content 是块数组,取 type 为 text 的块是回复文本——推理模型前面可能先带 thinking 块。

pip install anthropic新建 hello.py:
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 同形。

新建 stream.mjs:
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 时去掉流式或换模型重试)。

| 症状 | 原因 | 解法 |
|---|---|---|
导入名为 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 与目录不一致 | 到控制台 → 模型复制确切 ID |
message.usage.cost(Python SDK)直接返回费用;流式在 message_delta 事件的 usage.cost 上(get_final_message().usage 不带该字段)。JS SDK 的 Usage 类型不声明 cost(运行时字段仍在,as any 可读),Node 用户也可看控制台 → 用量与费用逐笔明细,或走 OpenAI SDKmodel 字段即可,Claude 系旗舰填 claude-opus-5;deepseek-flash 是滚动入口始终指向最新一代 Flashcontent 里 type 为 thinking 的块即思维链,按需读取把 Praxis 接入 Vercel AI SDK——React/Vue/Svelte 里做 AI 应用的事实标准库。自定义 provider 两个参数即接通,generateText / streamText 及全家能力照常用。本页以 Node 实测。
每一步都标了期望结果:照做即可,也可以把本页直接交给能操作电脑的 AI 助手,让它替你完成安装、运行与验证。
generateText / streamText 调 Praxis 的模型hello.mjs 打印中文回复与 usage,stream.mjs 逐字打印回复/openai/v1)开始前逐项确认:
一个 Praxis API Key(sk-praxis- 开头)。没有就到 控制台 → API Keys 创建:点「创建 Key」,名称必填,有效期默认 90 天(可改永久);创建成功弹窗会展示完整 Key 并带「复制 Key」,关闭后列表只显示掩码,随时可点行内复制图标重新获取完整 Key。期望:弹出「创建 API Key」对话框,提交后弹窗展示完整 Key 与「复制 Key」按钮。新账号自带 $1 免费额度。完整流程见快速开始。
Node.js 18 或更高(node --version 检查;用 Bun 亦可)。
安装 SDK:
npm install ai @ai-sdk/openai期望:安装无报错。空目录直接装即可,无需先 npm init。
先把 Key 放进环境变量(export PRAXIS_API_KEY=sk-praxis-…;PowerShell:$env:PRAXIS_API_KEY="…"),再新建 hello.mjs:
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);运行:
node hello.mjs期望:打印一段中文回复,随后是 usage 对象——驼峰形态,含 inputTokens / outputTokens / totalTokens 与 raw 原始字段;推理模型的 reasoningTokens 在 outputTokenDetails 明细里。

新建 stream.mjs:
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 时去掉流式或换模型重试)。

| 症状 | 原因 | 解法 |
|---|---|---|
| 401 / 无效令牌 | Key 复制不完整或未设进环境变量 | 重新完整复制(注意 sk-praxis- 前缀);用 echo $PRAXIS_API_KEY 检查 |
| 404 / 路径不存在 | baseURL 少了 /openai/v1 后缀 | 必须是 https://api.deepraxis.ai/openai/v1(以 /v1 结尾) |
400 STREAMING_UNPROVEN | 该模型路由暂未开放流式 | 去掉流式用 generateText,或换个模型重试 |
| 模型不存在 | 模型 ID 与目录不一致 | 到控制台 → 模型 → 模型目录复制确切 ID |
useChat 等 React Hooks 与后端 streamText 天然配套(见 AI SDK 官方文档),provider 写法与本页相同usage 不带费用;用 OpenAI SDK 那条路 usage.cost 直接返回,或看控制台 → 用量与费用praxis("…") 里的模型 ID;deepseek-flash 是滚动入口始终指向最新一代 Flash把 Praxis 接入 LangChain(JS/TS 版)——链、记忆、工具全家桶照常用,模型侧只改一个 baseURL。本页以 Node 实测。
每一步都标了期望结果:照做即可,也可以把本页直接交给能操作电脑的 AI 助手,让它替你完成安装、运行与验证。
ChatOpenAI 调 Praxis 的模型,拿到回复与用量hello.mjs 打印中文回复与用量,stream.mjs 逐字打印回复/openai/v1)开始前逐项确认:
一个 Praxis API Key(sk-praxis- 开头)。没有就到 控制台 → API Keys 创建:点「创建 Key」,名称必填,有效期可选 30/60/90 天或永久,默认 90 天;创建成功弹窗会展示完整 Key 并带「复制 Key」,关闭后列表只显示掩码,随时可点行内复制图标重新获取完整 Key。期望:弹出「创建 API Key」对话框,提交后弹窗展示完整 Key 与「复制 Key」按钮。新账号自带 $1 免费额度。完整流程见快速开始。
Node.js 18 或更高(node --version 检查;用 Bun 亦可)。
安装 SDK:
npm install @langchain/openai期望:安装无报错。空目录直接装即可(npm 会在当前目录生成 package.json、package-lock.json 与 node_modules);需要链、提示词模板、输出解析器时再 npm install langchain。
先把 Key 放进环境变量(export PRAXIS_API_KEY=sk-praxis-…;PowerShell:$env:PRAXIS_API_KEY="…"),再新建 hello.mjs:
import { ChatOpenAI } from "@langchain/openai";
const model = new ChatOpenAI({
model: "deepseek-flash",
configuration: {
baseURL: "https://api.deepraxis.ai/openai/v1",
apiKey: process.env.PRAXIS_API_KEY,
},
});
const res = await model.invoke("用一句话介绍你自己");
console.log(res.content);
console.log(res.usage_metadata);运行:
node hello.mjs期望:打印一段中文回复,随后是用量对象(input_tokens / output_tokens / total_tokens;推理 token 数见 output_token_details.reasoning)。注意与 OpenAI 官方 SDK 的差别:地址与密钥写在 configuration 嵌套对象里,不是顶层字段。

新建 stream.mjs:
import { ChatOpenAI } from "@langchain/openai";
const model = new ChatOpenAI({
model: "deepseek-flash",
configuration: {
baseURL: "https://api.deepraxis.ai/openai/v1",
apiKey: process.env.PRAXIS_API_KEY,
},
});
const stream = await model.stream("用两句话解释什么是 API");
for await (const chunk of stream) {
process.stdout.write(chunk.content);
}
console.log();期望:回复逐字打印、以换行收尾。流式支持因模型及其上游通道而异,个别可能暂未开放(报 STREAMING_UNPROVEN 时去掉流式或换模型重试)。

| 症状 | 原因 | 解法 |
|---|---|---|
| 401 / 无效令牌 | Key 复制不完整或未设进环境变量 | 重新完整复制(注意 sk-praxis- 前缀);用 echo $PRAXIS_API_KEY 检查 |
| 404 / 路径不存在 | baseURL 少了 /openai/v1 后缀 | 必须是 https://api.deepraxis.ai/openai/v1(以 /v1 结尾) |
| 配置不生效 | 地址写在了顶层而不是 configuration 里 | 移进 configuration: { baseURL, apiKey } |
400 STREAMING_UNPROVEN | 该模型暂未开放流式 | 改用 invoke,或换个模型重试 |
| 模型不存在 | 模型 ID 与目录不一致 | 到控制台 → 模型 → 模型目录复制确切 ID |
model.pipe(...) 接提示词模板、输出解析器即成链——Praxis 侧无需任何额外配置usage.cost 直接返回,或看控制台 → 用量与费用model 字段;deepseek-flash 是滚动入口始终指向最新一代 Flash保留 OpenAI SDK,改地址、Key 和模型 ID,先迁移一次 Chat Completions 请求。更换模型会改变回答行为;这不是让 DeepSeek 变成 GPT-4o。
client = OpenAI(
- base_url="https://api.openai.com/v1",
- api_key=os.environ["OPENAI_API_KEY"],
+ base_url="https://api.deepraxis.ai/openai/v1",
+ api_key=os.environ["PRAXIS_API_KEY"],
)
-model = "gpt-4o"
+model = "deepseek-flash"需要 Python 3.10+、uv 和一个 Praxis Key。在控制台 → API Keys创建 Key,将它安全注入当前终端的 PRAXIS_API_KEY 环境变量;不要把 Key 写进代码或日志。保留原服务的配置与 Key,供回滚使用。以下命令在 macOS / Linux 的 Bash 中执行。
test -n "${PRAXIS_API_KEY:-}"期望:退出码 0;退出码 1 表示变量未设置,先设置再继续。
下表是迁移选择,不是别名或等价效果承诺。可用性核对于 2026-10-12;切换流量前再查模型目录。
| 原 ID | Praxis 选择 | 需要注意 |
|---|---|---|
gpt-4o、gpt-4o-mini | deepseek-flash | 原 ID 不存在;重新评估提示词、工具与回答质量 |
gpt-4.1、o3-mini、gpt-5 | deepseek-flash | 不自动映射;原 ID 返回 404 |
| 必须使用 OpenAI 系模型 | gpt-5.6-sol | 可用 Chat Completions,不支持 Responses |
| 原代码使用 Responses | deepseek-flash 或 glm-5.3-flash | 当前可用的 Responses 选择 |
使用 Responses 时,确认选定 ID 出现在 GET /openai/v1/models?api=responses(Python:client.models.list(extra_query={"api": "responses"}))。也可查看 GET /model/v1/models 或 GET /model/v1/models/{id} 的 supported_apis,确认包含 openai.responses。OpenAI 面还可按 chat、embeddings、images、audio、videos 筛选;逗号分隔表示匹配任一协议。
404 model_protocol_not_offered;Chat 与 Responses 要分别确认。usage.cost 是实付金额;Responses 和 Messages 目前不返回该字段。收到 X-Praxis-Generation-Id 时,可按 生成记录 API 用 GET /model/v1/generation?id=生成ID 查费用(记录可能延迟几秒)。若响应没有该头,去控制台 → 用量与费用查本次调用;不要把响应正文的 id 或 X-Request-Id 当成生成 ID,也不要将缺失费用当成零。以下路径相对于 /openai/v1,调用返回 404。替代流程不保证与原端点等价;有依赖时先拆分调用,保留原服务。
| 原端点 | 迁移选择 |
|---|---|
moderations | 无直接替代,继续使用原审核服务 |
batches | 由应用逐次调用并控制并发 |
fine_tuning | 选已有模型;保留原微调流程 |
assistants | 重新组织为 Responses / Conversations 与应用工具循环 |
completions | 改用 chat/completions 和 messages |
audio/translations | 先转写,再用对话翻译 |
uploads | 改用 files;核对文件大小与用途限制 |
images/variations | 用 images/edits 提交图片与编辑提示词,重新评估效果 |
可用端点包括 chat/completions、responses、embeddings、images/generations、images/edits、audio/speech、audio/transcriptions、videos、files、models。可用端点不表示每个模型都支持该能力;具体操作与限制见 OpenAI API 参考。
设置好 PRAXIS_API_KEY 后运行以下完整示例:
unset HTTP_PROXY HTTPS_PROXY ALL_PROXY http_proxy https_proxy all_proxy
uv run -q --no-project --with openai --with anthropic python - <<'PY'
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.deepraxis.ai/openai/v1",
api_key=os.environ["PRAXIS_API_KEY"],
timeout=90.0,
max_retries=0,
)
models = client.models.list(extra_query={"api": "chat"})
assert "deepseek-flash" in {m.id for m in models.data}
raw = client.chat.completions.with_raw_response.create(
model="deepseek-flash",
messages=[{"role": "user", "content": "Reply OK."}],
max_tokens=1024,
)
reply = raw.parse()
text = reply.choices[0].message.content
print("HTTP", raw.status_code)
print("X-Request-Id:", raw.headers.get("x-request-id"))
print("X-Praxis-Generation-Id:", raw.headers.get("x-praxis-generation-id"))
print(text)
assert raw.status_code == 200 and text and text.strip()
assert raw.headers.get("x-request-id")
PY期望:退出码 0,输出 HTTP 200、非空正文(通常为 OK.)和 X-Request-Id。断言同时检查模型存在与真实回复;不是只检查能否连接。保留请求 ID 便于排查,不要记录 Key。示例会产生少量调用费用。
| 实测报错 | 处理 |
|---|---|
404,Model "gpt-4o" does not exist. | 地址与 Key 之外也要改模型;使用目录中的完整 ID |
404 model_protocol_not_offered | 换支持该操作的模型;Responses 选 deepseek-flash 或 glm-5.3-flash |
上表端点返回 404 Not Found | 按表替代,或让该请求继续使用原服务 |
一起恢复三个原值:https://api.openai.com/v1、OPENAI_API_KEY 中的原 Key、原模型 ID。移除 Praxis 专有请求字段,恢复原资源 ID。重启应用让客户端加载旧配置,再跑原有冒烟请求并保留请求 ID。
期望:原端点成功返回可用正文。配置回滚不会退还已发生的调用费用,也不会在服务之间复制会话状态。
保留 Anthropic SDK 和 Messages 请求结构,修改地址、Key、模型 ID,再用新模型验证原提示词。
client = Anthropic(
- base_url="https://api.anthropic.com",
- api_key=os.environ["ANTHROPIC_API_KEY"],
+ base_url="https://api.deepraxis.ai/anthropic",
+ api_key=os.environ["PRAXIS_API_KEY"],
)
-model = "claude-sonnet-4-5"
+model = "deepseek-flash"需要 Python 3.10+、uv 和一个 Praxis Key。在控制台 → API Keys创建 Key,将它安全注入当前终端的 PRAXIS_API_KEY 环境变量;不要把 Key 写进代码或日志。保留原服务的配置与 Key,供回滚使用。以下命令在 macOS / Linux 的 Bash 中执行。
test -n "${PRAXIS_API_KEY:-}"期望:退出码 0;退出码 1 表示变量未设置,先设置再继续。
| 原选择 | Praxis 选择 | 要检查什么 |
|---|---|---|
官方 Claude ID,如 claude-sonnet-4-5 | 本例使用 deepseek-flash | 这是另一个模型,不是 Claude 别名;重新评估质量与工具行为 |
| 必须使用 Claude | 从 /anthropic/v1/models 复制可用的 Claude ID | 2026-10-12 目录包含 claude-opus-5;使用前确认所需能力 |
SDK 基础地址只到 /anthropic,不要加 /v1,SDK 会追加 /v1/messages。目录仅列可走 Anthropic 协议的模型,与 /openai/v1/models、/google/v1beta/models 各自独立。
期望:完整模型 ID 出现在 client.models.list();不要未经检查直接沿用官方 ID。
thinking 可用 enabled、adaptive、disabled,并支持 output_config.effort。部分模型不能关闭思考,返回 400(cannot disable thinking);组合选项前查 Messages 字段支持。content 中读取文本块,不要假定第一块就是正文;推理模型可能先返回思考块。count_tokens 返回带 x-praxis-token-count: estimated 的校准估算,不是精确计费依据,见 统计 token。usage.cost 是实付金额;Responses 和 Messages 目前不返回该字段。收到 X-Praxis-Generation-Id 时,可按 生成记录 API 用 GET /model/v1/generation?id=生成ID 查费用(记录可能延迟几秒)。若响应没有该头,去控制台 → 用量与费用查本次调用;不要把响应正文的 id 或 X-Request-Id 当成生成 ID,也不要将缺失费用当成零。模型兼容接口提供 Messages、token 统计、模型列表和文件操作,各自限制见 Anthropic API 参考。不提供 Message Batches(/anthropic/v1/messages/batches);改为应用控制并发逐次调用 Messages,或保留原服务的批处理。官方模型 ID、文件 ID 不会自动映射;应选择目录模型,并重新上传需要的源文件。
unset HTTP_PROXY HTTPS_PROXY ALL_PROXY http_proxy https_proxy all_proxy
uv run -q --no-project --with openai --with anthropic python - <<'PY'
import os
from anthropic import Anthropic
client = Anthropic(
base_url="https://api.deepraxis.ai/anthropic",
api_key=os.environ["PRAXIS_API_KEY"],
timeout=90.0,
max_retries=0,
)
models = client.models.list()
assert "deepseek-flash" in {m.id for m in models.data}
raw = client.messages.with_raw_response.create(
model="deepseek-flash",
max_tokens=1024,
messages=[{"role": "user", "content": "Reply OK."}],
)
reply = raw.parse()
text = "".join(block.text for block in reply.content if block.type == "text")
print("HTTP", raw.status_code)
print("X-Request-Id:", raw.headers.get("x-request-id"))
print("X-Praxis-Generation-Id:", raw.headers.get("x-praxis-generation-id"))
print(text)
assert raw.status_code == 200 and text and text.strip()
assert raw.headers.get("x-request-id")
PY期望:退出码 0,输出 HTTP 200、非空正文(通常为 OK.)和 X-Request-Id。断言同时检查模型存在与真实回复;不是只检查能否连接。保留请求 ID 便于排查,不要记录 Key。示例会产生少量调用费用。
| 实测报错 | 处理 |
|---|---|
400(cannot disable thinking) | 移除关闭思考的要求,或选择目录声明可关闭思考的模型 |
404(anthropic.messages is not offered for …) | 选择 Anthropic 协议目录内且支持所需操作的 ID |
Message Batches 返回 404 Not Found | 逐次调用 Messages,或保留原批处理服务 |
恢复 https://api.anthropic.com、ANTHROPIC_API_KEY 中的原 Key 和原 Claude 模型 ID,同时恢复原思考选项与文件引用。重启客户端,运行原 Messages 冒烟请求,保留请求 ID。
期望:原服务返回可用正文。修改配置不会搬运文件、历史会话状态,也不会撤销已产生的费用。
保留 OpenAI SDK,替换连接配置与模型 ID;切流量前逐项处理 OpenRouter 专有选项。
client = OpenAI(
- base_url="https://openrouter.ai/api/v1",
- api_key=os.environ["OPENROUTER_API_KEY"],
+ base_url="https://api.deepraxis.ai/openai/v1",
+ api_key=os.environ["PRAXIS_API_KEY"],
)
-model = "openai/gpt-4o"
+model = "deepseek-flash"需要 Python 3.10+、uv 和一个 Praxis Key。在控制台 → API Keys创建 Key,将它安全注入当前终端的 PRAXIS_API_KEY 环境变量;不要把 Key 写进代码或日志。保留原服务的配置与 Key,供回滚使用。以下命令在 macOS / Linux 的 Bash 中执行。
test -n "${PRAXIS_API_KEY:-}"期望:退出码 0;退出码 1 表示变量未设置,先设置再继续。
| OpenRouter 选择 | Praxis 选择 |
|---|---|
openai/gpt-4o | 先用 deepseek-flash 跑通;这是另一个模型,不是别名 |
vendor/model | 从 Praxis 目录复制完整 ID,不能假设去掉前缀就可用 |
带 :nitro 后缀的 ID | 选不带后缀的目录 ID;不支持该后缀 |
openrouter/auto | 明确选择一个模型,或配置 models 回退列表 |
期望:client.models.list() 包含选定 ID。回退列表中的每个 ID 都必须是有效的 Praxis ID,并支持你调用的操作。
| OpenRouter 选项 | 迁移处理 |
|---|---|
provider.order、provider.only、provider.ignore | 仅自带上游 Key(BYOK)可用;使用平台凭据时移除,否则返回 400 provider_selection_not_allowed |
provider.allow_fallbacks、provider.sort | 无效果;移除并重新评估选路假设 |
provider.data_collection、provider.zdr | 无效果;请求被接受不代表这些策略已执行 |
models | 支持模型回退列表;替换每个 ID 并检查响应中的 model |
provider.require_parameters: true | 对工具参数与已声明的采样参数进行支持检查;要求未声明支持的参数时返回 400;不支持的采样参数默认忽略 |
参数检查范围是工具参数与已声明的采样参数,不是供应商任意功能。准确范围见 Chat Completions 字段支持。如果应用依赖被忽略选项所控制的数据策略,应继续使用原服务,直到单独确认所需策略。
Chat 的 usage.cost 是实付金额;Responses 和 Messages 目前不返回该字段。收到 X-Praxis-Generation-Id 时,可按 生成记录 API 用 GET /model/v1/generation?id=生成ID 查费用(记录可能延迟几秒)。若响应没有该头,去控制台 → 用量与费用查本次调用;不要把响应正文的 id 或 X-Request-Id 当成生成 ID,也不要将缺失费用当成零。
vendor/model、:nitro、openrouter/auto 都不是受支持的模型选择方式,也不会自动映射。缺失的 OpenAI 端点见不支持清单与替代。具体操作与字段以 API 参考 为准,不要假设 OpenRouter 扩展也适用于 Responses。
先跑通不带供应商偏好的最小 Chat 请求:
unset HTTP_PROXY HTTPS_PROXY ALL_PROXY http_proxy https_proxy all_proxy
uv run -q --no-project --with openai --with anthropic python - <<'PY'
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.deepraxis.ai/openai/v1",
api_key=os.environ["PRAXIS_API_KEY"],
timeout=90.0,
max_retries=0,
)
models = client.models.list()
assert "deepseek-flash" in {m.id for m in models.data}
raw = client.chat.completions.with_raw_response.create(
model="deepseek-flash",
messages=[{"role": "user", "content": "Reply OK."}],
max_tokens=1024,
)
reply = raw.parse()
text = reply.choices[0].message.content
print("HTTP", raw.status_code)
print("X-Request-Id:", raw.headers.get("x-request-id"))
print("X-Praxis-Generation-Id:", raw.headers.get("x-praxis-generation-id"))
print(text)
assert raw.status_code == 200 and text and text.strip()
assert raw.headers.get("x-request-id")
PY期望:退出码 0,输出 HTTP 200、非空正文(通常为 OK.)和 X-Request-Id。断言同时检查模型存在与真实回复;不是只检查能否连接。保留请求 ID 便于排查,不要记录 Key。示例会产生少量调用费用。
然后逐个加回应用需要的选项。期望:每次请求成功且返回预期模型;被忽略的字段不能作为策略生效的证据。
| 实测报错 | 处理 |
|---|---|
400 provider_selection_not_allowed | 平台凭据移除供应商选择;或先配置 BYOK 再选择上游 |
404,包含 does not exist | 将带厂商前缀、后缀或自动选择器的 ID 换成目录 ID |
404 model_protocol_not_offered | 选择提供该操作的模型 |
恢复 https://openrouter.ai/api/v1、原 OPENROUTER_API_KEY、原模型 ID 和保存的 OpenRouter 选项。重启客户端后跑原冒烟请求。不要把 Praxis Key 发给 OpenRouter。
期望:原请求返回可用正文与预期模型。Praxis 上已产生的调用费用仍保留。
先迁移一次请求:改 API 地址、Key 和模型 ID。下面示例面向兼容 OpenAI Chat Completions 的客户端,不会自动把其他请求协议转换成 Chat。
准备 Python 3.10+ 和 uv。将 Praxis 云 API Key 放入环境变量 PRAXIS_API_KEY,不要写入代码或日志。
test -n "$PRAXIS_API_KEY"期望:退出码为 0。退出码 1 表示变量未设置,先设置再继续。示例默认使用 https://api.deepraxis.ai。切换环境时,将 PRAXIS_API_BASE 设为相应 API 域名,不带末尾斜杠或 API 路径。
base_url 改为 https://api.deepraxis.ai/openai/v1。期望:地址只含一次 /openai/v1,不是控制台网址,也不是完整的 /chat/completions 端点。PRAXIS_API_KEY。期望:不再向 Praxis 发送旧网关的 Key;另存原配置以便回滚。deepseek-flash。期望:它出现在 GET /openai/v1/models?api=chat。旧网关的供应商前缀或别名不一定在此有效。按当前使用的 API 选择更详细的迁移指南:
| 当前 API 或网关 | 指南 |
|---|---|
| OpenAI Chat Completions 或 Responses | 从 OpenAI 迁移 |
| OpenRouter | 从 OpenRouter 迁移 |
| Anthropic Messages | 从 Anthropic 迁移 |
保存为 gateway-migration.py,运行 uv run -q --no-project --with openai --with anthropic --with google-genai python gateway-migration.py。
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ['PRAXIS_API_KEY'],
base_url=os.environ.get('PRAXIS_API_BASE', 'https://api.deepraxis.ai') + '/openai/v1')
models = client.models.list(extra_query={'api': 'chat'})
print('catalog X-Request-Id:', models._request_id)
assert 'deepseek-flash' in [model.id for model in models]
response = client.chat.completions.create(model='deepseek-flash',
messages=[{'role': 'user', 'content': 'Reply with exactly: MIGRATION_OK'}],
reasoning_effort='none', max_tokens=256)
print('X-Request-Id:', response._request_id)
assert response.choices[0].finish_reason == 'stop'
assert response.choices[0].message.content.strip() == 'MIGRATION_OK'
assert response.usage is not None and response.usage.total_tokens > 0
print(response.choices[0].message.content)
print('usage:', response.usage.model_dump())期望:输出 MIGRATION_OK、大于 0 的 token 用量、目录请求 ID 与推理请求 ID,退出码 0。保留请求 ID 用于排障,不记录 Key。
用自己的提示词检查流式、工具、结构化输出和思考设置。冒烟通过不代表模型行为相同。按需重建文件或响应资源:旧网关的 ID 不随配置迁移。验证失败时,一起恢复原地址、Key 和模型配置。
实测 gpt-5.6-sol 调用 Responses 返回 model_protocol_not_offered(HTTP 404)。支持 Chat 不代表支持 Responses,应按 Responses 指南查询对应目录。模型断言失败表示所选 ID 未出现在该协议目录中,应先核对再切流量。
(待补充)