Skip to main content
acedatacloud è l’SDK Python ufficiale di Ace Data Cloud, che incapsula tutti i servizi su api.acedata.cloud in metodi tipizzati come client.openai.chat.completions.create(...), client.images.generate(...), client.search.google(...), ecc., fornendo sia client sincroni che asincroni. Si basa su httpx, supporta flussi SSE, ripetizioni automatiche, eccezioni tipizzate e validazione dei tipi pydantic. Indirizzi del codice sorgente e del pacchetto:

Installazione

Se è necessario pagare sulla catena X402 (senza percorso API Token), installare anche:
Output del controllo della versione in un venv pulito:
Spiegazione dei risultati:
  • La versione del pacchetto è 2026.4.26.1 (CalVer, revisione del 26 aprile 2026).
  • AceDataCloud è il client sincrono, AsyncAceDataCloud è il client asincrono di asyncio.
  • Questo SDK non dipende da pydantic, il corpo della risposta restituisce unicamente dict. Questo è diverso da openai-python, e bisogna prestare attenzione durante la migrazione.

Preparare l’API Token

Fare riferimento a Panoramica SDK - Richiesta API Token per ottenere il token, quindi in shell export:
Quando si costruisce il client, non passare api_token, l’SDK leggerà automaticamente la variabile d’ambiente ACEDATACLOUD_API_TOKEN. Se nel tuo ambiente è già presente ACEDATACLOUD_API_KEY (convenzione del repository del progetto), si prega di passare esplicitamente: AceDataCloud(api_token=os.environ["ACEDATACLOUD_API_KEY"]).

Esempio 1: chat.completions (sincrono)

Risultato dell’esecuzione del programma:
Spiegazione dei risultati:
  • id è l’ID della risposta, che può essere trovato in Storia dell’uso.
  • content ADC_PY_SDK_OK è l’identificativo fisso restituito realmente dal modello.
  • res["usage"] restituisce un dict, non un modello pydantic; una chiamata consuma circa 24 token.

Esempio 2: chat.completions (flusso SSE)

Quando stream=True, create restituisce un generatore normale, che restituisce ogni volta un chunk dict analizzato.
Risultato dell’esecuzione del programma:
Spiegazione dei risultati:
  • La latenza del primo frame è di 2104 ms, mentre le successive 11 frame hanno impiegato solo 7 ms per arrivare—una volta che il servizio inizia a fluire, il locale può consumare facilmente.
  • Il chunk è un normale dict, i valori possono essere estratti in modo sicuro utilizzando .get() secondo il formato SSE di OpenAI.
  • Nella produzione reale, si consiglia di inviare SSE al frontend mentre si yield, con una latenza complessiva del primo byte vicina a 2 secondi.

Esempio 3: AsyncAceDataCloud (asincrono)

L’API di AsyncAceDataCloud è completamente simmetrica rispetto alla versione sincrona, solo che tutti i metodi IO restituiscono coroutine. È adatta per servizi FastAPI / aiohttp / asyncio.
Risultato dell’esecuzione del programma:
Spiegazione dei risultati:
  • La versione asincrona e quella sincrona seguono lo stesso percorso HTTP, solo che l’implementazione del pool di connessioni è diversa (httpx.AsyncClient).
  • Alla chiusura, è necessario esplicitamente await client.close() per chiudere il pool di connessioni; nei servizi a lungo ciclo di vita, è sufficiente chiuderlo una volta prima della chiusura del processo.
  • La latenza singola è simile a quella sincrona, ma nei contesti di concorrenza l’asincrono mostra i suoi vantaggi—un event loop può gestire decine o centinaia di richieste in volo contemporaneamente.

Esempio 4: images.generate (NanoBanana)

L’API NanoBanana è un servizio di generazione di immagini sincrono, non passare wait—la chiamata SDK attenderà sempre il ritorno del servizio 200.
Risultato dell’esecuzione del programma:
Descrizione del risultato:
  • image_url è un indirizzo stabile su CDN, può essere scaricato o incorporato direttamente nella pagina web.
  • In 18,9 secondi quasi tutto è stato impiegato per l’inferenza del modello; il costo del SDK locale è stato solo di pochi millisecondi.
  • Per compiti realmente asincroni come Midjourney, Sora, Veo, Suno, è necessario utilizzare wait=True o eseguire manualmente TaskHandle.wait() per il polling, vedere SDK polling delle attività e risposta in streaming.

Esempio 5: Gestione degli errori tipizzati

La gerarchia delle eccezioni è coerente con TypeScript: AuthenticationError (401), TokenMismatchError (token non corrisponde al servizio), InsufficientBalanceError (saldo insufficiente), ResourceDisabledError (servizio disabilitato), ValidationError (400), RateLimitError (429), ModerationError (403 revisione dei contenuti), APIError (cattura generale), TimeoutError (timeout), TransportError (livello di rete).

Opzioni di configurazione

Il timeout del SDK Python e il poll_interval / max_wait di TaskHandle sono entrambi in secondi, il SDK TypeScript utilizza millisecondi, prestare particolare attenzione durante la migrazione tra linguaggi. Vedi SDK polling delle attività e risposta in streaming.
Il SDK legge per impostazione predefinita la variabile d’ambiente ACEDATACLOUD_API_TOKEN; in questo articolo, per uniformarsi ad altri tutorial come Claude Code VS Code tutorial, l’esempio utilizza ACEDATACLOUD_API_KEY, è necessario api_token=os.environ["ACEDATACLOUD_API_KEY"] per l’iniezione esplicita.

Avanzato: Hook di pagamento X402

Per il processo completo e i risultati reali sulla catena, vedere SDK + Hook di pagamento X402.

Come controllare il saldo rimanente

Puoi controllare il saldo rimanente attuale del tuo account tramite Ace Data Cloud Console - Elenco delle applicazioni. Puoi visualizzare tutta la cronologia degli utilizzi e i dettagli delle spese tramite Ace Data Cloud Console - Cronologia utilizzi.

Scopri di più