写点什么

chatGPT 接入微信公众号方法总结(纯聊技术)

作者:一米阳光
  • 2023-02-23
    河南
  • 本文字数:4180 字

    阅读完需:约 14 分钟

chatGPT接入微信公众号方法总结(纯聊技术)

chatGPT 挺好用的。但是想用时就得打开网页或者其他工具插件才行?太不方便了。记得有次要给媳妇演示下它的强大,竟没带电脑竟啥事干不成。索性把 chatGPT 接入微信公众号,这样在公众号聊天窗口里发消息,chatGPT 自动给我回复内容,且可以分享给好友邀好友一块儿体验,这太好玩儿了。


本文主要来聊聊如何快速使用个人微信接入 ChatGPT,欢迎体验,仅供学习参考,切莫用于做不正当的事情!好玩多了,chatGPT 接入微信公众号后可以随时随地使用它了。这里总结下 chatGPT 接入微信的方法。


## 效果展示


环境准备

1.微信公众号。测试的就行,也建议用测试的,很容易申请,无门槛且不限制次数。


2.chatGPT 的访问 api-key,这个需要科学上网申请个账号,获取 api-key 并保存好。


3.一台云服务器。各大云商有提供,包年很便宜,部署下 Golang 的后台服务。


具备以上条件就 ok 啦,接下来介绍下微信公众号接入方法。


我的首页里关注公众号可体验功能。测试号支持最多一百个用户,名额有限,目前还有剩余可以体验,欢迎交流。源码下载地址:https://download.csdn.net/download/qq8864/87448657


实现思路总体方案介绍通过搭建后台云服务,实现微信公众号与 chatGPT 的连接。使用微信公众号开发平台提供的接口,主要是客服消息接口,用户在公众号聊天窗口发送问题内容,后台服务收到后,调用 openai 接口问答,并将 chatGPT 的结果发送到微信公众号窗口中进行展示。


接入微信公众平台如何接入微信平台?这部分内容网上有很多,比较简单这里就不详细介绍了。


介绍几个我封装的接入微信公众号的 golang 接口:

// HandleWxLogin首次接入,成为开发者func HandleWxLogin(c *gin.Context) {	fmt.Printf("==>HandleWxLogin\n")	echostr := c.DefaultQuery("echostr", "")	if echostr != "" {		fmt.Printf("==>echostr:%s\n", echostr)		c.String(200, "%s", echostr)		return	} } // WxGetAccessToken 获取微信accesstokenfunc WxGetAccessToken() string {	url := fmt.Sprintf("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%v&secret=%v", APPID, APPSECRET)	resp, err := http.Get(url)	if err != nil {		fmt.Println("获取微信token失败", err)		return ""	}	defer resp.Body.Close()	body, err := ioutil.ReadAll(resp.Body)	if err != nil {		fmt.Println("微信token读取失败", err)		return ""	} 	token := token{}	err = json.Unmarshal(body, &token)	if err != nil {		fmt.Println("微信token解析json失败", err)		return ""	} 	return token.AccessToken}
复制代码


客服回复消息接口调用此封装的微信接口,向用户回复消息。比如用户在公众号聊天窗口发送问题后,通过向 chatGPT 的 api 接口发送请求,把 chatGPT 回复的内容,通过客服回复消息接口向用户应答。

微信客服回复接口封装

// 客服回复接口func WxPostCustomTextMsg(accessToken string, touser string, content string) { 	url := "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" + accessToken 	req:=&WxCustomTextMsg{ToUser:touser,MsgType:"text",Text:WxCustomText{Content:content}}	jsonStr := req.ToJson()	//fmt.Printf("WxPostCustomTextMsg:%#v\n", jsonStr)	request ,_:= http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))	request.Header.Set("Content-Type", "application/json")    client := &http.Client{}	resp, err := client.Do(request)	if err != nil {		fmt.Println(err)		return	} 	defer resp.Body.Close()	body, err := ioutil.ReadAll(resp.Body)	if err != nil {		fmt.Println(err)		return	} 	fmt.Println(string(body))}
复制代码


