acedatacloud to oficjalny SDK Pythona Ace Data Cloud, który opakowuje wszystkie usługi dostępne na api.acedata.cloud w typizowane metody, takie jak client.openai.chat.completions.create(...), client.images.generate(...), client.search.google(...) itp., oferując jednocześnie dwie wersje klienta: synchroniczną i asynchroniczną.
Podstawą jest httpx, który obsługuje strumieniowe SSE, automatyczne ponowne próby, typizowane wyjątki oraz walidację typów pydantic.
Adres źródłowy i pakietu:
- Repozytorium SDK: https://github.com/AceDataCloud/SDK
- PyPI: https://pypi.org/project/acedatacloud/
Instalacja
- Wersja pakietu to
2026.4.26.1(CalVer, poprawka z 26 kwietnia 2026 roku). AceDataCloudto klient synchroniczny,AsyncAceDataCloudto klient asynchroniczny asyncio.- Ten SDK nie zależy od
pydantic, a odpowiedzi są zwracane jakodict. To różni się odopenai-python, na co należy zwrócić uwagę podczas migracji.
Przygotowanie API Token
Zobacz Przegląd SDK - Uzyskiwanie API Token, aby uzyskać token, a następnie w shellu użyjexport:
api_token, SDK automatycznie odczyta zmienną środowiskową ACEDATACLOUD_API_TOKEN. Jeśli w twoim środowisku już istnieje ACEDATACLOUD_API_KEY (zgodnie z konwencją repozytoriów projektowych), przekaż to jawnie: AceDataCloud(api_token=os.environ["ACEDATACLOUD_API_KEY"]).
Przykład 1: chat.completions (synchronicznie)
idto identyfikator odpowiedzi, który można znaleźć w historii użycia.content ADC_PY_SDK_OKto stały identyfikator zwracany przez model.res["usage"]zwracadict, a nie model pydantic; jedno wywołanie zużywa około 24 tokenów.
Przykład 2: chat.completions (strumieniowo SSE)
Gdystream=True, create zwraca zwykły generator, który za każdym razem yielduje jeden przetworzony chunk dict.
- Opóźnienie pierwszej ramki wynosi 2104 ms, a kolejne 11 ramek zajęło tylko 7 ms, aby dotrzeć — gdy usługa zaczyna strumieniować, lokalnie można to łatwo przetwarzać.
- chunk to zwykły dict, wartości można bezpiecznie pobierać zgodnie z formatem SSE OpenAI, używając
.get(). - W rzeczywistej produkcji zaleca się strumieniowe przesyłanie danych do front-endu, co pozwala na osiągnięcie całkowitego opóźnienia bliskiego 2 sekund.
Przykład 3: AsyncAceDataCloud (asynchronicznie)
APIAsyncAceDataCloud jest całkowicie symetryczne do wersji synchronicznej, z tą różnicą, że wszystkie metody IO zwracają coroutine. Odpowiednie dla usług FastAPI / aiohttp / asyncio.
- Wersja asynchroniczna i synchroniczna korzystają z tej samej ścieżki HTTP, różnią się jedynie implementacją puli połączeń (
httpx.AsyncClient). - Podczas zamykania jawnie użyj
await client.close(), aby zamknąć pulę połączeń; w usługach o długim cyklu życia wystarczy zamknąć ją raz przed zakończeniem procesu. - Opóźnienie jednorazowe jest zbliżone do wersji synchronicznej, a w scenariuszach współbieżnych asynchroniczność ujawnia swoje zalety — jedna pętla zdarzeń może jednocześnie obsługiwać dziesiątki lub setki aktywnych żądań.
Przykład 4: images.generate (NanoBanana)
API NanoBanana to usługa generowania obrazów synchronicznie, nie przekazujwait — wywołanie SDK będzie czekać na zwrócenie 200 przez usługę.
image_urlto stabilny adres na CDN, który można bezpośrednio pobrać lub osadzić na stronie.- W ciągu 18,9 sekundy prawie cały czas zajmowało modelowanie; lokalne wydatki SDK to tylko kilka milisekund.
- Dla takich naprawdę asynchronicznych zadań jak Midjourney, Sora, Veo, Suno, należy użyć
wait=Truelub ręcznieTaskHandle.wait(), szczegóły w SDK zadania i odpowiedzi strumieniowe.
Przykład 5: Obsługa błędów typów
AuthenticationError (401), TokenMismatchError (token niezgodny z usługą), InsufficientBalanceError (niewystarczający balans), ResourceDisabledError (usługa wyłączona), ValidationError (400), RateLimitError (429), ModerationError (403 przegląd treści), APIError (błąd ogólny), TimeoutError (przekroczenie czasu), TransportError (błąd warstwy sieciowej).
Opcje konfiguracyjne
timeoutw SDK Pythona orazpoll_interval/max_waitw TaskHandle są w sekundach, podczas gdy SDK TypeScript używa milisekund, co należy szczególnie uwzględnić przy migracji między językami. Szczegóły w SDK zadania i odpowiedzi strumieniowe.
SDK domyślnie odczytuje zmienną środowiskowąACEDATACLOUD_API_TOKEN; w tym artykule, aby dostosować się do Claude Code VS Code tutorial i innych tutoriali, w przykładzie użytoACEDATACLOUD_API_KEY, co wymagaapi_token=os.environ["ACEDATACLOUD_API_KEY"]do jawnego wstrzyknięcia.

