在微信聊天页右上角留一个小按钮,点开才是候选回复卡片:读最近几条消息 → 调 LLM → 给 3 条风格不同的候选回复 → 点一下填入输入框。默认收起、不挡消息。本模块不会自动发送。
⚠️ 本模块会修改微信客户端行为,存在账号风控风险,建议先用小号。 它只读聊天页上的消息、只把候选回复填进输入框,不会自动发送,也不做任何上报。 详见 常见问题 与 隐私说明。
-
军师按钮 / 候选回复卡片 —— 聊天页右上角一个小按钮;点开才是卡片(风险判断 + 3 条策略不同的候选:稳妥 / 幽默 / 推进),点一下填入输入框,长按复制。敏感内容拦截和报错会自己摊开,不用你去找。
-
多套 skill —— 内置「原版狗头军师」「狗头军师·满血版」「程序员搭子」;也能粘一个 GitHub 上
SKILL.md的地址导入,导入时自动补 JSON 输出契约。skill 列表默认收起,标题上直接写着现在用的是哪个。 -
角色档案 —— 按微信名归档平时聊到的内容(同一内容 1 小时内只留一条),给每个人写「TA 是你什么人」和「平时的关系」;生成时会连同攒下的聊天记录一起拼进提示词,直接影响输出。两个角色其实是同一个人时,可以在角色详情里把另一个合并进来 —— 记录按时间合到一起,名字和档案以你点进去的那条为准。
-
「本人」+ 说话风格 skill —— 角色列表第一条永远是「本人」(改微信昵称也不会多出一栏)。打开开关后只采集你自己发出去的话,每天在你设定的时间用你填的接口提炼成一份说话风格档案,生成候选回复时按你的语气和口头禅来写。
-
玻璃拟态界面 —— 渐变背景由界面自己画出来(不再打包背景图);卡片是半透明的紫灰玻璃,带顶边高光与右下暗边,圆角 / 间距 / 字号统一成套;「玻璃强度」可调,也能换成你自己的图。面板背后另有真实背景的模糊 + 边缘折射(Android 13+)。
-
自检与排查 —— 实时探测(App 主动问一句、微信侧回执,运行状态页直接写「x 秒前回过话 · 页面=ChattingUI」,不再是过期的「曾经跑过」)、接口自检、敏感内容自检;抓取微信界面结构、查看「最近一次调用真正发出去的那一份」、导出诊断包,都在 设置 → 诊断 里。
-
接口自检 + 网络信息 —— 自检只测连通性与延迟(DNS 解析 / 裸 TCP 握手 / 一次完整往返分开报),不再拿模型回没回 JSON 当「接口不通」;同时列出本机内网 IP、本机公网出口及归属地、接口服务器的 IP 及归属地(取不到显示
null)。 -
设置分三层 —— 首页只放外观这类日常项;接口地址 / 微信内自动分析 / 备份迁移在「高级设置」里;诊断再往下一层。配一次就不动的东西不占首页。
-
备份 / 迁移 —— 设置页可把配置与角色档案导出成一个 json,换机或重装后导入。
-
生成模式:直通 / 模型分级 —— 默认「直通」(一套接口、一次调用)。切成「模型分级」后,一路只判意图与风险、另一路只写 3 条回复,两路并行跑完再合成同一张卡片(总等待时间 ≈ 单次调用);第二套接口留空就复用第一套(等于同一个模型拆两路提示词)。任一路挂了另一路照常显示 —— 风险那路挂了标「未评估」,不会出现「模型明明回了、卡片却是空的」。
-
会话白名单 —— 只让勾过的聊天工作:没加的一律不读内容、不记角色、不调接口。认不出会话名的会话按「没勾」处理(fail-closed)。不用手敲名字:点「拉取会话列表」→ 回微信首页 / 通讯录停两秒 → 回来勾选即可;白名单开着时,你打开过的会话也会自己进来。候选支持长按多选批量加入 / 移出 / 删除。
-
本地代理(API Key 不再交给微信进程) —— 打开后由 App 起一个只绑
127.0.0.1的前台服务,API Key 只留在 App 进程里;微信进程只把请求发给本机回环地址(随机 token 校验),由 App 转发到真正的接口。 -
图片文字识别(离线 OCR) —— 聊天里的图片会在本机把图上的字认出来,当那条消息的内容(对方发来的截图 / 长图文不用你复述)。不上传、不联网、不落盘,认不出自动回落成
[图片/表情/语音]占位;开关在「高级设置」,界面上会显示识别状态。代价是安装包变大(≈70MB)。 -
候选更好用 —— 三条里标出「★ 最推荐」和一句理由;每条右边一个 ✎(再短点 / 更正式 / 换个说法),只改你点的那一条;超过 60 字标「· 偏长」。
-
回答更稳 —— 可选「严格 JSON 输出」;模型没按契约回时自动补正重试一次;输出被
max_tokens截断时先抢救已经说完的那几条,而不是整条报错。 -
效果品质三档 —— 低内存机型自动降级玻璃效果(不模糊 / 不折射,只留染色),Android 13 以下最多中级,也可以手动钉死。
-
诊断包导出 —— 「高级设置 → 备份」可一键导出
.zip(环境 / 配置 / 角色条数 / 诊断 / 最近一次调用 / 用量),含聊天内容、不含 API Key。
- Android 12 及以上(API 31+)。玻璃面板背后的真实背景模糊用的是
Modifier.blur(底层RenderEffect),这个能力从 Android 12 才有。 - 需要框架提供 libxposed API 102:LSPosed / Vector,或免 root 的 NPatch 都可以。本模块使用 libxposed Modern API(
io.github.libxposed:api:102.0.0,minApiVersion=102);框架版本不够时模块会显示为不兼容、不会加载。 - 不支持原版 LSPatch:它 2023-12 已停止维护,只认 legacy 模块,请改用它的继任者 NPatch。
- 微信 8.0.78 上验证通过。
- 装 APK → LSPosed「模块」里启用「TalkTact」→ 作用域勾选微信 → 强杀微信重开。
- 打开本应用:「设置」填接口地址(OpenAI 兼容,写到
/v1)、API Key、模型。 - 回首页点「接口自检」——真发一次最小请求,确认地址 / Key / 模型都对。
- 到微信里打开一个聊天,右上角会出现「军师」按钮 —— 点一下展开候选回复卡片。
⚠️ 从 0.8.7 及更早版本升级到 0.8.8+,请先卸载旧版再安装。 这一版轮换了发布签名 (旧密钥曾连同口令提交在公开仓库里,已作废),而 Android 不允许覆盖安装不同签名的包。 卸载会删掉 App 私有目录里的配置 —— 请先在「设置 → 备份 / 迁移」导出备份,装完再导入。
改配置不需要重启微信:配置改动会由框架实时推送到微信进程,模块每次识别前都读到最新的一份。 只有「作用域」这类 LSPosed 层面的改动才需要强杀微信。
| 微信版本 | 状态 |
|---|---|
| 8.0.78 | ✅ 已实机验证(本模块的基准版本) |
| 其它 8.0.x |
识别逻辑只依赖界面结构(下半屏有输入框 = 聊天页、有列表 = 消息列表),不认类名,所以小版本升级通常没事。 读不到消息时,长按卡片标题拿一份诊断发出来即可定位。
一句话:只读你此刻看得见的那几行聊天,发到你自己填的接口;不自动发送、不上报、不读微信数据库。
- 聊天记录、角色档案与 skill 提示词会发到你在设置里填的那个接口(OpenAI 兼容),请自行确认它可信。
- API Key 默认明文存在本应用私有目录 —— 注入微信进程的代码要跨进程读它,而 Keystore 密钥按 UID 隔离,加密了反而读不到。打开「高级设置 → 本地代理」后,Key 只留在 App 进程:微信进程只与本机回环地址(
127.0.0.1,随机 token 校验)通信,由 App 转发到接口。 - 图片文字识别在本机进行:图片只在微信进程与 App 进程之间经本地回环走一趟,用离线模型认字,不上传、不联网、不落盘。白名单外的会话目前也会认图(图不外发),只是分析仍被白名单挡着。
- 归属地那一行的省份是模块唯一主动访问的第三方服务;不做任何统计/崩溃上报/埋点。
完整版(读什么、发到哪、存哪、怎么删、明确不做的事):PRIVACY.md
- 只对单聊可靠;群聊会尽量带出昵称,但微信的群聊行结构在版本间变化较大。
- 依赖微信当前的消息列表控件类型,微信改了就得跟着改。
- 安装包较大(≈70MB):内置了 ML Kit 中文离线识别模型与原生库(这也是「识图不联网」的代价)。
- 「角色」页的记录是部分历史:模块只在聊天页可见时读得到屏幕上的那几行,所以你不在场时发生的对话不会被记下来。
- 常见问题(会不会封号 / 要不要 root / 读不到消息怎么办):FAQ.md
- 隐私与数据边界:PRIVACY.md
- 问题反馈:https://github.com/shibry88-netizen/TalkTact/issues