Skip to main content
acedatacloud — это официальный Python SDK от Ace Data Cloud, который оборачивает все сервисы на api.acedata.cloud в типизированные методы, такие как client.openai.chat.completions.create(...), client.images.generate(...), client.search.google(...) и т.д., а также предоставляет две версии клиента: синхронную и асинхронную. Базируется на httpx, поддерживает потоковую передачу SSE, автоматическую повторную попытку, типизированные исключения и валидацию типов pydantic. Исходный код и адрес пакета:

Установка

Если требуется оплата на цепочке X402 (без пути API Token), установите еще один:
Вывод проверки версии в чистом venv:
Результаты объясняют:
  • Версия пакета — 2026.4.26.1 (CalVer, исправление 26 апреля 2026 года).
  • AceDataCloud — это синхронный клиент, AsyncAceDataCloud — это асинхронный клиент asyncio.
  • Этот SDK не зависит от pydantic, тело ответа всегда возвращает dict. Это отличается от openai-python, на что нужно обратить внимание при миграции.

Подготовка API Token

Согласно Обзор SDK - Запрос API Token получите токен, затем в shell выполните export:
При создании клиента не передавайте api_token, SDK автоматически прочитает переменную окружения ACEDATACLOUD_API_TOKEN. Если в вашей среде уже хранится ACEDATACLOUD_API_KEY (согласно соглашению проекта), передайте явно: AceDataCloud(api_token=os.environ["ACEDATACLOUD_API_KEY"]).

Пример 1: chat.completions (синхронный)

Результат выполнения программы:
Результаты объясняют:
  • id — это ID ответа, который можно найти в Истории использования.
  • content ADC_PY_SDK_OK — это фиксированный идентификатор, который модель возвращает.
  • res["usage"] возвращает dict, а не модель pydantic; один вызов примерно потребляет 24 токена.

Пример 2: chat.completions (потоковая SSE)

При stream=True метод create возвращает обычный генератор, который каждый раз выдает один разобранный chunk dict.
Результат выполнения программы:
Результаты объясняют:
  • Задержка первой рамки 2104 мс, последующие 11 рамок заняли всего 7 мс — как только сервис начинает поток, локально это можно легко потреблять.
  • chunk — это обычный dict, безопасно извлекайте значения по формату OpenAI SSE с помощью .get().
  • В реальном производстве рекомендуется одновременно выдавать и передавать SSE на фронтенд, общая задержка первой рамки близка к 2 секундам.

Пример 3: AsyncAceDataCloud (асинхронный)

API AsyncAceDataCloud полностью симметричен синхронной версии, только все методы ввода-вывода возвращают корутины. Подходит для FastAPI / aiohttp / asyncio сервисов.
Результат выполнения программы:
Результаты объясняют:
  • Асинхронная версия и синхронная версия используют один и тот же HTTP путь, только реализация пула соединений различна (httpx.AsyncClient).
  • При выходе явно выполните await client.close(), чтобы закрыть пул соединений; в службах с длительным жизненным циклом нужно закрывать только один раз перед завершением процесса.
  • Задержка за один раз примерно такая же, как и у синхронной версии, в сценариях с параллельными запросами асинхронный подход демонстрирует свои преимущества — один цикл событий может одновременно обрабатывать десятки или сотни активных запросов.

Пример 4: images.generate (NanoBanana)

API NanoBanana — это сервис для синхронной генерации изображений, не передавайте wait — вызов SDK будет ждать, пока сервис не вернет 200.
Результат выполнения программы:
Описание результата:
  • image_url — это стабильный адрес на CDN, который можно использовать для загрузки или встраивания на веб-страницу.
  • Почти все 18.9 секунд ушло на вывод модели; затраты локального SDK составили всего несколько миллисекунд.
  • Для таких действительно асинхронных задач, как Midjourney, Sora, Veo, Suno, необходимо использовать wait=True или вручную TaskHandle.wait(), подробности см. в SDK задачи и потоковые ответы.

Пример 5: Обработка ошибок с типизацией

Иерархия исключений соответствует TypeScript: AuthenticationError (401), TokenMismatchError (токен не совпадает с сервисом), InsufficientBalanceError (недостаточно средств), ResourceDisabledError (сервис отключен), ValidationError (400), RateLimitError (429), ModerationError (403, модерация контента), APIError (общее), TimeoutError (тайм-аут), TransportError (сетевая ошибка).

Опции конфигурации

Тайм-аут Python SDK и poll_interval / max_wait TaskHandle измеряются в секундах, в то время как TypeScript SDK использует миллисекунды, на это нужно обратить особое внимание при переносе между языками. Подробности см. в SDK задачи и потоковые ответы.
SDK по умолчанию считывает переменную окружения ACEDATACLOUD_API_TOKEN; в этой статье, чтобы согласовать с Claude Code VS Code Tutorial и другими руководствами, в примере используется ACEDATACLOUD_API_KEY, необходимо явно инжектировать api_token=os.environ["ACEDATACLOUD_API_KEY"].

Продвинутый: X402 платежный хук

Полный процесс и реальные результаты на цепочке см. в SDK + X402 платежный хук.

Как проверить остаток

Через Консоль Ace Data Cloud - Список приложений можно проверить текущий остаток на счете. Через Консоль Ace Data Cloud - История использования можно просмотреть всю историю использования и детали списания.

Узнать больше