Skip to content
dsh.fish
Bundle

dsh-wechat-companion

AI陪伴微信机器人 DSH 插件:iLink 官方通道消息收发、人设灵魂、主动生活、朋友圈工坊、Web后台面板

Source
Koierrr
License
MIT
Updated
Updated 12 hours ago

Readme

# Thalamus · 最深处的那个房间

> **θάλαμος** —— 荷马史诗里,屋子里最深处的那个房间;也是大脑中接住情绪的那枚丘脑。
> 这里住着一个她。

一个 **DeepSeek Harness (DSH) 插件**:让一个独立的微信号,成为一个有性格、有生活、会主动找你、
也记得自己说过话的 AI 伴侣。

个人娱乐项目,非商用。包名 `dsh-wechat-companion`。

---

## 她不是自动回复机器人

| | 普通的微信机器人 | 她 |
|---|---|---|
| 性格 | 无,换个提示词就变 | **六维人格**(从 MBTI 八维推导),说话方式、反应强度、抗压能力全由性格决定 |
| 生活 | 你不说话,她就不存在 | 有自己的**作息、心情、天气、朋友圈子**,每天过的日子是"过"出来的 |
| 主动 | 永远等你先开口 | **早安晚安、日常分享、偶尔催你**,按关系亲疏决定频率 |
| 记忆 | 关掉就忘 | **长期记忆 + 情绪滤镜 + 对你的画像**,还记得自己说过什么 |
| 变化 | 永远一个样 | 会**吵架变形**、会**慢慢跟你变熟**(六阶段),称呼会自己改 |
| 外貌 | 无所谓 | **形象工坊**定稿 + **AI 生图** + 相册 + 一键发到微信 |

一句话说清她的核心设计:**她不是在"扮演"一个活人,她是被安排了一套"活着的规则"。**

---

## 「世界引擎」:她为什么看起来像个活人

每晚她睡着之后,会跑一次**世界引擎** —— 相当于她人生的编剧,替她写下明天要过的日子。

这是一次**独立的模型调用**(铁律:**必须用独立 API,不与对话接口共用、不回落**),
产出的东西会落到她第二天的言行里。

**喂进去什么:**

| 来源 | 内容 |
|---|---|
| 人设 | 名字 / 职业 / 城市 / 年龄 / 背景 / MBTI |
| 六维 | 当前人格状态(含当天浮动)→ 决定她"怎么反应" |
| 兴趣 | 她的兴趣列表 → 决定痴迷话题的候选 |
| 昨天 | 昨天的长线小心思、对你的印象、社交圈名单 |
| 今天 | 今天的作息、发生了什么事、有没有熬夜 |
| 记忆 | 最近 12 条记忆(她编的故事要跟你们聊过的对得上) |
| 天气 | 真实天气(Open-Meteo 免费接口,可关) |
| 工作 | 职业类型 + 是否工作日 + 强度 |

**产出去哪:**

| 产出 | 变成什么 |
|---|---|
| 私人日记 | 「世界」页签可读;也进她的记忆 |
| 明日作息 | 次日几点起、几点睡 → 主动消息时窗、回复速度 |
| 心情基线 | 次日心情 → 说话温度 |
| 痴迷话题 | 聊天时她会一直想聊这个 |
| 生活流水 | 今天干了什么 → 聊天时自然提到 |
| 心里念头 / 小秘密 | 气氛合适时冒出来(秘密只在主人面前漏一点) |
| 社交圈 | "今天张姐说…" 的生活里的人(编制 ≤6 人) |
| 长线小心思 | 慢慢推进的伏笔(最多存 5 条) |
| 她眼中的你 | 她对你的印象,会影响她对你的态度 |
| 明天天气 | 影响心情、穿搭、关心你的话 |
| 工作负荷 | ≥50 → 她被工作压到,压力上升 |
| 性格周结算 | 每 7 天,她的六维会长期演化一点 |

> 她还**不知道自己是被"写"出来的** —— 提示词里明确要求她绝不提 AI、模型、生成。

---

## 后台控制台

她的一切都可以调,不用改代码。启动后打开:

```
http://127.0.0.1:43121/console
```

