Skip to main content
acedatacloud é o SDK Python oficial da Ace Data Cloud, que encapsula todos os serviços em api.acedata.cloud em métodos tipados como client.openai.chat.completions.create(...), client.images.generate(...), client.search.google(...), etc., e oferece duas versões de cliente: síncrona e assíncrona. Baseado em httpx, suporta streaming SSE, tentativas automáticas, exceções tipadas e validação de tipos com pydantic. Endereço do código-fonte e do pacote:

Instalação

Se precisar de pagamento na blockchain X402 (sem caminho de API Token), instale mais um:
Saída da verificação de versão em um venv limpo:
Explicação dos resultados:
  • A versão do pacote é 2026.4.26.1 (CalVer, revisado em 26 de abril de 2026).
  • AceDataCloud é o cliente síncrono, AsyncAceDataCloud é o cliente assíncrono do asyncio.
  • Este SDK não depende de pydantic, o corpo da resposta retorna uniformemente um dict. Isso é diferente do openai-python, e deve-se ter cuidado ao migrar.

Preparar o Token da API

Consulte Visão Geral do SDK - Solicitar Token da API para obter o token, e então no shell export:
Ao construir o cliente, não passe api_token, o SDK irá ler automaticamente a variável de ambiente ACEDATACLOUD_API_TOKEN. Se sua variável de ambiente já tiver ACEDATACLOUD_API_KEY (convenção do repositório do projeto), passe explicitamente: AceDataCloud(api_token=os.environ["ACEDATACLOUD_API_KEY"]).

Exemplo 1: chat.completions (síncrono)

Resultado da execução do programa:
Explicação dos resultados:
  • id é o ID da resposta, que pode ser encontrado em Histórico de Uso.
  • content ADC_PY_SDK_OK é a identificação fixa retornada pelo modelo.
  • res["usage"] retorna um dict, não um modelo pydantic; uma chamada consome cerca de 24 tokens.

Exemplo 2: chat.completions (streaming SSE)

Quando stream=True, create retorna um gerador comum, que gera um chunk dict analisado a cada vez.
Resultado da execução do programa:
Explicação dos resultados:
  • A latência do primeiro chunk foi de 2104 ms, e os 11 chunks subsequentes levaram apenas 7 ms para serem recebidos — uma vez que o serviço começa a transmitir, o consumo local é imediato.
  • O chunk é um dict comum, e os valores podem ser acessados de forma segura usando .get() em camadas, conforme o formato SSE da OpenAI.
  • Em produção, recomenda-se transmitir SSE para o frontend enquanto se gera, com uma latência total de cerca de 2 segundos.

Exemplo 3: AsyncAceDataCloud (assíncrono)

A API do AsyncAceDataCloud é completamente simétrica à versão síncrona, apenas todos os métodos de IO retornam corrotinas. É adequado para serviços FastAPI / aiohttp / asyncio.
Resultado da execução do programa:
Explicação dos resultados:
  • A versão assíncrona e a versão síncrona utilizam o mesmo caminho HTTP, apenas a implementação do pool de conexões é diferente (httpx.AsyncClient).
  • Ao sair, é necessário await client.close() para fechar o pool de conexões; em serviços de longa duração, basta fechar uma vez antes da saída do processo.
  • A latência única é semelhante à versão síncrona, e em cenários de concorrência, a versão assíncrona se destaca — um loop de eventos pode executar dezenas ou centenas de requisições simultaneamente.

Exemplo 4: images.generate (NanoBanana)

A API NanoBanana é um serviço de geração de imagens síncrono, não passe wait — a chamada do SDK irá esperar até que o serviço retorne 200.
Resultado do programa:
Descrição do resultado:
  • image_url é o endereço estável no CDN, que pode ser baixado ou incorporado em uma página da web.
  • Quase 18,9 segundos foram apenas para a inferência do modelo; o custo do SDK local foi de apenas alguns milissegundos.
  • Para tarefas realmente assíncronas como Midjourney, Sora, Veo, Suno, é necessário usar wait=True ou fazer polling manual com TaskHandle.wait(), veja Polling de tarefas e resposta em streaming do SDK.

Exemplo 5: Tratamento de erros tipados

A hierarquia de exceções é a mesma que a do TypeScript: AuthenticationError (401), TokenMismatchError (token não corresponde ao serviço), InsufficientBalanceError (saldo insuficiente), ResourceDisabledError (serviço desativado), ValidationError (400), RateLimitError (429), ModerationError (403 revisão de conteúdo), APIError (erro genérico), TimeoutError (timeout), TransportError (erro de rede).

Opções de configuração

O timeout do SDK Python e o poll_interval / max_wait do TaskHandle têm unidade de segundos, enquanto o SDK TypeScript usa milissegundos, é importante prestar atenção ao migrar entre linguagens. Veja Polling de tarefas e resposta em streaming do SDK.
O SDK lê por padrão a variável de ambiente ACEDATACLOUD_API_TOKEN; este artigo usa ACEDATACLOUD_API_KEY para uniformizar com outros tutoriais como Claude Code VS Code Tutorial, sendo necessário injetar explicitamente api_token=os.environ["ACEDATACLOUD_API_KEY"].

Avançado: Gatilho de pagamento X402

O fluxo completo e os resultados reais na cadeia podem ser vistos em SDK + Gatilho de pagamento X402.

Como verificar o saldo restante

Você pode verificar o saldo restante da sua conta através da Console Ace Data Cloud - Lista de Aplicativos. Você pode verificar todo o histórico de uso e detalhes de cobrança através da Console Ace Data Cloud - Histórico de Uso.

Saiba mais