python wxauto+OpenAI 搭了個微信小伙伴
都知道ChatGPT火,沒用過怎么知道他為什么火?于是好奇搞個玩玩。
第一步:獲取OPENAI_API_KEY
首先你能要去官網
注冊賬號后去創建一個keys
具體略
這一步比較關鍵,仁者見仁智者見智
你拿不到我也沒什么辦法
第二步:搭起OpenAI的可用服務
pip3 install OpenAI # 安裝模塊
import os
import openai
# 輸入你第一步中獲取的OPENAI_API_KEY
openai.api_key = "OPENAI_API_KEY"
# openai.api_key = os.getenv("OPENAI_API_KEY")
# 目前官方開放的四種模型 davinci是目前最高智能的
# max_tokens是最大關鍵詞數
__model = [
{"model": "text-davinci-003", "max_tokens": 4000},
{"model": "text-curie-001", "max_tokens": 2048},
{"model": "text-babbage-001", "max_tokens": 2048},
{"model": "text-ada-001", "max_tokens": 2048},
]
model = __model[0]
# 提問方法 prompt提問內容
def chatgpt(prompt: str) -> str:
try:
response = openai.Completion.create(
model=model['model'],
prompt = prompt,
temperature=0,
max_tokens=model['max_tokens'] - 200,
top_p=1,
frequency_penalty=0,
presence_penalty=0
)
# 返回回答
return response["choices"][0]["text"].strip()
except Exception as exc:
return exc
第三步:啟動微信應用
略
不會就去百度
第四步:使用wxauto接管微信
pip3 install wxauto # 安裝模塊
# https://github.com/cluic/wxauto
import time, copy, traceback
from wxauto import *
from chatrob import chatgpt # 導入第三步中的提問方法
who = '發送對象' # 指定發送對象
# 獲取當前微信客戶端
wx = WeChat()
wx.ChatWith(who) # 打開聊天窗口
# 用于過濾掉歷史消息
_old_list = [i for i in wx.GetAllMessage]
# 主體
while True:
try:
# wx = WeChat()
wx.ChatWith(who)
# 獲取當前頁面的數據,保留最后10條
msgs = wx.GetAllMessage[-10:]
print(msgs)
for msg in msgs:
print(time.time(), msg)
q = res = ""
# 判斷消息中是否有關鍵字 并且 這條消息不是歷史消息
if "@冬夜分身\u2005" in msg[1] and msg not in _old_list:
# 取出關鍵字得到問題
q = copy.deepcopy(msg[1]).replace("@冬夜分身\u2005", "")
print("+++++++++++++++++++++++")
print(q)
print("+++++++++++++++++++++++")
# 調用提問方法獲取回答
a = chatgpt(copy.deepcopy(msg[1]).replace("@冬夜分身\u2005", ""))
# 拼接返回格式
res = f'''@{msg[0]} {q}
{a}'''
print("-----------------------")
print(res)
print("-----------------------")
# 聊天頁返回輸出
WxUtils.SetClipboard(res) # 將內容復制到剪貼板,類似于Ctrl + C
wx.SendClipboard() # 發送剪貼板的內容,類似于Ctrl + V
# 將消息加入歷史任務防止重復回答
if msg not in _old_list:
_old_list.append(msg)
_old_list = _old_list[-200:] # 防止占用過多內存
time.sleep(1)
except Exception as e:
input(e, traceback.format_exc)

浙公網安備 33010602011771號