Abstract: OpenAI 终于开放了 ChatGPT 的 API 接口,我用 golang 试着对其进行调用并进行了简单测试。
准备
登陆 OpenAI
首先需要有一个 OpenAI 的账号,你可以在这里注册或登陆。
API key
注册好账号后,最重要的一步是生成 API key. 这个 API key 就是后面用程序调用 API 的身 份凭证。
查看官方文档
turboturbotext-davinci-003text-davinci-003API 调用
同时,OpenAI 网站上提供了一个Playground供人们在浏览器中试用 API. 不过我的目的是写程序调用所以这里就不介绍 playground 了。但强烈建议你在程序 调用之前先试一下 playground, 毕竟调用是一回事,如何利用 API 解决问题是另外一回事, 而 playground 就可以给你提供一个快速检验想法的平台。
关于程序化调用 API, 相信很快就会有许多通过 python 调用的例子,这里我就写一个基于 golang 的,哈哈。
用 golang 调用 ChatGPT API
go mod init api
go get github.com/sashabaranov/go-gpt3
go-gpt3main.gopackage main
import (
"context"
"fmt"
"net/http"
"net/url"
gogpt "github.com/sashabaranov/go-gpt3"
)
func main() {
c := gogpt.NewClient("your token")
ctx := context.Background()
req := gogpt.ChatCompletionRequest{
Model: gogpt.GPT3Dot5Turbo,
MaxTokens: 100,
Messages: []gogpt.ChatCompletionMessage{
gogpt.ChatCompletionMessage{Role: "system", Content: "你是一个计算器"},
gogpt.ChatCompletionMessage{Role: "user", Content: "a=323, b=511"},
gogpt.ChatCompletionMessage{Role: "user", Content: "(a+b)*2=?"},
},
}
resp, err := c.CreateChatCompletion(ctx, req)
if err != nil {
return
}
fmt.Println("Created: ", resp.Created)
fmt.Println("Model: ", resp.Model)
fmt.Println("Message: ", resp.Choices[0].Message.Content)
fmt.Println("Usage: ", resp.Usage)
}
your tokenMessages"system""user""assistant"好,我们来执行一下!
go build && ./api让我们耐心等待几秒钟,咦?怎么卡住了?!
这是因为 OpenAI 封锁了中国的 IP,不带咱们玩了。所以想要调用 API 需要准备梯子。我 follow 这个帖子在程序里添加了代理,最后完整的程序如下
package main
import (
"context"
"fmt"
"net/http"
"net/url"
gogpt "github.com/sashabaranov/go-gpt3"
)
func main() {
config := gogpt.DefaultConfig("your token")
proxyUrl, err := url.Parse("http://localhost:8888")
if err != nil {
panic(err)
}
transport := &http.Transport{
Proxy: http.ProxyURL(proxyUrl),
}
config.HTTPClient = &http.Client{
Transport: transport,
}
c := gogpt.NewClientWithConfig(config)
ctx := context.Background()
req := gogpt.ChatCompletionRequest{
Model: gogpt.GPT3Dot5Turbo,
MaxTokens: 100,
Messages: []gogpt.ChatCompletionMessage{
gogpt.ChatCompletionMessage{Role: "system", Content: "你是一个计算器"},
gogpt.ChatCompletionMessage{Role: "user", Content: "a=323, b=511"},
gogpt.ChatCompletionMessage{Role: "user", Content: "(a+b)*2=?"},
},
}
resp, err := c.CreateChatCompletion(ctx, req)
if err != nil {
return
}
fmt.Println("Created: ", resp.Created)
fmt.Println("Model: ", resp.Model)
fmt.Println("Message: ", resp.Choices[0].Message.Content)
fmt.Println("Usage: ", resp.Usage)
}
http://localhost:8888go build && ./api得到的结果如下:
Created: 1677840785
Model: gpt-3.5-turbo-0301
Message: (a+b)*2 = (323+511)*2 = 1688.
Usage: {35 18 53}完成收工!
原文: