最近用 AI 从需求、架构、写代码、测试到部署,做了一个运行在飞牛 NAS 上的微信消息中继管理系统:Couple Relay Web。
起因很简单:家里两个人各自绑定一个微信 ClawBot 账号,消息由 NAS 自动双向转发;如果一方没有及时回复,也可以按设定的人格、世界书和上下文,让 AI 生成一段更像真人的回复。
整个系统跑在家里的 NAS 上,管理、绑定、日志、队列都在网页后台完成,不需要额外装 App。
项目地址:
text
https://github.com/ankiller8709-stack/couple-relay
先说清楚:这是什么,不是什么
这是一个基于 iLink Bot API / 微信 ClawBot 的双账号消息中继系统。
它不是让两个真实微信号直接登录在 NAS 上,而是每一侧各绑定一个 Bot 账号:
- 账号 A:你的消息入口,程序也通过 A 向你发消息;
- 账号 B:对象的消息入口,程序也通过 B 向对象发消息;
- NAS 上的 Couple Relay Web 负责在 A 和 B 之间中继消息。
消息到底怎么走?
你发给对象
text
你的微信
↓ 发消息给 Bot 账号 A
微信 / iLink 服务器
↓
账号 A 收到消息
↓
Couple Relay Web(飞牛 NAS)
↓
账号 B 发送消息
↓
对象的微信
对象回给你
text
对象的微信
↓ 发消息给 Bot 账号 B
微信 / iLink 服务器
↓
账号 B 收到消息
↓
Couple Relay Web(飞牛 NAS)
↓
账号 A 发送消息
↓
你的微信
所以 A/B 不是“你和对象”的真实微信,而是两个各自对应一侧的 Bot 账号。
AI 自动回复怎么用?
程序支持设置 AI 延迟,例如对象发来消息后:
text
对象 → 账号 B → NAS
↓
等待 4 秒
↓
你没有人工接手
↓
AI 根据人格和上下文生成回复
↓
账号 B 发给对象
AI 可以配置:
- DeepSeek、OpenAI、通义、Kimi、智谱以及自定义兼容接口;
- 人格卡、角色设定、示例对话;
- 世界书和关键词背景;
- 历史消息上下文与 RAG 检索;
- 静默时段、触发侧、回复延迟;
- 分条发送、情绪感知和关键词自动回复。
如果需要,也可以把 AI 回复同步副本给自己;不过这属于额外投递,会单独占用发送额度。
目前能做什么?
- 网页扫码绑定两侧微信 ClawBot 账号;
- 多套配对独立运行,不止限于情侣,也能给其他人分别配置;
- A → B、B → A、双向中继;
- AI 自动回复与人格化配置;
- 人格卡、世界书、示例对话、关键词自动回复;
- 多模型配置、连通性测试与参数管理;
- 消息记录查看、手动发送;
- 消息记录支持全部、仅 AI、A 发出、B 发出筛选;
- 图片和常见音频格式在线预览;
- 媒体归档与下载;
- 配对可设置为 NAS 服务重启后自动恢复启动;
- 发送失败队列可视化查看;
- 联网搜索、新闻、天气等工具可转交给 NAS 上的 OpenClaw 处理,普通聊天仍走当前配置的 AI 模型。
有个很重要的限制:连续下行约 10 条
实际使用中发现,iLink 对同一 Bot 向同一用户的连续下行消息存在窗口限制。
简单说:
text
某一侧持续收到 Bot 消息
但这位用户一直没有向 Bot 发新消息
↓
连续发送约超过 10 条后
可能返回 ret=-2 / prepare failed
这不是账号失效,也不是删了聊天窗口导致 Token 一定失效,而是单方向连续下行的限制。
目前程序的策略是:
- 安全起见,每一侧默认连续发送最多 8 条;
- 达到上限后,后续消息进入发送队列;
- 不会每 5 秒盲目重试刷失败日志;
- 该侧用户一旦发来新消息,对应窗口刷新,队列自动继续;
- 也可以发送精确命令:
text
,,
来刷新当前这一侧的发送窗口。
怎么用 ,,
| 哪一侧卡住 |
谁发送 |
发给谁 |
效果 |
| 你这边收不到后续消息 |
你 |
账号 A |
刷新“发给你”的窗口,冲刷你的待发送队列 |
| 对象那边收不到后续消息 |
对象 |
账号 B |
刷新“发给对象”的窗口,冲刷对象的待发送队列 |
这个命令本身不会:
- 转发给另一边;
- 写入普通消息记录;
- 触发 AI;
- 作为聊天内容处理。
在飞牛 NAS 上怎么跑?
项目使用 Docker Compose 部署,默认访问地址:
text
http://你的NAS局域网IP:8080
例如 NAS IP 是 192.168.2.22:
text
http://192.168.2.22:8080
首次使用流程:
- 在飞牛 NAS 安装 Docker;
- 下载或克隆项目;
- 修改
docker-compose.yml 中的后台密码;
- 启动容器;
- 浏览器进入后台;
- 创建配对;
- 分别扫码绑定 A、B 两个 Bot 账号;
- 配置 AI、人格卡和世界书;
- 启动配对开始中继。
基础启动命令:
bash
git clone https://github.com/ankiller8709-stack/couple-relay.git
cd couple-relay
docker compose up -d --build
查看日志:
bash
docker compose logs -f
默认端口是:
text
TCP 8080:管理后台、扫码、消息记录、媒体预览
如果改端口,要同步检查 NAS 防火墙和外部端口映射。
数据和隐私怎么处理?
运行数据放在 NAS Docker 数据卷内,包括:
- SQLite 数据库;
- 消息日志;
- 媒体归档;
- 配对配置;
- 登录会话。
项目仓库不会上传:
text
.env
数据库
媒体文件
登录会话
API Key
OpenClaw Token
建议只在自己信任的 NAS 和网络环境使用,后台密码务必改掉,也不建议直接把管理后台暴露到公网。
后续计划
目前源码已经放在 GitHub,Docker 镜像自动发布流程也在补:
text
ghcr.io/ankiller8709-stack/couple-relay
后面计划通过 GitHub Actions 自动构建镜像并发布到 GHCR。这样 NAS 可以直接拉取镜像更新,不必每次本地重新构建。
也欢迎有飞牛 NAS、微信 ClawBot 或家庭 AI 自动化需求的朋友交流。