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

标签: Go, AI

相关文章

从入门到放弃:使用 spf13/viper 管理 Go 应用配置

在现代软件开发中,配置管理是一个至关重要的环节。随着应用的复杂性增加,配置管理的需求也变得更加多样化和复杂化。Go 语言社区中,spf13/viper 是一个非常流行的配置管理库,它提供了一种强...

使用 spf13/cobra 构建强大的 Go 命令行应用

spf13/cobra 是 Go 语言中非常流行的一个库,用于创建命令行应用(CLI)。它提供了一种强大且易于使用的框架来开发支持复杂命令结构的应用程序。Cobra 库主要用于创建像 kubec...

Go语言Web框架 Fiber入门教程

Fiber 是一个基于 Go 语言的 Web 框架,灵感来源于 Express.js,旨在提供快速、简单且轻量级的开发体验。Fiber 的设计目标是让开发者能够快速构建高性能的 Web 应用,同...

Go语言跨平台GUI工具包tk9.0

不得不说,这名字起的.....tk9.0是一个用Go语言编写的跨平台GUI工具包,它使用Tcl/Tk作为底层图形库,无需CGo,这意味着您可以使用它来创建原生跨平台应用程序,而无需依赖于C语言编...

基于Go语言开源免费轻量级网站防火墙SamWaf

SamWaf网站防火墙是一款适用于小公司、工作室和个人网站的免费轻量级网站防火墙,完全私有化部署,数据加密且仅保存本地,一键启动,支持Linux,Windows 64位主要功能:完全独立引擎,防...

如何实现让我们部署的Go应用在进程挂掉之后自动重启

在软件开发和部署过程中,确保应用的高可用性是至关重要的。对于使用Go语言开发的应用来说,实现在进程异常终止后自动重启是提高服务稳定性的有效策略之一。下面将围绕如何实现Go应用在挂掉之后自动重启进...

图片Base64编码

CSR生成

图片无损放大

图片占位符

Excel拆分文件