ChatGPT AI机器人,go语言版API调用代码(内附apikey,不用翻墙,无需注册,编译好就能用,完全免费)
Posted hacker_lpy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ChatGPT AI机器人,go语言版API调用代码(内附apikey,不用翻墙,无需注册,编译好就能用,完全免费)相关的知识,希望对你有一定的参考价值。
最近大火的ChatGPT,自己翻墙体验了一把,感觉真的是人工智能已经强大到这个地步了,可以辅助我们做很多工作,特别像我们这样的软件开发者。说ChatGPT是颠覆性的真的不为过。如果使用openAI提供的官方的网页版客户端,会检测ip,如果是中国地区的ip是不能使用的,必须要翻墙才能用。即使翻了墙,注册的时候也要验证手机号码,而中国的手机号码也是会禁止使用的。你还必须去想各种办法弄到国外的手机号码接收短信进行注册,的确是太折腾了,一般非专业的人员也搞不定。本人花几块钱去某宝买了一个ChatGPT账号,然后百度了一下ChatGPT还可以直接调用它提供的API,而直接调用API的方式,只要你有ChatGPT的账号,从ChatGPT官网获取得到api key,就不用翻墙也可以使用ChatGPT。现在把代码分享出来,可以不用注册不用翻墙,编译好就可以使用。如果api key无法使用了,可以替换这个api key就可以。下面是代码(部分是ChatGPT写的,本人对go语言也用的不多,不是太熟)
package main
import (
"bufio"
"bytes"
"encoding/json"
"flag"
"fmt"
"io/ioutil"
"net/http"
"os"
"strings"
"time"
)
type OpenAiReq struct
Model string `json:"model"`
Prompt string `json:"prompt"`
Temperature float64 `json:"temperature"`
Max_tokens int `json:"max_tokens"`
Top_p int `json:"top_p"`
Frequency_penalty int `json:"frequency_penalty"`
Presence_penalty float64 `json:"presence_penalty"`
Stop [2]string `json:"stop"`
N int `json:"n"`
type OpenAiChoices struct
Text string `json:"text"`
Finish_reason string `json:"finish_reason"`
type OpenApiError struct
Message string `json:"message"`
type OpenAiRsp struct
Choices []OpenAiChoices `json:"choices"`
Error OpenApiError `json:"error"`
// var key = flag.String("key", "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", "api key")
func main()
var debugFlag bool
flag.BoolVar(&debugFlag, "d", false, "a bool flag")
apiKey := "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"
//flag.StringVar(&apiKey, "k", "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", "api key")
key := flag.String("key", "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", "api key")
flag.Parse()
apiKey = *key
fmt.Println(apiKey)
url := "https://api.openai.com/v1/completions"
stop0 := " Human:"
stop1 := " AI:"
sessionCache := ""
reqData := OpenAiReqModel: "text-davinci-003",
Temperature: 0.9,
Max_tokens: 150,
Top_p: 1,
Frequency_penalty: 0,
Presence_penalty: 0.6
reqData.Stop[0] = stop0
reqData.Stop[1] = stop1
reader := bufio.NewReader(os.Stdin)
fmt.Printf("+++++++++++++++++++++++++++++++++++++++++++++\\n")
fmt.Printf("Usage: chatgpt [options]\\n")
fmt.Println("可选参数如下:")
fmt.Printf(" -d 打开调试模式\\n")
fmt.Printf(" --key 替换API key(目前已经内置,一般不用换)\\n")
fmt.Printf("\\n本工具直接调用ChatGPT API,请和ChatGPT对话吧!\\n")
fmt.Printf("+++++++++++++++++++++++++++++++++++++++++++++\\n\\n")
finish := false
for !finish
fmt.Print(strings.TrimSpace(stop0))
input, _ := reader.ReadString('\\n')
input = strings.TrimSpace(input)
//fmt.Printf("输入数据字节数组:%v\\n", []byte(input))
//input = strings.Replace(input, "/ufffd", "", -1)
if input == "quit"
break
if input == ""
continue
// fmt.Println("输入的字符串为:", input)
reqData.Prompt = sessionCache + "\\n" + stop0 + input + "\\n" + stop1
sessionCache = reqData.Prompt
//fmt.Printf("promt:%v\\n", reqData.Prompt)
aiRspText := ""
n := 1
reqData.N = n
jsonData, err := json.Marshal(reqData)
if err != nil
fmt.Printf("Error marshalling JSON data: %s\\n", err)
finish = true
break
retry := 0
for
// 创建一个http.Client对象
client := &http.Client
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
if err != nil
fmt.Printf("Error creating new HTTP request: %s\\n", err)
finish = true
break
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer "+apiKey)
if debugFlag
fmt.Printf("发送请求json:%v\\n", string(jsonData))
// 发送请求
response, err := client.Do(req)
if err != nil
fmt.Printf("The HTTP request failed with error %s\\n", err)
finish = true
break
else
defer response.Body.Close()
var rspData OpenAiRsp
//err := json.NewDecoder(response.Body).Decode(&rspData)
body, err := ioutil.ReadAll(response.Body)
if err != nil
panic(err)
if debugFlag
fmt.Printf("响应json:%v\\n", string(body))
err = json.Unmarshal(body, &rspData)
if err != nil
fmt.Printf("The HTTP response body could not be parsed as JSON: %s\\n", err)
finish = true
break
else
if rspData.Error.Message != "" && retry < 10
fmt.Printf("ChatGPT Server error:%v\\n", rspData.Error.Message)
retry++
time.Sleep(time.Second)
continue
// fmt.Printf(" %v%v\\n", strings.TrimSpace(stop1), rspData.Choices[0].Text)
sessionCache += rspData.Choices[0].Text
aiRspText += rspData.Choices[0].Text
// fmt.Printf("finish_reason:%v\\n", rspData.Choices[0].Finish_reason)
// 判断回答是否结束
if rspData.Choices[0].Finish_reason != "length"
break
// 继续循环
reqData.Prompt = sessionCache
n++
reqData.N = n
jsonData, err = json.Marshal(reqData)
if err != nil
fmt.Printf("Error marshalling JSON data: %s\\n", err)
finish = true
break
if finish
break
fmt.Printf(" %v%v\\n", strings.TrimSpace(stop1), aiRspText)
fmt.Println("bye")
编译:go build -o chatgpt test.go
运行:./chatgpt
以上是关于ChatGPT AI机器人,go语言版API调用代码(内附apikey,不用翻墙,无需注册,编译好就能用,完全免费)的主要内容,如果未能解决你的问题,请参考以下文章
我用Python轻松玩转ChatGPT的聊天机器人和AI画画
原创什么是chatGPT?Unity结合OpenAI官方api实现类似chatGPT的AI聊天机器人
如何使用ChatGPT API训练具有自定义知识库的AI聊天机器人
阿里类ChatGPT产品正在内测;谷歌AI聊天机器人翻车,市值缩水逾7000亿元;Android 14开发者预览版发布|极客头条
阿里类ChatGPT产品正在内测;谷歌AI聊天机器人翻车,市值缩水逾7000亿元;Android 14开发者预览版发布|极客头条...