github.com/AceDataCloud/SDK/go é o SDK Go oficial da Ace Data Cloud, que encapsula as chat completions / images / video / music / search do api.acedata.cloud em uma cadeia de métodos no estilo client.OpenAI().Chat().Completions().Create(...), com suporte a fluxo SSE (baseado em channel), reintentos automáticos com backoff e erros tipados.
O estilo está alinhado com context.Context + opções funcionais, adequado para qualquer serviço backend Go ou CLI.
Código-fonte e documentação:
- Repositório do SDK: https://github.com/AceDataCloud/SDK
- Módulo Go: https://pkg.go.dev/github.com/AceDataCloud/SDK/go
Instalação
- Atualmente, não há etiqueta semver,
go getobtém a versão do commitv0.0.0-<timestamp>-<sha>; essa versão será bloqueada emgo.sum, permitindo que os membros da equipe que puxam o mesmo código obtenham dependências completamente consistentes. - O SDK Go atualmente tem como caminho principal estável
chat.completions(síncrono + em fluxo), recursos multimídia (images/video/audio) eTaskHandlepolling estão em fase alpha. Para cenários que precisam dessas capacidades, escolha prioritariamente o SDK TypeScript ou o SDK Python.
Preparar Token da API
Consulte Visão Geral do SDK - Solicitar Token da API para obter o token e, em seguida, no shell,export:
WithAPIToken(...); o SDK Go não lerá automaticamente as variáveis de ambiente, sendo necessário que o código de negócios utilize os.Getenv, tornando-o mais controlável em cenários de múltiplas contas ou testes.
Exemplo 1: chat.completions (não em fluxo)
idé o ID de resposta compatível com OpenAI, que pode ser encontrado no console Histórico de Uso.content ADC_GO_SDK_OKé a saída real do modelo, provando que o SDK não alterou a resposta.- A maior parte dos 6,4 segundos é devido à primeira negociação TLS + geração do modelo, após reutilizar a instância do cliente, a latência é consistente com TS / Python (cerca de 2 a 3 segundos).
- A resposta é uniformemente um
map[string]any, sendo necessário fazer a asserção de tipo; essa é a escolha de design atual do SDK Go — não introduzir structs genéricas para evitar uma forte dependência de um único esquema de resposta.
Exemplo 2: chat.completions (fluxo SSE)
CreateStream retorna dois canais: <-chan map[string]any é o chunk SSE analisado quadro a quadro, <-chan error terá elementos legíveis apenas após o fim do fluxo (normal ou com erro).
- O primeiro quadro levou 1633 ms, e todos os 13 chunks foram recebidos em 1816 ms — os 12 quadros seguintes levaram apenas 183 ms.
range chunksnaturalmente sairá do loop ao final do fluxo; o canalerrssempre renderiza no máximo um elemento, e a verificação comoké suficiente para capturar o erro.- A vantagem desse estilo de canal é que pode ser diretamente utilizado com
selectem conjunto comcontext.Contextpara timeout/cancelamento, sem necessidade de encapsulamento adicional.
Exemplo 3: Tratamento de Erros Tipados
adc.APIError cobre 401 / 403 / 404 / 422 / 429 / 5xx, o código de negócios usa errors.As para obter os campos estruturados. O código de status HTTP, o code e a message do servidor são mantidos inalterados. Erros de camada de rede (falha de DNS, conexão recusada, etc.) seguem context.DeadlineExceeded, net.OpError e outros erros padrão do Go, não serão ignorados.
Opções de configuração (opções funcionais)
NewClient retorna (*Client, error): quando o token está vazio e não foi passado WithPaymentHandler (X402), um erro será gerado imediatamente, facilitando a identificação de configurações ausentes durante o início do serviço.
Avançado: Reutilizar Client
O SDK Go usa internamente um*http.Client + http.Transport, com pool de conexões e reutilização de HTTP/2. Recomendado criar apenas um *adc.Client durante o ciclo de vida do processo e compartilhá-lo entre goroutines — todos os métodos são seguros para concorrência.
Limitações e roteiro
Atualmente estável / recomendado para uso em produção:- ✅
client.OpenAI().Chat().Completions().Createsíncrono não streaming - ✅
client.OpenAI().Chat().Completions().CreateStreamstreaming SSE - ✅
errors.As+ tratamento de erroAPIError - ✅ Tentativas automáticas + retrocesso exponencial
- 🚧
client.Images()/client.Video()/client.Audio()— interfaces em evolução, recomenda-se usar HTTP diretamente - 🚧
TaskHandlepolling assíncrono — ainda não exposto na camada superior do SDK Go - 🚧
WithPaymentHandler(X402 pagamento em blockchain) — em planejamento, atualmente X402 suporta apenas TypeScript e Python

