簡介:
未認證微信公眾號接入chatgpt,新增語音聊天(英語對話),基於Flask,實現個人微信公眾號【無認證】接入ChatGPT
--更新說明:
V1.1.0:(2023.04.13)
-新增串流回應(stream),一定程度緩解請求逾時的問題,需要安裝python套件:sseclient-py==1.7.2;
開啟串流回應之後,會先建立連線(myrequest),然後再利用(SSEClient)一個一個字元的取得產生的文本,最後將所取得的文字清單拼接成回覆文字。建立連線的時間還是會受到max_tokens的影響,所以不建議max_tokens設定太大。能緩解請求逾時的關鍵在於,建立連接的時間消耗小於一次性返回的時間消耗,所以只要在給定的時間內,成功建立連接,基本就能返回內容,返回內容的長度會受到連接時間的影響。
-請求失敗或逾時之後刪除用戶最近發送的訊息,避免下次回覆出錯。
V1.0.1:
-新增ip偵測(防止doss攻擊)是否開啟選項;
-注意:如果wechat-ip_detection和azure-trans_to_voice中任一項為true,appid和secret都需要填入。
V1.0:
-新增語音聊天功能,接取微軟雲端文字轉語音服務(免費接取),實現語音對話(中英文);
-內建英文學習範本, 回覆範本訊息即可進行英文主題對話;
-新增微信後台白名單IP偵測,防止doss攻擊等;
-新增用戶訊息頻率限制,防止惡意刷訊息;
-自動清理臨時語音檔案;
-自動清理微信後台上傳臨時語音素材;
-優化效能、修復BUG。
背景:
最近看到ChatGPT提供了API接口,手上剛好有台伺服器和一個公眾號,所以想著寫一個聊天機器人?玩一玩。不過只有一個沒有認證的個人公眾號(資源有限?),這個公眾號的限制就是:
1.只能被動回覆用戶訊息,用戶發送一則訊息到公眾號,伺服器只能針對這個請求回覆一則訊息,不能再額外回覆訊息(客服訊息);
2.每次必須在15s以內回覆訊息,公眾號平台在發送請求到伺服器後,如果5s內沒收到回复,會再次發送請求等候5秒,如果還是沒有收到請求,最後還會發送一次請求,所以伺服器必須在15s以內完整訊息的處理。
具體處理方式查看程式碼。新手項目,有不足之處還請包含並歡迎指正,謝謝~
需求:
一台伺服器(需要能存取openai介面的,可能需要海外的~)
如果需要開啟文字轉語音服務,需要註冊Azure的文字轉語音,該服務註冊和使用免費,具體參考網址:AZURE
微信公眾號:個人類型即可
演示:
公眾號:Tory的實驗室,關注發送訊息即可體驗。
公眾號推文介紹:
1.入門使用介紹:ChatGPT已接入
2.語音服務使用介紹:語音服務已接入
使用方法:
設定config裡面的config.yml參數:
# 微信相关设置
wechat :
token : " **** "
# 是否获取微信公众平台的ip白名单(用于防止doss检测)
ip_detection : false
# 如果上面的选项为true,下面两项内容必填;如要开启后面文本转语音服务,下面两项内容必填
appid : " **** "
secret : " **** "
# openai相关设置
openai :
#填写openai的api_keys时,要注意前面要加上:Bearer, 可以填写多个,因为单个账号有速率的限制
api_keys :
- " Bearer sk-**** "
# - "Bearer sk-****"
# - "Bearer sk-****"
# 单条消息的长度,这个参数对回复速度有非常大的影响,请不要填太大~
max_tokens : 120
# 模型
model : " gpt-3.5-turbo-0301 "
# temperature,越大随机性越强
temperature : 0.8
# 有时候文本长度超过150,用该参数限制长度避免超过微信能发送的最长消息
rsize : 500
# 对话的保存历史
save_history : 21
# azure文本转语音设置
azure :
# 是否开启文本转语音服务
trans_to_voice : false
# 如上面的选项为false,下面的内容不用填写
# 新定义文本长度,开启后增加处理时间,避免文本太长,处理时间过久,超过15s
max_token : 80
# 是否开启流式响应
stream_response : true
# 密钥
subscription : " **** "
region : " koreacentral "
# 中文语音模型
zh_model : " zh-CN-XiaoyanNeural "
# 英文语音模型
en_model : " en-US-AriaNeural "
啟動flask
export FLASK_APP=myflask
flask run --host=0.0.0.0 --port=80
# 或者
nohup flask run --host=0.0.0.0 --port=80 >> /home/jupyter/flask/log/wechat.log 2>&1 &
注意:
1.填寫openai的api_keys時,注意前面要加上:Bearer。可以填寫多個api_keys,因為單一帳號有速率的限制;
2.max_tokens對回覆速度有非常大的影響,請不要填太大。