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的官网是多少,在国内能使用吗

阿里类ChatGPT产品正在内测;谷歌AI聊天机器人翻车,市值缩水逾7000亿元;Android 14开发者预览版发布|极客头条

阿里类ChatGPT产品正在内测;谷歌AI聊天机器人翻车,市值缩水逾7000亿元;Android 14开发者预览版发布|极客头条...