跳到主要内容
AI教程

在 macOS 上用 jev-chat-jarvis 识别微信意图、评估风险并生成回复

本教程将介绍 jev-chat-jarvis 的工作原理、macOS 安装方式、权限与模型配置、日常使用及高级自定义方法,帮助你在不注入微信、不读取数据库和不自动发送消息的前提下辅助处理聊天。

在 macOS 上用 jev-chat-jarvis 识别微信意图、评估风险并生成回复

项目简介

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 显示“已损坏,无法打开,你应该将它移到废纸篓”,通常是浏览器下载的压缩包带有隔离属性。不要立即删除应用,可以在终端执行:

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 兼容服务,并始终在发送前人工检查内容。