在此之前,我们想在自己的产品中接入ChatGPT只有两种途径:
- 第一种是通过各种逆向工程,绕过ChatGPT背后的Cloudflare,基于爬虫的形式直接调用web版ChatGPT。
- 第二种即采用一些非ChatGPT模型或官方泄漏模型,直接调用API。(如
text-chat-davinci-002-20221122
、text-davinci-003
、text-chat-davinci-002
等类ChatGPT模型)
上述两种方案都没办法为我们的产品提供稳定可靠的ChatGPT功能。
终于,ChatGPT于3月1日正式发布API,最新模型为gpt-3.5-turbo-0301
,自此我们不再需要通过各种逆向工程与ChatGPT背后的Cloudflare斗智斗勇。
下图为作者3月1日收到的邮件
从邮件中我们可以看出,新的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(¶ms)
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输出的部分内容,需要大家对内容进行相应过滤筛选。
本文结束,感谢阅读~
评论(0)