AI接入微信公众号方法总结

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

本文主要来聊聊如何快速使用个人微信接入 AI,欢迎体验,仅供学习参考。

好玩多了,AI接入微信公众号后可以随时随地使用它了。这里总结下AI接入微信的方法。效果展示:

 环境准备

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

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

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

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

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

实现思路

总体方案介绍

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

接入微信公众平台

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

介绍几个我封装的接入微信公众号的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 获取微信accesstoken
func 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
}

客服回复消息接口

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

微信客服回复接口封装

// 客服回复接口
func WxPostCustomTextMsg(accessToken string, touser string, content string) {url := "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" + accessTokenreq:=&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.FromUserNamecontent := msg.ContentaccessToken := 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的模型的ai的接口,详细的介绍参照地址:

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

关于text-davinci-003和官方AI的区别,参照下面文章,其实用起来差别不大。甚至text-davinci-003在写作创造方面更优秀。简单说AI是个产品,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调用使用其他语言都可以实现。

main.go代码实现

package mainimport ("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.FromUserNamecontent := msg.ContentaccessToken := 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 = wxReceiveFuncrouter := gin.Default()router.GET("/", wxapi.HandleWxLogin)router.POST("/", wxapi.HandleWxPostRecv)//运行的端口router.Run(":8000")
}

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

哈哈,为了好玩。我让每日7点给我发送一份天气预报。每日12点发个当前大盘点位,关注下股市大盘。至于大盘咨询的获取的实现,调用的第三方的接口。这里也给出下。

大盘信息获取接口实现:

package apisimport ("fmt""io/ioutil""net/http""strconv""strings""time""weixin2/util""weixin2/wxapi"
)var (LastPoint string //上次点数LastState string //上次状态LastTime  string //上次时间State     string //当前状态
)type ExponentInfo struct {CurrentPoints string // 当前点数Gszzl         string //涨跌幅度Turnover      string //成交额(万元)Name          string //名称
}// 查询指数
func QueryBroadMarket(code string) (exponentInfo ExponentInfo, err error) {res, err := http.Get("http://hq.sinajs.cn/list=" + code)if res != nil {defer res.Body.Close()}if err != nil {return}if res.StatusCode != http.StatusOK {return exponentInfo, fmt.Errorf("http statusCode:%d", res.StatusCode)}result, err := ioutil.ReadAll(res.Body)if err != nil {return exponentInfo, err}base := util.ParseStr(string(result))//exponentInfo.Name = BroadMarketName[code]exponentInfo.Name = util.ConvertToString(base[0], "gbk", "utf-8")currentPoints := strings.Split(base[1], ".")exponentInfo.CurrentPoints = currentPoints[0]exponentInfo.Gszzl = base[3]if len(base[5]) > 5 {base[5] = base[5][0 : len(base[5])-4]base[5] += "亿"}exponentInfo.Turnover = base[5]return
}//  ExponentTplID 模板ID
// {{title.DATA}} {{date.DATA}} {{curpoint.DATA}} {{turnover.DATA}} {{gszzl.DATA}} {{state.DATA}} {{lastpoint.DATA}} {{laststate.DATA}} {{tips.DATA}}
var ExponentTplID = "RIzqpuRxwlV1IWucjE186Uvu949N0Uly9H3CoTMGskc"// ExponentTpl 结构
type ExponentTpl struct {Title   string `json:"title"`Content string `json:"content"`Note    string `json:"note"`
}// AfterTime 判断一个时间在现在之前还是之后
// layout 解析的时间格式,
// judeTime 需要判断的时间
// bool =true  在当前时候之后,false在当前时间之前
func AfterTime(tpl, judeTime string) (bool, error) {stringToTime, err := time.Parse(tpl, judeTime)if err != nil {return false, err}beforeOrAfter := stringToTime.After(time.Now())if beforeOrAfter == true {return true, nil} else {return false, nil}
}//SendExponent 发送每日大盘
func SendExponent() {info, err := QueryBroadMarket("s_sh000001")if err != nil {fmt.Printf("QueryBroadMarket error,err=%s\n", err.Error())return}accessToken := wxapi.WxGetAccessToken()if accessToken == "" {return}flist := wxapi.WxGetUserList(accessToken)if flist == nil {return}title := "上证指数"timeStr := time.Now().Format("2006-01-02 15:04:05")tips := "tips:市场有风险,入市需谨慎"lastflt, err := strconv.ParseFloat(LastPoint, 32/64)curflt, err := strconv.ParseFloat(info.CurrentPoints, 32/64)if curflt > lastflt {State = "上升 " + strconv.FormatFloat(curflt-lastflt, 'f', 2, 32)} else {State = "下降 " + strconv.FormatFloat(curflt-lastflt, 'f', 2, 32)}reqdata := "{\"title\":{\"value\":\"" + title + "\", \"color\":\"#0000CD\"},\"date\":{\"value\":\"" + timeStr + "\"},\"curpoint\":{\"value\":\"" + "当前点数:" + info.CurrentPoints + "\"}, \"turnover\":{\"value\":\"" + "成交额:" + info.Turnover + "\"},\"gszzl\":{\"value\":\"" + "估值:" + info.Gszzl + "\"},\"state\":{\"value\":\"" + "今日状态:" + State + "\"},\"lastpoint\":{\"value\":\"" + "昨日点数:" + LastPoint + "\"},\"laststate\":{\"value\":\"" + "昨日状态:" + LastState + "\"},\"tips\":{\"value\":\"" + tips + "\"}}"for _, v := range flist {wxapi.WxPostTemplate(accessToken, reqdata, "blog.csdn.net/qq8864", ExponentTplID, v.Str)}now := time.Now()if now.Hour() > 13 {LastTime = timeStrLastPoint = info.CurrentPointsLastState = State}}

每日天气接口实现: 

/**
每日天气api接口
*/
package apisimport ("fmt""github.com/tidwall/gjson""io/ioutil""net/http""weixin2/wxapi"
)var (WeatTemplateID = "AXCDf6fetE2-ebF7Di8izW9avSN4cFWvnfcAQDSW7-k" //天气模板IDWeatherApiVersion = "v6"WeatherAPPID      = "45849795"WeatherAppSECRET  = "T5xyVwLB"
)// GetWeather 获取天气
func GetWeather(city string) (string, string, string, string) {url := fmt.Sprintf("https://tianqiapi.com/api?version=%s&appid=%s&appsecret=%s&city=%s", WeatherApiVersion, WeatherAPPID, WeatherAppSECRET, city)resp, err := http.Get(url)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))data := string(body)day := gjson.Get(data, "date").Strwea := gjson.Get(data, "wea").Strtem := gjson.Get(data, "tem").Str//tem2 := gjson.Get(thisday, "tem2").StrairTips := gjson.Get(data, "air_tips").Strreturn day, wea, tem, airTips
}// PostWeather 发送天气
func PostWeather(accessToken, city, openid string) {day, wea, tem, airTips := GetWeather(city)if day == "" || wea == "" || tem == "" || airTips == "" {return}reqdata := "{\"city\":{\"value\":\"城市:" + city + "\", \"color\":\"#0000CD\"}, \"day\":{\"value\":\"" + day + "\"}, \"wea\":{\"value\":\"天气:" + wea + "\"}, \"tem1\":{\"value\":\"平均温度:" + tem + "\"}, \"air_tips\":{\"value\":\"tips:" + airTips + "\"}}"//fmt.Println(reqdata)wxapi.WxPostTemplate(accessToken, reqdata, "http://yangqq.xyz", WeatTemplateID, openid)
}//SendWeather 向公众号所有用户发送天气预报
func SendWeather() {accessToken := wxapi.WxGetAccessToken()if accessToken == "" {return}flist := wxapi.WxGetUserList(accessToken)if flist == nil {return}city := "郑州"for _, v := range flist {go PostWeather(accessToken, city, v.Str)}
}