需要注意的是,需要使用 golang 的协程异步处理,因为用户发送信息后若 5 秒内没响应,会报服务异常的。异步示例如下:

var wxReceiveFunc = func(msg wxapi.WxReceiveCommonMsg) error {	fmt.Println("weixin msg received")	fmt.Printf("%#v\n", msg)	touser := msg.FromUserName	content := msg.Content	accessToken := wxapi.WxGetAccessToken() 	//异步请求chatAI,成功后调用客服接口回复    go func(){		resp:=chatapi.AskChatAI(content)		if(resp !=""){			wxapi.WxPostCustomTextMsg(accessToken,touser,resp)		}else{			wxapi.WxPostCustomTextMsg(accessToken,touser,"chatGPT服务异常")		}	}()		return nil}
复制代码


text-davinci-003 介绍使用 text-davinci-003 的模型的 openai 的接口,详细的介绍参照地址:


https://beta.openai.com/docs/api-reference/completions/create#completions/create-model


关于 text-davinci-003 和官方 chatGPT 的区别,参照下面文章,其实用起来差别不大。甚至 text-davinci-003 在写作创造方面更优秀。简单说 chatGPT 是个产品,text-davinci-003 更面向开发者开发产品使用。

curl https://api.openai.com/v1/completions \-H "Content-Type: application/json" \-H "Authorization: Bearer YOUR_API_KEY" \-d '{"model": "text-davinci-003", "prompt": "Say this is a test", "temperature": 0, "max_tokens": 7}'//====================================================================={  "id": "cmpl-uqkvlQyYK7bGYrRHQ0eXlWi7",  "object": "text_completion",  "created": 1589478378,  "model": "text-davinci-003",  "choices": [    {      "text": "\n\nThis is indeed a test",      "index": 0,      "logprobs": null,      "finish_reason": "length"    }  ],  "usage": {    "prompt_tokens": 5,    "completion_tokens": 7,    "total_tokens": 12  }}
复制代码


官方貌似只提供了 python 的 demo 和接口实现,其实模拟 http 调用使用其他语言都可以实现。


模型 text-davinci-003 和官方 chatGPT 的区别,先来看看 ChatGPT 的架构和训练方法。


架构上,研究者们微调了 GPT 3.5 中的某个模型,得到了 ChatGPT。


GPT 3.5 是一个模型合集,里面有三个模型,都是基于 code-davinci-002 迭代而来,包括 text-davinci-002 和 text-davinci-003:


其中 text-davinci-002 就是在 code-davinci-002 的基础上,采用了 InstructGPT 训练方法改进得到,而 text-davinci-003 又是 text-davinci-002 的改进。ChatGPT 就是基于这几个模型之一做了微调,并同样采用了 InstructGPT 的训练方法。


训练上,InstructGPT 采用了强化学习“秘方”,让语言模型不再埋头苦干,而是学会对人类的反馈“做出反应”。具体来说,研究人员先收集平时用户给 GPT-3 等模型输入的提示词,得到一个提示词数据集(用户同意的情况下)。


然后,基于这个提示词数据集,让模型输出几种不同的答案,并对这些答案进行排序,从而训练得到一个 reward 模型。


2020 年,OpenAI 推出了 1750 亿参数量的屠榜‘杀器’GPT-3,但基于大模型至今悬而未决的伦理和社会风险以及商业盈利等因素的考量,OpenAI 将 GPT-3 以付费 API 的形式向公众开放。通过调用 GPT-3 的 API,问答、语义检索、翻译、数学推理、创作小说等诸多玩法被玩家及尽探索。


最近,OpenAI 推出了最新的文本生成模型:text-davinci-003。为了适配更多任务,OpenAI 发布了不同功率以及能力的 GPT-3 模型,text-davinci-003 是其中能力最为强大的模型,也是 OpenAI 的 GPT-3.5 系列模型之一[1],一经发布就引起了社区的广泛关注。


OpenAI 提供四种主要型号的 GPT-3 模型,Davinci 是功能最强大的模型,Ada 是其中速度最快的。text-davinci-003 作为 Davinci 系列的最新模型,通过处理更复杂的指令和生成更长形式的内容对现有模型做了重大改进,新模型的描述如下:


产生更高质量的写作,这将帮助您的应用程序提供更清晰、更具吸引力和更具吸引力的内容。


处理更复杂的指令,这意味着您现在可以更有创意地利用它的功能。


更擅长生成较长形式的内容,让您可以承担以前难以完成的任务。


main.go 代码实现

package main import (	"fmt"	"net/http"	"weixin2/apis"	"weixin2/wxapi"	_"weixin2/convert"	"weixin2/chatapi" 	"github.com/gin-gonic/gin"	"github.com/jasonlvhit/gocron") var wxReceiveFunc = func(msg wxapi.WxReceiveCommonMsg) error {	fmt.Println("weixin msg received")	fmt.Printf("%#v\n", msg)	touser := msg.FromUserName	content := msg.Content	accessToken := wxapi.WxGetAccessToken() 	go func(){		resp:=chatapi.AskChatAI(content)		if(resp !=""){			wxapi.WxPostCustomTextMsg(accessToken,touser,resp)		}else{			wxapi.WxPostCustomTextMsg(accessToken,touser,"chatGPT服务异常")		}	}()	return nil} func main() {	// 定时每天早上7点 公众号发送天气预报	gocron.Every(1).Day().At("07:00").Do(apis.SendWeather)	// 定时每天早上九点 公众号发送每日一句	gocron.Every(1).Day().At("10:00").Do(apis.SendExponent) 	fmt.Println("开启定时触发任务") 	gocron.Start() 	wxapi.WxReceiveFunc = wxReceiveFunc 	router := gin.Default()	router.GET("/", wxapi.HandleWxLogin)	router.POST("/", wxapi.HandleWxPostRecv) 	//运行的端口	router.Run(":8000")}
复制代码


至于里面的每日发送是啥?


哈哈,为了好玩。我让每日 7 点给我发送一份天气预报。每日 12 点发个当前大盘点位,关注下股市大盘。

其他资源


ChatGPT 又添劲敌?OpenAI 核心员工创业,新模型获一片叫好


【NLP】万字拆解!追溯 ChatGPT 各项能力的起源_qq62985c01d4e12 的技术博客_51CTO 博客


GitHub - transitive-bullshit/chatgpt-api: Node.js client for the unofficial ChatGPT API. 🔥GitHub - malaohu/wechat-chatGPT: 实现微信公众号被动返回接口的 ChatGPT


https://github.com/869413421/wechatbot


https://github.com/eatmoreapple/openwechat


GitHub - hktalent/ChatGPT-API: ChatGPT-API for go


GitHub - otiai10/openaigo: OpenAI GPT-3 API Client for Go


微信公众平台开发概述 | 微信开放文档


text-davinci-003 和 ChatGPT 之间的不同点 - 知乎


OpenAI | GPT-3 新模型 Davinci,将 AI 写作提升到新水平!网友惊呼:GPT-4 要来了?


OpenAI-Davinci,一个新的 GPT-3 模型,让 AI 写作更上一层楼!网友惊呼:GPT-4 要_内容_能力_时间


https://blog.csdn.net/yyz_1987/article/details/128946637

发布于: 刚刚阅读数: 3
用户头像

一米阳光

关注

还未添加个人签名 2020-08-17 加入

还未添加个人简介

评论

发布
暂无评论
chatGPT接入微信公众号方法总结(纯聊技术)_微信_一米阳光_InfoQ写作社区