golang 调用chatgpt api

今天给大家分享一下golang调用chatgpt api的示例代码

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "net/http"
)

type ChatGPTRequest struct {
    Prompt string `json:"prompt"`
}

type ChatGPTResponse struct {
    Choices []struct {
        Text string `json:"text"`
    } `json:"choices"`
}

func main() {
    apiKey := "sk-xxxxxxxxx"

    url := "https://api.openai.com/v1/engines/gpt-3.5-turbo-16k/completions"

    reqData := ChatGPTRequest{Prompt: "golang和python的区别"}
    reqBody, _ := json.Marshal(reqData)
    req, _ := http.NewRequest("POST", url, bytes.NewBuffer(reqBody))
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("Authorization", "Bearer "+apiKey)

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("Error sending request to API: ", err)
        return
    }
    defer resp.Body.Close()

    body, _ := ioutil.ReadAll(resp.Body)
    var chatGPTResponse ChatGPTResponse
    _ = json.Unmarshal(body, &chatGPTResponse)

    fmt.Println("Response from ChatGPT: ", string(body))
}

代码解析:

  1. package main 定义这是一个 Go 语言的主程序包。
  2. 导入所需包:

    • bytes 用于处理字节缓冲。
    • encoding/json 用于 JSON 数据的序列化和反序列化。
    • fmt 用于格式化输出(打印错误信息)。
    • io/ioutil 提供读取 HTTP 响应体的简便方法。
    • net/http 用于处理 HTTP 请求和响应。
  3. 定义两个结构体:

    • ChatGPTRequest 结构体用来表示要发送给 ChatGPT API 的请求数据,其中包含一个字段 Prompt,它是待生成回复的问题或提示。
    • ChatGPTResponse 结构体用来解析从 ChatGPT API 返回的数据,它包含一个名为 Choices 的切片,每个元素是一个匿名结构体,该结构体仅有一个字段 Text,代表 ChatGPT 生成的文本回复之一。
  4. main 函数中:

    • 初始化一个变量 apiKey 存储 OpenAI API 密钥,此处被注释要求替换为实际密钥。
    • 设置 API 终点 URL 为 GPT-3.5 Turbo-16k 引擎的访问地址。
    • 创建一个新的请求:

      • 构建一个 ChatGPTRequest 实例,其 Prompt 设置为 “golang和python的区别”。
      • 使用 json.Marshal() 将请求结构体转换成 JSON 格式的字节流。
      • 创建一个 http.Request 对象,方法为 POST,URL 为上述引擎地址,请求体为构造好的 JSON 数据,并设置请求头 Content-Type 为 application/json 和 Authorization 为 Bearer Token 形式的 API 密钥。
    • 发送请求:

      • 创建一个 http.Client 实例并使用它来发送请求。
      • 如果发生错误,打印错误信息并结束程序运行。
      • 当请求完成后,确保关闭响应体。
    • 处理响应:

      • 读取响应体的所有内容到内存。
      • 将响应体的 JSON 数据反序列化到 ChatGPTResponse 结构体实例中。
      • 虽然这里使用 _ = json.Unmarshal() 来忽略可能发生的错误,但在实际开发中应该处理这个错误。
    • 打印响应:

      • 输出原始的响应体内容(字符串形式)。

要注意的是

ChatGPT4 会员并没有ChatGPT API的访问权限
使用 ChatGPT API,需单独申请和购买
没有单独购买 ChatGPT API 的调用api 接口报错如下:

image-20240408135341630

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.