基于wxauto以及ollama本地部署的大模型实现微信消息监听并回复
本文介绍了如何在本地电脑上配置一个微信机器人,利用AI大模型代替用户与微信好友进行聊天。首先,需要下载并安装ollama,这是一个用于本地部署AI大模型的工具,可以选择将其安装在D盘,并修改模型存放位置。接着,从ollama官网挑选并下载适合的AI大模型进行部署。然后,安装wxauto插件,这是一个基于Python的第三方库,可以自动化操作微信电脑客户端。最后,通过编写Python代码实现微信消息
现在ai的普及,各大平台都有ai进入到我们的生活中,这让我突然有个很不错的主意,如果将ai接入到自己的微信让她代替我和女朋友聊天会是一种什么样的体验(虽然我没有女朋友,但是有朋友可以被我折磨),于是我就上网查了关于python接入到微信的相关资料,但是由于各大模型的api需要收费,所以我就自己在本地部署了一个ai大模型,在这儿我将会给大家总结一下怎么在自己的电脑上配置一个微信机器人。
本期需要用到的插件先给大家罗列出来,可以先将其下载:
ollamahttps://ollama.com/
Python 3.13.3Python下载 | Python中文网 官网
wxauto
pip install wxauto
目录
一、ollama下载以及本地大模型部署
1、ollama下载
官方网址下载一个就行了,ollama没有版本需求Ollama
2、ollama安装
ollama默认安装地址是c盘,但是有需要的可以安装在d盘
将ollama安装在d盘
①先在d盘创建一个ollama空文件夹
②找到下载ollama安装程序的目录

③在cmd里面使用cd+ollama安装程序的路径(这里用我的路径演示)
cd C:\Users\huang\Downloads\
④使用官方文档给到的命令指定安装位置
OllamaSetup.exe /DIR="D:\ollama"

安装好以后就可以看到ollama已经被安装在D:\ollama
3、修改模型存放位置
在系统设置中找到查看高级系统设置->环境变量,在用户变量里面添加一个新的环境变量,变量值就是你想存放ai大模型的位置。


4、部署本地大模型
根据自己的电脑配置挑选一款你想部署的ai大模型,在这儿我是用的是谷歌的gemma3:12b
下载大模型
进入ollama官网挑选模型Ollama Search

找到官方提供的命令在终端运行

模型测试
等待模型下载好以后就可以先尝试一下,如果没有等待时间很长的情况说明模型已经部署好了

二、wxatuo插件安装
1、wxatuo简介
随着微信的普及,我们经常需要在电脑上进行微信的相关操作。然而,频繁的手动操作不仅效率低下,还容易出错。为了解决这个问题,我们可以使用第三方库wxauto来自动化操作微信电脑客户端。
wxauto是一个基于Python的第三方库,可以模拟人工操作微信电脑客户端,实现自动登录、发送消息、接收消息等功能。通过使用wxauto,我们可以轻松地编写脚本自动化完成一系列微信操作,提高工作效率。
2、安装wxauto
打开命令终端使用pip命令安装 (在这儿我的python版本是Python 3.13.3)
pip install wxauto
在安装过程中有可能会出现错误,需要根据报错的信息提示更新pip等模块
安装好后在命令终端查看插件版本
pip show wxauto

