acedatacloud — это официальный Python SDK от Ace Data Cloud, который оборачивает все сервисы на api.acedata.cloud в типизированные методы, такие как client.openai.chat.completions.create(...), client.images.generate(...), client.search.google(...) и т.д., а также предоставляет две версии клиента: синхронную и асинхронную.
Базируется на httpx, поддерживает потоковую передачу SSE, автоматическую повторную попытку, типизированные исключения и валидацию типов pydantic.
Исходный код и адрес пакета:
- Репозиторий SDK: https://github.com/AceDataCloud/SDK
- PyPI: https://pypi.org/project/acedatacloud/
Установка
- Версия пакета —
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 (асинхронный)
APIAsyncAceDataCloud полностью симметричен синхронной версии, только все методы ввода-вывода возвращают корутины. Подходит для 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: Обработка ошибок с типизацией
AuthenticationError (401), TokenMismatchError (токен не совпадает с сервисом), InsufficientBalanceError (недостаточно средств), ResourceDisabledError (сервис отключен), ValidationError (400), RateLimitError (429), ModerationError (403, модерация контента), APIError (общее), TimeoutError (тайм-аут), TransportError (сетевая ошибка).
Опции конфигурации
Тайм-аут Python SDK иpoll_interval/max_waitTaskHandle измеряются в секундах, в то время как TypeScript SDK использует миллисекунды, на это нужно обратить особое внимание при переносе между языками. Подробности см. в SDK задачи и потоковые ответы.
SDK по умолчанию считывает переменную окруженияACEDATACLOUD_API_TOKEN; в этой статье, чтобы согласовать с Claude Code VS Code Tutorial и другими руководствами, в примере используетсяACEDATACLOUD_API_KEY, необходимо явно инжектироватьapi_token=os.environ["ACEDATACLOUD_API_KEY"].

