
项目简介
jev-chat-jarvis 是一款面向 macOS 的微信消息辅助工具。当微信中出现可确认来自对方的文字消息时,它通过读取屏幕内容和本地模型分析消息,展示这句话的真实意图、0 至 9 的风险等级、行动建议以及候选回复。
工具采用只读方式工作,不注入微信、不 hook、不解密数据库,也不会自动发送消息。用户可以在悬浮面板中复制候选内容,或点击“填入”将文字放入微信输入框,最终发送仍由用户手动完成。
核心功能
- 意图与风险分析:支持 8 类意图零样本识别,并给出风险分级和行动建议。项目 README 以 22 条中文回归样例为口径,意图识别率为 86.4%。
- 候选回复生成:内置 10 种话术,每种话术生成稳妥和放松两类候选,再由本地模型排序。
- 并发处理:消息判断和候选生成可以同时启动。README 给出的 M1 Pro 参考耗时为意图约 1.5 秒、候选约 1.5 至 2 秒,实际速度取决于设备和服务。
- YOLO 检测框:可选地在微信窗口中标出 OCR 命中的消息,对对方消息和自己的消息进行区分,并显示置信度。
- 原生悬浮面板:面板显示当前聊天、分析状态、待处理消息、上下文、意图、识别率、风险等级、行动建议和候选回复。
安装与首次启动
方式一:下载 macOS 应用
如果只想直接使用,可以从 Releases 下载 macOS 压缩包,解压后将 .app 拖入“应用程序”。由于应用没有经过公证,首次启动时应在 Finder 中右键应用并选择“打开”,不要直接双击。
如果 macOS 显示“已损坏,无法打开,你应该将它移到废纸篓”,通常是浏览器下载的压缩包带有隔离属性。不要立即删除应用,可以在终端执行:

sudo xattr -r -d com.apple.quarantine /Applications/jev-jarvis.app如果应用名称被改过,例如 jev-jarvis 2.app,请将命令中的路径替换为实际路径。
方式二:从源码运行
从源码运行前,请确保微信已经启动,并且终端或启动应用具有屏幕录制权限。进入项目目录后执行:
./start.command项目会使用 uv 管理 Python 环境。如果系统中没有可用的 uv,两种启动入口都会尝试下载并执行官方安装脚本;失败后还会尝试使用已有的 Homebrew。安装和启动日志位于:
~/Library/Logs/jev-jarvis.log授予 macOS 权限
首次启动时,根据提示在“系统设置 > 隐私与安全性”中为 jev-chat-jarvis 打开“屏幕录制”权限,然后退出并重新打开应用使权限生效。
“填入”功能还需要“辅助功能”权限。第一次点击“填入”时,系统通常会弹出授权提示。v0.3.1 及更早版本还需要为 python3.12 打开相应权限。
这些权限用于读取微信窗口内容、定位输入控件和执行填入操作,并不代表工具会自动发送消息。
配置模型和密钥
项目包含判断层和生成层,两层的密钥都可以不填写:
- 判断层:不配置 TypeSafe Jev 密钥时,使用本地
decider-2b模型。首次下载约需要 7 GB。 - 生成层:打包应用内置共享密钥,不配置个人密钥也可以尝试生成候选回复。
使用图形化设置
点击悬浮窗右上角的齿轮图标,或从菜单栏的“J > 模型设置…”打开配置窗口。设置界面支持编辑 Jev、OpenAI 兼容和 Anthropic 兼容三组服务的地址、密钥和模型。
可以点击“获取模型列表”从服务的 /models 接口读取模型,也可以在接口不支持或请求失败时手动填写。选择模型后可以点击“测试连接”;测试会使用尚未保存的配置发送固定问候语,不会读取微信内容,但可能产生少量服务费用。
保存配置后必须退出并重新打开应用,本次运行不会即时切换配置。设置窗口编辑的默认文件是:
$XDG_CONFIG_HOME/jev-jarvis/env如果没有设置 XDG_CONFIG_HOME,实际路径为:
~/.config/jev-jarvis/env手动创建环境文件
也可以在终端中创建配置文件:
mkdir -p ~/.config/jev-jarvis
cat > ~/.config/jev-jarvis/env <<'ENV'
# 判断层(可选):不填则使用本地 decider-2b
export TYPESAFE_API_KEY=""
# 生成层:任意 OpenAI 兼容端点
export OPENAI_API_KEY="sk-你的key"
export OPENAI_BASE_URL="https://api.deepseek.com"
export OPENAI_MODEL="deepseek-chat"
# 某些模型需要关闭思考模式
# export OPENAI_EXTRA_BODY='{"enable_thinking":false}'
ENV
chmod 600 ~/.config/jev-jarvis/env配置优先级为:环境变量高于用户 env 文件,用户 env 文件高于项目 .env。生成层中,OpenAI 配置优先于 Anthropic 配置;两者都没有配置时才使用内置共享密钥。
选择服务时的注意事项
- DeepSeek 可使用
deepseek-chat,README 将其列为较快的实测选择。 - 智谱可以使用
glm-4-flash,并按照项目支持的配置组填写对应变量。 - 本地 Ollama 可填写
http://localhost:11434/v1,密钥使用ollama,模型例如qwen2.5:7b。 - 尽量不要使用 thinking 模型。README 提醒,思考过程可能耗尽
max_tokens,导致候选回复为空;使用 DeepSeek 时应选择deepseek-chat。
第一次使用

