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

1 回复

更多关于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
	}
}

最佳实践

  1. 环境变量管理API密钥:不要将API密钥硬编码在代码中

    apiKey := os.Getenv("OPENAI_API_KEY")
    client := openaigo.NewClient(apiKey)
    
  2. 设置合理的超时:为API调用设置适当的超时

    ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
    defer cancel()
    response, err := client.Chat(ctx, request)
    
  3. 限制最大token数:根据你的需求设置合理的max_tokens值,避免不必要的费用

  4. 处理速率限制:实现重试逻辑处理速率限制错误

openaigo库提供了简洁的接口来与OpenAI的各种API交互,通过上述示例你可以快速集成GPT-3/GPT-3.5到你的Go应用程序中。

回到顶部