Go语言OpenAI API 客户端库 支持官方全部接口调用
Go-openai 是一个非官方的、由社区维护的 OpenAI API 客户端库,作者是 sashabaranov。该库为 Go 开发者提供了与 OpenAI 服务进行交互的接口,支持 GPT-3、GPT-4 等模型的使用。go-openai 的 API 非常简洁,符合 Go 语言一贯的简单、高效的编码风格。它封装了 OpenAI 的 RESTful API,允许开发者在 Go 应用中轻松地生成文本、图像等内容。
go-openai 的功能包括:
- 使用 Completions 接口生成文本。
- 使用 Chat 接口与聊天模型进行交互(包括 GPT-4)。
- 使用 Edits 接口进行文本编辑。
- 支持 Embeddings 接口,获取文本的嵌入向量表示。
- 支持 Images 接口,生成图像或根据描述编辑图像。
- 通过 Moderations 接口实现内容审核。
- 支持文件上传及管理。
接下来,我们将探讨如何安装 go-openai,以及如何使用该库的核心功能。
安装 go-openai 库
首先,您需要在项目中引入 go-openai。在您的项目目录下运行以下命令:
go get github.com/sashabaranov/go-openai
安装完成后,您就可以在项目中导入该库:
import openai "github.com/sashabaranov/go-openai"
使用 go-openai 库的基本步骤
初始化客户端
要使用 go-openai,首先需要创建一个 OpenAI 客户端实例。您需要提供 OpenAI 的 API 密钥以进行身份验证。以下是初始化客户端的代码示例:
package main
import (
"context"
"log"
openai "github.com/sashabaranov/go-openai"
)
func main() {
// 替换为您的 OpenAI API 密钥
apiKey := "YOUR_OPENAI_API_KEY"
client := openai.NewClient(apiKey)
// 示例调用生成文本
completion(client)
}
在这里,您使用 openai.NewClient 来创建一个新的客户端对象,apiKey 是您的 OpenAI API 密钥。
使用 Completions 接口生成文本
go-openai 的 Completions 接口是最常用的接口之一,用于从 OpenAI 模型生成文本。以下是一个简单的示例:
func completion(client *openai.Client) {
// 请求参数
req := openai.CompletionRequest{
Model: openai.GPT3TextDavinci003, // 指定模型
Prompt: "What is the capital of France?", // 输入提示
MaxTokens: 10, // 最大生成长度
}
// 调用接口生成文本
resp, err := client.CreateCompletion(context.Background(), req)
if err != nil {
log.Fatalf("Error creating completion: %v", err)
}
// 打印结果
log.Println(resp.Choices[0].Text)
}
在此示例中,我们使用 CreateCompletion 函数调用 Completions 接口。需要提供的参数包括:
- Model:指定模型名称,这里使用了 text-davinci-003。
- Prompt:输入提示文本。
- MaxTokens:生成文本的最大长度。
CreateCompletion 返回一个包含多个选择结果的响应对象。您可以从 resp.Choices[0].Text 中获取生成的文本。
使用 Chat 接口与聊天模型交互
go-openai 提供了 Chat 接口来与聊天模型(例如 GPT-4)进行交互。以下是一个示例:
func chatExample(client *openai.Client) {
// 创建聊天请求
req := openai.ChatCompletionRequest{
Model: openai.GPT4, // 指定聊天模型
Messages: []openai.ChatCompletionMessage{
{
Role: "user",
Content: "Tell me a joke.",
},
},
}
// 调用接口进行聊天
resp, err := client.CreateChatCompletion(context.Background(), req)
if err != nil {
log.Fatalf("Error creating chat completion: %v", err)
}
// 打印聊天结果
log.Println(resp.Choices[0].Message.Content)
}
在此示例中,我们使用了 CreateChatCompletion 函数。您需要指定:
- Model:选择聊天模型,例如 gpt-4。
- Messages:这是聊天历史记录,包括角色(Role)和内容(Content)。
生成图像
除了文本生成,go-openai 也提供了生成图像的接口。以下是如何生成一张图像:
func generateImage(client *openai.Client) {
// 创建图像请求
req := openai.ImageRequest{
Prompt: "A beautiful sunset over a mountain range", // 图像描述
N: 1, // 生成图像数量
Size: openai.CreateImageSize1024x1024, // 图像大小
ResponseFormat: openai.CreateImageResponseFormatURL,
}
// 调用接口生成图像
resp, err := client.CreateImage(context.Background(), req)
if err != nil {
log.Fatalf("Error creating image: %v", err)
}
// 打印生成的图像 URL
log.Println(resp.Data[0].URL)
}
在这个示例中,我们使用了 CreateImage 函数来生成图像。请求参数包括:
- Prompt:图像描述文本。
- N:要生成的图像数量。
- Size:图像大小,例如 1024x1024。
- ResponseFormat:返回结果的格式,这里选择 URL 格式。
其他功能
除了上述功能,go-openai 还支持一些其他实用接口:
- 编辑文本(Edits):根据给定的输入和指令生成编辑过的文本。
- 嵌入(Embeddings):获取文本的嵌入向量,适用于搜索、相似性比较等任务。
- 文件管理(Files):上传、删除和查看文件,适用于为模型提供训练数据。
- 内容审核(Moderations):检测给定文本中是否包含不合规内容。
每个接口的调用方式与上述示例类似,只需根据需要调整请求参数即可。
开源地址: https://github.com/sashabaranov/go-openai
版权声明:本文为原创文章,版权归 全栈开发技术博客 所有。
本文链接:https://www.lvtao.net/tool/go-openai.html
转载时须注明出处及本声明