acedatacloud ist das offizielle Python SDK von Ace Data Cloud, das alle Dienste auf api.acedata.cloud in typisierte Methoden wie client.openai.chat.completions.create(...), client.images.generate(...), client.search.google(...) usw. kapselt und sowohl synchrone als auch asynchrone Clients bereitstellt.
Es basiert auf httpx, unterstützt SSE-Streaming, automatisches Wiederholen, typisierte Ausnahmen und Pydantic-Typüberprüfung.
Quellcode und Paketadresse:
- SDK-Repository: https://github.com/AceDataCloud/SDK
- PyPI: https://pypi.org/project/acedatacloud/
Installation
- Die Paketversion ist
2026.4.26.1(CalVer, Überarbeitung am 26. April 2026). AceDataCloudist der synchrone Client,AsyncAceDataCloudist der asyncio-asynchrone Client.- Dieses SDK hängt nicht von
pydanticab, der Antwortkörper gibt einheitlichdictzurück. Dies unterscheidet sich vonopenai-python, was bei der Migration beachtet werden muss.
Vorbereitung des API-Tokens
Referenzieren Sie SDK-Übersicht - API-Token beantragen um das Token zu erhalten, undexport es dann in der Shell:
api_token nicht übergeben, das SDK liest automatisch die Umgebungsvariable ACEDATACLOUD_API_TOKEN. Wenn in Ihrer Umgebung bereits ACEDATACLOUD_API_KEY gespeichert ist (Projekt-Repository-Vereinbarung), geben Sie es explizit an: AceDataCloud(api_token=os.environ["ACEDATACLOUD_API_KEY"]).
Beispiel 1: chat.completions (synchron)
idist die Antwort-ID, die in Nutzungsverlauf gefunden werden kann.content ADC_PY_SDK_OKist die feste Kennung, die das Modell tatsächlich zurückgibt.res["usage"]gibt eindictzurück, kein Pydantic-Modell; ein Aufruf verbraucht etwa 24 Token.
Beispiel 2: chat.completions (SSE-Streaming)
Wennstream=True, gibt create einen normalen Generator zurück, der bei jedem yield ein geparstes Chunk-Dict zurückgibt.
- Die erste Frame-Verzögerung beträgt 2104 ms, die nachfolgenden 11 Frames benötigten nur 7 ms, um vollständig zu sein – sobald der Dienst mit dem Streaming beginnt, kann der lokale Client problemlos konsumieren.
- Chunk ist ein normales dict, die Werte können sicher nach dem OpenAI SSE-Format mit
.get()abgerufen werden. - In der tatsächlichen Produktion wird empfohlen, während des Yielding SSE an das Frontend zu pushen, die gesamte erste Frame-Verzögerung liegt nahe bei 2 Sekunden.
Beispiel 3: AsyncAceDataCloud (asynchron)
Die API vonAsyncAceDataCloud ist vollständig symmetrisch zur synchronen Version, nur dass alle IO-Methoden Coroutine zurückgeben. Geeignet für FastAPI / aiohttp / asyncio-Dienste.
- Die asynchrone Version und die synchrone Version verwenden denselben HTTP-Pfad, nur die Implementierung des Verbindungspools ist unterschiedlich (
httpx.AsyncClient). - Beim Beenden wird
await client.close()explizit aufgerufen, um den Verbindungspool zu schließen; in Diensten mit langer Lebensdauer muss dies nur einmal vor dem Prozessende erfolgen. - Die einmalige Verzögerung ist ähnlich wie bei der synchronen Version, in einer parallelen Umgebung zeigt die asynchrone Version ihre Vorteile – eine Event-Loop kann gleichzeitig Dutzende bis Hunderte von in-flight-Anfragen ausführen.
Beispiel 4: images.generate (NanoBanana)
Die NanoBanana-API ist ein synchroner Bildgenerierungsdienst, geben Siewait nicht an – SDK-Aufrufe warten immer auf die Rückgabe von 200 durch den Dienst.
image_urlist die stabile Adresse auf dem CDN, die direkt heruntergeladen oder in eine Webseite eingebettet werden kann.- In 18,9 Sekunden war fast die gesamte Zeit für die Modellinferenz; die lokalen SDK-Kosten betrugen nur wenige Millisekunden.
- Für echte asynchrone Aufgaben wie Midjourney, Sora, Veo, Suno muss
wait=Trueoder manuellesTaskHandle.wait()Polling verwendet werden, siehe SDK-Aufgaben-Polling und Streaming-Antworten.
Beispiel 5: Typisierte Fehlerbehandlung
AuthenticationError (401), TokenMismatchError (Token stimmt nicht mit dem Dienst überein), InsufficientBalanceError (nicht genügend Guthaben), ResourceDisabledError (Dienst deaktiviert), ValidationError (400), RateLimitError (429), ModerationError (403 Inhaltsprüfung), APIError (Fallback), TimeoutError (Zeitüberschreitung), TransportError (Netzwerkschicht).
Konfigurationsoptionen
Dertimeoutdes Python SDK und daspoll_interval/max_waitvon TaskHandle sind beide in Sekunden, das TypeScript SDK verwendet Millisekunden, bei der Migration zwischen den Sprachen ist besondere Vorsicht geboten. Siehe SDK-Aufgaben-Polling und Streaming-Antworten.
Das SDK liest standardmäßig die UmgebungsvariableACEDATACLOUD_API_TOKEN; in diesem Artikel wird zur Vereinheitlichung mit anderen Tutorials wie Claude Code VS Code Tutorial das Beispiel mitACEDATACLOUD_API_KEYverwendet, es mussapi_token=os.environ["ACEDATACLOUD_API_KEY"]explizit injiziert werden.