3、微信安装
根据查询到的版本号查看对应的文档 下载对应版本的微信
这里需要注意的是微信版本必须对应wxauto的版本,如果版本不对应微信的相关安全策略会启动,给你强制退出微信也有可能会被封号,大家小心谨慎。
三、代码实现
相关的操作明细可以翻阅一下wxauto官方文档
给大家找了一个博主提供的代码段,大家可以先体验一下,更多功能自己多研究一下
比如说除了监听联系人,然后还可以只监听群聊中@自己的消息
import time
import requests
import logging
from wxauto import WeChat
# 配置日志记录
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# 配置信息
DEEPSEEK_API_URL = "http://localhost:11434/api/chat"
DEEPSEEK_MODEL = "gemma3:12b"
def send_request_to_deepseek(messages):
"""
向 大模型 模型发送请求并返回响应
:param messages: 对话消息列表
:return: 模型响应字典
"""
try:
data = {
"model": DEEPSEEK_MODEL,
"messages": messages,
"stream": False
}
resp = requests.post(url=DEEPSEEK_API_URL, json=data)
resp.raise_for_status() # 检查响应状态码
return resp.json()
except requests.RequestException as e:
logging.error(f"请求 DeepSeek 模型时出错: {e}")
except ValueError as e:
logging.error(f"解析 DeepSeek 模型响应时出错: {e}")
return None
def handle_wechat_messages(wx, duihua_list):
"""
处理微信消息,与 大模型 模型交互并回复消息
:param wx: 微信对象
:param duihua_list: 对话记录字典
"""
listen_dict = wx.GetListenMessage()
for chat_win, message_list in listen_dict.items():
char_user = chat_win.who # 获取消息发送人名称
for msg in message_list:
if msg.type != "friend":
continue
logging.info(f"{char_user}: {msg.content}")
# msg.content 将微信消息组装并发共给deepseek
user_dict = {"role": "user", "content": msg.content}
# 将历史对话添加记录到对应的消息人列表
duihua_list[char_user].append(user_dict)
response = send_request_to_deepseek(duihua_list[char_user])
if response:
# 将deepseek回复的消息转发给消息人
res_msg_dict = response["message"]
logging.info(f"deepseek回复: {res_msg_dict['content']}")
try:
wx.SendMsg(msg=res_msg_dict["content"], who=char_user)
except Exception as e:
logging.error(f"发送微信消息时出错: {e}")
duihua_list[char_user].append(res_msg_dict)
def deepSeekWeiXin():
# 微信名某某 可以是昵称 也可以是微信备注 注意 如果有特殊符号会报错
duihua_list = {
#添加你想监听的群名和联系人
"": [],
"": [],
}
wx = WeChat()
for name in duihua_list.keys():
try:
wx.AddListenChat(who=name)
except Exception as e:
logging.error(f"添加监听联系人 {name} 时出错: {e}")
while True:
handle_wechat_messages(wx, duihua_list)
time.sleep(5)
if __name__ == '__main__':
deepSeekWeiXin()
今日更新的代码是监听指定联系人和指定群聊中@自己的消息并进行回复
import time
import requests
import logging
from wxauto import WeChat
# 配置日志记录
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# 配置信息
DEEPSEEK_API_URL = "http://localhost:11434/api/chat"
DEEPSEEK_MODEL = "gemma3:12b"
def send_request_to_deepseek(prompt):
"""
向 DeepSeek 模型发送请求并返回响应
:param prompt: 输入的文本提示
:return: 模型响应文本
"""
try:
data = {
"model": DEEPSEEK_MODEL,
"messages": [{"role": "user", "content": prompt}],
"stream": False
}
resp = requests.post(url=DEEPSEEK_API_URL, json=data)
resp.raise_for_status() # 检查响应状态码
response_json = resp.json()
if 'message' in response_json and 'content' in response_json['message']:
return response_json['message']['content']
else:
logging.error(f"Unexpected response format: {response_json}")
return None
except requests.RequestException as e:
logging.error(f"请求 DeepSeek 模型时出错: {e}")
except ValueError as e:
logging.error(f"解析 DeepSeek 模型响应时出错: {e}")
return None
def handle_wechat_messages(wx, duihua_list, my_nickname):
"""
处理微信消息,与 DeepSeek 模型交互并回复消息
:param wx: 微信对象
:param duihua_list: 对话记录字典
:param my_nickname: 当前用户的昵称
"""
listen_dict = wx.GetListenMessage()
for chat_win, message_list in listen_dict.items():
char_user = chat_win.who # 获取消息发送人名称
for msg in message_list:
if msg.type != "friend":
continue
logging.info(f"{char_user}: {msg.content}")
# 如果是私聊且在指定的好友列表中
if char_user in friends_to_listen:
reply_text = send_request_to_deepseek(msg.content)
if reply_text:
logging.info(f"deepseek回复: {reply_text}")
try:
wx.SendMsg(msg=reply_text, who=char_user)
except Exception as e:
logging.error(f"发送微信消息时出错: {e}")
# 如果是群聊且在指定的群聊列表中,并且@了自己
elif char_user in groups_to_listen and '@' in msg.content and my_nickname in msg.content:
reply_text = send_request_to_deepseek(msg.content.replace('@', '').replace(my_nickname, '').strip())
if reply_text:
logging.info(f"gemma回复: {reply_text}")
try:
wx.SendMsg(msg=reply_text, who=char_user)
except Exception as e:
logging.error(f"发送微信消息时出错: {e}")
def deepSeekWeiXin():
# 初始化微信实例
global wechat
wechat = WeChat()
# 手动配置当前用户的昵称
my_nickname = "温和的开水" #这一步必须自己配置,要不然监听不了群聊中@自己的消息
# 指定要监听的好友列表(可以通过昵称或备注名)
global friends_to_listen
friends_to_listen = ['friend1','friend2']
# 指定要监听的群聊列表(可以通过群聊名称)
global groups_to_listen
groups_to_listen = ['group1','group2']
# 对话记录字典
duihua_list = {}
for name in friends_to_listen + groups_to_listen:
duihua_list[name] = []
for name in friends_to_listen + groups_to_listen:
try:
wechat.AddListenChat(who=name)
except Exception as e:
logging.error(f"添加监听联系人 {name} 时出错: {e}")
while True:
handle_wechat_messages(wechat, duihua_list, my_nickname)
time.sleep(5)
if __name__ == '__main__':
deepSeekWeiXin()
end1
代码说明:
在ollama本地大模型中,他的api接口基本上都是11434,可以直接拿去用不用修改
http://localhost:11434/api/chat
在代码中的这部分要替换成自己部署的模型的名字,详细名字可以在终端中使用命令来进行查看
ollama list

END!
PS:仅供学术研究
- 违反微信使用条款和相关规定:微信明确禁止使用各类 “外挂” 或未经授权的第三方工具来扩展微信功能2。wxauto 工具包虽然是一个开源的微信自动化库,但如果使用它来接入微信并进行自动化对话,可能被视为违反微信的服务协议和使用规范。一旦被微信官方发现,可能会对相关账号进行限制、封禁等处罚2。
- 侵犯他人隐私和个人信息安全:如果在接入微信与别人对话的过程中,未经他人同意收集、使用或披露他人的个人信息,如聊天记录、好友列表等,可能会侵犯他人的隐私权和个人信息权益,违反《中华人民共和国民法典》《中华人民共和国网络安全法》等相关法律法规中关于保护个人信息和隐私的规定1。
- 可能构成其他违法犯罪行为:如果利用这种方式进行诈骗、造谣、传播淫秽物品、进行商业欺诈等违法犯罪活动,那么将面临相应的刑事或民事法律责任1。例如,根据《中华人民共和国刑法》,诈骗公私财物,数额较大的,可处三年以下有期徒刑、拘役或者管制,并处或者单处罚金。
更多推荐



所有评论(0)