Cookbook

2026-10-20

概览

Cookbook 只回答一个问题:怎么把 Praxis 接进你手上的东西。概念与架构在开发者文档,端点与参数在 API,这里只放可复制的接入步骤。

按工具选择接入方式

绝大多数工具只需要三件事:Base URL、API Key、模型 ID。

你在用什么推荐入口状态
Claude Code、Codex、OpenCode 等编程 Agent编程 Agent✅ 3 篇已上线
OpenAI SDK、Anthropic SDK、Vercel AI SDK、LangChainSDK 与框架✅ 4 篇已上线
Cherry Studio 等聊天客户端聊天客户端✅ 1 篇已上线
Cursor、Windsurf、Trae 等 IDEAI IDE即将推出
n8n、Dify、FastGPT、Coze 等应用平台智能体与工作流平台✅ 4 篇已上线
端到端场景(RAG、多 Agent、批量处理)实战场景即将推出
从 OpenAI / Anthropic / OpenRouter 迁移过来迁移指南✅ 4 篇已上线

快速选路

不写代码,最快体验:打开 Praxis App,登录即用。

不写代码,用你喜欢的客户端:Cherry Studio(5 分钟接通,模型自动拉取)。

写代码,最少改动:OpenAI SDK(换一个 baseURL 就能用,usage.cost 直接返回费用)。

终端编程,改代码 / 跑命令:Claude Code(settings.json 一个文件搞定)。

已有 OpenAI / Anthropic 代码要迁移:看迁移指南——改一个地址就能迁过来。

编程 Agent

把 Praxis 接进终端编程智能体,用你的 Key 驱动——每个工具只需要 Base URL、API Key 和模型 ID 三件事。

所有客户端共用同一套 前提:一个 sk-praxis- 开头的 Praxis API Key。

协议速查:Claude Code 走 Anthropic 协议(/anthropic);Codex 走 OpenAI Responses 协议(/openai/v1 + wire_api: "responses");其余大多数走 OpenAI 兼容协议(/openai/v1)。

你是第一次接触编程 Agent? 推荐从 Claude Code 开始——配置最少(一个 JSON 文件)、社区最活跃、文档最多。

Claude Code

把 Praxis 接入 Claude Code,在终端里用你的 Key 驱动编程智能体——改代码、跑命令、答问题。

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

你将完成

  • 在终端用 claude 命令调用 Praxis 的模型
  • 完成标志:claude -p "…" 收到模型回复
  • 预计耗时:3 分钟(不含 Node.js 安装)
  • 支持协议:Anthropic 兼容(Claude Code 原生协议)

前提

开始前逐项确认:

  • 一个 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.com/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——后者是官方直连时用的,配网关时无效。

期望:文件保存即生效,无需重启任何服务。

终端里查看 ~/.claude/settings.json 的实际内容

第 2 步(可选):临时会话不落盘

不想把 Key 写进文件时,可以用一次性环境变量:

ANTHROPIC_BASE_URL=https://api.deepraxis.com/anthropic \
ANTHROPIC_AUTH_TOKEN=sk-praxis-你的Key \
claude --model deepseek-flash -p "你好"

期望:收到中文回复。Windows PowerShell 用户不必用此方式,直接按第 1 步写入配置文件即可。在代码项目目录里运行时,回复可能带上该项目 AGENTS.md / CLAUDE.md 的上下文口吻,属正常。

验证

claude -p "用中文回复四个字:连接成功"

期望:终端直接输出 连接成功——收到回复即接入成功。

终端运行 claude -p 的真实输出

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

claude 交互模式欢迎屏

