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)

posted @ 2023-02-10 20:22  最冷不过冬夜  阅读(508)  评论(0编辑  收藏  举报