github.com/AceDataCloud/SDK/go — это официальный Go SDK от Ace Data Cloud, который оборачивает chat completions / images / video / music / search на api.acedata.cloud в цепочку методов в стиле client.OpenAI().Chat().Completions().Create(...), с поддержкой потоковой передачи SSE (на основе channel), автоматическим повтором с экспоненциальной задержкой и типизированными ошибками.
Стиль соответствует context.Context + функциональным опциям, подходит для использования в любом Go бэкенд-сервисе или CLI.
Исходный код и документация:
- Репозиторий SDK: https://github.com/AceDataCloud/SDK
- Go модуль: https://pkg.go.dev/github.com/AceDataCloud/SDK/go
Установка
- В данный момент нет меток semver,
go getполучает коммит в виде псевдовариантаv0.0.0-<timestamp>-<sha>; эта версия будет зафиксирована вgo.sum, члены команды, получая один и тот же код, смогут получить полностью идентичные зависимости. - Go SDK в настоящее время в основном стабилен для
chat.completions(синхронный + потоковый), мультимедийные ресурсы (images/video/audio) и опросTaskHandleнаходятся на стадии альфа. Для сценариев, требующих этих возможностей, пожалуйста, выберите в первую очередь TypeScript SDK или Python SDK.
Подготовка API Token
Согласно Обзор SDK - Запрос API Token получите токен, затем в shell выполнитеexport:
WithAPIToken(...); Go SDK не будет автоматически считывать переменные окружения, необходимо, чтобы бизнес-код использовал os.Getenv, что делает его более управляемым в сценариях с несколькими аккаунтами или тестирования.
Пример 1: chat.completions (не потоковый)
id— это ID ответа, совместимый с OpenAI, который можно найти в консоли История использования.content ADC_GO_SDK_OK— это реальный вывод модели, подтверждающий, что SDK не изменял ответ.- Большая часть 6.4 секунд ушла на первое TLS-соединение + генерацию модели, после повторного использования экземпляра клиента задержка стала такой же, как у TS / Python (примерно 2~3 секунды).
- Ответ всегда представляет собой
map[string]any, требуется самостоятельно выполнять приведение типов; это текущее дизайнерское решение Go SDK — не вводить обобщенные структуры, чтобы маршрутизация по нескольким моделям не зависела от единой схемы ответа.
Пример 2: chat.completions (потоковый SSE)
CreateStream возвращает два канала: <-chan map[string]any — это разобранные по кадрам SSE chunk, <-chan error будет содержать читаемые элементы только после завершения потока (нормально или с ошибкой).
- Первая рамка 1633 мс, все 13 chunk’ов в сумме заняли 1816 мс — последние 12 рамок заняли всего 183 мс.
range chunksестественным образом завершит цикл при окончании потока; каналerrsвсегда будет выдавать максимум один элемент, с помощьюokпроверки можно получить ошибку.- Преимущество этого стиля с каналами заключается в том, что можно напрямую использовать
selectв сочетании сcontext.Contextдля таймаута/отмены, без необходимости дополнительной упаковки.
Пример 3: обработка типизированных ошибок
adc.APIError одновременно обрабатывает 401 / 403 / 404 / 422 / 429 / 5xx, бизнес-код использует errors.As, чтобы получить структурированные поля. HTTP статус-коды, серверные code и message остаются без изменений. Ошибки сетевого уровня (ошибка DNS, отказ в соединении и т.д.) обрабатываются стандартными ошибками Go, такими как context.DeadlineExceeded, net.OpError и не будут подавляться.
Конфигурационные параметры (функциональные параметры)
NewClient возвращает (*Client, error): когда токен пустой и не передан WithPaymentHandler (X402), будет немедленно выдана ошибка, чтобы можно было сразу обнаружить отсутствие конфигурации на этапе запуска сервиса.
Продвинутый: повторное использование Client
Go SDK использует один*http.Client + http.Transport, который имеет встроенный пул соединений и поддержку HTTP/2. Рекомендуется создавать только один *adc.Client в течение жизненного цикла процесса, а затем делиться им между goroutine — все методы являются потокобезопасными.
Ограничения и дорожная карта
Текущая стабильная / рекомендуемая для производственного использования:- ✅
client.OpenAI().Chat().Completions().Createсинхронный нестриминговый - ✅
client.OpenAI().Chat().Completions().CreateStreamSSE стриминговый - ✅
errors.As+APIErrorобработка ошибок - ✅ Автоматические повторные попытки + экспоненциальная задержка
- 🚧
client.Images()/client.Video()/client.Audio()— интерфейсы находятся в разработке, рекомендуется использовать HTTP напрямую - 🚧
TaskHandleасинхронный опрос — еще не доступен на уровне Go SDK - 🚧
WithPaymentHandler(X402 оплата на блокчейне) — в планах, в настоящее время X402 поддерживает только TypeScript и Python