也可以在命令行完成等价验证。先设置变量(不然照抄 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.com/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 块,属正常。

最后看一眼 控制台 → 用量与费用:刚才的调用已经记在账上——每一次调用都有账、可追溯。

控制台用量与费用页:deepseek-flash 的调用已逐笔记账

常见问题

症状原因解法
首次对话报「issue with the selected model … may not exist」或 Model … does not exist没有指定 model,Claude Code 用了它的默认模型,而它不在 Praxis 目录里在 settings.json 加 "model",或命令加 --model,填目录内的模型(如 deepseek-flash)
提示无效令牌 / 401Key 复制不完整或已吊销;或把 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 | bash

进阶

  • 查这段对话花了多少钱:控制台 → 用量与费用,按次计费、无闲置费
  • 换模型:改 settings.json 的 model(或临时用 --model)。要 Claude 系旗舰就填 claude-opus-5;要固定版本快照用 deepseek-v4-flash,deepseek-flash 则始终指向最新一代 Flash
  • 在项目里用:进入代码目录直接运行 claude,它能读文件、改代码、执行命令——每一项动作都会先征求你的确认

相关食谱

Codex

把 Praxis 接入 Codex,在终端里用你的 Key 驱动 OpenAI 的编程智能体——改代码、跑命令、答问题。密钥只存环境变量,不落配置文件。

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

你将完成

  • 在终端用 codex 命令调用 Praxis 的模型
  • 完成标志:codex exec "…" 收到模型回复
  • 预计耗时:3–5 分钟(不含 Node.js 安装)
  • 支持协议:OpenAI Responses(Codex 原生协议)

前提

开始前逐项确认:

  • 一个 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.com/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 命令即使用新配置(已开着的会话需退出重进)。

终端里查看 ~/.codex/config.toml 的实际内容

第 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」,这是自定义模型的正常回退提示,不影响使用。

终端运行 codex exec 的真实输出

去掉 exec 直接运行 codex,进入交互式工作台(出现版本横幅与输入框即进入;本页不验证此项)。

也可以在命令行完成等价验证。先设置变量(不然照抄 curl 会得到 401):

export PRAXIS_API_KEY=sk-praxis-你的Key
curl https://api.deepraxis.com/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 内置元数据表里正常回退提示,直接用;不影响对话与工具调用
提示无效令牌 / 401PRAXIS_API_KEY 未导出、复制不完整,或改完 shellrc 没重开终端echo $PRAXIS_API_KEY 检查;重新完整复制;重开终端让配置生效
报 Not inside a trusted directory …不在 git 仓库目录里运行进项目目录运行;或临时加 --skip-git-repo-check
报 unknown configuration fieldCodex 版本较旧,不认识新配置键npm install -g @openai/codex 升级后重试
报模型不存在模型 ID 与目录不一致到控制台 → 模型复制确切 ID

进阶

  • 查这段对话花了多少钱:控制台 → 用量与费用,按次计费、无闲置费
  • 换模型:改 config.toml 的 model,或运行 codex -m <模型ID>。可选 deepseek-flash、deepseek-v4-flash。Codex 只能使用声明了 Responses 协议的模型;在模型目录打开模型详情,确认支持协议包含 Responses 后再选择。
  • 在项目里用:codex 交互模式能读文件、改代码、执行命令,敏感动作会先征求你的确认

相关食谱

Cline

待补充

本页是接入模板占位,配置步骤、截图与视频尚未填写。
支持协议OpenAI 兼容
备注—

前提

一个 API Key(见快速开始)。

配置

(待补充:在 Cline 中填入 https://api.deepraxis.com 与 API Key 的步骤,配截图 / 30 秒视频。)

验证

(待补充:接入成功的界面长什么样。)

常见问题

(待补充:模型 id 怎么填、流式、国内网络。)

OpenCode

把 Praxis 接入 OpenCode——开源终端编程智能体。项目里放一个 opencode.json 声明 provider,密钥走环境变量,opencode run 即通。

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

你将完成

  • 在终端用 opencode run 调 Praxis 的模型
  • 完成标志:opencode run "…" 收到模型回复
  • 预计耗时:3–5 分钟(不含 Node.js 安装)
  • 支持协议:OpenAI 兼容(/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.com/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.json 的实际内容

验证

在项目目录里运行:

opencode run "用中文回复四个字:连接成功"

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

终端运行 opencode run 的真实输出

也可以在命令行完成等价验证。以下命令为 macOS / Linux / WSL(bash)写法;Windows PowerShell 用户:上面的 opencode run 已成功即可跳过;如需命令行验证,先执行 $env:PRAXIS_API_KEY="你的Key",用 curl.exe(PowerShell 的 curl 是别名,语法不同),并把命令并成一行(去掉行尾 \)。

export PRAXIS_API_KEY=sk-praxis-你的Key
curl https://api.deepraxis.com/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.com/openai/v1(以 /openai/v1 结尾)
模型不存在模型 ID 与目录不一致到控制台 → 模型 → 模型目录复制确切 ID

进阶

  • 查这次对话花了多少钱:控制台 → 用量与费用,按次计费、无闲置费
  • 换模型:在 models 里加目录中的其他 ID(如 claude-opus-5),并把 model 改成 praxis/<新ID>
  • 在项目里用:交互模式能读文件、改代码、执行命令,敏感动作会先征求你的确认

相关食谱

Kilo Code

待补充

本页是接入模板占位,配置步骤、截图与视频尚未填写。
支持协议OpenAI 兼容
备注自动从 /openai/v1/models 拉取模型列表

前提

一个 API Key(见快速开始)。

配置

(待补充:在 Kilo Code 中填入 https://api.deepraxis.com 与 API Key 的步骤,配截图 / 30 秒视频。)

验证

(待补充:接入成功的界面长什么样。)

常见问题

(待补充:模型 id 怎么填、流式、国内网络。)

Roo Code

待补充

本页是接入模板占位,配置步骤、截图与视频尚未填写。
支持协议OpenAI 兼容
备注—

前提

一个 API Key(见快速开始)。

配置

(待补充:在 Roo Code 中填入 https://api.deepraxis.com 与 API Key 的步骤,配截图 / 30 秒视频。)

验证

(待补充:接入成功的界面长什么样。)

常见问题

(待补充:模型 id 怎么填、流式、国内网络。)

Gemini CLI

待补充

本页是接入模板占位,配置步骤、截图与视频尚未填写。
支持协议Google (generateContent)
备注—

前提

一个 API Key(见快速开始)。

配置

(待补充:在 Gemini CLI 中填入 https://api.deepraxis.com 与 API Key 的步骤,配截图 / 30 秒视频。)

验证

(待补充:接入成功的界面长什么样。)

常见问题

(待补充:模型 id 怎么填、流式、国内网络。)

Kimi Code

待补充

本页是接入模板占位,配置步骤、截图与视频尚未填写。
支持协议OpenAI 兼容
备注—

前提

一个 API Key(见快速开始)。

配置

(待补充:在 Kimi Code 中填入 https://api.deepraxis.com 与 API Key 的步骤,配截图 / 30 秒视频。)

验证

(待补充:接入成功的界面长什么样。)

常见问题

(待补充:模型 id 怎么填、流式、国内网络。)

Qwen Code

待补充

本页是接入模板占位,配置步骤、截图与视频尚未填写。
支持协议OpenAI 兼容
备注Gemini CLI 分支,走 OPENAI_BASE_URL

前提

一个 API Key(见快速开始)。

配置

(待补充:在 Qwen Code 中填入 https://api.deepraxis.com 与 API Key 的步骤,配截图 / 30 秒视频。)

验证

(待补充:接入成功的界面长什么样。)

常见问题

(待补充:模型 id 怎么填、流式、国内网络。)

AI IDE

把 Praxis 接进 AI 增强的 IDE,在编辑器里直接使用你的 Key 驱动模型——补全、对话、代码生成。

所有 IDE 共用同一套 前提:一个 sk-praxis- 开头的 Praxis API Key。

不想换 IDE? 用终端编程 Agent(如 Claude Code)在你现有编辑器旁边工作,体验一样好。

Trae

待补充

本页是接入模板占位,配置步骤、截图与视频尚未填写。
支持协议OpenAI 兼容(国内版待核实)
备注字节;自定义模型入口待核实

前提

一个 API Key(见快速开始)。

配置

(待补充:在 Trae 中填入 https://api.deepraxis.com 与 API Key 的步骤,配截图 / 30 秒视频。)

验证

(待补充:接入成功的界面长什么样。)

常见问题

(待补充:模型 id 怎么填、流式、国内网络。)

WorkBuddy / CodeBuddy

待补充

本页是接入模板占位,配置步骤、截图与视频尚未填写。
支持协议待核实
备注腾讯;自定义模型入口待核实

前提

一个 API Key(见快速开始)。

配置

(待补充:在 WorkBuddy / CodeBuddy 中填入 https://api.deepraxis.com 与 API Key 的步骤,配截图 / 30 秒视频。)

验证

(待补充:接入成功的界面长什么样。)

常见问题

(待补充:模型 id 怎么填、流式、国内网络。)

Cursor

待补充

本页是接入模板占位,配置步骤、截图与视频尚未填写。
支持协议OpenAI 兼容
备注Override OpenAI Base URL

前提

一个 API Key(见快速开始)。

配置

(待补充:在 Cursor 中填入 https://api.deepraxis.com 与 API Key 的步骤,配截图 / 30 秒视频。)

验证

(待补充:接入成功的界面长什么样。)

常见问题

(待补充:模型 id 怎么填、流式、国内网络。)

Windsurf

待补充

本页是接入模板占位,配置步骤、截图与视频尚未填写。
支持协议OpenAI 兼容
备注—

前提

一个 API Key(见快速开始)。

配置

(待补充:在 Windsurf 中填入 https://api.deepraxis.com 与 API Key 的步骤,配截图 / 30 秒视频。)

验证

(待补充:接入成功的界面长什么样。)

常见问题

(待补充:模型 id 怎么填、流式、国内网络。)

通义灵码

待补充

本页是接入模板占位,配置步骤、截图与视频尚未填写。
支持协议待核实
备注阿里

前提

一个 API Key(见快速开始)。

配置

(待补充:在 通义灵码 中填入 https://api.deepraxis.com 与 API Key 的步骤,配截图 / 30 秒视频。)

验证

(待补充:接入成功的界面长什么样。)

常见问题

(待补充:模型 id 怎么填、流式、国内网络。)

聊天客户端

把 Praxis 接进聊天客户端,用一个 Key 聊所有模型——全程不写代码,适合非开发者和快速体验。

所有客户端共用同一套 前提:一个 sk-praxis- 开头的 Praxis API Key。

你是第一次接触聊天客户端? 推荐从 Cherry Studio 开始——免费开源、模型目录自动拉取、中文界面友好、配置只需三步。

想用但不想装客户端? 直接用 Praxis App:打开 society.deepraxis.ai 登录即用,零配置。

Cherry Studio

把 Praxis 接入 Cherry Studio,用一个 Key 聊所有模型——全程不写代码。

每一步都标了期望结果:照做即可,也可以把本页直接交给能操作电脑的 AI 助手,让它替你完成配置与验证。

你将完成

  • 在 Cherry Studio 里直接使用 Praxis 的模型对话
  • 完成标志:向 deepseek-flash 发送「你好」并收到回复
  • 预计耗时:5 分钟(不含下载安装)
  • 支持协议:OpenAI 兼容(本页路线)/ Anthropic 兼容(见进阶)

前提

开始前逐项确认:

  • 一个 Praxis API Key(sk-praxis- 开头)。没有就到 控制台 → API Keys 创建:点「创建 Key」,弹窗中名称必填,有效期默认 90 天(可改永久),点创建后立即复制保存;之后也随时可在 Key 列表行点「复制」重新获取完整 Key。新账号自带 $1 免费额度,跑完本页绰绰有余。完整流程见快速开始。
  • Cherry Studio 已安装。从官网下载(自动匹配系统),或到 GitHub Releases 手选:Windows 选 -setup.exe(安装版)或 -portable.exe(免安装);macOS 选 .dmg(Intel 芯片选 x64,Apple 芯片选 arm64);Linux 选 .AppImage(下载后 chmod +x 加执行权限再运行)。
  • 首次启动:先选语言(默认 English,可切中文),欢迎页点「稍后设置」跳过登录即可使用。
  • 本页以 v2.1.4 界面为准,菜单位置可能随版本微调。

配置

第 1 步:打开模型服务设置

主界面左下角的齿轮图标「设置」,再点左侧菜单「模型服务」。

期望:右侧出现提供商列表(OpenAI、硅基流动、智谱开放平台……)。

设置入口:左下角齿轮进入设置,左侧菜单选「模型服务」,右侧是提供商列表

第 2 步:添加服务商,一次填齐名称、密钥、地址

点提供商列表底部的「添加服务商」按钮,弹窗「添加自定义提供商」里填三处:

字段填什么
提供商名称(必填)Praxis(显示名,可任取)
API 密钥sk-praxis- 开头的你的 Key
端点设置 → OpenAI 根地址https://api.deepraxis.com/openai/v1

地址必须以 /v1 结尾——弹窗会实时显示「请求路径」预览,看到 …/openai/v1/chat/completions 即为正确。填完点「添加」。

期望:提供商列表末尾出现 Praxis 条目,卡片上密钥显示为掩码。

添加自定义提供商弹窗:名称填 Praxis,密钥与 OpenAI 根地址已填,下方显示请求路径预览

第 3 步:添加模型

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

期望:模型出现在 Praxis 的模型列表中,启用开关为开。

选择模型对话框:自动拉取的模型目录中勾选 deepseek-flash

拉取失败或列表为空时,点 Praxis 卡片上的「手动添加模型」,模型 ID 填 deepseek-flash,其余留空即可。

验证

回到对话页,点右上角的模型选择器,切到 Praxis 下的 deepseek-flash,发送「你好」。

期望:几秒内收到一段中文回复——收到回复即接入成功。

对话页收到第一条回复:模型选择器显示 DeepSeek V4.1 Flash | Praxis

也可以在命令行完成等价验证。先设置变量(不然照抄 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.com/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.com/openai/v1(以 /v1 结尾,弹窗的请求路径预览可自查);先跑上面 curl 分辨是网络还是配置问题;拉取不成用「手动添加模型」
报「模型不存在」模型 ID 与目录不一致到控制台 → 模型复制确切 ID
请求超时 / 无响应本地网络环境换网络或代理后重试;若 curl 同样超时,则是网络问题,与配置无关

进阶

  • 查这段对话花了多少钱:控制台 → 用量与费用,按次计费、无闲置费
  • 换模型:模型列表里随时勾选添加其他模型,对话页随时切换。deepseek-flash 是滚动入口,始终指向最新一代 Flash(随官方更新换代);需要固定版本时改用 deepseek-v4-flash(版本快照)
  • 用 Anthropic 协议接入:在第 2 步弹窗的端点设置里改填 Anthropic 根地址 https://api.deepraxis.com/anthropic(不加 /v1,客户端自动拼 /v1/messages,弹窗预览可核对),其余步骤相同

相关食谱

Chatbox

待补充

本页是接入模板占位,配置步骤、截图与视频尚未填写。
支持协议OpenAI 兼容
备注—

前提

一个 API Key(见快速开始)。

配置

(待补充:在 Chatbox 中填入 https://api.deepraxis.com 与 API Key 的步骤,配截图 / 30 秒视频。)

验证

(待补充:接入成功的界面长什么样。)

常见问题

(待补充:模型 id 怎么填、流式、国内网络。)

ChatWise

待补充

本页是接入模板占位,配置步骤、截图与视频尚未填写。
支持协议OpenAI 兼容
备注—

前提

一个 API Key(见快速开始)。

配置

(待补充:在 ChatWise 中填入 https://api.deepraxis.com 与 API Key 的步骤,配截图 / 30 秒视频。)

验证

(待补充:接入成功的界面长什么样。)

常见问题

(待补充:模型 id 怎么填、流式、国内网络。)

LobeHub

把 Praxis 接入 LobeHub——开源的现代设计 AI 聊天界面,支持插件、多模型、语音。Docker 启动,浏览器里填两处即通。

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

你将完成

  • 用 Docker 跑起一个 LobeHub 实例,接入 Praxis 的模型对话
  • 完成标志:在聊天框发送「你好」并收到回复
  • 预计耗时:5 分钟(不含 Docker 镜像下载)
  • 支持协议:OpenAI 兼容(/openai/v1)

前提

  • Docker 已安装并运行(docker --version 检查)。
  • 一个 Praxis API Key(sk-praxis- 开头)。没有就到 控制台 → API Keys 创建。完整流程见快速开始。

安装与启动

第 1 步:启动容器

docker run -d --name lobehub --restart always -p 3210:3210 lobehub/lobe-chat:latest

期望:容器 ID 输出无报错,首次拉取约 1GB。

第 2 步:打开浏览器

访问 http://localhost:3210。期望:自动跳转到聊天页。

LobeHub 主界面

配置

第 3 步:进入模型设置

点击左侧边栏的设置图标(齿轮),选择「Language Model」。期望:看到 API Key 与 API Proxy Address 两个输入区域。

Settings → Language Model

第 4 步:填入 Praxis 连接

字段填什么
API Keysk-praxis- 开头的你的 Key
API Proxy Addresshttps://api.deepraxis.ai/openai/v1

点「Check」验证。期望:通过后在 Model List 勾选 deepseek-flash。

环境变量预设(免 UI 配置):

docker run -d --name lobehub --restart always -p 3210:3210 \
  -e OPENAI_API_KEY=sk-praxis-你的Key \
  -e OPENAI_PROXY_URL=https://api.deepraxis.ai/openai/v1 \
  lobehub/lobe-chat:latest

验证

选模型,发「你好」。期望:收到回复即接入成功。

常见问题

症状原因解法
localhost:3210 打不开容器还在启动docker logs lobehub
Check 不通过地址少了 /openai/v1必须是 https://api.deepraxis.ai/openai/v1
401Key 不完整重新复制
模型列表为 OpenAI 默认未自定义 Model List在 Language Model 页添加 deepseek-flash

相关食谱

Open WebUI

把 Praxis 接入 Open WebUI——最流行的开源自托管 AI 聊天界面。一条 Docker 命令启动,浏览器里配置连接,就能用 Praxis 的所有模型。

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

你将完成

  • 用 Docker 跑起一个自托管的 Open WebUI 实例,接入 Praxis 的模型对话
  • 完成标志:在聊天框发送「你好」并收到回复
  • 预计耗时:5 分钟(不含 Docker 镜像下载)
  • 支持协议:OpenAI 兼容(/openai/v1)

前提

开始前逐项确认:

  • Docker 已安装并运行(docker --version 检查)。没有就到 Docker 官网 装。
  • 一个 Praxis API Key(sk-praxis- 开头)。没有就到 控制台 → API Keys 创建:点「创建 Key」,名称必填,有效期可选 30/60/90 天或永久、默认 90 天;创建成功弹窗会展示完整 Key 并带「复制 Key」。新账号自带 $1 免费额度。完整流程见快速开始。

安装与启动

第 1 步:启动 Open WebUI 容器

docker run -d --name open-webui --restart always -p 3080:8080 ghcr.io/open-webui/open-webui:main

期望:容器 ID 输出后无报错。首次运行会拉取镜像(约 2GB),需要几分钟。

第 2 步:打开浏览器

在浏览器访问 http://localhost:3080。

期望:看到 Open WebUI 欢迎页,带「Get started」按钮。

Open WebUI 首次访问的注册页

第 3 步:创建管理员账号

点「Get started」,填写 Name、Email、Password(这是本地管理员账号,与 Praxis 无关),点「Create Admin Account」。

期望:进入 Open WebUI 主界面——左侧是对话列表,中间是聊天框。

Open WebUI 主界面

配置

第 4 步:进入连接设置

点击右下角的用户名,选择「Admin Panel」→「Settings」→「Connections」。

期望:看到 OpenAI API 连接配置区域。

Admin Panel → Settings → Connections

第 5 步:填入 Praxis 连接

在 OpenAI API 区域:

字段填什么
URLhttps://api.deepraxis.com/openai/v1
Keysk-praxis- 开头的你的 Key

点「Save」。

期望:保存后返回聊天页,模型选择器中出现 Praxis 的模型列表。

也可以在启动容器时用环境变量预设连接(免 UI 配置):

docker run -d --name open-webui --restart always -p 3080:8080 \
  -e OPENAI_API_BASE_URL=https://api.deepraxis.com/openai/v1 \
  -e OPENAI_API_KEY=sk-praxis-你的Key \
  ghcr.io/open-webui/open-webui:main

验证

回到聊天页,在顶部模型选择器中选一个模型(如 deepseek-flash),在输入框发送「你好」。

期望:几秒内收到回复——收到回复即接入成功。

最后看一眼 控制台 → 用量与费用:刚才的调用已经记在账上——每一次调用都有账、可追溯。

常见问题

症状原因解法
localhost:3080 打不开容器还在启动中(首次约 1-2 分钟)等待后刷新;docker logs open-webui 查看进度
模型列表为空连接配置的 URL 少了 /openai/v1 后缀必须是 https://api.deepraxis.com/openai/v1
401 / 无效令牌API Key 复制不完整重新完整复制(注意 sk-praxis- 前缀)
模型不存在模型 ID 与目录不一致到控制台 → 模型 → 模型目录复制确切 ID
容器反复重启端口冲突或内存不足检查 3080 端口是否被占用;确保 Docker 至少分配 2GB 内存

进阶

  • 查这次对话花了多少钱:控制台 → 用量与费用,按次计费、无闲置费
  • 换模型:在 Open WebUI 的模型选择器中随时切换;deepseek-flash 是滚动入口始终指向最新一代 Flash
  • 多用户:Open WebUI 支持多用户注册,在 Admin Panel → Users 管理权限
  • 自定义界面:Admin Panel → Settings → Interface 可改主题、语言(支持中文)
  • 数据持久化:加 -v open-webui:/app/backend/data 挂载数据卷,容器重建后聊天记录不丢

相关食谱

  • Cherry Studio(桌面客户端,不需要 Docker)
  • Dify(低代码平台,同样 Docker 部署)
  • 不想装任何东西?看 Praxis App:打开网址即用

NextChat

待补充

本页是接入模板占位,配置步骤、截图与视频尚未填写。
支持协议OpenAI 兼容
备注—

前提

一个 API Key(见快速开始)。

配置

(待补充:在 NextChat 中填入 https://api.deepraxis.com 与 API Key 的步骤,配截图 / 30 秒视频。)

验证

(待补充:接入成功的界面长什么样。)

常见问题

(待补充:模型 id 怎么填、流式、国内网络。)

智能体与工作流平台

把 Praxis 作为模型提供商接入低代码/无代码平台,在可视化画布里编排智能体和工作流。

所有平台共用同一套前提:一个 sk-praxis- 开头的 Praxis API Key。

想写代码而不是拖积木? 看 SDK 与框架——用你熟悉的编程语言直连。

Dify

待补充

本页是接入模板占位,配置步骤、截图与视频尚未填写。
支持协议OpenAI 兼容 provider
备注—

前提

一个 API Key(见快速开始)。

配置

(待补充:在 Dify 中填入 https://api.deepraxis.com 与 API Key 的步骤,配截图 / 30 秒视频。)

验证

(待补充:接入成功的界面长什么样。)

常见问题

(待补充:模型 id 怎么填、流式、国内网络。)

Coze

把 Praxis 接入 Coze——字节跳动的智能体构建平台。Coze 支持自定义模型接入,在设置中添加 OpenAI 兼容模型即可使用 Praxis。

每一步都标了期望结果。

你将完成

  • 在 Coze 中把 Praxis 配置为自定义模型,在智能体中使用
  • 完成标志:智能体对话收到 Praxis 模型的回复
  • 支持协议:OpenAI 兼容(/openai/v1)

前提

配置

第 1 步:在 Coze 平台,点击左侧「模型」(或进入 Bot 编辑页 → 模型设置)。

第 2 步:选择「OpenAI 兼容」类型:

字段填什么
模型名称deepseek-flash
API Base URLhttps://api.deepraxis.ai/openai/v1
API Keysk-praxis- 开头的你的 Key

点「测试连接」→「保存」。期望:测试通过,模型出现在可用列表。

验证

创建 Bot,选 deepseek-flash,发「你好」。期望:收到回复即接入成功。

常见问题

症状原因解法
测试失败URL 少了 /openai/v1完整 URL
401Key 不完整重新复制

相关食谱

n8n

待补充

本页是接入模板占位,配置步骤、截图与视频尚未填写。
支持协议OpenAI 兼容节点
备注—

前提

一个 API Key(见快速开始)。

配置

(待补充:在 n8n 中填入 https://api.deepraxis.com 与 API Key 的步骤,配截图 / 30 秒视频。)

验证

(待补充:接入成功的界面长什么样。)

常见问题

(待补充:模型 id 怎么填、流式、国内网络。)

FastGPT

把 Praxis 接入 FastGPT——专注于知识库问答(RAG)的开源平台。Docker Compose 部署,在模型配置中添加 OpenAI 兼容渠道指向 Praxis,即可用你的模型做知识库问答。

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

你将完成

  • 在 FastGPT 中把 Praxis 配置为模型渠道,在聊天中使用
  • 完成标志:聊天中收到 Praxis 模型的回复
  • 支持协议:OpenAI 兼容(/openai/v1)

前提

安装

完整部署见 FastGPT 官方文档。核心:docker compose up -d,访问 http://localhost:3000,用 .env 中的默认密码登录。

配置

第 1 步:进入模型渠道设置

点击左下角头像 →「账号」→「模型配置」。

第 2 步:添加 OpenAI 兼容渠道

点「新增渠道」,选「OpenAI」类型:

字段填什么
渠道名称Praxis
API Basehttps://api.deepraxis.ai/openai/v1
API Keysk-praxis- 开头的你的 Key
模型deepseek-flash

点「保存」。期望:渠道保存成功,模型测试通过。

验证

聊天页选 deepseek-flash,发「你好」。期望:收到回复即接入成功。

常见问题

症状原因解法
localhost:3000 打不开容器启动中docker compose logs -f
测试不通过地址少了 /openai/v1必须是 https://api.deepraxis.ai/openai/v1
401Key 不完整重新复制
知识库搜索无结果嵌入模型未配置另配 text-embedding-3-small

相关食谱

SDK 与框架

用你熟悉的 SDK 写代码调 Praxis 的模型——已有一切 OpenAI / Anthropic 代码不用换库,只改一个 baseURL。

所有 SDK 共用同一套 前提:一个 sk-praxis- 开头的 Praxis API Key(走环境变量,不写进代码)。

协议速查:OpenAI 兼容走 https://api.deepraxis.com/openai/v1;Anthropic 兼容走 https://api.deepraxis.com/anthropic。

你是第一次写 SDK 代码? 推荐从 OpenAI 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 创建:点「创建 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.com/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。

Python 版

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.com/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)。

Python 版示例的真实输出

流式响应

新建 stream.mjs:

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.deepraxis.com/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.com/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 是固定版本快照

相关食谱

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 创建:点「创建 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.com/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 块。

终端运行示例脚本的真实输出

Python 版

pip install anthropic

新建 hello.py:

import os
from anthropic import Anthropic

client = Anthropic(
    base_url="https://api.deepraxis.com/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 同形。

Python 版示例的真实输出

流式响应

新建 stream.mjs:

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

const client = new Anthropic({
  baseURL: "https://api.deepraxis.com/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_tokensAnthropic 协议必填该参数在 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 SDK
  • 换模型:改 model 字段即可,Claude 系旗舰填 claude-opus-5;deepseek-flash 是滚动入口始终指向最新一代 Flash
  • 拿思维链:推理模型的 content 里 type 为 thinking 的块即思维链,按需读取

相关食谱

Vercel AI SDK

把 Praxis 接入 Vercel AI SDK——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 创建:点「创建 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.com/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.com/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.com/openai/v1(以 /v1 结尾)
400 STREAMING_UNPROVEN该模型路由暂未开放流式去掉流式用 generateText,或换个模型重试
模型不存在模型 ID 与目录不一致到控制台 → 模型 → 模型目录复制确切 ID

进阶

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

相关食谱

LangChain

把 Praxis 接入 LangChain(JS/TS 版)——链、记忆、工具全家桶照常用,模型侧只改一个 baseURL。本页以 Node 实测。

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

你将完成

  • 用 LangChain 的 ChatOpenAI 调 Praxis 的模型,拿到回复与用量
  • 完成标志:hello.mjs 打印中文回复与用量,stream.mjs 逐字打印回复
  • 预计耗时:3–5 分钟(不含 Node.js 安装)
  • 支持协议:OpenAI 兼容(/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.com/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.com/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.com/openai/v1(以 /v1 结尾)
配置不生效地址写在了顶层而不是 configuration 里移进 configuration: { baseURL, apiKey }
400 STREAMING_UNPROVEN该模型暂未开放流式改用 invoke,或换个模型重试
模型不存在模型 ID 与目录不一致到控制台 → 模型 → 模型目录复制确切 ID

进阶

  • 链式调用:model.pipe(...) 接提示词模板、输出解析器即成链——Praxis 侧无需任何额外配置
  • 查这次调用花了多少钱:LangChain 的用量不带费用;用 OpenAI SDK 那条路 usage.cost 直接返回,或看控制台 → 用量与费用
  • 换模型:改 model 字段;deepseek-flash 是滚动入口始终指向最新一代 Flash

相关食谱

迁移指南

从 OpenAI 官方迁移

保留 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.com/openai/v1",
+    api_key=os.environ["PRAXIS_API_KEY"],
 )
-model = "gpt-4o"
+model = "deepseek-flash"

1. 准备

需要 Python 3.10+、uv 和一个 Praxis Key。在控制台 → API Keys创建 Key,将它安全注入当前终端的 PRAXIS_API_KEY 环境变量;不要把 Key 写进代码或日志。保留原服务的配置与 Key,供回滚使用。以下命令在 macOS / Linux 的 Bash 中执行。

test -n "${PRAXIS_API_KEY:-}"

期望:退出码 0;退出码 1 表示变量未设置,先设置再继续。

2. 选择模型 ID

下表是迁移选择,不是别名或等价效果承诺。可用性核对于 2026-10-12;切换流量前再查模型目录。

原 IDPraxis 选择需要注意
gpt-4o、gpt-4o-minideepseek-flash原 ID 不存在;重新评估提示词、工具与回答质量
gpt-4.1、o3-mini、gpt-5deepseek-flash不自动映射;原 ID 返回 404
必须使用 OpenAI 系模型gpt-5.6-sol可用 Chat Completions,不支持 Responses
原代码使用 Responsesdeepseek-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 要分别确认。
  • 切流量前用自己的提示词检查流式、工具执行、结构化输出和思考行为。字段差异以 Chat Completions 与 Responses 为准。
  • 原服务的文件、会话与响应 ID 不随地址修改自动迁移;保留源数据,并重建应用需要的资源。
  • Chat 的 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 参考。

3. 验证一次请求

设置好 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.com/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按表替代,或让该请求继续使用原服务

4. 回滚

一起恢复三个原值:https://api.openai.com/v1、OPENAI_API_KEY 中的原 Key、原模型 ID。移除 Praxis 专有请求字段,恢复原资源 ID。重启应用让客户端加载旧配置,再跑原有冒烟请求并保留请求 ID。

期望:原端点成功返回可用正文。配置回滚不会退还已发生的调用费用,也不会在服务之间复制会话状态。

API 参考 → · 兼容指南 →

从 Anthropic 迁移

保留 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.com/anthropic",
+    api_key=os.environ["PRAXIS_API_KEY"],
 )
-model = "claude-sonnet-4-5"
+model = "deepseek-flash"

1. 准备

需要 Python 3.10+、uv 和一个 Praxis Key。在控制台 → API Keys创建 Key,将它安全注入当前终端的 PRAXIS_API_KEY 环境变量;不要把 Key 写进代码或日志。保留原服务的配置与 Key,供回滚使用。以下命令在 macOS / Linux 的 Bash 中执行。

test -n "${PRAXIS_API_KEY:-}"

期望:退出码 0;退出码 1 表示变量未设置,先设置再继续。

2. 选择模型

原选择Praxis 选择要检查什么
官方 Claude ID,如 claude-sonnet-4-5本例使用 deepseek-flash这是另一个模型,不是 Claude 别名;重新评估质量与工具行为
必须使用 Claude从 /anthropic/v1/models 复制可用的 Claude ID2026-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。
  • Chat 的 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 不会自动映射;应选择目录模型,并重新上传需要的源文件。

3. 验证一次请求

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.com/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,或保留原批处理服务

4. 回滚

恢复 https://api.anthropic.com、ANTHROPIC_API_KEY 中的原 Key 和原 Claude 模型 ID,同时恢复原思考选项与文件引用。重启客户端,运行原 Messages 冒烟请求,保留请求 ID。

期望:原服务返回可用正文。修改配置不会搬运文件、历史会话状态,也不会撤销已产生的费用。

API 参考 → · 兼容指南 →

从 OpenRouter 迁移

保留 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.com/openai/v1",
+    api_key=os.environ["PRAXIS_API_KEY"],
 )
-model = "openai/gpt-4o"
+model = "deepseek-flash"

1. 准备

需要 Python 3.10+、uv 和一个 Praxis Key。在控制台 → API Keys创建 Key,将它安全注入当前终端的 PRAXIS_API_KEY 环境变量;不要把 Key 写进代码或日志。保留原服务的配置与 Key,供回滚使用。以下命令在 macOS / Linux 的 Bash 中执行。

test -n "${PRAXIS_API_KEY:-}"

期望:退出码 0;退出码 1 表示变量未设置,先设置再继续。

2. 替换模型 ID

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。

3. 验证一次请求

先跑通不带供应商偏好的最小 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.com/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选择提供该操作的模型

4. 回滚

恢复 https://openrouter.ai/api/v1、原 OPENROUTER_API_KEY、原模型 ID 和保存的 OpenRouter 选项。重启客户端后跑原冒烟请求。不要把 Praxis Key 发给 OpenRouter。

期望:原请求返回可用正文与预期模型。Praxis 上已产生的调用费用仍保留。

API 参考 → · Cookbook:OpenAI SDK →

从其他网关迁移

先迁移一次请求:改 API 地址、Key 和模型 ID。下面示例面向兼容 OpenAI Chat Completions 的客户端,不会自动把其他请求协议转换成 Chat。

1. 准备终端

准备 Python 3.10+ 和 uv。将 Praxis 云 API Key 放入环境变量 PRAXIS_API_KEY,不要写入代码或日志。

test -n "$PRAXIS_API_KEY"

期望:退出码为 0。退出码 1 表示变量未设置,先设置再继续。示例默认使用 https://api.deepraxis.com。切换环境时,将 PRAXIS_API_BASE 设为相应 API 域名,不带末尾斜杠或 API 路径。

2. 修改三项配置

  1. 将 base_url 改为 https://api.deepraxis.com/openai/v1。期望:地址只含一次 /openai/v1,不是控制台网址,也不是完整的 /chat/completions 端点。
  2. 将客户端 Key 改为 PRAXIS_API_KEY。期望:不再向 Praxis 发送旧网关的 Key;另存原配置以便回滚。
  3. 本次冒烟验证将模型 ID 改为 deepseek-flash。期望:它出现在 GET /openai/v1/models?api=chat。旧网关的供应商前缀或别名不一定在此有效。

按当前使用的 API 选择更详细的迁移指南:

当前 API 或网关指南
OpenAI Chat Completions 或 Responses从 OpenAI 迁移
OpenRouter从 OpenRouter 迁移
Anthropic Messages从 Anthropic 迁移

3. 验证新配置

保存为 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.com') + '/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。

4. 切流量前检查

用自己的提示词检查流式、工具、结构化输出和思考设置。冒烟通过不代表模型行为相同。按需重建文件或响应资源:旧网关的 ID 不随配置迁移。验证失败时,一起恢复原地址、Key 和模型配置。

实测 gpt-5.6-sol 调用 Responses 返回 model_protocol_not_offered(HTTP 404)。支持 Chat 不代表支持 Responses,应按 Responses 指南查询对应目录。模型断言失败表示所选 ID 未出现在该协议目录中,应先核对再切流量。

API 参考 → · 模型指南 →

实战场景

这里的每一篇都是一个完整的端到端场景:跨多个服务、用到多种能力、有可运行的结果。如果你只想接一个工具,去上面各分区;如果你想做一件事,从这里开始。

已上线的场景

场景你将做成什么涉及能力
给文档站加问答助手按 ⌘K 弹出问答窗口,由服务型智能体回答帮助中心的问题智能体
在 SaaS 后台按登录用户嵌入按登录用户签发令牌,浮窗客服 + 侧栏助教,工具在服务端按用户鉴权智能体

正在规划的场景

场景你将做成什么涉及能力
构建一个 AI 客服用 Agent SDK + 模型对话 + 上下文管理,搭建一个能回答问题的智能体模型 · 智能体
批量处理文档用模型 + 文件上传 + 结构化输出,批量提取和转换文档内容模型 · 文件
搭建 RAG 问答用嵌入 + 搜索 + 模型,让 AI 基于你的知识库回答问题模型 · 搜索
构建多 Agent 协作用工作流 + 多智能体编排,让多个 AI 分工协作完成复杂任务工作流 · 智能体

以上场景正在编写中,优先级由社区反馈驱动——你想先看哪个,告诉我们就优先写。

给文档站加问答助手

本页带你给一个帮助中心或文档站加上「⌘K 问答」:访客按下 ⌘K(Windows / Linux 为 Ctrl+K)或点击搜索框,弹出一个居中的对话窗口,由服务型智能体依据你写好的内容回答。参照实现是仓库里「好物集」演示站(apps/kit-demo)的帮助中心页,路径 /help。

你需要:一个 Praxis API Key、一个能放后端接口的站点、一个前端页面。

未登录访客即将支持

这个场景最常见的需求是「访客不用登录就能问」。令牌签发需要你的后端带上终端用户 ID,所以现在的做法是:只对已登录的用户开放,或由后端自行决定用什么 ID 签发(见下文「未登录的访客」)。面向匿名访客的正式方案「可公开 key」还在开发中,上线后本页会补充,现在请不要依赖。

工作方式

访客按 ⌘K ──▶ 页面加载 Kit,调用 getToken
                         │
                         ▼
        你的后端 POST /api/praxis-token ──(API Key)──▶ POST /agent/v1/embed_tokens
                         │
                         ◀── { token, expires_at }
Kit(modal)──(token)──▶ Praxis API ──▶ 服务型智能体

浏览器里没有 API Key。Kit 只在访客第一次打开时才加载,之后令牌由 getToken 按需取得。

1. 创建智能体并写入答案范围

  1. 在 Console 打开「服务型智能体」,点「新建服务型智能体」。
  2. 进入「接入与配置 · 配置 · 指令」,写明角色、回答范围和越界时怎么办,并把要回答的内容放进去。演示站的帮助中心智能体就是这样做的:把 FAQ 全文放进指令,要求「依据下面的内容回答,不编造政策、优惠或时效;范围外的问题请用户联系客服」,并且不配置任何工具。
  3. 在「配置 · 安全」选择运行环境,在来源白名单里点「添加来源」,填你的站点来源(例如 https://help.example.com)。本地调试可打开「允许 localhost」。点「保存安全设置」。
  4. 记下页面标题下方的智能体短号(旁边有复制按钮)。

期望:保存安全设置后出现「已保存,不产生新版本」;「接入与配置 · 试用调试」里能直接和智能体对话。

指令不是秘密,模型可能被用户要求复述,不要放不想公开的内容,见传入上下文。

2. 后端签发令牌

在 Console 的 API Keys 里创建一个专门用来签发令牌的 Key,放进后端环境变量。下面是一个与框架无关的处理函数,参照演示站的 /api/praxis-token:

const API = "https://api-develop.deepraxis.com"; // 正式地址上线后替换

export async function handlePraxisToken(request: Request, currentUserId: string | null): Promise<Response> {
  if (!currentUserId) return Response.json({ error: "请先登录" }, { status: 401 });
  const response = await fetch(`${API}/agent/v1/embed_tokens`, {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.PRAXIS_API_KEY}`, // 占位:只放在后端
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      agent: process.env.PRAXIS_AGENT,   // 智能体 id 或短号
      external_user_id: currentUserId,   // 来自你的登录态,不接受前端传入
    }),
    signal: AbortSignal.timeout(15_000),
  });
  // 不要把上游错误原文转给浏览器
  if (!response.ok) return Response.json({ error: "问答暂时不可用,请稍后重试" }, { status: 502 });
  const { token, expires_at } = await response.json();
  return Response.json({ token, expires_at });
}

期望:已登录请求返回 HTTP 200 和 { token, expires_at };未登录返回 401。令牌字段与错误见嵌入令牌与终端用户。

3. 前端:⌘K 打开 modal

Kit 的 layout: "modal" 是居中的原生对话框,自带遮罩、焦点管理和 Esc 关闭。launcher: { type: "none" } 表示不显示启动按钮,由你的页面调用 open()。⌘K 快捷键由页面自己监听,Kit 不内置。

<button id="help-search">搜索或提问(⌘K)</button>

<script type="module">
  let pending;
  function loadAssistant() {
    pending ??= (async () => {
      await import("/praxis-kit.js"); // Kit 的构建产物,由你的站点提供
      await customElements.whenDefined("praxis-agent");
      const agent = document.createElement("praxis-agent");
      agent.setOptions({
        api: {
          url: "https://api-develop.deepraxis.com", // 正式地址上线后替换
          getToken: async () => {
            const response = await fetch("/api/praxis-token", { method: "POST", credentials: "same-origin" });
            if (!response.ok) throw new Error("问答暂时不可用,请稍后重试");
            return (await response.json()).token;
          },
        },
        agent: { name: "帮助中心问答" },
        layout: "modal",
        launcher: { type: "none" },
        header: { title: "帮助中心问答", icon: "help-circle" },
        startScreen: {
          greeting: "有什么可以帮你?",
          prompts: ["如何申请退货?", "在哪里查看配送进度?"].map(text => ({ label: text, prompt: text })),
        },
        composer: { placeholder: "输入你的问题…" },
      });
      document.body.appendChild(agent);
      return agent;
    })().catch(error => { pending = undefined; throw error; }); // 加载失败后允许再次尝试
    return pending;
  }

  async function openAssistant() {
    try { (await loadAssistant()).open(); }
    catch { alert("问答加载失败,请重新打开搜索。"); }
  }

  document.querySelector("#help-search").addEventListener("click", openAssistant);
  document.addEventListener("keydown", event => {
    if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === "k") {
      event.preventDefault();
      openAssistant();
    }
  });
</script>
  • open() / close() 是元素方法;窗口关闭时元素触发 praxis.close 事件,可以在里面把焦点还给搜索框。
  • 想用 CDN 加载而不是自托管,见安全里的「子资源完整性」:浮动路径 https://kit-develop.praxisusercontent.com/v1/praxis-kit.js,或不可变路径 /v0.1.0/praxis-kit.js 配 integrity。
  • 用 React 时换成 @deepractice-ai/praxis-kit-react 的 <PraxisAgent> 与 usePraxisAgent(),control.open() 打开,见嵌入方式。

期望:按 ⌘K 或点击按钮,弹出带遮罩的对话窗口并出现欢迎语与两个推荐问题;点推荐问题收到回复;按 Esc 关闭。

4. 验证

不打开浏览器也可以验证后端和令牌:

curl -X POST https://api-develop.deepraxis.com/agent/v1/embed_tokens \
  -H "Authorization: Bearer $PRAXIS_API_KEY" -H "Content-Type: application/json" \
  -d '{"agent":"<智能体 id 或短号>","external_user_id":"smoke-test"}'

期望:HTTP 200,返回 id、token、expires_at。随后在 Console 的「运营与管理 · 签发记录」能看到这条记录,见运营与管理。

未登录的访客

演示站为了能让任何人试用,对帮助中心智能体在未登录时用固定的 external_user_id: "guest" 签发。这只适合演示:所有访客共用同一个终端用户身份,嵌入策略里「单个终端用户的活跃会话上限」「每分钟请求上限」按这个身份合计,封禁一个访客就等于封禁全部。正式站点请在「可公开 key」上线前只对已登录用户开放,或自行给每位访客分配稳定的匿名 ID。

常见问题

  • 签发返回 INVALID_PARAMS「embed policy not configured」:智能体还没有嵌入策略,回到「配置 · 安全」保存一次。
  • 签发返回 EMBED_USER_BLOCKED:这个 external_user_id 在封禁名单里,在「运营与管理 · 终端用户」解封。
  • 弹窗打开但无法对话:确认页面来源在来源白名单里,api.url 与签发令牌用的是同一个环境。
  • 页面设置了 CSP 后脚本被拦截:见安全里的内容安全策略。

下一步:在 SaaS 后台按登录用户嵌入 · 组件参考 · 限制与错误

在 SaaS 后台按登录用户嵌入

本页带你把服务型智能体放进一个有登录的 SaaS 后台,并做到三件事:智能体知道当前是谁、知道他正在看什么、只能查他自己的数据。参照实现是仓库里「好物集」演示站(apps/kit-demo)的两个场景:右下角浮窗客服,和课程页右侧的课程助教。

你需要:一个 Praxis API Key、一个有登录态的后端、一个前端页面,以及(想让智能体查订单时)一个你自己的 MCP 服务。

工作方式

登录用户 ──▶ 你的后端 /api/praxis-token
              │  用登录态里的用户 ID + 用户信息
              ▼
        POST /agent/v1/embed_tokens
        { agent, external_user_id, system_message }
              │
              ◀── { token, expires_at }
浏览器(Kit)──(token)──▶ Praxis API ──▶ 智能体 ──MCP──▶ 你的订单服务
                                                 └ 带 X-Praxis-External-User-Id

三类信息各走各的渠道,可信度不同,完整说明见传入上下文:

信息渠道可信
当前用户的姓名、会员等级签发令牌时的 system_message是,来自你的后端
用户正在看哪一课、播到哪里页面上下文与前端工具否,来自浏览器
用户的订单智能体调用你的 MCP 工具取决于你的服务端鉴权

1. 创建智能体

在 Console「服务型智能体」点「新建服务型智能体」,然后在「接入与配置 · 配置」里:

  1. 指令:写角色与边界。演示站客服的要点是:只回答本店商品、订单、退货与会员问题;查订单和退货必须使用订单工具,不编造订单;退货前先用一句话向用户确认订单与原因。
  2. MCP 与凭据:添加 MCP 服务器,名称填 orders,类型选 HTTP,URL 填 https://你的域名/mcp。再到下方「凭据库」勾选存放该服务访问令牌的凭据库,并保存凭据库选择。凭据的「允许的主机」要包含 MCP 服务的域名,会话按它自动匹配凭据。
  3. 工具与授权:在「授权方式」里,查询类工具选「自动执行」,申请退货这类写入工具选「每次询问」。
  4. 安全:选运行环境,在来源白名单添加你的后台域名,保存安全设置。要允许用 system_message 之外的方式覆盖指令才打开「允许宿主覆盖指令」,这里不需要。

期望:在「试用调试」里用「模拟」页签填入 external_user_id 与 system_message,点「重新签发」后能和智能体对话,「上下文」页签的 host_context 显示你填的内容。

2. 后端:按登录用户签发,并带上用户信息

const API = "https://api-develop.deepraxis.com"; // 正式地址上线后替换

export async function handlePraxisToken(request: Request, user: { id: string; name: string; level: string } | null) {
  if (!user) return Response.json({ error: "请先登录" }, { status: 401 });
  const response = await fetch(`${API}/agent/v1/embed_tokens`, {
    method: "POST",
    headers: { Authorization: `Bearer ${process.env.PRAXIS_API_KEY}`, "Content-Type": "application/json" },
    body: JSON.stringify({
      agent: process.env.PRAXIS_AGENT_SUPPORT,
      external_user_id: user.id, // 稳定且唯一,来自登录态
      system_message: [{ type: "text", text: `当前用户 ${user.name},会员等级 ${user.level}` }],
    }),
    signal: AbortSignal.timeout(15_000),
  });
  if (!response.ok) return Response.json({ error: "客服暂时不可用,请稍后重试" }, { status: 502 });
  const { token, expires_at } = await response.json();
  return Response.json({ token, expires_at });
}
  • external_user_id 只能来自你的登录态,不接受请求体里的值;它还是下面 MCP 鉴权用的身份。
  • system_message 是文本块数组,合计不超过 8192 字节。它不是秘密,模型可能被要求复述。
  • 课程助教是另一个智能体:同一个接口,换 agent,system_message 里换成学员信息。演示站用一个 agent 参数在后端选择,并且只接受预先登记的几个值。

期望:HTTP 200 与 { token, expires_at };未登录 401。

3. 前端:浮窗客服

import "/praxis-kit.js"; // Kit 的构建产物,由你的站点提供

const agent = document.createElement("praxis-agent");
agent.setOptions({
  api: {
    url: "https://api-develop.deepraxis.com",
    getToken: async () => {
      const response = await fetch("/api/praxis-token", { method: "POST", credentials: "same-origin" });
      if (!response.ok) throw new Error("客服暂时不可用,请稍后重试");
      return (await response.json()).token;
    },
  },
  agent: { name: "好物集客服" },
  layout: "popup",
  launcher: { type: "bubble", position: "bottom-right", label: "咨询客服" },
  header: { title: "好物集客服", subtitle: "通常几秒内回复" },
  startScreen: {
    greeting: "你好!有问题随时问我。",
    prompts: ["我的订单到哪了", "怎么退货"].map(text => ({ label: text, prompt: text })),
  },
});
document.body.appendChild(agent);

只在用户登录之后才创建这个元素;退出登录时整页刷新,这样上一位用户的令牌不会留在内存里。

期望:右下角出现气泡,点开出现欢迎语;问「我的订单到哪了」时智能体调用订单工具并给出该用户的订单。

4. 前端:侧栏课程助教,带页面上下文和前端工具

课程页用 layout: "sidebar"(右侧 400px 非模态面板,需要你为它在页面上留出位置)。助教要知道「学员正在看哪一课、播到哪里」,用两个入口:页面上下文放每轮都用得上的小事实,前端工具放需要时才读的数据。

先在智能体定义的 tools 里声明前端工具(类型 custom,写法见前端工具与页面上下文):

{
  "type": "custom",
  "name": "get_playback_progress",
  "description": "读取学员当前的视频播放进度",
  "input_schema": { "type": "object", "properties": {}, "additionalProperties": false }
}

再在页面里实现:

const tutor = document.createElement("praxis-agent");
tutor.setOptions({
  api: { url: "https://api-develop.deepraxis.com", getToken: fetchTokenForTutor },
  agent: { name: "课程助教" },
  layout: "sidebar",
  launcher: { type: "none" },
  header: { title: "课程助教", icon: "message-circle" },
});

// 页面上下文:随每条用户消息附带,标记为不可信
tutor.setReadable("course", "降噪耳机入门");
tutor.setReadable("lesson", "第 1 课:认识主动降噪");

// 前端工具:智能体调用时在页面里执行,返回值交还给智能体
tutor.onClientTool = ({ name }) => {
  if (name !== "get_playback_progress") throw new Error("unknown tool");
  return { lesson: "第 1 课:认识主动降噪", position_seconds: 83, duration_seconds: 300, playing: true };
};

document.body.appendChild(tutor);
tutor.addEventListener("praxis.open", () => document.body.classList.add("tutor-open"));
tutor.addEventListener("praxis.close", () => document.body.classList.remove("tutor-open"));
document.querySelector("#open-tutor").addEventListener("click", () => tutor.open());

换课时再调用一次 setReadable("lesson", …),之后每条消息自动带最新值。onClientTool 是元素的 JavaScript 属性,不是 setOptions 的选项;对不认识的工具名必须抛错。限制、超时与 React 写法见前端工具与页面上下文。

期望:打开侧栏后问「我现在看到哪了」,智能体调用 get_playback_progress 并据返回值回答,页面上能看到它没有编造进度。

5. 服务端按用户鉴权的 MCP 工具

平台调用你的 MCP 服务时会带上 X-Praxis-External-User-Id(令牌里的 external_user_id)、X-Praxis-Agent-Id、X-Praxis-Session-Id。工具必须按这个头限定数据范围,不要用模型传来的参数确定用户。

// MCP 请求入口:先校验平台出示的访问令牌,再取用户身份
export async function handleMcp(request: Request, expectedToken: string) {
  if (request.headers.get("authorization") !== `Bearer ${expectedToken}`) {
    return Response.json({ error: "未授权" }, { status: 401 });
  }
  const userId = request.headers.get("X-Praxis-External-User-Id"); // 每个请求单独读取
  // list_orders: 只返回 userId 名下的订单
  // request_return: 先确认订单属于 userId,再受理
  // userId 缺失或不认识 → 以工具错误返回,不返回任何数据
}

演示站的 MCP 服务有两个工具:list_orders(readOnlyHint: true)和 request_return(destructiveHint: true,参数 order_id、reason,订单不属于当前用户时返回「订单不存在或不属于当前用户」)。每个请求单独创建服务与闭包,并发请求之间不会串用户。

期望:用 alice 登录问订单只看到 alice 的订单;换 bob 登录看到 bob 的;让智能体「查 alice 的订单」时 bob 拿不到任何数据。询问确认只是帮用户确认意图,不是安全手段,详见工具授权。

常见问题

  • 智能体说查不了订单:在「配置 · MCP 与凭据」确认 MCP 服务器地址可访问,凭据库已勾选,且凭据的允许主机包含该域名。
  • 工具总是返回「缺少用户身份」:只有会话属于某位终端用户时才带身份头;确认令牌签发时传了 external_user_id。
  • 侧栏遮住了页面内容:侧栏是浮在页面上的面板,要用 praxis.open / praxis.close 事件给页面留出空位。
  • 前端工具总是「not available」:onClientTool 要在智能体调用之前赋到元素上。

下一步:给文档站加问答助手 · 令牌与终端用户 · 安全