Skip to content

Go SDK

SDKMAX 完全兼容 OpenAI 接口协议,Go 项目可直接使用 OpenAI 官方 Go SDK(github.com/openai/openai-go),通过自定义 BaseURL 接入 SDKMAX。

安装

bash
go get github.com/openai/openai-go/v2

初始化客户端

go
package main

import (
    "context"
    "fmt"

    "github.com/openai/openai-go/v2"
    "github.com/openai/openai-go/v2/option"
)

func main() {
    client := openai.NewClient(
        option.WithAPIKey("sk-你的密钥"),
        option.WithBaseURL("https://api.sdkmax.com/v1"),
    )

    resp, err := client.Chat.Completions.New(context.Background(), openai.ChatCompletionNewParams{
        Model: "gpt-4o",
        Messages: []openai.ChatCompletionMessageParamUnion{
            openai.UserMessage("介绍一下 SDKMAX 的核心能力"),
        },
    })
    if err != nil {
        panic(err)
    }
    fmt.Println(resp.Choices[0].Message.Content)
}

也可以通过环境变量配置:

bash
export OPENAI_API_KEY="sk-你的密钥"
export OPENAI_BASE_URL="https://api.sdkmax.com/v1"
go
client := openai.NewClient() // 自动读取上面两个环境变量

流式输出

go
stream := client.Chat.Completions.NewStreaming(context.Background(), openai.ChatCompletionNewParams{
    Model: "gpt-4o",
    Messages: []openai.ChatCompletionMessageParamUnion{
        openai.UserMessage("写一首关于 AI 网关的短诗"),
    },
})

for stream.Next() {
    chunk := stream.Current()
    if len(chunk.Choices) > 0 {
        fmt.Print(chunk.Choices[0].Delta.Content)
    }
}
if err := stream.Err(); err != nil {
    panic(err)
}

切换模型

go
models := []string{"gpt-4o", "claude-opus-4-8", "deepseek-chat"}
for _, model := range models {
    resp, err := client.Chat.Completions.New(context.Background(), openai.ChatCompletionNewParams{
        Model:    model,
        Messages: []openai.ChatCompletionMessageParamUnion{openai.UserMessage("1+1等于几?")},
    })
    if err != nil {
        fmt.Println(model, "error:", err)
        continue
    }
    fmt.Println(model, "->", resp.Choices[0].Message.Content)
}

错误处理

go
resp, err := client.Chat.Completions.New(context.Background(), params)
if err != nil {
    var apiErr *openai.Error
    if errors.As(err, &apiErr) {
        // apiErr.StatusCode == 429 时表示额度耗尽或触发限流,建议退避重试
        fmt.Println(apiErr.StatusCode, apiErr.Message)
    }
    return
}

完整错误码含义见 错误码

不使用官方 SDK?

标准库 net/http 也可以直接调用,只需设置 Authorization: Bearer sk-xxx 请求头并按 API 调用方法 拼装 JSON Body。

SDKMAX — Enterprise AI Gateway, Aggregating Global AI Resources