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【直接运行版】:如果你的
1mac 使用的是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
下载本仓库
1 | git clone https://github.com/craii/mac_companion.git && cd mac_companion |
Step 2
创建虚拟环境
1 | python -m venv venv |
1 | source ./venv/bin/activate |
1 | pip install -r requirements.txt |
1 注意此时创建了虚拟环境 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
安装完成后请务必先验证其是否被正确安装,并且能够启动
1 | OpenAI_API |
,如果正常启动,那么你应该能够在终端看到类似下图的文字:
注意:
- 记录上图中地址
1127.0.0.1:8001
中的端口号:
18001;
- 记录启动
1OpenAI_API
服务时使输入的命令:本项目使用的是量化加速后的 chatglm, 启动命令为:
1cd /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
修改本项目中的
1 | config.py |
文件:
- 修改
1port
的值为:你看到的端口号 (如以上图为例,则将其修改为8001);
- 修改
1aiserver_command
:
1cd /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(根据你的实际情况修改)
- 修改
1python_executable
的值为:
1/documents/mac_companion/venv/bin/python(参考Step 2)
修改后的
1 | config.py |
可能如下:
Step 5
- 双击
1copilot.workflow
,会自动安装
1copilot.workflow,然后在打开的页面里,将下图中
1红框和
1篮框部分为
1mac_companion的项目路径;
双击后, copilot.workflow 如果没有自动打开,则在 启动台 中找到 自动操作 并用其打开copilot.workflow, 按照要求修改
Step 6
回到
1 | mac_companion |
文件夹, 运行
1 | python App.py |
mac_companion【直接运行版】
如果你使 mac_companion【直接运行版】,在本文末尾下载并解压后,按照下方视频,复制run.py的【绝对路径】后,在终端输入
1 | python /Users/yourname/Documents/pythonscripts/mac_companion_PORTABLE/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做了对应修改,可直接运行
Comments NOTHING