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 потокову (на основі каналу), автоматичне повторне спробування з відступом та типізовані помилки.
Стиль узгоджується з 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 отримайте токен, а потім у shellexport:
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 частини, <-chan error з’явиться лише після завершення потоку (нормально або з помилкою).
- Перша частина 1633 мс, 13 частин в цілому зайняли 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

