首页
Preview

Golang接入最新ChatGPT gpt-3.5-turbo-0301

在此之前,我们想在自己的产品中接入ChatGPT只有两种途径:

  • 第一种是通过各种逆向工程,绕过ChatGPT背后的Cloudflare,基于爬虫的形式直接调用web版ChatGPT。
  • 第二种即采用一些非ChatGPT模型或官方泄漏模型,直接调用API。(如text-chat-davinci-002-20221122text-davinci-003text-chat-davinci-002等类ChatGPT模型)

上述两种方案都没办法为我们的产品提供稳定可靠的ChatGPT功能。

终于,ChatGPT于3月1日正式发布API,最新模型为gpt-3.5-turbo-0301,自此我们不再需要通过各种逆向工程与ChatGPT背后的Cloudflare斗智斗勇。

下图为作者3月1日收到的邮件

image.png

从邮件中我们可以看出,新的gpt-3.5-turbo模型定价为0.002美元/1000 tokens(此处的tokens是指系统将句子和单词分解成的文本块,以便预测接下来应该输出什么文本)

token可以理解为一个一个非结构化的单词,而1000个token大概对应750个词。这个价格也要比目前的GPT 3.5模型便宜90%。

前置条件

  • 需要注册openai并申请apiKey,你的网络必须能访问openai.com的服务器(需要自行解决)
  • 之前国内是能直连chatgpt的API服务器(https://api.openai.com/v1/chat/completions )的,但我们发现chatgpt的API服务器在3月2日下午也被墙了。所以在本地开发的时候需要使用proxy,而部署的时候必须使用海外服务器。

文档地址:https://platform.openai.com/docs/guides/chat

Tips:由于申请apiKey有一定操作门槛,本文不做过多介绍,大家可自行百度

使用Proxy访问ChatGPT接口

接下来我们开始进行编码阶段,代码也比较简单:

我们使用的是openai官方文档推荐的包sashabaranov/go-gpt3,由于在国内,我们必须自定义HTTPClient设置proxy,其中sk-xxx替换为你自己的apiKey

具体代码如下:

package chat

import (
	"fmt"
	"github.com/gin-gonic/gin"
	gogpt "github.com/sashabaranov/go-gpt3"
	"demo-api/app/chatgpt/controllers"
	"net/http"
	"net/url"
)

type ChatController struct {
	controllers.BaseController
}

func (c ChatController) SendMsg(ctx *gin.Context) {
	var params struct {
		Text string `binding:"required" json:"text"`
	}
	err := ctx.ShouldBind(&params)
	if err != nil {
		c.ResponseJson(ctx, http.StatusOK, 1, "参数错误", err)
		return
	}
        // proxy关键代码
	conf := gogpt.DefaultConfig("sk-xxx")
	proxyAddress, _ := url.Parse("http://127.0.0.1:7890")
	conf.HTTPClient = &http.Client{
		Transport: &http.Transport{
			Proxy: http.ProxyURL(proxyAddress),
		},
	}

	gptClient := gogpt.NewClientWithConfig(conf)

	req := gogpt.ChatCompletionRequest{
		Model:     gogpt.GPT3Dot5Turbo0301,
		MaxTokens: 100,
		Stream:    false,
		Messages: []gogpt.ChatCompletionMessage{
			{
				Role:    "assistant",
				Content: params.Text,
			},
		},
	}
	resp, err := gptClient.CreateChatCompletion(ctx, req)
	if err != nil {
		return
	}

	fmt.Println(resp)

}

其中ChatCompletionRequest的具体参数见官方文档:https://platform.openai.com/docs/api-reference/chat

使用Stream流式传输

截止本文创作为止,sashabaranov/go-gpt3这个库暂时还不支持stream调用API。但已经有小伙伴提交了PR,相信很快就能合并到主仓库。PR地址:https://github.com/sashabaranov/go-gpt3/pull/101

总结

  • ChatGPT API定价便宜,接入成本不高。
  • API比官网的web版Chatgpt响应速度快出不少,基本能在1秒内回答用户的问题。接入API能获得更好的问答体验。
  • 由于API也已经被墙了,说明在国内可能并不认可ChatGPT输出的部分内容,需要大家对内容进行相应过滤筛选。

本文结束,感谢阅读~

版权声明:本文内容由TeHub注册用户自发贡献,版权归原作者所有,TeHub社区不拥有其著作权,亦不承担相应法律责任。 如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

点赞(0)
收藏(0)
Golang社区
欢迎关注微信公众号:Golang社区

评论(0)

添加评论