微信里那句「在吗?」到底着不着急、该用什么姿态回?
点一下,让 Jev 判一次 —— 只弹 3 条提示,不生成回复、不替你发消息。
真实输出(同一个聊天窗口,判读耗时 0.97 秒)。情绪是一次判定的完整概率分布的前几名,不是判了很多次。
想让它自己动?设置里开「自动判读」,检测到对方新消息就判(带防抖,同一条不会重复判)。
设置里一行一个,用会话标题或昵称匹配,命中最长的别名生效:
妈妈,妈,老妈=家人/女/生日三月 张伟,伟哥,老张=同事/男/市场部
备注会作为背景一起送进判定 —— 情侣说的和同事说的,Jev 给的概率分布天然不同。
思路的启发来源是 jev-chat/jev-chat-jarvis —— 它证明了「无障碍读屏 + Jev 判定」在安卓上跑得通,在此致谢。但本项目是独立实现:代码、文案、命名、界面、图标全部自己写,一行都没抄,产品定位也不一样。
| 维度 | Jev 聊天助手 | 旁观者 |
|---|---|---|
| 输出 | 悬浮窗 + 3 条候选回复(要第二个文本模型) | 只有 3 条 Toast,不生成任何文案 |
| 采集 | 无障碍树 + 截图 ML Kit OCR(APK 27 MB) | 只读无障碍树,不截屏 |
| 依赖 | Kotlin + AndroidX + ML Kit | 零第三方依赖(手写 JSON + HttpURLConnection + 原生 View)→ 861 KB |
| 关系 | 联系人表 + 知识库 + 历史记录 | 联系人表(别名 → 关系/性别/备注),无知识库 |
| 场景 | 微信/QQ/X/飞书,含群聊 | 只做微信单聊 |
姊妹项目:JevIntent —— 同一个判定口径的 Xposed 插件版(能长按任意消息判读,代价是要 FkWeChat/LSPosed)。两套实现完全独立。
因为只读屏幕上已经显示出来的文字。长消息被折叠、图片/语音/文件都读不到。想要无死角判读请看插件版 JevIntent。
默认中文。我们跑了 90 次真实调用做 A/B:英文题目的客观分并不更高(0.938 vs 0.945),只是置信度更高(0.905 vs 0.808),代价是标签与中文有 35% 不一致。想自己复现就把设置里的语言档换来换去。
不修改微信、不注入、不发送、不读取非当前窗口的内容,只做系统级读屏(和读屏软件同一套机制)。风险远低于 hook 类插件,但任何第三方工具都不存在「官方保证」。
省电策略杀了无障碍服务。去系统设置里给「旁观者」加自启动/后台白名单,并把电池优化设为「不限制」。
Jev 的密钥在 console.typesafe.ai 免费注册领取(Google 或邮箱验证码登录,不用等审批)。用量与计费以官方为准,本项目与之无隶属关系。
git clone https://github.com/Nisaka520/JevBystander.git cd JevBystander ./gradlew assembleDebug # app/build/outputs/apk/debug/app-debug.apk ./gradlew testDebugUnitTest # 35 个单测,不用真机
纯逻辑层(JSON/题目/解析/关系匹配/抓屏组装)不依赖 Android SDK,所以整套判定逻辑在电脑上就能测 —— 还带一个真接口端到端冒烟测试。