技术博客--Go语言调用ChatGPT AI接口

文章目录

        • 一、技术概述
        • 二、技术详述
          • Go语言调用ChatGPT接口流程图
          • 2.1 导入必要的包
          • 2.2 构造请求体
          • 2.3 发送HTTP请求
          • 2.4 处理响应的数据
          • 2.5 提取结果
          • 2.6 错误处理
        • 三、遇到的问题和解决过程
        • 四、总结
        • 五、参考文献

一、技术概述

关于使用Go语言调用ChatGPT API接口,在我们需要与机器人聊天,语言翻译,文本生成,等各种Prompt时需要调用ChatGPT API接口。其中我认为的难点是数据结构的构建和转换,ChatGPT接口所需的格式,通常是JSON,可能需要进行结构体定义、字段映射和JSON序列化等操作。

二、技术详述

  • Go语言调用ChatGPT接口流程图

在这里插入图片描述

2.1 导入必要的包

在Go代码中,首先需要导入必要的包来进行HTTP请求和处理JSON数据。通常需要导入net/httpencoding/jsonio/ioutil等包。

import (
	"github.com/gin-gonic/gin"
	"github.com/yacw-team/yacw/models"
	"github.com/yacw-team/yacw/utils"
	"net/http"
	"strings"
)
2.2 构造请求体

根据ChatGPT接口的要求,构造一个包含请求信息的结构体,并将其转换为JSON格式的请求体。可以使用Go语言的结构体来定义请求数据,并使用json.Marshal将其转换为JSON字符串。

  • 结构体
type Personality struct {
	Id          int    `json:"id"`
	ModelName   string `gorm:"column:personalityname" json:"name"`
	Description string `json:"description"`
	Prompts     string `json:"prompts"`
	Uid         string `json:"-"`
	Designer    string `json:"-"`
}

  • 请求体数据构建
var reqBody map[string]interface{}
	reqTemp, ok := c.Get("reqBody")//构建
2.3 发送HTTP请求

使用http.Post或其他适合的HTTP请求方法,发送HTTP POST请求给ChatGPT接口。在请求中指定请求的URL、请求头和请求体。通常,ChatGPT接口的URL是提供的API端点。

// 发送POST请求给ChatGPT接口
resp, err := http.Post("https://api.openai.com/v1/chat/completions", "application/json", bytes.NewBuffer(requestBody))
	if err != nil {
		fmt.Println("请求失败:", err)
		return
	}
2.4 处理响应的数据

读取接收到的响应数据,并根据需要进行解析和处理。使用ioutil.ReadAll方法读取响应体,并使用json.Unmarshal将JSON数据解析为Go语言的结构体或其他数据类型。

// 读取响应数据
	responseBody, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		fmt.Println("读取响应失败:", err)
		return
	}
// 解析响应数据
	var chatResponse ChatResponse
	err = json.Unmarshal(responseBody, &chatResponse)
	if err != nil {
		fmt.Println("解析响应失败:", err)
		return
	}

	// 打印响应消息
	fmt.Println("ChatGPT回复:", chatResponse.Message)
}
2.5 提取结果

从响应数据中提取所需的信息。根据ChatGPT接口的响应结构,将返回的结果提取为相应的变量或结构体字段。

// 提取结果
	reply := responseData.Reply
	fmt.Println("ChatGPT reply:", reply)
}
2.6 错误处理

在调用ChatGPT接口的过程中,需要适当处理可能发生的错误和异常情况。这包括检查HTTP请求是否成功、处理网络连接错误、处理HTTP响应状态码以及处理JSON解析错误等。

if err != nil {
		// 尝试解析错误消息
		var errorData ChatGPTError
		err = json.Unmarshal(responseBody, &errorData)
		if err != nil {
			fmt.Println("JSON unmarshal error:", err)
			return
		}

		// 输出错误消息
		fmt.Println("ChatGPT error:", errorData.Message)
		return
	}

三、遇到的问题和解决过程

  • Q1:错误处理和异常处理,调用API时,可能会遇到各种错误和异常情况,类似HTTP请求失败、响应解析错误等。

编写一个错误码文档,分为三个部分:用户,系统,第三方。

技术博客--Go语言调用ChatGPT AI接口_第1张图片

首先,我们要明白一些比较常见的错误与异常:HTTP请求错误JSON解析错误网络连接超时API错误响应

然后,我们可以根据以下响应的顺序进行逐一的排查。

  1. HTTP请求错误处理,在发起HTTP请求时,检查错误对象并处理错误情况。可以使用http.Response.StatusCode属性检查响应状态码,以确定请求是否成功。根据不同的HTTP状态码,可以根据需要采取适当的操作,如重试、返回错误信息或执行其他恢复操作。
  2. JSON解析错误,在解析API响应数据时,使用json.Unmarshal函数解析JSON数据,并检查解析过程中的错误。如果解析错误,可以根据需要返回错误信息或执行其他处理操作。使用结构体定义API响应数据的格式,并使用相应的字段类型和标记(tag)进行映射,以确保正确的解析。
  3. 网络连接超时,在进行网络请求时,可以设置适当的超时时间来防止长时间的阻塞。可以使用http.Client结构体的Timeout属性或context包中的WithTimeout函数来设置超时。如果发生连接错误或超时错误,可以根据具体情况进行重试、返回错误信息或执行其他处理操作。
  4. API错误,ChatGPT API可能返回包含错误信息的响应。在收到API响应后,可以检查响应状态码和响应体中的错误信息,并根据需要返回或处理这些错误信息。定义一个错误类型或结构体来表示API返回的错误,并根据API文档中的规范进行错误信息的解析和处理。
  • Q2:ChatGPT API可能会对请求进行限流或设置配额限制,免费的用户每分钟只能够请求三次。

在调用ChatGPT的API时应该认真的阅读API文档,了解限流和配额限制,文档通常会提供每分钟或者每小时的请求次数。在了解请求次数后,我们可以使用计时器、令牌桶类似算法来控制用户的请求频率和速率。如果用户还是请求速度过快,应该响应限流错误码,前端得到错误码,反应给用户告知你的请求过快,请稍后再次尝试。合理利用API资源,尽量避免不必要的API调用和重复请求。合理利用API的结果缓存、批处理请求或其他优化策略,以减少对API的频繁访问。

四、总结

调用API接口,是本次团队作业后端部分的主要技术,通过这次的学习API接口的调用深入我心,首先需要仔细的阅读API文档,理解API的工作原理和如何使用它,然后需要有正确的APIKey,验证APIKey的正确性也是必要的。再之后就是错误异常的处理,几种常见的错误,以及错误码文档的编写。最后就是将这些信息以用户所能理解的方式返回给用户。

五、参考文献

  • Go 教程

你可能感兴趣的:(golang,chatgpt,人工智能)