用Python实现AI自动微信聊天

        用AI实现微信自动聊天应该已经屡见不鲜了,不过我用的是扣子里自己创建的智能体,不但可以写AI的人设,还可以设定成长期记忆。在技能上和限制上写好自己的要求,AI将会更像真人说的话。如果在知识区加入一些产品的文档的话,甚至可以担当AI客服。下面的代码会写上连接扣子智能体接口的代码。

连接扣子智能体API:

        发起对话接口将会向指定智能体发起一次对话,扣子ai的响应方式分为两种:流式或非流式响应。我采用的是流式响应的接口方式。chat_content为向ai传送的消息,该消息由第二个代码检测微信新消息内容,自动发送内容的文本。

import requests
import json
def aiautodata(chat_content):
    url = "https://api.coze.cn/v3/chat"
    # 替换为你真实的授权令牌(示例中的已打码部分)
    authorization_token = "pat_OVzZzsF7GNE5ORfPF_Your_token_XBnFdyieRmmkQUVNgfOT"

    # 请求头信息
    headers = {
        "Authorization": f"Bearer {authorization_token}",
        "Content-Type": "application/json"
    }

    # 请求体数据
    data = {
        "bot_id": "your_bot_id",
        "user_id": "123456",
        "stream": True,
        "auto_save_history": True,
        "additional_messages": [
            {
                "role": "user",
                "content": chat_content,
                "content_type": "text"
            }
        ]
    }
    try:
        # 发送POST请求
        response = requests.post(url, headers=headers, data=json.dumps(data))
        if response.status_code == 200:
            # 按行读取响应内容,因为它是事件流格式
            result = response.content
            decoded_string = result.decode('UTF-8')
            lines = decoded_string.split('\n\n')

            for line in lines:
                if "event:conversation.message.completed"in line and'"answer"' in line:
                    data_str=line.split('event:conversation.message.completed\ndata:')[1]
                    try:
                        event_obj = json.loads(data_str)
                        # print(event_obj["content"])
                        return(event_obj["content"])
                    except json.JSONDecodeError:
                        # print("出错了")
                        continue
        else:
            print(f"请求失败,状态码: {response.status_code}")
    except requests.RequestException as e:
        print(f"请求出现异常1: {e}")

实现微信自动回复:

        这段代码的主要功能是监控微信会话列表中的新消息,当有新消息时,获取消息内容和发消息人的名称,调用自定义的 ai 模块生成回复内容,然后将回复内容发送到微信聊天窗口。如何找到控件、明确控件ControlType、以及searchDepth,可以用inspect.exe工具。

# -*- coding: utf-8 -*-
from uiautomation import WindowControl
import ai   # 导入自定义的 ai 模块,连接扣子智能体

# 通过 WindowControl 类定位名为 '微信' 的窗口控件
wx = WindowControl(
    Name='微信',
    searchDepth=1
)

# 将微信窗口切换到当前活动窗口
wx.SwitchToThisWindow()
# 在微信窗口中定位名为 '会话' 的列表控件
hw = wx.ListControl(searchDepth=8,Name='会话')

# 进入一个无限循环,持续监控微信会话消息
while True:

    #查找是否存在新消息 
    we = hw.TextControl(searchDepth=3)
    # 死循环维持,没有超时报错
    while not we.Exists(0):
        pass

    # 获取当前控件的前两个父控件,获取和你聊天的人的名字
    current_control=we
    for _ in range(2):
        parent_control = current_control.GetParentControl()
        if parent_control:
            current_control = parent_control
    parent_name = current_control.Name
    # 使用切片去掉后n个字符
    n = 5
    userchat_name = parent_name[:-n]
    # print(f"上二层父控件的名称是: {parent_name}")
    
    if we.Name:
        # 将微信窗口设置为活动窗口
        wx.SetActive()
        # 点击未读消息
        we.Click()
        # 获取当前会话的最后一条消息
        last_msg = wx.ListControl(Name='消息').GetChildren()[-1].Name
        print("你的亲朋好友——"+f"{userchat_name},"+"对Surke你说了:"+last_msg+"    现在请Surke你以你的身份回复")
        # 调用 ai 模块中的 aiautodata 函数,传入消息提示,获取回复内容
        chat_reply=ai.aiautodata("你的亲朋好友——"+f"{userchat_name},"+"对Surke你说了:"+last_msg+"    现在请Surke你以你的身份回复")  
        we.Click()
        print("回复内容:",chat_reply)
        # 然后使用 wx.SendKeys 方法将回复内容发送到微信输入框
        wx.SendKeys(chat_reply.replace('{br}', '{Shift}{Enter}'), waitTime=0)
        # 模拟按下回车键,发送回复消息
        wx.SendKeys('{Enter}', waitTime=0)
我给自己的AI写的人设: 

        下面是我自己给自己创建的ai写的人设,可以给你们提供一些参考。(当然AI的人设也可以写成嘴毒之类的,形象应该会更鲜明)

# 角色
你是 Surke,一位积极向上的大学生。外表高冷,话语贴心,能敏锐感知他人情绪并恰当回应。兴趣爱好广泛,对二次元、音乐颇为了解,极会照顾人。热衷于信息技术与科技,数理成绩优异,实践和团队协作能力出众,始终保持奋进状态。

## 技能
### 技能 1: 日常简短聊天
1. 记录并牢记对话内容,面对日常话题,热情且简要地回应,并结合自身兴趣给出贴心观点。若遇到需承诺条件的情况,检查该条件被提出次数,若在三次及以内,回复“最近很忙,以后再说”;若超过三次,回复“那你这么急的话,就跟我打电话吧”。
2. 留意对方情绪,在其低落时简短安慰与鼓励。
3. 平均五次对话中,结合之前交流使用一次颜文字。

## 限制:
- 仅围绕日常交流进行简短回复,不回答无关话题。
- 回复简洁,语言温和,契合角色设定。 
- 务必清晰记住对方上次所说内容,并在回复中适度体现关联。
- 回复在25字左右 。 
- 尽量少在回复消息中使用颜文字 。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值