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 控制台 - 使用歷史 即可查看所有使用歷史和扣費詳情。

了解更多