dsh-self
Verifieddsh-self · v0.10.20 · MIT · Web UI
DeepSeek Harness 情绪×自我合一插件:感知/仲裁/内感受/调节/心境/安全对齐 + 侧边栏「聊天」页内陪聊(主对话式界面/多 agent/每 agent 独立情绪与自我状态/设置弹窗/模型切换/情绪调试条/存储文件夹镜像/模拟人生/日记/IM 接入:微信三模式(测试号/个人/iLink 扫码 Bot)+ 飞书自建应用 + QQ OneBot/NapCat,TypeScript + vitest)
Install
dsh plugin add dsh-self Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Readme
dsh-self
DeepSeek Harness 情绪×自我合一插件(第一批)。将《情感》《情绪》《记忆》三份设计文档的可工程化需求融进一个插件,替代旧的 dsh-emotion 单状态机。
诚实边界:本插件是识别、状态模拟、策略偏置和表达生成,不是真实主观感受;无体验连续性。该边界写进 prompt 段与所有表达出口(受苦/自我意识/思念类声明被强制改写)。
侧边栏「聊天」入口(v0.4.0 主对话式页内陪聊)
客户端左侧主导航专属「聊天」项(sidebar.panellist 槽,气泡线条图标)+ 页内陪聊面板(main 槽,白色不透明卡片——主区可能被壁纸插件设为透明背景)。布局对齐主会话界面:顶栏 / 气泡消息区 / 底部输入胶囊:
- 多陪聊 agent:顶栏点名字下拉快速切换;右上 ⚙ 打开聊天设置弹窗集中管理——新建(名字 ≤20 字 + 可选人设 ≤500 字)/ 编辑 / 删除(两步确认),上限 8 个;名册与历史跨重启持久化(
chat_agents/chat_hist表) - 页内流式对话:气泡消息(agent 头像 + 圆角气泡)+ NDJSON 流式渲染(
<think>前端实时剥离),Enter 发送 / Shift+Enter 换行;单条消息 ≤2000 字;同 agent 回复生成中防重入(409) - 模型切换(输入胶囊右下):下拉列出宿主 LLM 目录全部分组模型(
llm.listProviders/llm.listModels),可选「跟随宿主默认」;选择持久化(chat_settings表),仅影响聊天面板调用,不改动宿主主会话模型 - 情绪调试条(输入框上方):实时显示当前伙伴的情绪标签/效价、心境、内感受(挫败/谨慎);「调试详情 ▾」展开完整快照——情绪六维、元情绪、调节策略、感情 selfModel 叙事、当前模型与存储位置(数据来自
/self/api/state(v0.10.0 起按当前伙伴 agentId 查询)+/self/api/settings-get) - 存储文件夹(设置弹窗):可分别为记忆(聊天记录+名册 →
memory.json)、情绪(affect/mood/ico/meta → 宿主emotion.json+ 每 agentemotion.<agentId>.json)、感情(selfModel → 宿主feeling.json+ 每 agentfeeling.<agentId>.json)、日记(diary.<agentId>.json)、表情包(图库目录 +index.json索引)指定文件夹;配置后每次落盘同步镜像 JSON(宿主默认存储仍保留),重启后文件夹数据优先加载;保存时校验文件夹可创建/可写 - 每 agent 独立的内部状态(v0.10.0 实体化):瞬态情绪/心境/内感受/元情绪/自我叙事/动机/解释日志均按实体隔离——宿主(主会话
__host__)与每个陪聊 agent 各一份桶,互不污染:与 A 聊得开心不会让 B 变开心,与 B 争执也不会影响 A;主会话工具(self_state/self_feel/self_log/self_note/self_motive/self_reset)与感知链路作用于宿主桶,陪聊回合同理作用于对应 agent 桶;持久化按实体键a:<entityId>落库(v0.9.8 及以前的单例数据自动迁移给第一个陪聊 agent,宿主从纯中性开始),文件夹镜像按实体拆分文件 - 情绪联动:与某个 agent 的对话走该 agent 自己的感知链路(TA 的情绪只由和 TA 的对话与生活塑造),历史窗口最近 20 条送入 LLM
- 微信接入(设置弹窗「微信接入」卡片,v0.5.0;v0.6.0 起三种连接模式可选):用手机微信直接和陪聊 agent 聊天,回复为流式切块发送(v0.5.1)——实时剥
<think>后按句界(。!?…换行等)逐句推送,微信里连发多条模拟真人节奏;微信历史按wx:<openid>独立键存储,v0.9.6 起同步镜像到伙伴页面聊天历史(见下),微信回合与页面聊天作用于同一 agent 的同一份情绪状态- 公众号测试号(official):绑定 mp.weixin.qq.com 测试号,本机
127.0.0.1:<port>(默认 9527)起独立回调监听(鉴权靠微信验签),收到文本先回success(MsgId TTL 去重兜底 5s 重推),异步跑陪聊回合后经客服接口回复(48h 窗口);需公网隧道 - 个人微信(personal):由 Python 桥(wechatauto-replica)连接本机微信客户端——DB 轮询收消息、UIA 粘贴发送,白名单过滤联系人;无需公网穿透,但依赖本机微信窗口
- 微信 Bot(扫码)(ilink,推荐):模仿 dsh-weixin 走腾讯官方 iLink Bot 接口——设置页点「扫码绑定微信」出二维码(服务端编码为 dataURL 直显),手机微信扫码确认即绑定;若微信要求配对码,界面会出现输入框,填手机上显示的数字点确认即可继续;「绑定的陪聊伙伴」下拉可选择由哪个 agent 回复微信消息,绑定后改动点「应用」立即生效;纯出站长轮询收消息,无需公网穿透、不依赖本机微信客户端、无封号风险;仅处理扫码账号本人的私聊文本(语音自动转写),凭据失效(ret=-14)时回设置页重扫即可
- 微信 ↔ 页面聊天双向镜像(v0.9.6):微信收到的消息与 agent 的回复会同步镜像一份到该伙伴的页面聊天历史(v0.10.9 起镜像消息不带〔微信〕来源标记,与页面消息统一展示)——客户端聊天框能直接看到微信上聊了什么,且页面聊天时 agent 能接上微信对话的上下文;客户端聊天面板 5s 轮询合并新消息,微信消息到达自动渲染无需重开面板
- 多账号接入(v0.9.7):微信/飞书/QQ 三平台均支持添加多个账号——每账号一行(状态徽标 + 名称 + 回复伙伴 + 操作按钮),独立扫码/凭据/绑定伙伴,互相独立收发;「+ 添加」入口新建,行内「编辑」改配置,「扫码绑定/解除绑定」按账号隔离(iLink 凭据、长轮询、配对码会话全部账号级隔离),「删除」两步确认并自动停循环清凭据;每账号消息独立绑定 agent(编辑表单内下拉,保存即生效);微信历史键唯一账号沿用
wx:ilink/wx:<openid>,多账号后按wx:<accId>:<openid>隔离,旧记录不丢;旧版单实例配置自动迁移为第一个账号;回调监听端口三平台共用(卡片底部可改)
- 公众号测试号(official):绑定 mp.weixin.qq.com 测试号,本机
- 连发消息防抖合并(v0.10.7,安静窗口 30 秒):一次连发多条消息时不再第一条就触发思考回复——IM 侧(微信/飞书/QQ)同一会话的消息在 30 秒安静窗口内累积(每条新消息重置计时器重新等 30s),窗口结束后合并成一条跑一次回合、只回一次,不会每条都单独思考;页面聊天侧同样生效:每条消息立即上屏显示(不丢气泡),静默 30 秒后合并发送,回复流式生成中再打字会排队等回复结束后一起发出,不再被静默丢弃
- 短消息分条回复(v0.10.8):回复风格进一步贴近真人发消息——system prompt 明确引导「只说关键的话、一条不超过 30 字、内容多时拆成 23 条短消息每条独占一行」;发送侧微信 iLink Bot 与个人微信从整条发送改为按行拆成多条短消息逐条发送(条间 500600ms 间隔模拟真人节奏,个人微信发送失败自动中止后续);测试号/飞书/QQ 的流式切块天然按换行+句界逐条推送,无需改动;页面聊天同步支持:多行回复按换行渲染成多个独立气泡(同一条消息首行带头像、后续行缩进对齐,真人连发样式)
- 回复融合当前状态(v0.10.10):回复不再是「通用语气模板」——system prompt 把四路状态全部注入并强制融合:当前活动(v0.10.9 硬约束:正在家陪猫就不能说在上班)、情绪(新增强约束「回复必须与情绪一致」:低落/烦躁时明显话少平淡没耐心、开心时轻快爱打趣,禁止任何情绪都用元气语气、禁止直接报告情绪名词)、内感受(烦躁/防备超阈值时让语气自然带出)、记忆(对用户的关系认知 + 最近成长,自然呼应不生硬背诵)——语气随状态真实波动,像真人一样有「今天心情不好就懒得聊」的状态差
- 颜文字保护(v0.10.11):修复微信/飞书/QQ 分条发送时颜文字被拦腰切断的问题(如
(´;ω;`)被;句界切成两半、~/…同理)——流式切块与整条拆分均改为括号深度感知:句界字符落在括号内(颜文字/注释)不算断句,只在括号外切;超长硬切也优先选括号外句界 - 生活时间线补洞 + 情绪生活双向联动(v0.10.12):①修复上午活动空洞(如 7:34 早餐后直接跳到 11:04)——新增通勤过渡事件(工作日 8:30-9:30「出门上班」、18:00-19:00「下班回家」,每天各一条)与到岗事件(上午/下午进入工作槽各一条「到公司了,泡了杯咖啡准备开始干活」),工作事件触发概率 2%→5%(期望间隔 250 分钟→100 分钟,配合 2 小时节流上午时段不再静默);②情绪↔生活双向联动:agent 当前情绪喂给生活模拟——低落/烦躁时工作事件 30% 概率带「有点心不在焉/没什么干劲」小尾巴、晚间社交意愿下降(0.4→0.15,低落更宅),轻快时带「干劲满满/哼着歌干活」、社交意愿上升(0.4→0.55,开心爱约人);反向:有色彩的生活事件(被夸/赶需求/约会等 |效价|≥0.2)自动微调瞬时情绪(单次 ≤0.06,全天自然波动)——生活过得开心情绪就上扬、赶需求就烦躁,情绪与生活真正长在一起
- 表情包(本地图库)(v0.10.13):agent 会在聊天里主动发表情包图片——system prompt 引导它在想表达情绪又觉得文字不够时,单独写一行标记
[[sticker:分类]](分类写此刻的情绪词,如 开心/晚安/安慰),宿主侧解析标记后从本地图库挑一张近期没用过的,在文字之后作为图片气泡发出去(页面按换行拆多气泡 + 末尾追加图片气泡);图库=用户自备表情包,用node scripts/seed-stickers.mjs <图片目录|zip> [图库目录]一次性导入(默认~/.dsh/stickers,内容哈希去重、可重复导入不重图),图片放在<图库>/<分类>/子目录即按情绪分类匹配(v0.10.14 起只发贴合分类的图,未命中就安静不发、不再整库随机兜底);不联网抓取,图库为空或未命中就安静不发图;每 agent 有发图频率闸(两次间隔 ≥90s、10 分钟内 ≤3 张)防刷屏;IM 侧支持公众号测试号 / 飞书 / QQ 发图(微信 iLink Bot 图片协议未公开、个人微信桥 UIA 不支持发图,两条支线降级为只发文字) - 表情包匹配收紧 + 睡眠不回消息(v0.10.14):①表情包只发贴合的图——修复「随便挑一张导致图文不符」:匹配改为分类精确命中优先、其次标签/分类子串模糊,命中不了就这次不发图(不再整库兜底、也不再把未知情绪词归一到默认分类乱发);同时把图库真实分类注入 system prompt,明确要求分类必须从图库现有分类里选、不许自己造词,并对「通用」兜底分类加免责说明(只在想随便发张图活跃气氛、且不在意画面内容时才用);②睡觉时段不回消息——agent 处于睡眠槽位(含每日作息抖动,工作日约 23:007:00、周末约 23:308:30)时像真人一样不回复:不跑情绪感知、不调 LLM、不生成也不存 assistant 消息(用户消息仍存档,醒来能看到并接着聊);页面侧状态行提示「{名字} 睡着了,没有回复」,微信/飞书/QQ/iLink 侧同样静默不发图不发字
- 图片表情包总开关(v0.10.15,默认关闭):设置页「存储」卡片新增复选框**「启用图片表情包」**。缺省为关闭(按用户要求暂时停用该功能)——关闭时 system prompt 完全不下发发图指引、回复里万一出现的
[[sticker:…]]标记也不再解析,聊天一条图都不发;勾选打开后恢复「按分类从本地图库挑选」的发图行为。开关状态存在chat_settings的sticker键,跨重启保留;另给settings-set加了目录守卫,只改开关的调用不会清空已有存储目录配置 - 模拟人生(v0.8.0 起各处状态栏;v0.9.0 生活丰富度大扩充;v0.9.1 起设定非定死):每个陪聊 agent 有一段与现实同步流逝的模拟生活——工作日上下班、三餐、睡觉、周末休息;需求条(精力/饱腹/社交)随时间衰减、吃饭睡觉回补;同事/朋友/家人 NPC 关系网(人设自动派生职业与 NPC,可改职业/公司、可重新生成人生);宠物系统(人设提到养猫/狗/仓鼠则必得对应宠物,否则按名确定性生成约七成有;撸宠/铲屎/半夜跑酷/遛狗等事件混入休闲与随机池,prompt 注入宠物信息);生活事件大扩充:游戏(开黑上分/连跪/单机剧情)、追剧、短视频、小说、听歌、健身、奶茶火锅、剧本杀、演唱会抢票、快递、暴雨没带伞等 60+ 种贴近真实日常的事件;活动具体化:晚间/周末不再笼统显示"自由时间",按天确定性轮换为"打游戏/追剧/逛街/看电影"等具体活动;事件节流(v0.9.2):生活事件符合现实频率——工作事件 ≥2 小时一条、晚间休闲/随机事件 ≥1.5 小时一条(冷却跨调用持久,用餐/睡起事件不受影响);作息抖动(v0.9.3):起床/睡觉时刻每天确定性微抖(工作日 23:00±12 分钟睡、7:00±9 分钟起;周末赖床约 8:30 起、23:30 睡),同一天内稳定、跨天自然变化,上班时间固定不变;睡眠↔情绪联动:入睡时情绪/心境生理性平复(标签转「困倦·平静」、唤醒度与强度大幅回落、心境唤醒下降),睡醒时恢复清醒(唤醒度回升至晨间水平)——由生活模拟跨入睡眠边界时自动触发并落库;设定非定死(v0.9.1):新建 agent 时从人设派生爱好(游戏/追剧/健身/小说/音乐/画画/购物/刷视频关键词)与宠物;聊天中聊到"养了只猫叫团子""周末一起打游戏"等会自动沉淀为宠物/爱好/约定事件(爱好上限 5 个,最新优先),爱好反哺晚间活动与休闲事件文案;懒推进引擎不跑后台定时器,聊天回合与查询时把模拟补算到当前(5 分钟步长,离线超 48h 折叠摘要),跨重启状态保留;最近生活近况自动注入聊天 system prompt(TA 知道自己"刚下班在路上"),被追问时诚实承认是模拟设定;设置弹窗「模拟人生」卡片可视化需求条/当前活动/宠物/爱好/事件流水;伙伴列表每行「人生」按钮一键查看该伙伴的人生详情(卡片标题锁定显示对象,可一键恢复跟随当前选中伙伴,v0.9.7);状态栏三处展示"每个伙伴正在干什么"——聊天顶栏常驻条(当前伙伴)、伙伴切换下拉每项副行、设置弹窗伙伴列表每行,60s 自动刷新(查询即推进懒引擎)
- 备份与恢复(v0.10.3,设置弹窗「备份与恢复」卡片;v0.10.4 起可选导出范围):一键导出把陪聊数据打包为单个 JSON 文件下载——伙伴名册、聊天历史(含微信/飞书/QQ 聊天键)、日记、模拟人生状态、每实体情绪/自我状态桶(含宿主)、模型与存储配置;导出范围可选(v0.10.4):卡片内伙伴 chip 多选,不勾选=全部导出,勾选后仅导出所选伙伴(文件名带「N伙伴」标记;部分导出不含宿主状态桶、飞书/QQ 聊天键——无法可靠归属单伙伴,微信聊天按账号绑定归属);一键恢复选择备份文件(确认弹窗提示导出日期与覆盖范围)——全量备份=整体替换当前数据,部分备份=合并式导入(按 id upsert 所选伙伴的聊天/日记/人生/情绪,不影响其他伙伴与本机模型/存储配置,快照里没有的键保持现状),恢复后名册/历史/日记/情绪调试条自动刷新,镜像文件同步重写;不含 IM 接入凭据(微信/飞书/QQ token 等敏感信息),换机后在设置页重新接入即可
- agent 日记(v0.9.8;v0.10.1 起每天一篇;v0.10.2 起可导出;v0.10.5 起文件存储+独立窗口):每个陪聊伙伴有自己的日记本——每天一篇:每晚 21 点后自动生成当天的日记,当天没来得及写则次日交互/定时器懒补昨天(每小时定时器+聊天回合+启动 30 秒后都会推进,均不阻塞回复);素材:目标日聊天记录(含微信镜像消息)+ 模拟人生目标日生活事件 + 写作时刻情绪;内容:生活经历、心情变化(写入时快照情绪标签/效价)、与用户聊天的感受与感悟——没聊天的日子同样成篇,重点写 agent 自己的生活、心情与所思所想,第一人称按人设口吻成文(150~320 字);文件化存储(v0.10.5):日记不再存进插件域存储/设置弹窗,唯一存储为
diary.<agentId>.json(默认~/.dsh/diaries,「存储设置」可自定义日记文件夹,修改后已有日记立即迁移写入新位置;旧域存储单键启动时一次性自动迁移,旧键保留兼容回滚);独立窗口展示:设置弹窗内不再有日记卡片,点伙伴行「日记」按钮打开居中小窗(v0.10.6:约 520px 宽 × 72vh 高的圆角卡片 + 半透明遮罩,不占满客户端;点遮罩空白处或 ✕ 关闭;此刻才懒加载读取日记文件),窗口含伙伴名标题/篇数统计/「写一篇」(生成后落文件并刷新)/「导出 Markdown」(# 名字的日记+ 每篇## 日期 星期(心情)一节、篇间分隔线,文件名日记-名字-日期.md)/关闭按钮;日记按day/weekday/时刻/心情徽标/正文卡片展示,每 agent 有界 100 篇 FIFO;备份导出/删除伙伴时同步处理日记文件;删除伙伴时日记一并清理 - 飞书接入(v0.7.0,企业自建应用事件订阅;v0.9.7 起多应用):创建应用 → 开通机器人 +
im:message权限 → 事件订阅请求地址填https://<公网地址>/self/api/feishu/callback/<账号ID>(与微信共用回调端口,需内网穿透;也支持配置 Encrypt Key 的加密模式,AES-256-CBC 解密+来源校验)→ 添加im.message.receive_v1事件 → 发布版本;url_verification握手自动应答,私聊机器人文本即对话;tenant_access_token内存缓存(提前 5 分钟续期,按账号隔离);飞书历史按fs:<chat_id>独立存储;回复同样流式切块发送 - QQ 接入(v0.7.0,OneBot v11 / NapCat;v0.9.7 起多机器人):本地跑 NapCat(扫码登录机器人 QQ,无头运行)→ 开启「HTTP 服务」(默认 3000)与「HTTP 上报」指向
http://127.0.0.1:9527/self/api/qq/onebot/<账号ID>→ 插件设置页添加机器人并填 API 地址与 access token;私聊直接回,群聊需白名单群号 + @ 机器人才回;10s 探测get_login_info显示连接状态(按账号);QQ 历史按qq:<user_id|group_id>独立存储;全程本地回环,无需公网穿透 - API(
POST /self/api/*,围栏同兄弟插件):state/agents-list/agents-create/agents-update/agents-delete/chat-history/chat-send(NDJSON 流:{meta}→{delta}…→{done,reply,affect})/models/model-set/settings-get/settings-set/backup-export(v0.10.3 全量备份快照)/backup-import(快照整体恢复)/wechat-get/wechat-save/wechat-account-delete/wx-port-set/wechat-ilink-qr(action: start/poll/cancel/unbind,按 accountId 隔离)/feishu-get/feishu-save/feishu-account-delete/qq-get/qq-save/qq-account-delete/life-status(批量状态栏)/life-get/life-set/diary-list/diary-generate;另有GET /self/api/sticker?path=<分类/文件名>直接在页面渲染图库里的表情包(带目录穿越防护,404 兜底)
微信接入配置步骤
微信 Bot(扫码)— 推荐:聊天设置 ⚙ → 微信接入 → 启用 → 选「微信 Bot(扫码)」→ 保存 → 点「扫码绑定微信」→ 手机微信扫码并确认(若提示配对码,在界面输入框填手机上显示的数字点确认)→ 显示「已绑定微信 Bot」即完成,直接发消息开聊。
公众号测试号:
- mp.weixin.qq.com 开通公众号测试号(即时开通,无需认证)
- 聊天设置 ⚙ → 微信接入:勾选启用,选「公众号测试号」,填 Token(自定义)、测试号页的 appID / appSecret,选择绑定的陪聊伙伴(默认第一个),保存
- 内网穿透到本机回调端口(如
ssh -R 80:127.0.0.1:9527 serveo.net,需出网 22 端口),把公网地址 +/self/api/wechat/callback填进测试号「接口配置信息」,Token 与插件一致,消息加解密选明文模式,提交完成接入验证 - 个人微信扫码关注测试号,发一条消息即可开始对话(先发消息 = 开启 48h 客服回复窗口)
个人微信:聊天设置 ⚙ → 微信接入 → 选「个人微信」→ 填联系人白名单(逗号分隔备注/昵称,留空收全部私聊)→ 保存;插件自动拉起 Python 桥连接本机微信(需已登录桌面端微信 4.1.12+),首次连接显示微信昵称即成功。
内部链路(两批全部完成)
感知(词典快评 + LLM 复核) → 评价(威胁/奖赏/可控/确定性/归因) → 候选生成(心境一致性偏置)
→ 仲裁(多候选竞争 + 混合 mixed) → 内感受偏置(工具调用/受阻/失败 → 挫败/谨慎)
→ 调节(过载暂停/混合澄清/强负性重评/内感受复盘) → 元情绪(对自身状态的二阶反应)
→ 总 prompt 段(统一编排 + token 预算截断) + 动机(主动聊天) + 自传体叙事(self_note)
第二批新增
元情绪(metaEvaluate):观察到自身情绪状态的二阶反应——过载→愧疚、混合→好奇、强负性→不安、挫败→担忧、正性→平和。落
meta/meta_log表,prompt 段独立一行。自传体叙事(self_model 表 +
self_note工具):模型主动沉淀"我如何工作 / 我们如何相处 / 我学到了什么"三类稳定认识(各类有界 20 条 FIFO)。诚实边界:工作记忆中的自我描述,非真实人格。动机模块(主动聊天):触发源(闲置回归→接续话题 / 守卫连续受阻 ≥2→反思 / 定时器闲置→问候)→ prompt 段诚实框架呈现(说明触发来源,禁止暗示"一直在等待/想念用户")→ 用户回复视为送达。约束:默认关(
proactiveEnabled)、免扰时段(quietHours,跨午夜支持)、每日上限(dailyCap)、同类去重、48h 过期、有界 20 条。动机送达现实约束:插件无向会话注入 assistant 消息的 API → 动机以 prompt 段呈现,时机自然时由模型带出;真实"用户未开口先推送"需宿主侧支持,属后续扩展。
仲裁支持混合情绪:极性相反且强度接近 → mixed 双标签;LLM 复核/模型自报声明混合时放宽极性要求(烦躁+低落等复合负性合法)。
内感受:插件拿不到宿主全局统计,用
tools/pre-execute钩子统计本会话工具调用与守卫拦截次数;失败事件靠 LLM 复核/模型自报补充。心境:长期基线滑动平均,同日微调 k=0.08、跨日隔夜重整 k=0.35。
explain_log:每次感知/仲裁/调节落一条决策解释(触发 → 候选 → 仲裁 → 调节 → 内感受),可追溯。
工具 ×6
| 工具 | 说明 | 确认级别 |
|---|---|---|
self_state |
查询完整内部状态(瞬态情绪/心境/内感受/调节/元情绪/动机/自我叙事) | 只读自动 |
self_feel |
模型自报情绪(最终表达权;display 过安全过滤) | 可逆自动 |
self_log |
查询决策解释日志 | 只读自动 |
self_note |
沉淀自我认知到自传体叙事(identity/relations/growth) | 可逆自动 |
self_motive |
查看未表达动机 / 手动标记完成 | 只读/可逆自动 |
self_reset |
重置到中性(解释日志与自我叙事保留,未送达动机清空) | 可逆自动 |
守卫
强负面情绪(v<-0.5 且强度>0.7)+ 风险类工具 → 追加 ask 人工确认(fail-closed),可通过 guardOnNegative: false 关闭。
配置
| 键 | 默认 | 说明 |
|---|---|---|
decayPerHour |
0.15 | 瞬态情绪每小时衰减 |
llmRecheckEvery |
6 | 每 N 轮最多 1 次 LLM 复核 |
promptBudget |
320 | 总 prompt 段字符预算(超预算砍低优先级段) |
maxLogRows |
200 | explain_log 行数上限 |
guardOnNegative |
true | 强负面 + 风险工具追加确认 |
llmProvider / llmModel |
minimax / MiniMax-M2 | LLM 复核后端(须显式传 model) |
proactiveEnabled |
false | 动机模块(主动聊天)总开关,默认不打扰 |
quietHours |
'23:00-08:00' | 免扰时段(跨午夜支持),时段内不生成/不注入动机 |
dailyCap |
3 | 动机每日送达上限 |
idleHours |
4 | 距上次对话多少小时生成接续/问候动机 |
存储
单 domain self v1 多表:affect(当前情绪)/ mood(心境基线)/ ico(内感受)/ explain_log(决策解释,有界数组)/ meta + meta_log(元情绪)/ self_model(自传体叙事)/ motive(动机,有界数组)/ chat_agents(陪聊名册)/ chat_hist(聊天历史快照)/ chat_settings(聊天模型选择 + 存储文件夹配置)。同一 domain 加表不改版本。
与兄弟插件分工
dsh-emotion(旧单状态机):本插件稳定后停用,避免双状态机漂移dsh-emotion-memory(情绪记忆腿):保持不动,心境一致性检索由其承接- 第二批:元情绪、自传体叙事、动机模块(主动聊天,免扰时段/每日上限/默认关/诚实框架)
开发
npm install && npm run build && npx vitest run # 174 项单测(含微信验签/XML/去重/token/客服/iLink 重试策略/飞书加解密/QQ OneBot 解析/模拟人生推进/状态栏去重/宠物与活动具体化/人设派生与聊天沉淀/事件节流/作息抖动/日记日期键与自动写作条件)
node smoke.mjs # Fake 宿主冒烟(13 步全链路)