一个简单的基于pywinauto的微信AI对话机器人
本帖最后由 SelfLove 于 2024-7-22 23:35 编辑后续会增加群管理、公众号内容爬取之类的,以下源码:
```
import win32gui
import win32con
import win32process
import time
import Qwen# 导入自定义AI请求模型
from threading import Thread
from pywinauto.application import Application
def get_hwnd():
try:
hwnd = win32gui.FindWindow("WeChatMainWndForPC", "微信")# 根据类名或窗口名找到主窗口句柄
return hwnd
except Exception as e:
print(e)
def get_process(hwnd):
try:
thr, proc = win32process.GetWindowThreadProcessId(hwnd)# 获取当前窗口进程id
# print(proc)
return proc
except Exception as e:
print(e)
def set_top(hwnd):
try:
win32gui.ShowWindow(hwnd, win32con.SW_RESTORE)# 若窗口最小化或被遮挡则显示
win32gui.SetForegroundWindow(hwnd)# 将窗口设为顶层
except Exception as e:
print(e)
def sear_target(proc, name):
try:
# title对应inspect中name control_type对应inspect中LocalizedControlType的英文
app = Application(backend='uia').connect(process=proc)# 根据进程号连接到应用
search_lable = app.top_window().child_window(title="搜索")
search_lable.click_input()
search_lable.type_keys(name)
# 找到搜索结果列表 该title可能存在一定的局限性
target = app.top_window().child_window(title="@str:IDS_FAV_SEARCH_RESULT:3780", control_type="List")
target.child_window(title=name, control_type="Button").click_input()
return app# 返回应用对象
except Exception as e:
print(e)
def get_message(app, target):
front_message =
last_message =
while True:
try:
message_list = app.top_window().child_window(title="消息", control_type="List")
item_last = message_list.get_item(-1)# 获得列表项最后一项
# iter_children()返回生成器
name = next(item_last.iter_children(control_type="Button")).window_text()
if name == target:# 比较最新的一条消息是否是目标对象发送的
print(item_last.window_text())
front_message = item_last.window_text()# 更新前消息列表
if front_message != last_message:# 比较前消息列表是否与后消息列表一致
last_message = front_message
edit_lable = app.top_window().child_window(title=target, control_type="Edit")# 获取当前目标的编辑控件
req_message = last_message
resp_message = ai_reply(req_message)# 发送ai请求
edit_lable.click_input()
edit_lable.type_keys(resp_message)
edit_lable.type_keys("{ENTER}")
time.sleep(1)# 休眠避免过度轮询
except Exception as e:
print(e)
def ai_reply(message):
resp = Qwen.generate_response(message)
return resp
if __name__ == '__main__':
target = "对话目标"# 需要完整的目标名
hwnd = get_hwnd()
proc = get_process(hwnd)
set_top(hwnd)
app = sear_target(proc, target)
Thread(target=get_message, args=(app, target)).start()# 新开一个线程用于轮询获取消息和ai回复
while True:
time.sleep(1)
set_top(hwnd)# 保持微信窗口在最顶层
```
这是我本地部署的Qwen2:7b的模型,原谅我的AMD显卡打上Ollama的补丁也不能跑Qwen3
```
from openai import OpenAI
def generate_response(message, times=3):
try:
client = OpenAI(
base_url='http://localhost:11434/v1/',
# required but ignored
api_key='ollama',
)
chat_completion = client.chat.completions.create(
messages=[
{
'role': 'user',
'content': message,
}
],
model='qwen:7b',
)
return chat_completion.choices.message.content
except:
times -= 1
if times > 0:
return generate_response(message, times)
else:
return '错误:请求异常,请检查您的网络和API地址与Key是否正确'
``` 似水流年2015 发表于 2024-7-23 02:35
我想学一下那个部署本地AI,哈哈
挺简单的,PC端下载Ollama的客户端(国内可直连访问,无需魔法),然后在网页model处查看自己想运行的模型,复制下载(一般为“ollama pull 你要的模型”)命令,在终端处粘贴,等待下载;完成后ollama run 模型名即可,AMD显卡6800以上是能直接跑的,以下的需要打补丁,NVIDIA显卡都行,没显卡的CPU也能跑,速度也能接受 我想学一下那个部署本地AI,哈哈 6666 一直想要一个机器人 哪位大佬详细介绍一下怎么用,一直想有个微信机器人 自动回复信息用 本地部署的AI受道德约束吗,能否关掉约束 50lovelace 发表于 2024-7-23 08:02
哪位大佬详细介绍一下怎么用,一直想有个微信机器人 自动回复信息用
这个是基于ai模型的,意思是你的有本地部署的ai和网络ai的api请求接口,才能实现对话
使用方法是将target的文字改成你要对话的目标 侃遍天下无二人 发表于 2024-7-23 09:27
本地部署的AI受道德约束吗,能否关掉约束
本地部署ai都没有思想钢印,但如果是国内训练的ai模型可能会屏蔽掉一些敏感信息,国外的模型则没有例如llama3之类的,但国外模型对中文的处理不是很好,你可以下中文微调版 这个需要python几运行 Xiaosesi 发表于 2024-7-23 09:56
这个需要python几运行
建议3.10.x,我是这个版本
页:
[1]
2