技术博客--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 ChatResponseerr = json.Unmarshal(responseBody, &chatResponse)if err != nil {fmt.Println("解析响应失败:", err)return}// 打印响应消息fmt.Println("ChatGPT回复:", chatResponse.Message)
}
2.5 提取结果

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

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

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

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

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

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

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

在这里插入图片描述

首先,我们要明白一些比较常见的错误与异常: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 教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/26491.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5分钟掌握利用pycharm插件BitoAI 实现chatgpt自动编写代码

一、BitoAI 简介 最近出现了一款新型编程助手BitoAI。今天的主要内容就是给大家介绍它,号称 IDE 的“瑞士军刀”,可以提升开发 10 倍的效率。 简言之它的强大之处就是可以通过类似于ChatGPT对话的方式来编写代码,分析代码,生成代…

和chatgpt学架构03-引入UI框架(elment-plus)

目录 1 项目目录及文件的具体作用1.1 App.vue1.2 main.js的作用1.3 main.js什么时候被调用1.4 npm run serve干了什么事情1.5 package.json的作用 2 安装UI框架2.1 安装命令2.2 全局引入 3 启动工程总结 我们已经安装好了我们的vue脚手架,用vscode打开工程目录 要自…

android手机图标 足球球星,盘点六大世界足坛球星logo,贝尔艺术感十足

一名职业足球运动员,能够在赛场上踢出精彩的表现,就可以得到球迷以及球队的认可。那么,要想让那些平时偶尔看球的人记住自己,把他们变成自己的粉丝,就需要一个标志性的事物。进球后的庆祝动作,个人球队号码…

ajax 足球球员年薪,2017年足坛年薪排行榜:C罗梅西并列第一(2200万欧元)

2017年足坛年薪排行榜出炉,C罗与梅西并列第一,年薪都是2200万欧元。两人部分伯仲的实力水平也体现在了年薪之上。而2017年足坛俱乐部平均年薪排名中,曼联以684万欧元居首,巴塞罗那和曼城分别以670万欧元和643万欧元紧随其后&#…

大数据告诉你梅西如何制霸足坛!

北京时间今天凌晨上演的欧冠决赛,巴萨以3比1击败尤文,赢得历史上第5座欧冠奖杯。虽然比赛中梅西没有取得进球,不过梅西的发挥依然获得《每日邮报》赛后为球员打分中的最高分。2004年梅西出道以来,素以步频逆天,反应快,球商高,过你没商量著称,他的天赋之高甚至掩盖了人们…

世界足坛的一些著名德比

可能很多朋友都听说过足球比赛中的"德比",什么"西班牙国家德比"、"英格兰默西赛德郡德比"、"德甲鲁尔区德比"等等,"德比"到底是什么? 历史相传,小城德比郡(Derby)曾是英国举办…

足坛转会闲聊

最近工作太紧张,上周有三天都12点之后到的家,生活和工作,还是要尽量平衡,但这往往不现实,尽管有困难,还是要朝着这个方向努力。 今儿闲扯一下,谈谈世界足坛的转会。欧洲五大联赛的顶级球会&…

重新定义座舱智能化的下半场?谁能抓住弯道超车的窗口期

2020年,高通8155上车之前,行业的定义更多是4G联网互联网生态(智能手机的复刻),以斑马智行为代表;而随着集成异构计算、高性能AI引擎(8TOPS算力)的高通8155密集上车,驱动行…

一场内容生产的革命 :从PGC、UGC到AIGC

1 概念解读 1.1 什么是PGC? PGC 是指专业生成内容(Professional Generated Content),是由专业的内容创作者或团队进行创作、编辑和发布的内容。PGC创作方式起源于传统媒体时代,如报纸、杂志、电视和电影等&#xff0…

ruby on rails_将社交登录集成到Ruby on Rails应用程序中

ruby on rails I remember the old days when people had to register for an account separately on each website. 我记得以前人们不得不在每个网站上分别注册一个帐户的日子。 It was a boring and tedious process to repetitively enter the same information over and o…

效率!我用 ChatGPT 干的 18 件事!

来源:https://blog.csdn.net/weixin_42475060/article/details/129399125 给大家整理了 18 种 ChatGPT 的用法,看看有哪些方法是你能得上的。 语法更正文本翻译语言转换代码解释修复代码错误作为百科全书信息提取好友聊天创意生成器采访问题论文大纲故事…

国外一些知名的网盟、返利网平台,赚钱的底层逻辑是怎么样的?

今天的这篇文章,想和大家聊一聊项目的可持续性。随着互联网的发展以及今年chatGPT的横空出世,其实大家会发现一个问题,那就是各种项目层出不穷,很多项目的生命周期很短。 而且最近网上有个段子:“某个知识博主说&#…

chatgpt赋能python:Python图片保存方法

Python图片保存方法 Python是一种高级编程语言,广泛用于数据分析、科学计算和Web开发等领域。其中,图片处理是Python的一个重要应用方向之一。本文将介绍如何使用Python来保存图片。 保存本地图片 保存本地图片是Python处理图片的一个重要操作。Pytho…

你好 ChatGPT, 帮我看下这段代码有什么问题?

点赞再看,动力无限。 微信搜「 程序猿阿朗 」。 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多系列文章。 今天一个很简单的功能,触发了一个 BUG,处理后我想起了最近爆火的 ChatGPT,于是我尝试测…

Mac更改桌面名称

前后对比 Mac桌面可以很方便的将我们繁多的任务进行分类,通过创建多个桌面将不同的应用聚焦。但是MacOS创建的桌面默认的只能是下面这种样式: 而作为DIY爱好者,想要修改成下面的样式,通过重命名的方式来区分不同的桌面所担任的职…

Mac电脑如何添加多个桌面?Mac多桌面创建使用技巧

电脑桌面上乱七八糟的程序、窗口是否影响你的心情呢?Mac多桌面可以轻松解决这一难题。那么Mac电脑如何添加多个桌面呢?这里小编为大家带来了Mac多桌面创建使用技巧,一起来看看吧! 1.打开Mission Control(调度中心) 系统偏好设置-调…

linux xfce4桌面 仿mac os美化

系统:Xubuntu 18.04 Xubuntu 美化之后的样子 一、安装xfce4的主题和图标 下载主题,图标样式:http://xfce-look.org/ 将下载的主题,移动到桌面主题目录:/usr/share/themes 将下载的图标,移动到图标主题目…

MacBook远程桌面Windows使用Microsoft Remote Desktop for Mac_亲测使用

MacBook远程桌面Windows使用Microsoft Remote Desktop for Mac_亲测使用 像Windows上有自带的远程桌面连接软件.MacBook没有自带的远程连接Windows桌面的工具,需要安装软件来实现. 像远程桌面控制软件一般有 TeamViewer、向日葵远程控制, ToDesk, Microsoft Remote Desktop f…

Mac远程连接Windows桌面的软件推荐

有时候我们会需要远程连接其他电脑桌面,实现远程办公、远程帮助他人等目的。Windows电脑之间可以用Windows自带远程桌面,Mac电脑也有自带的远程桌面功能。 那么Windows和Mac之间需要进行远程桌面连接,有没有办法实现?答案是有的。…

硬核桌面美化,让Windows电脑像Mac一样充满高级感!

我们经常需要在电脑桌面放置一些文件,方便日常使用和操作,但是如果不好好整理的话,时间一久桌面就会变得很乱,既不美观,也不好找,特别是每天一开机对着一桌面的文件,这滋味简直无比难受。 可是…