Go SDK

github.com/joytoken/client-sdk-golang 是 JoyToken 公开开发者 API 的 Go 客户端。它封装聊天补全、流式聊天补全、模型列表、API Key 请求头、默认基础 URL 和结构化 API 错误。

安装

$go get github.com/joytoken/client-sdk-golang

配置

client.go
1package main
2
3import (
4 "os"
5
6 joytoken "github.com/joytoken/client-sdk-golang"
7)
8
9var client = joytoken.NewClient(
10 joytoken.WithAPIKey(os.Getenv("JOY_TOKEN_API_KEY")),
11)

默认值:

配置默认值
API KeyJOY_TOKEN_API_KEY
API 基础 URLJOY_TOKEN_API_BASE_URLhttps://api-dev.joytokens.ai
OpenAI 基础 URLJOY_TOKEN_OPENAI_BASE_URL${apiBaseURL}/openai/v1
HTTP 客户端http.Client{Timeout: 60 * time.Second}

聊天补全

chat.go
1response, err := client.CreateChatCompletion(ctx, joytoken.ChatCompletionRequest{
2 Model: "auto",
3 Tier: "standard",
4 Messages: []joytoken.ChatMessage{
5 {Role: "system", Content: "You are concise."},
6 {Role: "user", Content: "Explain JoyToken in one sentence."},
7 },
8})
9if err != nil {
10 return err
11}
12
13fmt.Println(response.Choices[0].Message.Content)

流式响应

stream.go
1stream, err := client.StreamChatCompletion(ctx, joytoken.ChatCompletionRequest{
2 Model: "auto",
3 Messages: []joytoken.ChatMessage{
4 {Role: "user", Content: "Write a short release note."},
5 },
6})
7if err != nil {
8 return err
9}
10defer stream.Close()
11
12for {
13 chunk, err := stream.Recv()
14 if errors.Is(err, io.EOF) {
15 break
16 }
17 if err != nil {
18 return err
19 }
20
21 if len(chunk.Choices) > 0 {
22 fmt.Print(chunk.Choices[0].Delta["content"])
23 }
24}

JoyToken 可能会在流式响应结束前发送元数据事件。渲染文本前先判断 Choices 是否存在。

模型列表

models.go
1models, err := client.ListModels(ctx)
2if err != nil {
3 return err
4}
5
6for _, model := range models.Data {
7 fmt.Println(model.ID, model.Name)
8}

错误处理

errors.go
1response, err := client.CreateChatCompletion(ctx, request)
2if err != nil {
3 var apiErr *joytoken.APIError
4 if errors.As(err, &apiErr) {
5 log.Printf("joytoken status=%d request_id=%s body=%s", apiErr.StatusCode, apiErr.RequestID, apiErr.Body)
6 return err
7 }
8 return err
9}
10
11fmt.Println(response.Choices[0].Message.Content)

APIError 包含 HTTP 状态码、request ID 和原始响应体,可用于日志与重试判断。

自定义客户端

custom-client.go
1client := joytoken.NewClient(
2 joytoken.WithAPIKey(os.Getenv("JOY_TOKEN_API_KEY")),
3 joytoken.WithAPIBaseURL("https://api-dev.joytokens.ai"),
4 joytoken.WithHeader("X-Request-ID", "go-worker"),
5 joytoken.WithHTTPClient(&http.Client{Timeout: 30 * time.Second}),
6)