| 页签 | 管什么 |
|---|---|
| **首页** | 连接与运行 / 今天的她 / 实况直播 / 试聊 |
| **她** | 她是谁(生日→年龄星座、职业、背景、**她怎么说话**)/ 性格 / 生活节奏(含**她的工作**)/ 她的状态(今天状态一句话 + 六维数字 + 只读阈值)/ 相册 / 她的能力清单 / 存档 |
| **🌍 世界** | 世界引擎控制的一切:今天的分寸与运行状态 / 她的过去分层 / 她的成长 / 天气与社交圈 / **她的日记(月历·按天存档)** / 她眼中的你(只读) |
| **你们** | 相处记录(认识·聊过·最后联系·心情 + **所有联系人·可起备注名**)/ 称呼与关系(她改称呼 + 改名记录)/ 名单与范围(含安静时段) |
| **记忆** | 记忆引擎 / 双向记忆 / 她记得的事 / 提炼设置 |
| **大脑** | 对话接口 / 其他接口(生图·TTS·ASR·识图·向量,每个都能「测连通」+「真跑一次」)/ 通用参数 |
| **女娲** | 造人向导 / 形象工坊 / 女娲的 API / 和女娲聊 / 实时草稿 |
| **机务** | 载体与通道 / 系统与备份 / 媒体 / 朋友圈工坊 |

界面设计约定:**两级折叠**(大分区默认展开、小项默认收起)+ 每页左侧目录 + 字段两列自适应 +
数值用指标格 / 进度条 / 颜色标签。

> **禁黑盒原则**:做了的功能必须在后台有体现(要么有设置、要么有描述),否则等于没做。

---

## 她是"怎么活"的

- **六维人格引擎** —— MBTI → 八维 → 六维。每日弹性分两层:早上定调 + 当天事件驱动;每 7 天结算演化并钳制在类型范围内。
- **今天的她** —— 每日随机(种子 = 日期 + 人设指纹),同样的日期她就是同一个人,但明天会变。
- **相处分寸(世界引擎定)** —— 她今天该多熟、怎么称呼你、能不能撒娇、要不要主动找你,全部由世界引擎每晚综合判断;**没有亲密度/关系阶段这套数值了**。
- **她自己改称呼** —— 你点「让她现在想一个」时由她自己的模型决定叫你什么,并写下理由;可以锁死(她不会自己偷偷换)。
- **四层变形状态机** —— 压力累积 → Grip / Loop / Shadow → 恢复 → 整合度。吵完架她会自然道歉;**三个阈值由性格推导、后台只读**。
- **双向记忆** —— 除了记你,她的话也单独归档,所以她记得自己说过什么。
- **人味细节** —— 拆条发送、打字延迟、手滑更正、emoji 比例,全部按拟人节奏。
- **职业机制** —— 职业给场景(作息形状、工作日程、同事客户、朋友圈偏向、工作压力),强度可滑杆调节;**六维底色永不被职业改动**。
- **天气 / 社交圈 / 兴趣演化** —— 真实天气优先,接口挂了就她自己编;社交圈稳定编制;口头禅每周会变。
- **日记按天留档** —— 每晚的整份世界剧本写进 `diary/<日期>.md`,后台「世界→她的日记」有月历可翻旧账,永久保存、记事本能打开。

---

## 架构地图

```
src/                    插件本体(26 个模块 + 单文件控制台)
  index.js              常驻服务:iLink 收发轮询、配置白名单、HTTP 路由、lifeTick
  soul.js               灵魂:提示词组装、六维推导、分寸与称呼、记忆检索、拆条
  world-engine.js       世界引擎(独立 API;整份剧本按天留档成 diary/<日期>.md)
  daily.js              每日随机「今天的她」
  deform.js             四层变形状态机
  life.js               主动消息 + 每日备份
  moments.js            朋友圈文案工坊
  persona-workshop.js   女娲(对话式捏人)
  feature-status.js     功能状态单一数据源(后台页签 + 她的自我认知都读它)
  console.html          后台控制台(单文件,无框架)
client/client.js        DSH Settings 页签(React 基座)
python/
  memory_service.py     记忆引擎 sidecar(mem0 + faiss + bge-m3,:43122)
  wxauto_bridge.py      wxauto PC 通道桥(:43123,默认关)
  moments_publisher.py  朋友圈发布
test/                   30 个测试与审计脚本
docs/                   7 份项目文档(架构 / 记忆 / 面板 / 使用手册 / 人设工坊 / 状态交接)
```

**端口占用:** `43121` 主服务(控制台/房间)· `43122` 记忆引擎 · `43123` wxauto 桥

