Skip to main content
@acedatacloud/sdk 是 Ace Data Cloud 官方 TypeScript / JavaScript SDK,把 api.acedata.cloud 上所有服务封装成类型化的 client.openai.chat.completions.create(...)、client.images.generate(...)、client.search.google(...) 等方法,自带 SSE 流式、重试退避、类型化异常。 可以在 Node.js、Deno、Bun 和现代浏览器(带 bundler)中使用。 源码与包地址:

安装

如果需要 X402 链上付费(无 API Token 路径),再装一个:
干净 npm 项目的版本检查输出:
结果说明:
  • 包版本是 2026.504.2(CalVer,2026 年第 504 个 ISO 周的第 2 个修订)。
  • AceDataCloud 是构造客户端用的主 class,从默认导出可访问。

准备 API Token

参考 SDK 总览 - 申请 API Token 取到 token,然后在 shell 里 export:
构造客户端时不传 apiToken,SDK 会自动读取 ACEDATACLOUD_API_TOKEN 环境变量。如果你的环境里已经存了 ACEDATACLOUD_API_KEY(项目仓库约定),可以显式传入:new AceDataCloud({ apiToken: process.env.ACEDATACLOUD_API_KEY })。

示例 1:chat.completions(非流式)

程序运行结果:
结果说明:
  • id chatcmpl-DldCcLvkTFaioST8e6SjOl0wJScQA 是 OpenAI 兼容响应 ID,可以在控制台 使用历史 里搜到对应记录。
  • content ADC_TS_SDK_OK 是模型真实返回的固定标识,证明响应没有被 SDK 篡改。
  • 一次 chat completion 大约消耗 22 token,按 gpt-4o-mini 单价计费。
  • SDK 将响应声明为 Record<string, unknown>,运行时就是 JSON 对象,.id / .choices[0].message.content 这种点访问在 .mjs、Node REPL、Bun 下都能跑;严格 TypeScript 项目下可能需要 (res as any).id 或在 tsconfig 关闭 noImplicitAny。

示例 2:chat.completions(SSE 流式)

将 stream: true 打开后,create 返回一个异步迭代器,每一帧都是一个 ChatCompletionChunk。
程序运行结果:
结果说明:
  • 首帧延迟 2481 ms 是模型生成第一个 token 的时间;后续 12 帧在 135 ms 内全部到达。
  • 13 帧合起来是 "1 2 3 4 5",每个 token 单独成帧 + 最后一帧带 finish_reason。
  • 流式没有比非流式更省 token,但首字延迟显著降低,适合做实时 UI。

示例 3:images.generate(NanoBanana)

client.images.generate({ provider: 'nano-banana', ... }) 直接同步返回,不需要传 wait 参数——NanoBanana API 本身就是同步生成。
程序运行结果:
结果说明:
  • image_url 是 CDN 上的稳定地址,可以直接 <img src /> 或下载。
  • 16.6 秒里大部分时间是模型推理,本地 SDK 开销可忽略。
  • trace_id 是平台分配的请求 ID,如果出问题贴这个 ID 给客服可以最快定位。
  • 对于异步类服务(Midjourney、Sora、Veo 等)需要 TaskHandle 轮询,详见 SDK 任务轮询与流式响应。

示例 4:类型化错误处理

SDK 会按 HTTP 状态把错误抛成具体的子类(AuthenticationError / BadRequestError / RateLimitError / InternalServerError / APIConnectionError 等),可以用 instanceof 精确分支。
程序运行结果:
结果说明:
  • 401 自动映射为 AuthenticationError,业务代码可以用 instanceof 精确分支。
  • code: invalid_token 来自 PlatformGateway,便于和后端日志对照。
  • 同理 429 → RateLimitError、400 → BadRequestError、5xx → InternalServerError。

示例 5:多模型路由

同一个客户端可以在多个服务之间随意切换,模型名一致就行。
程序运行结果:
结果说明:
  • 一份代码、一份 token,覆盖 OpenAI / Google / DeepSeek / xAI 四类模型服务。
  • gemini-2.5-flash 这次没返回 ADC_OK,是模型自身的输出风格差异——SDK 没有静默吞掉任何东西,把模型原话忠实透传给业务。
  • 价格按各自的真实 token 单价计费,路径只过一次 PlatformGateway。

示例 6:Google 搜索

程序运行结果:
结果说明:
  • 一次请求拿到 10 条 organic 结果,字段名 organic(不是 organic_results)。
  • 搜索通过 Serp 服务 走的,按次计费。
  • 同一个客户端实例既能 chat 又能搜,token 一份就够。

配置选项

浏览器使用

@acedatacloud/sdk 是 ESM + ISO(同构)包,可以在带 bundler 的现代浏览器里直接 import。注意:不要在前端代码里把 API Token 硬编码。前端推荐:
  1. 用 X402 paymentHandler —— 用户钱包按次签 USDC,无需 token。
  2. 或在自己服务端用 SDK,浏览器只调你自己的后端。

进阶:任务轮询和流式响应

  • 任务类服务(Midjourney、Sora、Veo、Suno):用 TaskHandle 轮询,单位、超时和重试细节见 SDK 任务轮询与流式响应。
  • 流式 chat:本页示例 2 已演示;流式 audio / video 同样支持。

进阶:X402 支付钩子

如果不想申请 API Token、想按次链上付费,可以用 paymentHandler:
createX402PaymentHandler 在 TypeScript 端接受 { network, evmProvider, evmAddress, preferScheme? }(EVM 链)或 { network: 'solana', solanaWallet }(Solana)。Node 服务端没有 window.ethereum 时,请用 viem 的 createWalletClient(基于私钥)封装一个 EIP-1193 兼容的 provider 再传进来;详细做法和真实链上结果见 SDK + X402 支付钩子。

如何查看剩余额度

通过 Ace Data Cloud 控制台 - 应用列表,即可查看当前账户的剩余额度。 通过 Ace Data Cloud 控制台 - 使用历史 即可查看所有使用历史和扣费详情。

了解更多