@acedatacloud/sdk to oficjalne SDK TypeScript / JavaScript Ace Data Cloud, które 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(...) i inne, z wbudowanym SSE, ponownym próbowaniem oraz typizowanymi wyjątkami.
Można go używać w Node.js, Deno, Bun oraz nowoczesnych przeglądarkach (z bundlerem).
Adres źródła i pakietu:
- Repozytorium SDK: https://github.com/AceDataCloud/SDK
- npm SDK: https://www.npmjs.com/package/@acedatacloud/sdk
Instalacja
- Wersja pakietu to
2026.504.2(CalVer, 2. poprawka 504. ISO tygodnia w 2026 roku). AceDataCloudto główna klasa używana do budowy klienta, dostępna z domyślnego eksportu.
Przygotowanie API Token
Zobacz Przegląd SDK - Uzyskiwanie API Token, aby uzyskać token, a następnie w shelluexport:
apiToken, SDK automatycznie odczyta zmienną środowiskową ACEDATACLOUD_API_TOKEN. Jeśli w twoim środowisku już istnieje ACEDATACLOUD_API_KEY (zgodnie z konwencją repozytoriów projektów), możesz jawnie przekazać: new AceDataCloud({ apiToken: process.env.ACEDATACLOUD_API_KEY }).
Przykład 1: chat.completions (nie-strumieniowe)
id chatcmpl-DldCcLvkTFaioST8e6SjOl0wJScQAto identyfikator odpowiedzi zgodny z OpenAI, który można znaleźć w historii użycia w konsoli użycia.content ADC_TS_SDK_OKto stały identyfikator zwrócony przez model, który potwierdza, że odpowiedź nie została zmieniona przez SDK.- Jedno zakończenie czatu zużywa około 22 tokenów, według stawki gpt-4o-mini.
- SDK deklaruje odpowiedź jako
Record<string, unknown>, w czasie wykonywania jest to obiekt JSON, a dostęp do.id/.choices[0].message.contentdziała w.mjs, Node REPL, Bun; w ścisłych projektach TypeScript może być konieczne użycie(res as any).idlub wyłączenienoImplicitAnyw tsconfig.
Przykład 2: chat.completions (SSE strumieniowe)
Po włączeniustream: true, create zwraca asynchroniczny iterator, gdzie każda klatka to ChatCompletionChunk.
- Opóźnienie pierwszej klatki 2481 ms to czas generowania pierwszego tokena przez model; następne 12 klatek dotarło w ciągu 135 ms.
- 13 klatek razem to
"1 2 3 4 5", każdy token w osobnej klatce + ostatnia klatka zfinish_reason. - Strumieniowe nie zużywa mniej tokenów niż nie-strumieniowe, ale opóźnienie pierwszego tokena jest znacznie mniejsze, co jest odpowiednie do zastosowań w czasie rzeczywistym.
Przykład 3: images.generate (NanoBanana)
client.images.generate({ provider: 'nano-banana', ... }) zwraca bezpośrednio synchronnie, nie wymaga przekazywania parametru wait — API NanoBanana generuje synchronnie.
image_urlto stabilny adres na CDN, który można bezpośrednio użyć w<img src />lub pobrać.- W ciągu 16,6 sekundy większość czasu to czas wnioskowania modelu, a koszty lokalnego SDK są znikome.
trace_idto identyfikator żądania przydzielony przez platformę, jeśli wystąpi problem, podaj ten identyfikator obsłudze klienta, aby najszybciej zlokalizować problem.- W przypadku usług asynchronicznych (Midjourney, Sora, Veo itp.) konieczne jest cykliczne sprawdzanie TaskHandle, szczegóły w SDK Cykliczne sprawdzanie zadań i odpowiedzi strumieniowe.
Przykład 4: typizowane przetwarzanie błędów
SDK rzuca błędy jako konkretne podklasy (np.AuthenticationError, BadRequestError, RateLimitError, InternalServerError, APIConnectionError itp.) w zależności od statusu HTTP, co pozwala na precyzyjne rozgałęzianie za pomocą instanceof.
- 401 automatycznie mapuje się na
AuthenticationError, kod biznesowy może używaćinstanceofdo precyzyjnego rozgałęziania. code: invalid_tokenpochodzi z PlatformGateway, co ułatwia porównanie z logami backendu.- Podobnie 429 →
RateLimitError, 400 →BadRequestError, 5xx →InternalServerError.
Przykład 5: Routing wielu modeli
Ten sam klient może swobodnie przełączać się między wieloma usługami, wystarczy, że nazwy modeli są zgodne.- Jedna część kodu, jeden token, pokrywa cztery rodzaje usług modeli: OpenAI / Google / DeepSeek / xAI.
gemini-2.5-flashtym razem nie zwróciłADC_OK, co jest różnicą w stylu wyjścia modelu — SDK nie zignorowało niczego, przekazując oryginalne słowa modelu do biznesu.- Ceny są naliczane według rzeczywistej ceny tokena, ścieżka przechodzi tylko raz przez PlatformGateway.
Przykład 6: Wyszukiwanie Google
- Jedno zapytanie zwraca 10 organicznych wyników, nazwa pola to
organic(nieorganic_results). - Wyszukiwanie odbywa się przez Serp service i jest naliczane za każde użycie.
- Ten sam egzemplarz klienta może zarówno czatować, jak i wyszukiwać, wystarczy jeden token.
Opcje konfiguracyjne
Użycie w przeglądarce
@acedatacloud/sdk to pakiet ESM + ISO (jednolite), który można bezpośrednio import w nowoczesnych przeglądarkach z bundlerem. Uwaga: nie koduj na sztywno tokena API w kodzie frontendowym. Zalecane podejście w frontendzie:
- Użyj X402
paymentHandler— portfel użytkownika płaci USDC za każde użycie, bez potrzeby tokena. - Lub użyj SDK na swoim serwerze, przeglądarka tylko wywołuje twój własny backend.
Zaawansowane: Polling zadań i odpowiedzi strumieniowe
- Usługi związane z zadaniami (Midjourney, Sora, Veo, Suno): użyj
TaskHandledo polling, szczegóły jednostek, czasu oczekiwania i ponownych prób znajdziesz w SDK polling zadań i odpowiedzi strumieniowych. - Strumieniowy czat: przykład 2 na tej stronie już to pokazał; strumieniowe audio / wideo również są wspierane.
Zaawansowane: Hooki płatności X402
Jeśli nie chcesz ubiegać się o token API i chcesz płacić za każde użycie na łańcuchu, możesz użyćpaymentHandler:
createX402PaymentHandlerw TypeScript przyjmuje{ network, evmProvider, evmAddress, preferScheme? }(łańcuch EVM) lub{ network: 'solana', solanaWallet }(Solana). Na serwerze Node, gdywindow.ethereumnie jest dostępny, użyjviem’screateWalletClient(oparty na kluczu prywatnym) do opakowania zgodnego z EIP-1193 dostawcy, a następnie przekaż go; szczegółowe podejście i rzeczywiste wyniki na łańcuchu znajdziesz w SDK + X402 hooki płatności.

