github.com/AceDataCloud/SDK/go ist das offizielle Go SDK von Ace Data Cloud, das die Chat-Vervollständigungen / Bilder / Videos / Musik / Suche von api.acedata.cloud in eine Methode im Stil von client.OpenAI().Chat().Completions().Create(...) kapselt, mit eingebautem SSE-Streaming (basierend auf Channels), automatischem Retry-Backoff und typisierten Fehlern.
Stilistisch ausgerichtet auf context.Context + funktionale Optionen, geeignet für jede Go-Backend-Service oder CLI.
Quellcode und Dokumentation:
- SDK-Repository: https://github.com/AceDataCloud/SDK
- Go-Modul: https://pkg.go.dev/github.com/AceDataCloud/SDK/go
Installation
- Derzeit gibt es kein semver-Tag,
go getzieht die Commit-Pseudoversionv0.0.0-<timestamp>-<sha>; diese Version wird ingo.sumgesperrt, sodass Teammitglieder beim Abrufen des gleichen Codes identische Abhängigkeiten erhalten. - Das Go SDK ist derzeit stabil mit
chat.completions(synchron + streamend) als Hauptpfad, während Multimedia-Ressourcen (images/video/audio) undTaskHandle-Polling sich in der Alpha-Phase befinden. Für Szenarien, die diese Fähigkeiten benötigen, wählen Sie bitte zuerst das TypeScript SDK oder das Python SDK.
API-Token vorbereiten
Siehe SDK-Übersicht - API-Token beantragen um ein Token zu erhalten, und dann im Shellexport:
WithAPIToken(...) injiziert; das Go SDK liest Umgebungsvariablen nicht automatisch, sodass der Anwendungscode os.Getenv verwenden muss, was in Szenarien mit mehreren Konten oder Selbsttests besser kontrollierbar ist.
Beispiel 1: chat.completions (nicht streamend)
idist die OpenAI-kompatible Antwort-ID, die im Nutzungsverlauf in der Konsole gefunden werden kann.content ADC_GO_SDK_OKist die tatsächliche Ausgabe des Modells, die beweist, dass das SDK die Antwort nicht verändert hat.- In 6,4 Sekunden war der größte Teil die erste TLS-Handschlag + Modellerzeugung, nach der Wiederverwendung der Client-Instanz sind die Latenzen mit TS / Python konsistent (ca. 2~3 Sekunden).
- Die Antwort ist einheitlich
map[string]any, was Typassertionen erfordert; dies ist das aktuelle Design des Go SDK — die Nicht-Einführung von generischen Structs soll verhindern, dass die Multi-Modell-Routing stark von einem einzigen Antwortschema abhängt.
Beispiel 2: chat.completions (SSE streamend)
CreateStream gibt zwei Channels zurück: <-chan map[string]any ist der schrittweise analysierte SSE-Chunk, <-chan error hat erst nach dem Ende des Streams (normal oder fehlerhaft) lesbare Elemente.
- Der erste Frame benötigte 1633 ms, alle 13 Chunks zusammen benötigten 1816 ms — die letzten 12 Frames benötigten nur 183 ms.
range chunkswird natürlich beim Ende des Streams die Schleife verlassen; dererrs-Channel gibt immer maximal ein Element aus, das mitoküberprüft werden kann, um den Fehler zu erhalten.- Der Vorteil dieses Channel-Stils ist, dass er direkt mit
selectin Verbindung mitcontext.Contextfür Timeout / Abbruch verwendet werden kann, ohne zusätzliche Verpackung.
Beispiel 3: Typisierte Fehlerbehandlung
adc.APIError deckt gleichzeitig 401 / 403 / 404 / 422 / 429 / 5xx ab, der Geschäftscode verwendet errors.As, um die strukturierten Felder zu erhalten. HTTP-Statuscodes, Server code und message bleiben unverändert. Netzwerkfehler (DNS-Fehler, Verbindungsabbruch usw.) verwenden Standard-Go-Fehler wie context.DeadlineExceeded, net.OpError usw. und werden nicht unterdrückt.
Konfigurationsoptionen (funktionale Optionen)
NewClient gibt (*Client, error) zurück: Wenn der Token leer ist und WithPaymentHandler nicht übergeben wurde (X402), wird sofort ein Fehler ausgegeben, um fehlende Konfigurationen bereits beim Start des Dienstes zu erkennen.
Fortgeschritten: Client wiederverwenden
Das Go SDK verwendet intern einen*http.Client + http.Transport, der einen Verbindungspool und HTTP/2-Wiederverwendung mitbringt. Es wird empfohlen, innerhalb des Lebenszyklus des Prozesses nur einen *adc.Client zu erstellen und diesen dann zwischen Goroutinen zu teilen – alle Methoden sind nebenläufig sicher.
Einschränkungen und Fahrplan
Aktuell stabil / für die Produktion empfohlen:- ✅
client.OpenAI().Chat().Completions().Createsynchron nicht-streaming - ✅
client.OpenAI().Chat().Completions().CreateStreamSSE-streaming - ✅
errors.As+APIErrorFehlerbehandlung - ✅ Automatische Wiederholungen + exponentielles Backoff
- 🚧
client.Images()/client.Video()/client.Audio()— Schnittstellen sind in Entwicklung, empfohlen wird, zunächst direkt über HTTP zu arbeiten - 🚧
TaskHandleasynchrone Abfrage — noch nicht im Go SDK sichtbar - 🚧
WithPaymentHandler(X402 On-Chain-Zahlung) — in Planung, derzeit unterstützt X402 nur TypeScript und Python