启动应用并打开微信后,保持微信聊天窗口可用。工具会通过窗口内容和 Vision OCR 读取聊天区域,不要求直接抓取系统屏幕,因此悬浮面板不会污染 OCR。
当识别到明确来自对方的文字消息后,面板会依次显示当前聊天和分析状态、正在处理的消息与上下文、意图、识别率、风险等级、行动建议,以及按话术分组排列的候选回复。
每条候选左侧显示本地排序概率,右侧提供“复制”和“填入”。“复制”方便手动粘贴;“填入”会将文字写入微信输入框,但不会自动点击发送按钮。
使用示例
例如,对方发送“这个需求你今天跟一下”,工具会将消息交给判断层识别,并根据风险结果给出行动建议;随后生成层会并发生成多种语气的候选回复,本地排序后重新排列。你可以根据上下文选择一条,点击“复制”或“填入”,再由自己检查并发送。
如果消息方向无法确定,例如文字横跨左右、位于居中位置,面板会标记为“方向未确认”,不会将其作为回复目标。只有明确识别为对方的消息才会触发判断和生成。
高级使用技巧
开启 YOLO 检测框
可以通过环境变量在启动时开启检测框:
JEV_BOXES=1启动后也可以从菜单栏切换“YOLO 检测框”。检测框大约每秒刷新:蓝色实线表示辅助功能接口定位到的输入控件,橙色虚线表示根据截图边界推测出的输入区域。虚线不代表一定取得了可写控件。
自定义话术
通过 JEV_TONES 添加或覆盖话术。每条话术使用 | 分隔,格式为“名字=说明”,例如:
export JEV_TONES='摸鱼大师=像资深摸鱼选手,把活推得漂亮又不失礼'说明中应明确需要的语气,以及不要变成什么风格。修改后需要重启应用。设置窗口目前不会修改 JEV_TONES、JEV_BOXES 和 OPENAI_EXTRA_BODY。
分层自测和排查
从源码运行时,可以分别测试感知、判断、生成和回归流程:
uv run python src/perception.py
uv run python src/judge.py "这个需求你今天跟一下"
uv run python src/judge_zh_test.py
uv run python src/generate.py --check
uv run python -B -m unittest discover -s tests
uv run python probe/bootstrap_regression.py其中,生成层的 --check 只检查凭据解析,不等同于真实连接测试。要确认服务能够生成文字,应使用设置窗口的“测试连接”。
查看日志和释放磁盘空间
如果启动后第一条消息处理较慢,通常是本地模型预热造成的。可以查看最近日志:
tail -40 ~/Library/Logs/jev-jarvis.log日志包含分阶段耗时,但不包含消息正文,适合在反馈问题时提供给开发者。
本地判断模型缓存大约占用 7 GB,位置为:
~/.cache/huggingface/hub/models--Mapika--decider-2b删除后,下一次使用本地判断时会重新下载。Python 虚拟环境位于:
~/Library/Application Support/jev-jarvis/venv删除应用不会自动删除该环境,需要时可手动清理。
“填入”功能的限制
工具优先通过 macOS 辅助功能接口写入并读回确认。当某些微信版本不提供输入控件时,会尝试视觉兼容路径:复核窗口、输入区和标题,激活微信,点击输入区,输入文字并通过 OCR 核对。
使用视觉兼容路径时,工具可能移动鼠标,因此填入期间不要操作键盘、鼠标或切换聊天。它不会使用剪贴板或 Cmd+V,不会自动按发送键,换行和制表符会转换为空格。
如果检测到已有草稿,兼容路径会停止并提示手动使用“复制”;窗口、焦点或会话变化时也会停止。由于视觉边界和 OCR 可能误判,使用前应检查当前聊天和输入框内容。
已知限制
- 图片、表情包无法读取内容;引用回复会按普通文本处理;公众号卡片可能被当作消息分析。
- 微信全屏布局或微信版本改版可能导致识别失效,相关布局常量位于
src/perception.py顶部。 - 多窗口场景优先识别主窗口“微信”或“WeChat”。
- 只有明确确认方向的对方消息会触发回复流程,无法确认方向的消息会被跳过。
- 深色主题、多显示器以及不同微信版本下的视觉兼容填入路径仍需要更多验证。
隐私与使用提醒
项目定位是读取你自己设备和自己账号上的屏幕内容,不注入、不 hook、不解密微信数据库,也不自动发送消息。请仅在自己的设备上使用,并遵守微信软件许可协议。微信更新可能导致布局识别失效,遇到问题可以先查看日志,再通过项目 issue 反馈。
总结
jev-chat-jarvis 将屏幕 OCR、本地意图判断、风险分级、候选回复生成和原生悬浮面板组合在一起,适合希望快速理解微信消息、降低回复压力的 macOS 用户。安装时重点处理 Gatekeeper、屏幕录制和辅助功能权限;使用时再根据隐私、速度和成本选择本地模型、OpenAI 兼容服务或 Anthropic 兼容服务,并始终在发送前人工检查内容。
