github.com/AceDataCloud/SDK/go est le SDK Go officiel d’Ace Data Cloud, qui encapsule les chat completions / images / vidéo / musique / recherche sur api.acedata.cloud sous forme de chaîne de méthodes de style client.OpenAI().Chat().Completions().Create(...), avec un flux SSE intégré (basé sur des canaux), une réessai automatique avec backoff et des erreurs typées.
Le style est aligné sur context.Context + options fonctionnelles, adapté à tout service backend Go ou CLI.
Code source et documentation :
- Dépôt SDK : https://github.com/AceDataCloud/SDK
- Module Go : https://pkg.go.dev/github.com/AceDataCloud/SDK/go
Installation
- Actuellement, aucun tag semver n’est appliqué,
go getrécupère la version de commit pseudov0.0.0-<timestamp>-<sha>; cette version sera verrouillée dansgo.sum, permettant aux membres de l’équipe de récupérer exactement les mêmes dépendances en tirant le même code. - Le SDK Go est actuellement principalement stable sur
chat.completions(synchronisé + en streaming), les ressources multimédias (images/vidéo/audio) et le pollingTaskHandlesont en phase alpha. Pour les scénarios nécessitant ces capacités, veuillez privilégier le SDK TypeScript ou le SDK Python.
Préparer le token API
Référez-vous à Aperçu du SDK - Demande de token API pour obtenir le token, puis dans le shellexport :
WithAPIToken(...) ; le SDK Go ne lira pas automatiquement les variables d’environnement, nécessitant que le code métier utilise os.Getenv, ce qui est plus contrôlable dans des scénarios multi-comptes ou de test.
Exemple 1 : chat.completions (non en streaming)
idest l’ID de réponse compatible avec OpenAI, que l’on peut retrouver dans l’historique d’utilisation console.content ADC_GO_SDK_OKest la sortie réelle du modèle, prouvant que le SDK n’a pas altéré la réponse.- Les 6,4 secondes sont principalement dues à la première poignée de main TLS + génération du modèle, après la réutilisation de l’instance client, la latence est cohérente avec TS / Python (environ 2 à 3 secondes).
- La réponse est uniformément un
map[string]any, nécessitant des assertions de type ; c’est le choix de conception actuel du SDK Go — ne pas introduire de struct générique pour éviter une forte dépendance à un schéma de réponse unique pour le routage multi-modèles.
Exemple 2 : chat.completions (SSE en streaming)
CreateStream retourne deux canaux : <-chan map[string]any est le chunk SSE analysé par trame, <-chan error ne contiendra des éléments lisibles qu’à la fin du flux (normal ou en erreur).
- La première trame a pris 1633 ms, et il a fallu 1816 ms pour recevoir les 13 chunks — les 12 trames suivantes n’ont pris que 183 ms.
range chunkssort naturellement de la boucle à la fin du flux ; le canalerrsne produit au maximum qu’un élément, et il suffit d’utiliserokpour obtenir l’erreur.- L’avantage de ce style de canal est qu’il peut être directement utilisé avec
selecten combinaison aveccontext.Contextpour les délais / annulations, sans nécessiter d’encapsulation supplémentaire.
Exemple 3 : Gestion des erreurs typées
adc.APIError couvre également 401 / 403 / 404 / 422 / 429 / 5xx, le code métier utilise errors.As pour obtenir les champs structurés. Le code d’état HTTP, le code et le message du serveur sont conservés tels quels. Les erreurs de couche réseau (échec DNS, connexion refusée, etc.) passent par context.DeadlineExceeded, net.OpError et autres erreurs standard de Go, et ne seront pas avalées.
Options de configuration (options fonctionnelles)
NewClient retourne (*Client, error) : lorsque le token est vide et qu’aucun WithPaymentHandler (X402) n’est passé, une erreur sera immédiatement signalée, facilitant la détection des configurations manquantes au démarrage du service.
Avancé : Réutiliser le Client
Le SDK Go utilise en interne un*http.Client + http.Transport, avec un pool de connexions et une réutilisation HTTP/2. Il est recommandé de créer un seul *adc.Client pendant le cycle de vie du processus, puis de le partager entre les goroutines — toutes les méthodes sont sûres pour la concurrence.
Limitations et feuille de route
Actuellement stable / recommandé pour une utilisation en production :- ✅
client.OpenAI().Chat().Completions().Createsynchronisé non-flux - ✅
client.OpenAI().Chat().Completions().CreateStreamflux SSE - ✅
errors.As+ gestion des erreursAPIError - ✅ Réessai automatique + retour exponentiel
- 🚧
client.Images()/client.Video()/client.Audio()— l’interface est en évolution, il est recommandé d’utiliser directement HTTP pour le moment - 🚧
TaskHandlesondage asynchrone — pas encore exposé à la surface du SDK Go - 🚧
WithPaymentHandler(X402 paiement en ligne) — prévu, actuellement X402 ne prend en charge que TypeScript et Python

