自制聊天机器人实现与chatgpt或微信好友对话【附代码】

news2024/11/26 18:22:48

闲来无事,想实现一个可与chatgpt或者微信好友对话的聊天机器人。该聊天机器人还可应用于QQ好友或者其他地方的语音输入。功能还是比较简单的,后期会慢慢更新,让人机交互体验感不断提升。

项目描述:

语音输入"开启语音助手"等待用户语音输入(等待时间为2秒,可自行调整),再将语音转文字输入到对话框中(识别时长为5秒,可自行调整),语音输入"关闭语音助手"将提出程序。利用语音识别完成文字输入,实现聊天功能。


环境描述

python语言

windows10


前期准备

先要安装以下几个库

pip install pyperclip
pip install pyautogui
pip install speech_recognition
pip install pyaudio
pip install wave

本项目发送文字对话是用来模拟鼠标发送按键,因此需要获取"发送"按钮相对于屏幕的坐标位置

这个坐标位置也是非常好获取的,直接用微信截图快捷键就可以显示。

例如现在想获取微信对话框发送按钮的坐标,点击微信截图,将鼠标放在发送按钮上,有个POS就是坐标位置。


 

功能展示

全程使用时需要开启科学上网(这里网上有很多办法,自己寻找)

与微信好友对话

1.修改发送按钮坐标位置

2.如果是微信对话需要注释掉以下几行:

            # 对于chatgpt需要在点击一下对话框
            pyautogui.moveTo(639, 929)
            pyautogui.mouseDown()  # 鼠标左键按下,发送内容
            pyautogui.mouseUp()  # 鼠标左键抬起

我这里是(1405,787)

pyautogui.moveTo(1405, 787)  # 鼠标光标移动至发送按钮(这里是坐标)
pyautogui.mouseDown()  # 鼠标左键按下,发送内容
pyautogui.mouseUp()  # 鼠标左键抬起
python wechat_root/wechat.py

3.语言输入"开启语言助手",将开启功能。 

开始录制...
录制结束...
result2:
{   'alternative': [{'confidence': 0.97500253, 'transcript': '开启语音助手'}],
    'final': True}

 4.当你windows任务栏右下角显示"麦克风"的图标表示开启录音,图标关闭表示录制结束。录制时长默认为5秒,可自行修改。

5.此时会将语音转文字输入在微信对话框中并自动发送。

每次输入间隔为2秒(可自行修改)。修改下面的就行。

    if text_ == '开启语音助手':  # 开启
        time.sleep(2)  # 等待2s输入一次

如果用户没有输入任何东西也不会发送任何东西的。 仅在输入有效才发送。

 

 6.用户语音输入"关闭语音助手",即可退出。


与chatGPT对话 

与上述微信对话一样,只不过需要修改chatgpt发送按钮和对话框坐标。

比如我chatgpt发送按钮为(1531,933),对话框坐标为(639,929)。

            pyautogui.moveTo(1531, 933)  # 鼠标光标移动至发送按钮(这里是坐标)
            pyautogui.mouseDown()  # 鼠标左键按下,发送内容
            pyautogui.mouseUp()  # 鼠标左键抬起
            # 对于chatgpt需要在点击一下对话框
            pyautogui.moveTo(639, 929)
            pyautogui.mouseDown()  # 鼠标左键按下,发送内容
            pyautogui.mouseUp()  # 鼠标左键抬起

用户语音输入"开启语音助手"即可开启对话。

 


 完整代码

https://github.com/YINYIPENG-EN/chatbot.git

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/701094.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux常用命令——fmt命令

在线Linux命令查询工具 fmt 读取文件后优化处理并输出 补充说明 fmt命令读取文件的内容,根据选项的设置对文件格式进行简单的优化处理,并将结果送到标准输出设备。 语法 fmt(选项)(参数)选项 -c或--crown-margin:每段前两列缩排&#…

Django期末复习总结【内含思维导图帮助梳理】

Django-最下面有笔记的下载链接 初始Django框架 MTV设计模式 Model(模型) Template(模板) View(视图) Django项目框架搭建 创建项目骨架 django-admin startproject my_project1 启动服务 python mana…

2 线程基础知识复习

1、并发相关Java包 涉及到的包内容 java.util.concurrent java.util.concurrent.atomic java.util.concurrent.locks 2、并发始祖 3、start线程解读 初始程序 public static void main(String[] args) {Thread t1 new Thread(() ->{},"t1");t1.start();}//…

从功能测试到自动化测试,待遇翻倍,我整理的超全学习指南!

在这个吃技术的IT行业来说,我刚入行的时候每天做的也是最基础的工作,但是随着时间的消磨,我产生了对自我和岗位价值和意义的困惑。一是感觉自己在浪费时间,另一个就是做了快2年的测试,感觉每天过得浑浑噩噩&#xff0c…

一个JVM参数,服务超时率降了四分之三

先说结论:通过优化Xms,改为和Xmx一致,使系统的超时率降了四分之三 1. 背景 一个同事说他负责的服务在一次上线之后超时率增加了一倍 2. 分析 2.1 机器的监控 首先找了一台机器,看了监控 上线后最明显的变化就是CPU使用率变高了…

Redis6之主从复制

