Brief
copilot for mac, a pale imitation of windows copilot
在学习 pyqt 的过程中,经常向 gpt 提问,加快学习进度。但每次遇到问题后【复制 –> 打开浏览器 –> 切换标签 –> 填入输入框并提问】的过程重复多次,总会感到厌烦。为了让自己能够在工作 / 学习过程中更加专注于内容,而自己又稍微懂一些编程 …. 于是,便有了本项目。
本项目在较早时 (本文发布前一个多月) 已经完成,经过这段时间的使用,已经基本满足自己的要求。并且,在这过程中也已经将能够发现并解决的问题处理完成
仓库:https://github.com/craii/mac_companion_for_M_Chip_mac || https://github.com/craii/mac_companion
基本要求
- 【断网运行】:因为之前被 openAI 封了账号,因此有了被迫害妄想症,总是担心被【卡脖子】,因此这也就有了模型必须能够断网运行的执念;
- 【性能】:内存和 cpu 占用不能太高,如果光是运行模型就赢把机器性能吃完,无法运行平时工作需要用到软件,那是完全没有意义的,因此,程序驻留后台时,肯定不能把电脑卡死;同时,在推理时也要足够快;
- 【快捷】:无需复制、粘贴,最好能选中文字,然后直接将这些文字作为 prompt,发给模型处理,并得到结果;
- 【对话页面】:如果遇到需要追问或提供更长的上下文才能得到更好结果的场景,可以有类似 chatgpt 的对话页面,获得更好的交互体验;
mac_companion 常驻后台,并在 mac 顶部菜单栏设置快捷入口。可以让我在绝大多数 app 中,可通过鼠标右键的服务菜单,快速将选中的文字作为 prompt 提交给 Chatglm 并得到答复,当然如果你不想使用 chatglm 也可以在修改少量代码的情况下,替换为其他支持 openai-like api 的模型,或者直接改为调用 openai 的 api。
本项目有两个版本:
成果展示
- 在各个 App 中直接获取文字作为 prompt, 省去复制粘贴的重复操作:
- 运行对话页面:
- 功能截图
业务流程
我们的实现逻辑比较简单,大致就是:copilot 启动后,会启动一个监听服务;当监听到苹果的 automator 脚本发送过来的选中文本后,将其发送给本地模型处理,然后在将模型的回答进行展示出来 (详见下图)。
可见,通过此流程,可以省略复制、粘贴的过程,便捷性得到了较好的保证。而且,感谢 THUDM 的杰作:chatglm,以及 li-plus 提供的 cpp 加速,让在 mac 上本地低成本运行 chatglm 模型成为了可能, 并且也提供了不错的 webUI。
如何使用
项目源码已上传至 github: https://github.com/craii/mac_companion
mac_companion 常驻 mac 顶部菜单栏。可以让我在绝大多数 app 中,可通过鼠标右键的服务菜单,快速将选中的文字作为 prompt 提交给 Chatglm 并得到答复,当然如果你不想使用 chatglm 也可以在修改少量代码的情况下,替换为其他支持 openai-like api 的模型,或者直接改为调用 openai 的 api。
本项目有两个版本:
- mac_companion: 本仓库,你可以在参照下述安装说明完成 Setup 即可使用;
- mac_companion【直接运行版】:如果你的
mac 使用的是M系列芯片
,可转至 此仓库,参照对应文档下载安装即可。也可以直接下载包含模型和运行环境的整合包(下载后最好用仓库最新代码文件覆盖一下):
整合包,提取码:fyEe
整合包已经集成了本项目的虚拟环境、chatglm 所需的虚拟环境 以及 chatglm 模型。下载完成后只需要切换到解压目录下,运行 “`python run.py“` 即可运行(我已在两台 m -chip 的 mac 上测试可行)。“`INTEL 芯片 “` 的 mac 未经测试,但应该是不能运行的,因为本项目使用的 chatglm 在进行 cpp 编译时采用的参数中指定了 arm 平台。
Setup
所需 Python 版本:
- mac_companion: 3.11.5;
- chatglm-6b: 3.8.18;
Step 1
下载本仓库
Step 2
创建虚拟环境
注意此时创建了虚拟环境 venv之后,需要记录 venv 中的 python_executable 路径, 假设你运行 Step 1的命令时,是将 documents 路径下, 则 python_executable 路径为:/documents/mac_companion/venv/bin/python
Step 3
安装 chatglm:
- 如果你倾向于使用完全版的 chatglm:请参照 https://github.com/THUDM/ChatGLM3;
- 如果你倾向于使用量化加速后的 chatglm:请参照 https://github.com/li-plus/chatglm.cpp?tab=readme-ov-file
安装完成后请务必先验证其是否被正确安装,并且能够启动
,如果正常启动,那么你应该能够在终端看到类似下图的文字:
注意:
- 记录上图中地址
127.0.0.1:8001
中的端口号:
8001;
- 记录启动
OpenAI_API
服务时使输入的命令:本项目使用的是量化加速后的 chatglm,启动命令为:
cd /Users/YOURNAME/Documents/chatglm.cpp-chatglm3/chatglm_cpp && MODEL=../chatglm3-ggml.bin /Users/YOURNAME/anaconda3/envs/chatglmcpp/bin/uvicorn chatglm_cpp.openai_api:app --host 127.0.0.1 --port 8001
Step 4
修改本项目中的
文件:
- 修改
port
的值为:你看到的端口号 (如以上图为例,则将其修改为 8001);
- 修改
aiserver_command
:
cd /Users/YOURNAME/Documents/chatglm.cpp-chatglm3/chatglm_cpp && MODEL=../chatglm3-ggml.bin /Users/YOURNAME/anaconda3/envs/chatglmcpp/bin/uvicorn chatglm_cpp.openai_api:app --host 127.0.0.1 --port 8001(根据你的实际情况修改)
- 修改
python_executable
的值为:
/documents/mac_companion/venv/bin/python(参考 Step 2)
修改后的
可能如下:
Step 5
- 双击
copilot.workflow
,会自动安装
copilot.workflow,然后在打开的页面里,将下图中
红框和
篮框部分为
mac_companion的项目路径;
双击后,copilot.workflow 如果没有自动打开,则在 启动台 中找到 自动操作 并用其打开 copilot.workflow,按照要求修改
Step 6
回到
文件夹,运行
mac_companion【直接运行版】
如果你使 mac_companion【直接运行版】,在本文末尾下载并解压后,按照下方视频,复制 run.py 的【绝对路径】后,在终端输入
即可运行(此处假设 run.py 的路径为 /Users/yourname/Documents/pythonscripts/mac_companion_PORTABLE/run.py)。
To-Do List:
- 在 chat 和 setting 页面之外,补充 history 页面,可查询每次对话内容并导出;
- 在任一 app 内指定位置插入模型回答内容;
【仅适用于 M -chip 的 mac】
我用夸克网盘分享了「【latest】mac_companion_PORTABLE.zip」,点击链接即可保存。打开「夸克 APP」,无需下载在线播放视频,畅享原画 5 倍速,支持电视投屏。
链接:https://pan.quark.cn/s/7cb6be5a8d6c
提取码:fyEe
mac 默认是 2.7,因此对 run.py 做了对应修改,可直接运行