golang集成OpenAI GPT3/GPT3.5 ChatGPT API客户端插件库openaigo的使用
Golang集成OpenAI GPT3/GPT3.5 ChatGPT API客户端插件库openaigo的使用
简介
openaigo是另一个用于api.openai.com
的API客户端库。请注意,这个库是由社区维护的,并非OpenAI官方支持。
使用示例
下面是一个完整的示例代码,展示如何使用openaigo库与OpenAI的ChatGPT API进行交互:
package main
import (
"context"
"fmt"
"os"
"github.com/otiai10/openaigo"
)
func main() {
// 创建客户端,使用环境变量中的API密钥
client := openaigo.NewClient(os.Getenv("OPENAI_API_KEY"))
// 准备聊天请求
request := openaigo.ChatRequest{
Model: "gpt-4o", // 指定模型
Messages: []openaigo.Message{
{Role: "user", Content: "Hello!"}, // 用户消息
},
}
// 创建上下文
ctx := context.Background()
// 发送请求并获取响应
response, err := client.Chat(ctx, request)
// 打印响应和错误
fmt.Println(response, err)
}
如果你想快速尝试,可以运行以下命令:
git clone https://github.com/otiai10/openaigo.git
cd openaigo
OPENAI_API_KEY=YourAPIKey go run ./testapp/main.go
如何获取API密钥?
访问OpenAI网站并创建你自己的API密钥即可开始免费使用。
支持的API端点
openaigo库支持以下OpenAI API端点:
-
模型
- 列出模型
- 检索模型
-
文本补全
- 创建补全
-
聊天补全
- 创建聊天补全
- 支持function_call功能
- 创建聊天补全
-
编辑
- 创建编辑
-
图像
- 创建图像(beta)
- 创建图像编辑(beta)
- 创建图像变体(beta)
-
嵌入
- 创建嵌入
-
文件
- 列出文件
- 上传文件
- 删除文件
- 检索文件
- 检索文件内容
-
微调
- 创建微调
- 列出微调
- 检索微调
- 取消微调
- 列出微调事件
- 删除微调模型
-
审核
- 创建审核
使用function_call功能
如果你想使用function_call功能,可以这样设置请求:
request := openaigo.ChatRequest{
Messages: []openaigo.Message{
{Role: "user", Content: "How's the weather today in Tokyo?"},
},
Functions: []openaigo.Function{
{
Name: "get_weather",
Parameters: openaigo.Parameters{
Type: "object",
Properties: map[string]map[string]any{
"location": {"type": "string"},
"date": {"type": "string", "description": "ISO 8601 date string"},
},
Required: []string{"location"},
},
}
},
}
如果你想使用简写方式,可以使用functioncall
包:
import fc "github.com/otiai10/openaigo/functioncall"
request.Functions = fc.Funcs{
"get_weather": {GetWeather, "Get weather of the location", fc.Params{
{"location", "string", "location of the weather", true},
{"date", "string", "ISO 8601 date string", true},
}},
}
使用流式响应
如果需要使用流式响应,可以这样设置:
client := openaigo.NewClient(OPENAI_API_KEY)
request := openaigo.ChatRequest{
Stream: true,
StreamCallback: func(res ChatCompletionResponse, done bool, err error) {
// 在这里处理流式响应
// 你可能需要在这里处理通道
},
}
设置代理
如果需要通过代理访问API,可以这样设置:
client := openaigo.NewClient(OPENAI_API_KEY)
// 可以设置任何你需要的代理配置
transport := &http.Transport{ Proxy: http.ProxyFromEnvironment }
client.HTTPClient = &http.Client{ Transport: transport }
// 完成!
问题反馈
欢迎报告任何问题或提供反馈。
更多关于golang集成OpenAI GPT3/GPT3.5 ChatGPT API客户端插件库openaigo的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang集成OpenAI GPT3/GPT3.5 ChatGPT API客户端插件库openaigo的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用openaigo库集成OpenAI GPT-3/GPT-3.5 API
openaigo是一个简单易用的Go语言客户端库,用于与OpenAI的GPT-3、GPT-3.5和ChatGPT API进行交互。下面我将详细介绍如何使用这个库。
安装openaigo
首先,使用go get安装openaigo库:
go get github.com/otiai10/openaigo
基本使用示例
1. 初始化客户端
package main
import (
"context"
"fmt"
"github.com/otiai10/openaigo"
)
func main() {
// 使用你的OpenAI API密钥初始化客户端
client := openaigo.NewClient("your-api-key-here")
// 可选: 设置组织ID(如果你属于多个组织)
// client.Organization = "org-your-organization-id"
}
2. 发送简单的文本补全请求
func simpleCompletion(client *openaigo.Client) {
request := openaigo.CompletionRequest{
Model: "text-davinci-003", // GPT-3模型
Prompt: "Go语言的特点是",
MaxTokens: 100,
Temperature: 0.7,
}
response, err := client.Completion(context.Background(), request)
if err != nil {
fmt.Printf("Completion error: %v\n", err)
return
}
fmt.Println("Completion result:")
for _, choice := range response.Choices {
fmt.Println(choice.Text)
}
}
3. 使用ChatGPT API (GPT-3.5-turbo)
func chatCompletion(client *openaigo.Client) {
request := openaigo.ChatRequest{
Model: "gpt-3.5-turbo",
Messages: []openaigo.Message{
{Role: "system", Content: "你是一个有帮助的助手。"},
{Role: "user", Content: "Go语言的主要特性是什么?"},
},
MaxTokens: 200,
Temperature: 0.7,
}
response, err := client.Chat(context.Background(), request)
if err != nil {
fmt.Printf("Chat completion error: %v\n", err)
return
}
fmt.Println("Chat completion result:")
for _, choice := range response.Choices {
fmt.Printf("Role: %s\nContent: %s\n", choice.Message.Role, choice.Message.Content)
}
}
高级功能
1. 流式响应
func streamCompletion(client *openaigo.Client) {
request := openaigo.ChatRequest{
Model: "gpt-3.5-turbo",
Messages: []openaigo.Message{
{Role: "user", Content: "用Go语言实现一个简单的HTTP服务器"},
},
Stream: true,
}
// 创建上下文以便可以取消流
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// 创建通道接收流事件
stream, err := client.ChatStream(ctx, request)
if err != nil {
fmt.Printf("Stream error: %v\n", err)
return
}
fmt.Println("Streaming response:")
for event := range stream {
if event.Error != nil {
fmt.Printf("Stream error: %v\n", event.Error)
break
}
for _, choice := range event.Choices {
fmt.Print(choice.Delta.Content)
}
}
fmt.Println()
}
2. 自定义HTTP客户端
func customHTTPClient() {
client := openaigo.NewClient("your-api-key-here")
// 自定义HTTP客户端配置
client.HTTPClient = &http.Client{
Timeout: 30 * time.Second,
Transport: &http.Transport{
MaxIdleConns: 10,
IdleConnTimeout: 30 * time.Second,
DisableCompression: true,
},
}
// 现在可以使用自定义HTTP客户端的client进行API调用
}
错误处理
func handleErrors(client *openaigo.Client) {
_, err := client.Chat(context.Background(), openaigo.ChatRequest{
Model: "invalid-model",
Messages: []openaigo.Message{
{Role: "user", Content: "测试错误处理"},
},
})
if err != nil {
// 检查是否是API错误
if apiErr, ok := err.(*openaigo.APIError); ok {
fmt.Printf("API Error: %s (Status: %d)\n", apiErr.Message, apiErr.StatusCode)
} else {
fmt.Printf("Other error: %v\n", err)
}
return
}
}
最佳实践
-
环境变量管理API密钥:不要将API密钥硬编码在代码中
apiKey := os.Getenv("OPENAI_API_KEY") client := openaigo.NewClient(apiKey)
-
设置合理的超时:为API调用设置适当的超时
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() response, err := client.Chat(ctx, request)
-
限制最大token数:根据你的需求设置合理的max_tokens值,避免不必要的费用
-
处理速率限制:实现重试逻辑处理速率限制错误
openaigo库提供了简洁的接口来与OpenAI的各种API交互,通过上述示例你可以快速集成GPT-3/GPT-3.5到你的Go应用程序中。