主从复制 是指将一台Redis服务器的数据,复制到其他Redis服务器。前者称为主节点,后者称为从节点;数据复制是单向的,只能由主节点复制到从节点;主节点以写为主,从节点以读为主。 特点 1.使用异步复制&#…

VS2019 QT5 第一个项目

(1条消息) VS2017PyQt5环境配置以及第一个HellowPyQt5_vs pyqt_2011老王的博客-CSDN博客 利用工具里的PyUIC5,将ui转为py 选中刚加入的ui文件,工具》PyUIC5 利用工具里的PyUIC5,将ui转为py 选中刚加入的ui文件,工具》PyUIC5 利用…

用Python手动实现一个简单的服务器,不借助任何框架在浏览器中输出任意内容

目录标题 前言主要内容开始我们的代码,先是导入模块为浏览器发送数据的函数创建一个执行函数网站服务启动程序运行代码尾语 前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 在公司网站开发中,我们往往借助于Flask、Django等网站开发框架去提高网站开…

libevent实践03:监听有名管道

首先创建两个管道:p1,p2 lkmaoubuntu:/big/libevent/libevent-2.1.12-stable/_install/learn$ mkfifo p1 p2 lkmaoubuntu:/big/libevent/libevent-2.1.12-stable/_install/learn$ ls -lshF p1 p2 0 prw-rw-r-- 1 lkmao lkmao 0 6月 29 20:39 p1| 0 prw-rw-r-- 1 l…

Blender导出gltf格式ThreeJS不显示问题-

1. 检查代码 import { GLTFLoader } from three/addons/loaders/GLTFLoader.js; 。。。。。。initRoomGltf() {const _this this;// const loader new OBJLoader();const loader new GLTFLoader();// load a resourceloader.load(// resource URL// this.commonFunc.getPat…

【2023年江西省研究生数学建模竞赛】题目三 植物的多样性 建模方案及参考文献

代码与结果如下:完整文档见文末 相关思路请点击这里到原文章查看 2023年江西省研究生数模竞赛题目三:植物的多样性 植物作为食物链中的生产者,通过光合作用吸收二氧化碳,制造氧气,同时为其他生物提供食物和栖息地&a…

(一)创建线程的三种方式

(一)创建线程的三种方式 1.1 线程与进程1.2 创建线程的三种方式01、继承Thread类02、实现Runnable接口03、实现Callable接口 1.3 Question?01、为什么要重写 run() 方法?02、run() 方法和 start() 方法有什么区别?03、…

npm 包 - serve 使用

前端打包后,或者本地的html文件。有时需要将打包好的项目跑一下看看效果,这时就可以使用 serve 工具,在本地启动一个静态文件服务器。本文主要简单记录下 npm 包 serve 的基本使用命令。 一、全局安装 serve npm install serve -g二、运行 s…

php宝塔搭建部署活动现场大屏幕互动系统php源码

大家好啊,我是测评君,欢迎来到web测评。本期给大家带来一套活动现场大屏幕互动系统php源码。抽时间看了一下,功能还是不错的,有参考价值。感兴趣的朋友可以自行下载学习。 技术架构 PHP7.0 nginx mysql5.7 JS CSS HTMLcneto…

【Java】Java核心 82:Git 教程(5)修改撤销

文章目录 08.GIT本地操作-修改撤消目标内容小结 09.GIT本地操作-总结 在Git中,可以使用不同的操作来修改和撤销提交。以下是几种常用的方法: 修改最后一次提交:如果你需要修改最后一次提交的提交信息或者漏掉了某些文件,可以使用…

Linux进程信号【信号保存】

✨个人主页: 北 海 🎉所属专栏: Linux学习之旅 🎃操作环境: CentOS 7.6 阿里云远程服务器 文章目录 🌇前言🏙️正文1、再次认识信号1.1、概念1.2、感性理解1.3、在内核中的表示1.4、sigset_t 信…

安装完MySQL后/var/log/mysqld.log中找不到初始密码

背景:我安装完MySQL后,密码忘记了,然后我又重新装了一次,结果发现重新安装后,/var/log/mysqld.log中找不到初始密码 找初始密码的命令 grep temporary password /var/log/mysqld.log问题原因:再删除MySQL…

matplotlib 更改离散colorbar分界线的宽度和外边框的宽度

1 设置colorbar颜色间隔线的宽度 通过属性dividers设置colorbar颜色间隔线的宽度 # 将drawedges设置为True,从而显示颜色之间的分界线 cbar fig.colorbar(im, axaxs, orientationhorizontal, ticksbins, drawedgesTrue) # 利用属性dividers设置宽度 cbar.divider…

小马识途:全媒体营销是未来营销之道

全媒体营销和整合营销都是广泛应用于市场营销领域的策略,但两者之间还是有一些区别和相似之处的。 全媒体营销和整合营销的相同之处,小马识途营销顾问认为两者都是多渠道整合的营销方式,都强调利用多个渠道和媒体来传播信息,以达到…

循环控制基础

循环控制 Key Point ●for 循环的使用 ●while 循环 ●do...while 循环 ●break 和continue 练习 1. (for 循环)计算123...100 的和 public class Test21 { public static void main(String[] args) { // (for 循环)计算…