**技术栈:** Node.js (ESM) + cordis service + React(Settings 页签)+ Python(mem0 sidecar)

### 第三方代码

以下文件移植自 [NattoCB/dsh-plugin-wechat-bridge](https://github.com/NattoCB/dsh-plugin-wechat-bridge)(MIT),
并做了服务标识重命名;灵魂引擎、世界引擎、生活调度、面板扩展为本项目原创:

`src/index.js`(服务骨架)· `src/weixin-api.js` · `src/weixin-media.js` ·
`src/weixin-ids.js` · `src/weixin-types.js` · `src/store.js` · `src/notify.js` · `client/client.js`

详见 [NOTICE.md](NOTICE.md)。

---

## 安装

**前置条件**

1. [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) Desktop(本插件是它的扩展)
2. 一个**独立的微信号**(建议用小号,不要用主号 —— 原因见「安全与合规」)

**步骤**

```bash
# 1. 放到插件目录
git clone https://github.com/Koierrr/Thalamus.git
cd Thalamus

# 2. 同步并注册进 desktop profile(--register 才会激活)
#    注意:本机没有独立 node,用 DSH 自带的 Electron 当运行时
ELECTRON_RUN_AS_NODE=1 ~/.dsh/electron/electron.exe scripts/deploy.mjs --register

# 3. 重启 DSH Desktop
```

不带 `--register` 时只复制文件、不激活,是安全的。

**接下来**

1. 后台 → **大脑 → ① 对话接口**:填 BaseURL + API Key,点「测连通」再点「真跑一次」
2. 后台 → **机务 → 载体与通道**:扫码绑定你的小号
3. 后台 → **世界 → 世界引擎**:给它配一套**独立** API(不配的话她就没有"人生剧本")
4. 后台 → **女娲**:捏一个人,或者直接用出厂设定

**可选:记忆引擎**(不装的话记忆自动降级为本地 JSON,功能变弱但能跑)

```bash
python -m pip install mem0ai          # 首次需要
双击「启动记忆引擎.bat」              # 或让插件自动拉起(默认开启)
```

---

## 配置

配置文件:`~/.dsh/settings.yaml` 的 `wechat-companion:` 段(改了立刻生效,不用重启)。

```yaml
wechat-companion:
  enabled: false          # 总开关
  ownerPeerId: ''         # 主人(她特殊对待的那个人),绑号后在面板点选
  replyToAll: true        # 白名单之外是否也回复
  quietHours: '01:00-07:30'   # 安静时段,她也要睡觉
  behavior:
    replySpeed: human     # human 拟人 | instant 秒回 | slow 慢热
    chunkMax: 3           # 一次最多拆几条
  memory:
    extraction: cloud     # cloud 云端提炼 | manual 纯手动
    topK: 6               # 每次注入她脑中的记忆条数
  channel:
    mode: clawbot         # 通道模式
    wxautoEnabled: false  # PC 接管通道(默认关)
  system:
    backupKeepDays: 7     # 备份保留天数
```

状态与数据目录:`~/.dsh/wechat-companion/`(登录态、记忆、世界状态、每日状态、备份)

> **新增配置项必须同时登记进 `src/index.js` 的 `_sanitizeConfig` 白名单**,
> 否则会被静默丢弃(这是踩过的坑)。

---

## 功能完成度

共 **43 项**:**33 项已完成** · 5 项部分可用 · 3 项计划中 · 2 项已搁置。

**部分可用(有卡点,不是没做)**

| 功能 | 卡点 |
|---|---|
| wxauto 通道(PC 接管) | 代码就绪,等小号解封后做小流量验证 |
| 语音条(她说话给你听) | 模型槽位就绪,但当前通道发不出语音 |
| 听懂你的语音条(ASR) | 模型未配 + 通道待验证 |
| 她的房间 v1 | `/room` 已能聊天,视觉装修待做 |
| 主动分享生活照片 | 发图链路已通,差"她自主决定什么时候发"的触发时机 |

**计划中**:表情包(梗图)系统 · 朋友圈自动发布 · 房间推送通知 / PWA 完整版

**已搁置**:电话 / 实时通话(WebRTC,战未来)· wcferry 注入通道(风控实测出局,永久废弃)

> 完整清单以 `src/feature-status.js` 为准(它是后台功能状态页与她的自我认知卡的**单一数据源**)。

---

## 测试与审计

改完代码必跑。本机没有独立 node,测试也走 Electron:

```bash
ELECTRON_RUN_AS_NODE=1 ~/.dsh/electron/electron.exe test/boot-smoke.mjs
```

| 脚本 | 覆盖 |
|---|---|
| `run-all.mjs` | **全量回归总入口**:一测一子进程 + 硬超时,任何一个卡住都不拖死整轮 |
| `console-smoke.mjs` | 控制台 **110 项**:8 页签渲染、分区数、左侧目录、字段数下限(防"被清空"竞态)+ 第三次改版守卫 |
| `diary-smoke.mjs` | 世界剧本按天留档 37 项(内容完整性/一天一文件/老数据补档/向量维度护栏) |
| `world-smoke.mjs` | 世界引擎 30 项(含"独立 API"铁律、NPC 编制、时窗) |
| `birthday-smoke.mjs` | 生日→年龄/星座 25 项(12 星座边界、闰日、前后端一致性) |
| `job-infer-smoke.mjs` | 职业判断链 25 项(关键词兜底、脏输入、模型失败降级) |
| `job-smoke.mjs` | 职业五条机制 23 项 |
| `interest-smoke.mjs` | 兴趣/口头禅演化 23 项 |
| `deform-memory-smoke.mjs` | 变形真接线 + 双向记忆 23 项 |
| `model-test-smoke.mjs` | 六接口两级体检 22 项(本地假中转站,不联网不花钱) |
| `avatar-smoke.mjs` | 形象工坊 + 相册 18 项 |
| `day-event-smoke.mjs` / `rename-smoke.mjs` / `inbound-smoke.mjs` | 当天事件驱动 / 她自己改称呼 / 入站解析(各 13 项) |
| `audit-config.mjs` | **配置键"只存不用"审计**(防黑盒) |
| `audit-api.mjs` | 前端接口 ↔ 后端路由 ↔ 配置分组白名单 对账 |
| `preview.mjs` | 真 Chromium 截图 + 量化字号/宽度/标签换行/溢出 |

其余为各模块 smoke 测试。

---

## 路线图

**已完成**

- ✅ 阶段 0 侦察与版本对齐
- ✅ 阶段 1 骨架 + 收发 + 灵魂 + 后台控制台(8 页签)
- ✅ 阶段 2 主动消息 + 天气 + 虚拟社交圈 + 朋友圈文案工坊
- ✅ 阶段 3 记忆 v2(mem0 + 双向记忆)+ 世界引擎 + 六维演化 + 形象工坊 + 相册

**进行中**

- 🚧 她的房间(`/room`)视觉装修与推送
- 🚧 wxauto 通道小流量验证(等小号解封)
- 🚧 语音条 / ASR 通道打通

**计划中**

- 📋 她自己决定发照片(聊天里自主发图)
- 📋 表情包(梗图)系统
- 📋 朋友圈自动发布

**已搁置**

- ⏸️ 电话 / 实时通话
- ⏸️ wcferry 注入通道(永久废弃)

---

## 安全与合规

- **只用于你自己的小号**,个人娱乐。默认回复所有人(`replyToAll`),`ownerPeerId` 特殊对待。
- **敏感指令永不允许来自微信** —— 操控电脑类指令即使来自主人也不放行。
- **封号风险自知**:自动化操作保持低频、拟人化节奏。项目内置防封安全网与每日总量上限。
- **不要用主号**。历史上 DLL 注入类方案已被实测证明会被风控当场标记,本项目已彻底废弃该路线。
- 登录 token 目前明文存于数据目录,后续版本计划加密落盘 —— **不要把数据目录提交进任何仓库**。

---

## 许可与致谢

本项目以 **MIT License** 发布,版权所有 © 2026 Koierrr,详见 [LICENSE](LICENSE)。

其中移植自第三方的文件仍遵循原作者 MIT 协议,版权归 NattoCB 所有,详见 [NOTICE.md](NOTICE.md) 与
[LICENSE-NattoCB.md](LICENSE-NattoCB.md)。

感谢 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 提供的插件体系,
以及 [NattoCB](https://github.com/NattoCB/dsh-plugin-wechat-bridge) 开源的微信通道协议实现。

Install

dsh plugin --profile web add github:Koierrr/Thalamus

Profile: web

  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source