最近OpenAI的chatGPT出圈了,既然是对话程序,自然而然就会想到能跟公众号结合,于是我研究了一下,实现了本公众号的chatGPT接入,关注并跟我公众号对话即可体验:
给大家分享下经验,会从以下大纲来进行阐述(文末有点):
大纲:
正文开始:
chatGPT模型及其主要特点
chatGPT是一个由OpenAI开发的自然语言生成模型,它能够根据用户的输入,生成相应的回复。它的优势在于能够模仿人类的语言表达方式,回复内容丰富、流畅,同时也具备一定的语义理解能力。目前chatGPT的模型已经迭代到text-davinci-003,比先前的版本强悍了很多。
关于微信公众号及其功能
而在当今这个信息时代,人们越来越依赖于网络技术,尤其是社交平台。微信公众号就是其中一个广受欢迎的社交平台,它为企业和个人提供了一个线上沟通和互动的渠道。
而为了让用户体验更加丰富、便捷,开发者可以选择将自然语言生成模型chatGPT接入微信公众号。
如何将chatGPT接入微信公众号
要想将chatGPT接入微信公众号,要遵循以下步骤:
首先需要注册一个OpenAi开发者帐号,然后创建一个微信公众号,后者不细说,这里简单说说如何注册一个OpenAi开发者账号,流程很简单:
1.想办法访问国外网站(日本美国都行),然后下面网站上注册,
https://chat.openai.com/auth/login
2.注册需要填外国手机号进行验证码接手,可以到
https://sms-activate.org/cn/
这种虚拟号码服务网站去搞,支付宝充值1美元,即可得到虚拟号码。
能进到这个界面证明你成功了:
3.用同样的账号登录以下网站,能看到分配给你的SECRET KEY,这个可以用于调起官方公开的API进行自主开发。
https://beta.openai.com/account/api-keys
官方开放了一个接口URL,以php为例,用curl请求(带上上面的SECRET KEY作为鉴权参数)就能得到分析结果:
function chatGPT($q)
{
// 设置chatGPT的接口URL
$api_url = 'https://api.openai.com/v1/completions';
// 设置访问令牌
$access_token = '上面的SECRET';
// 设置请求的参数
$data = array(
//'prompt' => '写一段php调用chatGPT', // 要向chatGPT发送的问题
'prompt' => $q,
// 要向chatGPT发送的问题
'model' => 'text-davinci-003',
// 使用的模型名称
'max_tokens' => 4000, // chatGPT返回的最大文本长度
);
// 使用curl发送请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $api_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt(
$ch,
CURLOPT_HTTPHEADER,
array(
'Content-Type: application/json',
'Authorization: Bearer ' . $access_token,
)
);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
$response = curl_exec($ch);
$response_data = json_decode($response, true);
if ($response_data['id']) {
// 获取chatGPT返回的答案
$answer = $response_data['choices'][0]['text'];
return $answer;
// 处理答案
} else {
// 处理错误
// ...
return '我不大理解你说的,能精炼点提问吗?';
}
}
利用这个,我可以先简单实现一个网页版的chatGPT:
if (isset($_GET['q'])) {
die(chatGPT($_GET['q']));
}
体验地址:
https://hk.wxnodes.cn/wxCo.php?q=%E4%BD%A0%E6%98%AF%E8%B0%81
接着,为了能让公众号接入,开发者需要配置一台能访问该接口的云服务器环境,在安装必要的依赖库和框架后,用上述代码编写接口URL,然后在公众号的mp后台去配置“服务器配置”:
配置这个要经历一个验证过程,在一开始时,脚本需要吐出一个用于验证的字符(微信服务器传过来的get参数):
$_GET["echostr"];
验证完,Mp后台就会绑定这个接口URL,之后不用再输出了,直接写自定义代码就好,比如:
$s = "<xml><ToUserName><![CDATA[{$postArr->FromUserName}]]></ToUserName><FromUserName><![CDATA[minijoe]]></FromUserName><CreateTime>" . time() . "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[hello]]></Content></xml>";
$str = '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%s]]></Content></xml>';
// 格式化替换输出
$str = sprintf($str, $postArr->FromUserName, $postArr->ToUserName, time(), chatGPT($postArr->Content));
echo $str;
那绑定这个“服务器配置”的URL是干嘛用的呢?
它的作用是:在用户在公众号上发生特定行为时(比如用户给公众号发信息),微信服务器会把用户相关的信息发送给这个URL,开发者就能在这个URL上进行分析和响应。
//在用户发信息给公众号时,php可以通过这样的方式获取一个微信服务器发过来xml结构体
$postStr = file_get_contents('php://input');
$data = json_encode(simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA));
$postArr = json_decode($data);//这样能获取相关数据
$content = chatGPT($postArr->Content);//获取用户信息内容用chatGPT解读
利用这个就能实现用户在公众号中输入信息,chatGPT生成回复,并将结果反馈给用户。
有同学可能会问,那是怎么“反馈”的?这就涉及到公众号开发中的消息回复机制,主流的方式有两种:被动消息回复和主动客服消息推送。
主要的逻辑差异点在于:是否直接利用“服务器配置”中的URL回调的内容进行用户反馈。
对于被动消息回复,微信公众号提供了5秒内的时间限制,也就是说,它请求URL后,URL在5秒内有输出合法的返回体,那么微信就直接转发给用户。这种方式比较简单,开发者只需确保5秒内把该做的逻辑都做好并返回内容就好。市面上用了charGPT的公众号大多是基于这种方式,这种方式有利有弊:
而对于主动客服消息回复,在公众号请求URL后,开发者服务器自己做逻辑,不管花了多长时间,他都能在未来某个时间点主动推送结果。这种方式也有利有弊:
坏处:需要认证的企业主体的公众号
因为需要用到客服接口
且开发成本相对高一点,要遵循先换取accesstoken,再主动请求客服接口进行消息推送的逻辑。
function getAccessToken($data)
{
$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . $data['AppID'] . '&secret=' . $data['AppSecret'];
$weixin = file_get_contents($url);
$jsondecode = json_decode($weixin);
//$array = get_object_vars($jsondecode);
return $jsondecode;
}
$url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" . $token;
$content = chatGPT($postArr->Content);
发送代码:
$data = array();
$data['touser'] = $postArr->FromUserName;
$data['msgtype'] = "text";
$data['text'] = [
"content" => $content,
];
$json = json_encode($data, JSON_UNESCAPED_UNICODE);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
$response = curl_exec($ch);
好处:消息推送比较灵活,不受时间限制,体验相对更有容错性。
两种方式,我都实现了一下,具体可以看看视频(右边是个人订阅号,在复杂分析时确实容易报错):
http://mpvideo.qpic.cn/0bc3peaamaaafuafua4v75rva6odaz4qabqa.f10002.mp4?dis_k=3b897fbad53b3c19fb0135e6250b0ce4&dis_t=1672899592&play_scene=10400&vid=wxv_2703490873896091649&format_id=10002&support_redirect=0&mmversion=false
chatGPT在微信公众号中的场景
在微信公众号中,chatGPT可以应用于许多场景,比如为用户提供自动回复、客服机器人、智能问答等功能。例如,当用户在公众号中发送问题时,chatGPT能够快速生成回复,解决用户的疑惑。此外,chatGPT还可以用作客服机器人,为用户提供24小时不间断的服务。
chatGPT接入微信公众号具有许多优势。
首先,它能够为用户提供更丰富、更便捷的交互体验,让用户感觉微信公众号更加“智能”。其次,chatGPT可以大大降低企业和个人的客服成本,让他们更专注于核心业务。此外,chatGPT还能够提高公众号的粉丝粘性,让用户更愿意在公众号中留存。
chatGPT接入微信公众号的优势和局限
当然,chatGPT接入微信公众号也存在一些局限和挑战。
首先,chatGPT是一个自然语言生成模型,并不能完全替代人类的思考能力。因此,在处理一些比较复杂的问题时,它可能会出现回复不准确的情况。
其次,chatGPT需要大量的训练数据才能达到理想的效果,因此开发者需要花费较多的时间和精力来搜集和标注数据。
总的来说,chatGPT接入微信公众号是一个值得探索的话题。它能够为用户提供更丰富、更便捷的交互体验,同时也能够降低企业和个人的客服成本。尽管它存在一些局限和挑战,但随着技术的不断发展,chatGPT在微信公众号中的应用前景一定会更加广阔。
最后,你猜的没错,本文就是通过charGPT提供的内容进行润色而生产的。
http://mpvideo.qpic.cn/0b2e5maagaaafyafse4v7frvb26dapvqaaya.f10002.mp4?dis_k=05817ab26768679c13d615634d701551&dis_t=1672899592&play_scene=10400&vid=wxv_2703484183394009091&format_id=10002&support_redirect=0&mmversion=false
你分辨出来哪些是我写的吗?可以留言讨论哦。