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)