Golang OpenAI库使用教程
最近在学习Golang对接OpenAI的API,看到有个Golang的OpenAI库但不太清楚具体怎么使用。想问下:
- 这个库支持OpenAI的哪些功能?比如文本生成、图片生成都支持吗?
- 有没有完整的代码示例可以参考?特别是认证和请求部分该怎么写
- 在实际项目中使用需要注意哪些问题?比如并发控制、错误处理之类的
- 这个库和直接调用OpenAI的REST API相比有什么优势吗?
2 回复
以下是Golang调用OpenAI API的简单教程:
- 安装库
使用官方推荐的
github.com/sashabaranov/go-openai:
go get github.com/sashabaranov/go-openai
- 基础使用
package main
import (
"context"
"fmt"
openai "github.com/sashabaranov/go-openai"
)
func main() {
client := openai.NewClient("你的API密钥")
resp, err := client.CreateChatCompletion(
context.Background(),
openai.ChatCompletionRequest{
Model: openai.GPT3Dot5Turbo,
Messages: []openai.ChatCompletionMessage{
{
Role: openai.ChatMessageRoleUser,
Content: "Hello!",
},
},
},
)
if err != nil {
fmt.Printf("错误: %v\n", err)
return
}
fmt.Println(resp.Choices[0].Message.Content)
}
- 关键参数
MaxTokens: 控制回复长度Temperature: 控制随机性(0-2)Stream: 启用流式传输
- 注意事项
- API密钥从OpenAI官网获取
- 注意费用控制,测试时设置使用量限制
- 处理错误和超时
更多关于Golang OpenAI库使用教程的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang OpenAI库使用教程
OpenAI官方没有提供Go语言的SDK,但社区有几个优秀的第三方库。以下是使用最广泛的go-openai库的教程:
安装
go get github.com/sashabaranov/go-openai
基本使用
1. 初始化客户端
package main
import (
"context"
"fmt"
"log"
openai "github.com/sashabaranov/go-openai"
)
func main() {
client := openai.NewClient("your-api-key")
// 使用示例
resp, err := client.CreateChatCompletion(
context.Background(),
openai.ChatCompletionRequest{
Model: openai.GPT3Dot5Turbo,
Messages: []openai.ChatCompletionMessage{
{
Role: openai.ChatMessageRoleUser,
Content: "Hello, how are you?",
},
},
},
)
if err != nil {
log.Fatal(err)
}
fmt.Println(resp.Choices[0].Message.Content)
}
2. 聊天补全示例
func chatExample(client *openai.Client) {
resp, err := client.CreateChatCompletion(
context.Background(),
openai.ChatCompletionRequest{
Model: openai.GPT3Dot5Turbo,
Messages: []openai.ChatCompletionMessage{
{
Role: openai.ChatMessageRoleSystem,
Content: "You are a helpful assistant.",
},
{
Role: openai.ChatMessageRoleUser,
Content: "What's the weather like today?",
},
},
MaxTokens: 100,
Temperature: 0.7,
},
)
if err != nil {
log.Fatal(err)
}
fmt.Println("Response:", resp.Choices[0].Message.Content)
}
3. 流式响应
func streamExample(client *openai.Client) {
req := openai.ChatCompletionRequest{
Model: openai.GPT3Dot5Turbo,
Messages: []openai.ChatCompletionMessage{
{
Role: openai.ChatMessageRoleUser,
Content: "Tell me a story about AI",
},
},
Stream: true,
}
stream, err := client.CreateChatCompletionStream(context.Background(), req)
if err != nil {
log.Fatal(err)
}
defer stream.Close()
for {
response, err := stream.Recv()
if err != nil {
break
}
if len(response.Choices) > 0 {
fmt.Print(response.Choices[0].Delta.Content)
}
}
fmt.Println()
}
主要功能
- 聊天补全 -
CreateChatCompletion - 文本补全 -
CreateCompletion - 图像生成 -
CreateImage - 嵌入向量 -
CreateEmbeddings - 音频转录 -
CreateTranscription
配置选项
config := openai.DefaultConfig("your-api-key")
config.BaseURL = "https://api.openai.com/v1" // 可自定义端点
client := openai.NewClientWithConfig(config)
错误处理
resp, err := client.CreateChatCompletion(ctx, req)
if err != nil {
var apiErr *openai.APIError
if errors.As(err, &apiErr) {
fmt.Printf("OpenAI error: %s\n", apiErr.Message)
} else {
fmt.Printf("Other error: %v\n", err)
}
return
}
注意事项
- 妥善保管API密钥
- 注意API调用频率限制
- 合理设置超时时间
- 处理网络错误和API错误
这个库功能完整,文档详细,是Go语言中使用OpenAI API的首选方案。

