acedatacloud 是 Ace Data Cloud 官方 Python SDK,把 api.acedata.cloud 上所有服务封装成类型化的 client.openai.chat.completions.create(...)、client.images.generate(...)、client.search.google(...) 等方法,同时提供同步和异步两套客户端。
底层基于 httpx,支持 SSE 流式、自动重试、类型化异常和 pydantic 类型校验。
源码与包地址:
安装
1 |
pip install acedatacloud |
如果需要 X402 链上付费(无 API Token 路径),再装一个:
1 |
pip install acedatacloud-x402 |
干净 venv 的版本检查输出:
1 |
$ python -c "import importlib.metadata as m; print(m.version('acedatacloud'))" |
结果说明:
- 包版本是
2026.4.26.1(CalVer,2026 年 4 月 26 日修订)。 AceDataCloud是同步客户端,AsyncAceDataCloud是 asyncio 异步客户端。- 本 SDK 不依赖
pydantic,响应体统一返回dict。这一点和openai-python不同,迁移时需要注意。
准备 API Token
参考 SDK 总览 - 申请 API Token 取到 token,然后在 shell 里 export:
1 |
export ACEDATACLOUD_API_TOKEN={token} |
构造客户端时不传 api_token,SDK 会自动读取 ACEDATACLOUD_API_TOKEN 环境变量。如果你的环境里已经存了 ACEDATACLOUD_API_KEY(项目仓库约定),请显式传入:AceDataCloud(api_token=os.environ["ACEDATACLOUD_API_KEY"])。
示例 1:chat.completions(同步)
1 |
import os, time, json |
程序运行结果:
1 |
elapsed_ms 2963 |
结果说明:
id是上游响应 ID,可以在 使用历史 里搜到。content ADC_PY_SDK_OK是模型真实返回的固定标识。res["usage"]返回dict,不是 pydantic model;一次调用大约消耗 24 token。
示例 2:chat.completions(SSE 流式)
stream=True 时 create 返回一个普通生成器,每次 yield 一个解析好的 chunk dict。
1 |
import os, time |
程序运行结果:
1 |
total_elapsed_ms 2111 |
结果说明:
- 首帧延迟 2104 ms,后续 11 帧只用了 7 ms 就到齐——一旦上游开始流,本地是顺手就能消费。
- chunk 是普通 dict,按 OpenAI SSE 格式逐层
.get()安全取值即可。 - 实际生产里推荐边 yield 边推 SSE 给前端,整体首字延迟接近 2 秒。
示例 3:AsyncAceDataCloud(异步)
AsyncAceDataCloud 的 API 跟同步版完全对称,只是所有 IO 方法返回 coroutine。适合 FastAPI / aiohttp / asyncio 服务。
1 |
import os, asyncio, time |
程序运行结果:
1 |
elapsed_ms 2392 |
结果说明:
- 异步版本和同步版本走的是同一条 HTTP 路径,只是连接池实现不同(
httpx.AsyncClient)。 - 退出时显式
await client.close()把连接池关掉;长生命周期服务里只需要在进程退出前关一次。 - 单次延迟跟同步差不多,并发场景下异步才显出优势——一个 event loop 可以同时跑几十上百个 inflight 请求。
示例 4:images.generate(NanoBanana)
NanoBanana 是同步生成的图像服务,不要传 wait——SDK 调用就会一直阻塞到上游 200 返回。
1 |
import os, time |
程序运行结果:
1 |
elapsed_ms 18977 |
结果说明:
image_url是 CDN 上的稳定地址,可以直接下载或嵌入网页。- 18.9 秒里几乎都是上游模型推理;本地 SDK 开销只有几毫秒。
- 对于 Midjourney、Sora、Veo、Suno 这种真正异步的任务,需要用
wait=True或手动TaskHandle.wait()轮询,详见 SDK 任务轮询与流式响应。
示例 5:类型化错误处理
1 |
import os |
异常层级跟 TypeScript 一致:AuthenticationError (401)、TokenMismatchError (token 与服务不匹配)、InsufficientBalanceError (余额不足)、ResourceDisabledError (服务被禁用)、ValidationError (400)、RateLimitError (429)、ModerationError (403 内容审核)、APIError (兜底)、TimeoutError(超时)、TransportError(网络层)。
配置选项
1 |
from acedatacloud import AceDataCloud |
Python SDK 的
timeout和 TaskHandle 的poll_interval/max_wait单位都是秒,TypeScript SDK 用的是毫秒,跨语言迁移时要特别注意。详见 SDK 任务轮询与流式响应。SDK 默认读取
ACEDATACLOUD_API_TOKEN环境变量;本文为了和 Claude Code VS Code 教程 等其它教程统一,示例里用的是ACEDATACLOUD_API_KEY,需要api_token=os.environ["ACEDATACLOUD_API_KEY"]显式注入。
进阶:X402 支付钩子
1 |
from acedatacloud import AceDataCloud |
完整流程和真实链上结果见 SDK + X402 支付钩子。
如何查看剩余额度
通过 Ace Data Cloud 控制台 - 应用列表,即可查看当前账户的剩余额度。
通过 Ace Data Cloud 控制台 - 使用历史 即可查看所有使用历史和扣费详情。