SDK
Go
Для Go экосистемы используйте библиотеку github.com/sashabaranov/go-openai. Достаточно указатьBaseURL и ключ ZvenoAI, чтобы продолжить работу в существующих сервисах без VPN.
Установка
go get github.com/sashabaranov/go-openaiБыстрый старт
import (
"context"
"fmt"
"os"
openai "github.com/sashabaranov/go-openai"
)
func main() {
cfg := openai.DefaultConfig(os.Getenv("ZVENOAI_API_KEY"))
cfg.BaseURL = "https://api.zveno.ai/v1"
client := openai.NewClientWithConfig(cfg)
resp, err := client.CreateChatCompletion(
context.Background(),
openai.ChatCompletionRequest{
Model: openai.GPT4o,
Messages: []openai.ChatCompletionMessage{
{Role: openai.ChatMessageRoleUser, Content: "Привет!"},
},
},
)
if err != nil {
panic(err)
}
if len(resp.Choices) == 0 {
panic("empty choices")
}
fmt.Println(resp.Choices[0].Message.Content)
}Streaming
stream, err := client.CreateChatCompletionStream(
context.Background(),
openai.ChatCompletionRequest{
Model: openai.GPT4oMini,
Stream: true,
Messages: []openai.ChatCompletionMessage{
{Role: openai.ChatMessageRoleUser, Content: "Сгенерируй список идей"},
},
},
)
if err != nil {
log.Fatal(err)
}
defer stream.Close()
for {
response, err := stream.Recv()
if errors.Is(err, io.EOF) {
fmt.Println("\n--- done ---")
break
}
if err != nil {
log.Fatalf("stream error: %v", err)
}
if delta := response.Choices[0].Delta.Content; delta != "" {
fmt.Print(delta)
}
}Обработка ошибок
resp, err := client.CreateChatCompletion(ctx, request)
if err != nil {
var apiErr *openai.APIError
if errors.As(err, &apiErr) {
log.Printf("ZvenoAI API error: status=%d type=%s", apiErr.HTTPStatusCode, apiErr.Type)
return
}
if errors.Is(err, context.DeadlineExceeded) {
log.Println("Запрос превысил timeout, повторяем...")
return
}
log.Fatalf("unexpected error: %v", err)
}