Skip to main content
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:

Instalacja

Jeśli potrzebujesz płatności na łańcuchu X402 (bez ścieżki API Token), zainstaluj dodatkowo:
Wynik sprawdzenia wersji w czystym venv:
Opis wyników:
  • Wersja pakietu to 2026.4.26.1 (CalVer, poprawka z 26 kwietnia 2026 roku).
  • AceDataCloud to klient synchroniczny, AsyncAceDataCloud to klient asynchroniczny asyncio.
  • Ten SDK nie zależy od pydantic, a odpowiedzi są zwracane jako dict. To różni się od openai-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żyj export:
Podczas tworzenia klienta nie przekazuj 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)

Wynik działania programu:
Opis wyników:
  • id to identyfikator odpowiedzi, który można znaleźć w historii użycia.
  • content ADC_PY_SDK_OK to stały identyfikator zwracany przez model.
  • res["usage"] zwraca dict, a nie model pydantic; jedno wywołanie zużywa około 24 tokenów.

Przykład 2: chat.completions (strumieniowo SSE)

Gdy stream=True, create zwraca zwykły generator, który za każdym razem yielduje jeden przetworzony chunk dict.
Wynik działania programu:
Opis wyników:
  • 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)

API AsyncAceDataCloud jest całkowicie symetryczne do wersji synchronicznej, z tą różnicą, że wszystkie metody IO zwracają coroutine. Odpowiednie dla usług FastAPI / aiohttp / asyncio.
Wynik działania programu:
Opis wyników:
  • 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 przekazuj wait — wywołanie SDK będzie czekać na zwrócenie 200 przez usługę.
Wynik programu:
Opis wyniku:
  • image_url to 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=True lub ręcznie TaskHandle.wait(), szczegóły w SDK zadania i odpowiedzi strumieniowe.

Przykład 5: Obsługa błędów typów

Hierarchia wyjątków jest zgodna z TypeScript: 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

timeout w SDK Pythona oraz poll_interval / max_wait w 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żyto ACEDATACLOUD_API_KEY, co wymaga api_token=os.environ["ACEDATACLOUD_API_KEY"] do jawnego wstrzyknięcia.

Zaawansowane: X402 płatności webhook

Pełny proces i rzeczywiste wyniki na łańcuchu zobacz w SDK + X402 płatności webhook.

Jak sprawdzić pozostały limit

Możesz sprawdzić aktualny limit konta przez konsolę Ace Data Cloud - lista aplikacji. Możesz sprawdzić całą historię użycia i szczegóły opłat przez konsolę Ace Data Cloud - historia użycia.

Dowiedz się więcej