其他资源

ChatGPT API版介绍及使用讲解。 - 哔哩哔哩

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://www.cnblogs.com/taoshihan/p/17096902.html

百度安全验证

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/2460.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chatgpt赋能python:Python搜题公众号:让搜题更高效

Python搜题公众号:让搜题更高效 随着互联网时代的持续扩张,人们获取知识的方式也在不断变化。特别是在学习方面,人们更喜欢通过互联网进行搜索与学习。因此,搜题已经成为了学生最常用的学习方法之一。 Python搜题公众号应运而生…

微信公众号开发之妙解服务器5s限制

目录 框架选择 内网穿透 微信5s限制 客服回复? 公众平台web回复? msgId唯一! 总结 上年十二月份至今年三月份ChatGpt还是挺火的,很早就想做一个属于自己的微信问答机器人,但是觉得做了自己也不太用,所…

微信公众号支持语音消息向 ChatGPT提问啦!

最近我一直在开发微信公众号对接 ChatGPT ,并且已经实现了很多功能,也得到了 260余位大咖们帮我测试,以便于让它更加趋于完美。 而今天,公众号已经支持语音识别,大家可以通过我的公众号(javastarboy&#…

公众号ChatGPT历史对话记录查看升级完成啦

公众号【javastarboy】已支持 ChatGPT 3.5-turbo 模型, 进入公众号,输入文字消息即可聊天。 今天主要升级了三个内容: 支持“历史对话”查看(一小时内)解决了多人会话 session 隔离问题解决了一些 bug 几个说明&…

杀疯了!ChatGPT火爆全球

ChatGPT是什么? ChatGPT是一种由OpenAI训练的大型语言模型,其目的是能够以自然、人类化的方式与人类进行对话交互。ChatGPT基于深度学习技术,使用了数百万条来自互联网的文本数据进行训练,以便理解和生成自然语言。 ChatGPT可以…

ChatGPT爆火!它如何回答 Python 相关问题

近期OpenAI发布了全新的聊天机器人模型ChatGPT,没想到一经上线,就因其高质量的回答、高效获取信息的方式、以及上瘾式的交互体验而迅速出圈。 不少体验过的人都惊呼,ChatGPT可能一举消灭记者、程序员和搜索引擎。就连马斯克也忍不住发推表示&…

从CHATGPT爆火思考教育的未来

转眼在3月15号,更先进的GPT4就应运而生,通过与当前版本对话后的反馈来看,人工智能的进化速度着实恐怖,甚至让你愿意相信网络的另一端是一位博学的智者,很多问题的回答上已经跟人类无二...... 以ChatGPT为代表的人工智…

ChatGPT 爆火,咱们来聊聊负责任的生成式AI

ChatGPT的爆火让AI再次成为大众热议的焦点,作为英特尔所提出的搭建起从模拟时代到数字时代桥梁的五大“超级技术力量”之一,伴随着无处不在的智能化,AI可将无穷的数据转化为切实可行的洞察。 作为半导体行业的领先企业,在这一前沿…

从 ChatGPT 爆火回溯 NLP 技术

ChatGPT 火遍了全网,多个话题频频登上热搜。见证了自然语言处理(NLP)技术的重大突破,体验到通用技术的无限魅力。 GPT 模型是一种 NLP 模型,使用多层变换器(Transformer)来预测下一个单词的概率…

ChatGPT 爆火后,中国 AI 公司该如何应对,难点在哪儿?

ChatGPT 爆火之后,中国 AI 公司要应对的难点主要包括: (1) 技术能力:ChatGPT 是由 OpenAI 所研发,具备领先的自然语言处理技术能力,而国内 AI 公司需要拥有足够的技术实力来与之竞争。这需要企业在人才引进、研发投入…

ChatGPT爆火网络背后的故事?

文章目录 前言一、ChatGPT的诞生背景二、ChatGPT的技术原理三、ChatGPT的推广策略四、ChatGPT的未来展望五、橙子送书第2期 前言 ChatGPT是一款基于人工智能技术的聊天机器人,它的出现引起了广泛的关注和热议。在短短的时间内,ChatGPT就成为了全球范围内…

ChatGPT 爆火!真有那么神?设计师会失业吗?

人工智能来了,咱们是不是都要失业了呢? 一款AI产品,在科技市场和资本市场掀起了一阵风暴。 一切的源头,来自一个由美国人工智能公司OpenAI开发的一种大型语言模型ChatGPT。它采用了Transformer架构,可以执行生成文本、…

爆火出圈的ChatGPT,真的那么好用吗?

近期,ChatGPT在互联网行业爆火! 这个由人工智能研究和部署公司OpenAI开发的“交互机器人”,在今年1月其全球月活跃用户已达1亿,成为史上用户增长速度最快的消费级应用。 爆火的ChatGPT到底是什么? ChatGPT是一个原型人…

ChatGPT实现服务器体验沙箱

服务器体验沙箱 IT 人员在学习一门新技术时,第一个入门门槛通常都是"如何在本地安装并成功运行"。因此,很多技术的官网都会通过沙箱技术,提供在线试用的 playground 或者按步模拟的 tour。让爱好者先在线尝试效果是否满足预期&…

如何构建可持续的ChatGPT高性能服务器端架构?

边缘计算 | 液冷服务器 | GPT-4 深度学习 | AI服务器 | ChatGPT 在上周举行的发布会上,OpenAI宣布推出了GPT-4模型。与之前的版本相比,GPT-4最大的改进是其多模态(multimodal)能力——它不仅能够阅读文字,还能识别图像…

强力推荐:关于谷歌ChatGPT模型用户测试的140个示例的展示与实现功能

目录 1、ChatGPT 介绍与使用简要介绍安装ChatGPT与使用想写出有效的问答吗?使用 ChatGPT 桌面应用程序使用 prompts.chat2、ChatGPT模型140个示例充当 Linux 终端充当英语翻译和改进者担任`position`面试官充当 JavaScript 控制台充当 Excel 工作表充当英语发音帮手充当旅游指…

每日一个 ChatGPT 使用小技巧系列之2 - 用 ChatGPT 研读 SAP ABAP BAPI 的实现源代码

本系列之前的文章: 与其整天担心 AI 会取代程序员,不如先让 AI 帮助自己变得更强大 每日一个 ChatGPT 使用小技巧系列之1 - 给出提纲或者素材,让 ChatGPT 帮你写作 正好昨天有朋友向我发起知乎咨询,询问关于 SAP ABAP BAPI bap…

iPhone突然上线ChatGPT,我们马上试了试

ChatGPT可以直接在手机上使用了! 今天凌晨,OpenAI正式发布了iOS客户端,这意味着我们能通过iPhone和iPad直接跟ChatGPT进行对话了。 该版本一经发布,便受到了火热追捧,目前已经登上美区免费App下载排行榜第二&#xff…

小i机器人登陆美股,乘ChatGPT的东风能走多远?

近日,国内聊天机器人最早入局者小i机器人成功登陆美股,但上市首日便以大跌近15%惨淡收场,而历经20多年的发展,这家曾有过多次高光时刻的人工智能公司,目前市值仅为4.2亿美元。 小i机器人10几年前推出聊天机器人&#x…

ChatGPT自动化

目录 一、前言 二、Selenium反反爬操作 2.1、隐藏“正在受到自动软件的控制” 2.2、禁用 Blink 渲染引擎 2.3、Cookies 和 UA伪装 2.4、控制已打开的浏览器 三、自动化操作 3.1、问题遍历 3.2、获取回答 四、源码 一、前言 近日, ChatGPT在圈内大火。那么什么是ChatGPT…