github.com/AceDataCloud/SDK/go to oficjalne Go SDK Ace Data Cloud, które opakowuje chat completions / images / video / music / search z api.acedata.cloud w stylu łańcucha metod client.OpenAI().Chat().Completions().Create(...), z wbudowanym strumieniem SSE (opartym na kanale), automatycznym ponownym próbowaniem z opóźnieniem i typowanymi błędami.
Styl jest zgodny z context.Context + opcjami funkcyjnymi, co czyni go odpowiednim do umieszczenia w dowolnej usłudze backendowej Go lub CLI.
Kod źródłowy i dokumentacja:
- Repozytorium SDK: https://github.com/AceDataCloud/SDK
- Moduł Go: https://pkg.go.dev/github.com/AceDataCloud/SDK/go
Instalacja
- Obecnie nie ma oznaczonego tagu semver,
go getpobiera wersję pseudo-commitv0.0.0-<timestamp>-<sha>; ta wersja zostanie zablokowana wgo.sum, a członkowie zespołu pobierający ten sam kod mogą uzyskać dokładnie te same zależności. - Go SDK obecnie koncentruje się na
chat.completions(synchronizacja + strumień) jako głównym stabilnym ścieżce, zasoby multimedialne (images/video/audio) orazTaskHandlew trybie polling są w fazie alfa. W przypadku potrzeby tych funkcji, proszę najpierw wybrać TypeScript SDK lub Python SDK.
Przygotowanie tokena API
Proszę zapoznać się z Przegląd SDK - Uzyskiwanie tokena API w celu uzyskania tokena, a następnie w shelluexport:
WithAPIToken(...); Go SDK nie odczytuje automatycznie zmiennych środowiskowych, co wymaga, aby kod biznesowy użył os.Getenv, co czyni go bardziej kontrolowanym w scenariuszach z wieloma kontami lub testami.
Przykład 1: chat.completions (nie-strumieniowe)
idto identyfikator odpowiedzi zgodny z OpenAI, który można znaleźć w konsoli użycie historii.content ADC_GO_SDK_OKto rzeczywiste wyjście modelu, co dowodzi, że SDK nie zmieniło odpowiedzi.- Większość 6.4 sekundy to pierwsze nawiązanie TLS + generowanie modelu, po ponownym użyciu instancji klienta opóźnienie jest zgodne z TS / Python (około 2~3 sekundy).
- Odpowiedź jest zawsze
map[string]any, co wymaga samodzielnego wykonania asercji typów; to jest obecny wybór projektowy Go SDK — brak wprowadzenia ogólnych struktur ma na celu umożliwienie routingu wielu modeli bez silnej zależności od pojedynczego schematu odpowiedzi.
Przykład 2: chat.completions (SSE strumieniowe)
CreateStream zwraca dwa kanały: <-chan map[string]any to zdekodowane fragmenty SSE, a <-chan error będzie miało czytelne elementy dopiero po zakończeniu strumienia (normalnie lub w przypadku błędu).
- Pierwsza klatka 1633 ms, 13 fragmentów dotarło w sumie w 1816 ms — pozostałe 12 klatek zajęło tylko 183 ms.
range chunksnaturalnie zakończy pętlę po zakończeniu strumienia; kanałerrszawsze zwraca maksymalnie jeden element, co pozwala na sprawdzenie błędu przy użyciuok.- Zaletą tego stylu kanałów jest możliwość bezpośredniego użycia
selectw połączeniu zcontext.Contextdla timeoutów/anulacji, bez potrzeby dodatkowego opakowywania.
Przykład 3: typowane przetwarzanie błędów
adc.APIError jednocześnie pokrywa 401 / 403 / 404 / 422 / 429 / 5xx, kod biznesowy używa errors.As, aby uzyskać zorganizowane pola. Kody statusu HTTP, code i message serwera pozostają bez zmian. Błędy warstwy sieciowej (błąd DNS, odrzucenie połączenia itp.) są obsługiwane przez context.DeadlineExceeded, net.OpError i inne standardowe błędy Go, nie będą tłumione.
Opcje konfiguracyjne (opcje funkcjonalne)
NewClient zwraca (*Client, error): gdy token jest pusty i nie przekazano WithPaymentHandler (X402), natychmiast zgłasza błąd, co ułatwia wykrycie brakującej konfiguracji podczas uruchamiania usługi.
Zaawansowane: ponowne użycie klienta
SDK Go wewnętrznie używa jednego*http.Client + http.Transport, z wbudowanym pulą połączeń i wielokrotnym użyciem HTTP/2. Zaleca się utworzenie tylko jednego *adc.Client w cyklu życia procesu, a następnie współdzielenie go między goroutine — wszystkie metody są bezpieczne dla współbieżności.
Ograniczenia i mapa drogowa
Obecnie stabilne / zalecane do użycia w produkcji:- ✅
client.OpenAI().Chat().Completions().Createsynchronizowane, nie strumieniowe - ✅
client.OpenAI().Chat().Completions().CreateStreamstrumieniowe SSE - ✅
errors.As+ obsługa błędówAPIError - ✅ Automatyczne ponawianie + wykładnicze opóźnienie
- 🚧
client.Images()/client.Video()/client.Audio()— interfejsy są w trakcie rozwoju, zaleca się bezpośrednie użycie HTTP - 🚧
TaskHandleasynchroniczne sprawdzanie — jeszcze nie udostępnione w warstwie SDK Go - 🚧
WithPaymentHandler(X402 płatność na łańcuchu) — w planach, obecnie X402 obsługuje tylko TypeScript i Python

