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

Instalacja

Jeśli potrzebujesz płatności na łańcuchu X402 (bez ścieżki API Token), zainstaluj dodatkowo:
Wynik sprawdzenia wersji czystego projektu npm:
Wyjaśnienie wyników:
  • Wersja pakietu to 2026.504.2 (CalVer, 2. poprawka 504. ISO tygodnia w 2026 roku).
  • AceDataCloud to 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 shellu export:
Podczas budowy klienta, jeśli nie przekażesz 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)

Wynik działania programu:
Wyjaśnienie wyników:
  • id chatcmpl-DldCcLvkTFaioST8e6SjOl0wJScQA to identyfikator odpowiedzi zgodny z OpenAI, który można znaleźć w historii użycia w konsoli użycia.
  • content ADC_TS_SDK_OK to 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.content działa w .mjs, Node REPL, Bun; w ścisłych projektach TypeScript może być konieczne użycie (res as any).id lub wyłączenie noImplicitAny w tsconfig.

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

Po włączeniu stream: true, create zwraca asynchroniczny iterator, gdzie każda klatka to ChatCompletionChunk.
Wynik działania programu:
Wyjaśnienie wyników:
  • 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 z finish_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.
Wynik działania programu:
Wyjaśnienie wyników:
  • image_url to 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_id to 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.
Wynik działania programu:
Opis wyniku:
  • 401 automatycznie mapuje się na AuthenticationError, kod biznesowy może używać instanceof do precyzyjnego rozgałęziania.
  • code: invalid_token pochodzi 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.
Wynik działania programu:
Opis wyniku:
  • Jedna część kodu, jeden token, pokrywa cztery rodzaje usług modeli: OpenAI / Google / DeepSeek / xAI.
  • gemini-2.5-flash tym 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

Wynik działania programu:
Opis wyniku:
  • Jedno zapytanie zwraca 10 organicznych wyników, nazwa pola to organic (nie organic_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:
  1. Użyj X402 paymentHandler — portfel użytkownika płaci USDC za każde użycie, bez potrzeby tokena.
  2. 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 TaskHandle do 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:
createX402PaymentHandler w TypeScript przyjmuje { network, evmProvider, evmAddress, preferScheme? } (łańcuch EVM) lub { network: 'solana', solanaWallet } (Solana). Na serwerze Node, gdy window.ethereum nie jest dostępny, użyj viem’s createWalletClient (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.

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