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
1 package main 2 3 import ( 4 "os" 5 6 joytoken "github.com/joytoken/client-sdk-golang" 7 ) 8 9 var client = joytoken.NewClient( 10 joytoken.WithAPIKey(os.Getenv("JOY_TOKEN_API_KEY")), 11 )
默认值:
| 配置 | 默认值 |
|---|---|
| API Key | JOY_TOKEN_API_KEY |
| API 基础 URL | JOY_TOKEN_API_BASE_URL 或 https://api-dev.joytokens.ai |
| OpenAI 基础 URL | JOY_TOKEN_OPENAI_BASE_URL 或 ${apiBaseURL}/openai/v1 |
| HTTP 客户端 | http.Client{Timeout: 60 * time.Second} |
聊天补全
chat.go
1 response, 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 }) 9 if err != nil { 10 return err 11 } 12 13 fmt.Println(response.Choices[0].Message.Content)
流式响应
stream.go
1 stream, err := client.StreamChatCompletion(ctx, joytoken.ChatCompletionRequest{ 2 Model: "auto", 3 Messages: []joytoken.ChatMessage{ 4 {Role: "user", Content: "Write a short release note."}, 5 }, 6 }) 7 if err != nil { 8 return err 9 } 10 defer stream.Close() 11 12 for { 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
1 models, err := client.ListModels(ctx) 2 if err != nil { 3 return err 4 } 5 6 for _, model := range models.Data { 7 fmt.Println(model.ID, model.Name) 8 }
错误处理
errors.go
1 response, err := client.CreateChatCompletion(ctx, request) 2 if 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 11 fmt.Println(response.Choices[0].Message.Content)
APIError 包含 HTTP 状态码、request ID 和原始响应体,可用于日志与重试判断。
自定义客户端
custom-client.go
1 client := 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 )