- https://waytoagi.feishu.cn/wiki/Zb4wwM7UYiTEWKkXfmzcfwxzn7b?from=from_copylink
- COW微信机器人可视化一键安装工具 & 免费使用Qwen2.5模型教程
- COW AI接入到微信 保姆教程 CSDN博客
- MinerU/docs/README_Ubuntu_CUDA_Acceleration_zh_CN.md at master · opendatalab/MinerU (github.com)
- MinerU/docs/how_to_download_models_zh_cn.md at master · opendatalab/MinerU (github.com)
- zhayujie/chatgpt-on-wechat
- https://mp.weixin.qq.com/s/wxh2mLijYe_rq5glr2JLjA
任务:
- 在Win10电脑上部署COW微 信机器人;
- 安装Ubuntu_CUDA_Acceleration版本的MinerU
关键字:
COW、Anaconda、MinerU、Model Scope、CUDA解析加速、Start-Process、Start-Job、cmdlet、自动变量与环境变量的区别、 'gbk' codec
1、下载:chatgpt-on-wechat-master.zip,并按照链接(https://waytoagi.feishu.cn/wiki/Zb4wwM7UYiTEWKkXfmzcfwxzn7b)部署,win10上微信测试OK。
win10:
python3 -m venv E:\chatgpt-on-wechat-master\venv //创建一个独立的 Python 环境
E:\chatgpt-on-wechat-master\venv\Scripts\Activate.ps1 //激活虚拟环境
PS E:\chatgpt-on-wechat-master> python .\app.py //前台运行 OK
- 在 PowerShell 中,Get-Process、Start-Process和Stop-Process是用于管理进程的 cmdlet(命令行工具)。
Get-Service | Where-Object {$_.Status -eq 'Running'} //Get-Service 的输出被管道传递给 Where-Object cmdlet,用于筛选出状态为 “Running” 的服务
Get-Command //列出所有可用的 cmdlet、函数和应用程序
Invoke-Command -ComputerName remotecomputer -ScriptBlock { Get-Process } //在本地或远程计算机上执行命令。
Enter-PSSession -ComputerName RemoteComputer //建立与远程计算机的交互式会话
Get-ChildItem Env:Path //获取系统路径环境变量的值
1.1、(win10)在 PowerShell 中可以使用以下2种方法在后台运行 Python 脚本(Start-Job:nok;Start-Process:ok)
1.1.1、第1种方法 Start-Job Nok——注释掉一行代码后OK
- 有问题:Start-Job:
- 先是提示配置文件不存在,将使用config-template.json模板,处理方法是先cd 进入当前目录(解决 $pwd当前目录的问题:ScriptBlock {cd E:\chatgpt-on-wechat-master ; python.exe app.py} ),解决自动变量 $pwd当前目录的问题;
Start-Job -ScriptBlock {python.exe E:\chatgpt-on-wechat-master\app.py} -Name "cow"
Get-Job //获取当前正在运行的作业列表。
Remove-Job -Id 1 //删除已完成或不再需要的作业;Remove-Job : 此命令无法删除未完成的作业,请先停止该作业或使用 Force 参数。
Stop-Job -Id 1 //停止特定 ID 的作业
Receive-Job -Id 1 //获取作业的输出结果
异常输出:--->找不见配置文件
INFO][2024-09-10 08:41:31][config.py:266] - 配置文件不存在,将使用config-template.json模板
[ERROR][2024-09-10 08:41:31][app.py:66] - App startup failed!
[ERROR][2024-09-10 08:41:31][app.py:67] - [Errno 2] No such file or directory: './config-template.json'
E:\chatgpt-on-wechat-master\config.py
def load_config():
global config
config_path = "./config.json"
if not os.path.exists(config_path):
logger.info("配置文件不存在,将使用config-template.json模板")
config_path = "./config-template.json"
- 在 PowerShell 中,$PWD是一个自动变量,表示当前工作目录的路径,但严格来说它不是传统意义上的 Windows 环境变量。在 Windows 命令提示符中没有$pwd这个表示当前目录的类似表示方式。PowerShell 中的一些自动变量与环境变量有一些相似之处,但它们的作用范围和使用方式有所不同。环境变量通常可以在系统范围内被多个程序和进程访问,而 PowerShell 的自动变量主要在 PowerShell 会话中使用。
- 这次运行弹出QR二维码,微信一扫描登录即异常(未出现:桌面微信已登录);手机微信未显示登录成功;日志出现GBK 编码报错,待解决?
Start-Job -ScriptBlock {cd E:\chatgpt-on-wechat-master ; python.exe app.py} -Name "cow"
扫描二维码后又有报错:(这个错误是因为在尝试使用 GBK 编码时遇到了无法编码的字符)
[INFO][2024-09-10 15:45:35][finish.py:23] - [Finish] inited
[ERROR][2024-09-10 15:45:36][wechat_channel.py:135] - 'gbk' codec can't encode character '\u2580' in position 0: illegal multibyte sequence
Traceback (most recent call last):
File "E:\chatgpt-on-wechat-master\channel\wechat\wechat_channel.py", line 121, in startup
itchat.auto_login(
File "E:\chatgpt-on-wechat-master\lib\itchat\components\register.py", line 38, in auto_login
self.login(enableCmdQR=enableCmdQR, picDir=picDir, qrCallback=qrCallback,
File "E:\chatgpt-on-wechat-master\lib\itchat\components\login.py", line 56, in login
qrStorage = self.get_QR(enableCmdQR=enableCmdQR,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:\chatgpt-on-wechat-master\lib\itchat\components\login.py", line 132, in get_QR
qrCallback(uuid=uuid, status='0', qrcode=qrStorage.getvalue())
File "E:\chatgpt-on-wechat-master\channel\wechat\wechat_channel.py", line 103, in qrCallback
qr.print_ascii(invert=True)
File "C:\Users\admin\AppData\Local\Programs\Python\Python311\Lib\site-packages\qrcode\main.py", line 329, in print_ascii
out.write(codes[pos])
UnicodeEncodeError: 'gbk' codec can't encode character '\u2580' in position 0: illegal multibyte sequence
***:排查,日志提示是在[finish.py:23] - [Finish] inited之后异常的,后面是执行wechat_channel.py代码,日志提示:wechat_channel.py:135,感觉是微信登录时收到 'gbk' codec不认识的字符 character '\u2580' 有关,关注这条提示 File "E:\chatgpt-on-wechat-master\channel\wechat\wechat_channel.py", line 103, in qrCallback
qr.print_ascii(invert=True)
——>修改代码,注释掉qr.print_ascii(invert=True)后OK,这次日志没报错,随后记录的信息是:Wechat login success......nickname: 二所问答机器人【可能是“二所问答机器人”这几个汉字编码导致的?】。
E:\chatgpt-on-wechat-master\channel\wechat\wechat_channel.py
# 可用的二维码生成接口
def qrCallback(uuid, status, qrcode):
# logger.debug("qrCallback: {} {}".format(uuid,status))
qr.make(fit=True)
# qr.print_ascii(invert=True)
日志:
[INFO][2024-09-10 15:35:54][finish.py:23] - [Finish] inited
[INFO][2024-09-10 15:36:13][wechat_channel.py:131] - Wechat login success, user_id: @2d0d30ae51c01781a4c9798caaca660a8e6a1d0e87e1d5f4efdbef353cf9a881, nickname: 二所问答机器人
[INFO][2024-09-10 15:36:49][bridge.py:68] - create bot chatGPT for chat
已在github提交ISSUES,查看已优化,添加except UnicodeEncodeError处理(Handle ASCII QR code print error on Windows by 6vision · Pull Request #2298 · zhayujie/chatgpt-on-wechat (github.com))
channel/wechat/wechat_channel.py
import sys
qr.print_ascii(invert=True)
try:
qr.print_ascii(invert=True)
except UnicodeEncodeError:
print("ASCII QR code printing failed due to encoding issues.")
- qrCallback(uuid, status, qrcode)这个函数是作为微信登录的二维码回调函数。当微信登录过程中生成二维码时,这个函数会被调用。它的主要功能是显示二维码、提供可扫描的二维码链接,并以 ASCII 艺术形式打印二维码。
1.1.2、第2种方法 Start-Process OK
Start-Process python.exe -ArgumentList "E:\chatgpt-on-wechat-master\app.py" -WindowStyle Hidden
PS E:\chatgpt-on-wechat-master> Get-Process python
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
257 35 704764 94604 2.42 9288 1 python
PS E:\chatgpt-on-wechat-master> Stop-Process -Id 9288
- venv\Scripts\Activate.ps1用于激活 Python 虚拟环境。以下是主要内容的总结:
- 定义了一些函数,包括deactivate用于取消激活虚拟环境,Get - PyVenvConfig用于获取虚拟环境配置信息。
- 通过Start - Process启动脚本时,会根据参数设置确定虚拟环境的目录VenvDir和提示符Prompt。
- 取消激活任何当前活跃的虚拟环境,并设置环境变量VIRTUAL_ENV,修改提示符,清除PYTHONHOME,将虚拟环境添加到PATH中。
1.2、Ubuntu下运行OK。
root@atc:/home/chatgpt-on-wechat# python3 -m venv /home/chatgpt-on-wechat/venv
root@atc:/home/chatgpt-on-wechat# source /home/chatgpt-on-wechat/venv/bin/activate
(venv) root@atc:/home/chatgpt-on-wechat# python app.py
[INIT] load config: {'channel_type': 'wx', 'model': 'gpt-4o', 'open_ai_api_key': 'sky*****key', 'open_ai_api_base': 'http://127.0.0.1:5000/qwen'
Starting Flask server in a separate thread...
Flask server started.
[INFO][2024-09-09 04:16:49][bridge.py:68] - create bot chatGPT for chat
* Serving Flask app 'plugins.FreeAI.freeAi'
* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:5000
* Running on http://192.168.31.2:5000
/home/chatgpt-on-wechat/config.json
"channel_type": "wx",
"model": "gpt-4o",
"open_ai_api_key": "sky-key",
"open_ai_api_base": "http://127.0.0.1:5000/qwen",
......
/home/chatgpt-on-wechat/plugins/FreeAI/config.json
"qwen_cookie": "cna=YF..H/wOB....do......
2、免费使用Qwen2.5模型教程——测试OK
git clone https://gitcode.com/qq_72894085/FreeAI.git
cd FreeAI && pip install -r requirements.txt
- 在cow项目的config.json改model填gpt-4o,open_ai_api_key填sk-key,open_ai_base_url填http://127.0.0.1:5000/qwen
3、(OK!)安装Ubuntu_CUDA_Acceleration版本的MinerU,先安装nvidia驱动
wget -U NoSuchBrowser/1.0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2024.06-1-Linux-x86_64.sh
bash Anaconda3-2024.06-1-Linux-x86_64.sh //最后一步输入yes,关闭终端重新打开
conda create -n MinerU python=3.10 //conda environments:/root/anaconda3/envs/MinerU ; 添加conda命令目录到path环境变量
conda activate MinerU
# conda info
pip install -U magic-pdf[full] --extra-index-url https://wheels.myhloli.com -i https://pypi.tuna.tsinghua.edu.cn/simple
(MinerU) root@atc:~# magic-pdf --version
magic-pdf, version 0.7.1 //如果版本号小于0.7.0,请到issue中向我们反馈
- 下载模型,利用Git lsf下载。模型文件夹的结构包含了不同组件的配置文件和权重文件
git lfs install
git lfs clone https://www.modelscope.cn/opendatalab/PDF-Extract-Kit.git
(MinerU) root@atc:~/PDF-Extract-Kit# ll
drwxr-xr-x 9 root root 4096 Sep 9 01:34 .git/
-rw-r--r-- 1 root root 1700 Sep 9 01:24 .gitattributes
drwxr-xr-x 2 root root 4096 Sep 9 01:24 .idea/
drwxr-xr-x 6 root root 4096 Sep 9 01:24 models/
-rw-r--r-- 1 root root 700 Sep 9 01:24 README.md
将 'models' 目录移动到具有较大磁盘空间的目录中,最好是在固态硬盘(SSD)上。 此外在(这里~
是conda create -n MinerU的家目录) ~/magic-pdf.json
里修改模型的目录指向最终的模型存放位置,否则会报模型无法加载的错误。
- 第一次运行前的配置
wget https://gitee.com/myhloli/MinerU/raw/master/magic-pdf.template.json
cp magic-pdf.template.json ~/magic-pdf.json
编辑magic-pdf.json文件并配置"models-dir"为
{
"models-dir": "/root/PDF-Extract-Kit/models"
}
- 第一次运行:OK!
wget https://gitee.com/myhloli/MinerU/raw/master/demo/small_ocr.pdf
magic-pdf -p small_ocr.pdf
CPU解析速度指标:layout detection cost: 13.93 mfr time: 2.23
- 测试CUDA加速(显卡显存大于等于8G,可以进行以下流程,测试CUDA解析加速效果),通常情况下,
layout detection cost
和mfr time
应提速10倍以上。
修改【用户目录】中配置文件magic-pdf.json中"device-mode"的值
{
"device-mode":"cuda"
}
运行以下命令测试cuda加速效果
magic-pdf -p small_ocr.pdf
CUDA解析加速效果 ocr cost: 8.09 layout detection cost: 1.53 mfr time: 0.71
*:执行magic-pdf命令需在Conda环境“MinerU”(conda activate MinerU/conda deactivate);Conda 基础环境是 “base”
列出当前系统中所有的 Conda 环境及其路径信息
(base) root@atc:~# conda env list
# conda environments:
base * /root/anaconda3
MinerU /root/anaconda3/envs/MinerU
(base) root@atc:~# conda info --envs
# conda environments:
base * /root/anaconda3
MinerU /root/anaconda3/envs/MinerU