公眾號對接GPT
之前一直用一個微信小號放在群里活躍氣氛,剛剛發(fā)現(xiàn)已經(jīng)被騰訊檢測到了,已經(jīng)被限制掃碼和拉群世舰、加好友這些功能了稚叹。所以個人微信是接不了GPT了焰薄。個人公眾號雖然用起來也會出問題,但是還能用用扒袖。
個人公眾號接入GPT也比較簡單塞茅,注冊openai的賬號這些資料搜索一下就能找到很多,因此就略過了季率。首先我們需要一套服務(wù)器凡桥,服務(wù)器需要安裝了Ngnix,可以直接在服務(wù)器上安裝寶塔面板蚀同,它會提示你安裝lnmp缅刽,也就是nginx和mysql這些環(huán)境都會給你安裝好。
然后我們先在服務(wù)器上跑一個python程序:
main.py
:
import werobot
import openai
robot = werobot.WeRoBot(token="garyhertel") # 和微信公眾號后臺設(shè)置的token相同
openai.api_key = "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" # openai創(chuàng)建的secret_key
old_message = "" # 這兩個變量用來存放舊的回復(fù)消息和舊的用戶輸入蠢络,因為有時候向openai請求比較慢會觸發(fā)公眾號的超時限制
old_response = ""
def generate_response(prompt):
response = openai.Completion.create(
model="text-davinci-003", # 選擇模型
prompt=prompt,
temperature=0.5, # 好像是設(shè)置ai的自由發(fā)揮度
max_tokens=256, # 設(shè)置回復(fù)的最大字數(shù)衰猛,大概4tokens是一個中文字符
top_p=1,
frequency_penalty=0.0,
presence_penalty=0.0,
)
message = response.choices[0].text
global old_message, old_response
old_response = message
old_message = prompt
print("回復(fù)消息:", message)
return message
@robot.text
def hello(messages):
global old_message, old_response
try:
print("用戶提問:", messages.content)
if messages.content == old_message:
return old_response
else:
response = generate_response(messages.content)
return response
except Exception as e:
print(f"出現(xiàn)錯誤:{str(e)}")
if __name__ == '__main__':
robot.config['HOST'] = '0.0.0.0'
robot.config['PORT'] = 8081 # 端口可以設(shè)置成別的端口
robot.run()
requirements.txt
:
openai
werobot
部署的時候,先安裝好依賴刹孔,然后直接跑起來就行啡省,當(dāng)然前提是要在服務(wù)器的控制臺或者安全組放行相應(yīng)的端口比如咱們這里寫的8081.
然后設(shè)置一下nginx代理,先在寶塔面板上創(chuàng)建一個站點髓霞,站點域名就寫服務(wù)器的公網(wǎng)ip卦睹,然后在這個站點的設(shè)置中添加一下代碼:
# 后端服務(wù)
location /api/ {
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass_header Set-Cookie;
proxy_pass http://127.0.0.1:8081/;
proxy_connect_timeout 60s;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
}
最后是在微信公眾號后臺的“設(shè)置與開發(fā)——基本配置”中進行設(shè)置,啟用服務(wù)器配置方库,然后URL填入:
http://服務(wù)器公網(wǎng)ip:80/api/
token寫我們之前設(shè)置的garyhertel结序,加密密鑰隨機生成(因為其實不會用到),消息加解密方式選擇明文模式纵潦。
點擊提交之后它會驗證徐鹤,沒問題的話就會提交成功,那就可以用了邀层,直接在公眾號里發(fā)消息就能看到回復(fù)了返敬。