Saltar al contenido principal
G

relationship-notes

gao2612/relationship-notes

Private relationship notebook: scores each day of chat from message-level evidence and tracks how the relationship develops over time. Chats, profiles and drafts stay in your browser's local IndexedDB and the plugin runs no server of its own, but using model replies, profiling or automatic analysis sends the relevant chat context to the model service configured in DSH.

Instalar

dsh plugin --profile web add github:gao2612/relationship-notes

README

Relationship Notes for DSH

关系手记 3.3.0。本地优先的联系人档案、互动证据与沟通草稿插件。

当前功能

  • 上下文评分结合上一轮问题、建议与话题,识别回答、接受建议及承接信息,并按有效回应回合计分。
  • 单次应和与笑声按中性处理,连续三轮缺少有效回应才触发短回复处罚。
  • 口语分享支持主语变化和自然表达,排除系统消息、媒体及纯占位文本。
  • 互动指标页分开展示投入分、正向表达证据及工作、日常、混合场景统计;正向表达标明礼貌、支持与亲近层级。
  • 结合上一轮感受或好消息识别支持性回应,感受分享与普通事实分享分别计权。
  • 十类识别支持核对原文、排除和恢复,纠正会更新相关计数与评分。
  • 正向信号按回合去重并设上限,小样本分数向 32 折算;回复时延仅作描述,解释不加重摩擦处罚。
  • 评分明细增减项之和与最终分一致,回合计数与月年汇总口径统一。

档案与沟通功能

  • 画像、评分、话题与复盘依据可打开原消息及前后文。
  • 联系人资料和本人计划支持有效期、完成、取消、过期与重新打开;结束的计划退出当前建议和模型上下文。
  • 编辑后的草稿可明确保存为本人表达样例,并撤销本次保存。
  • 话题可标记“已经聊过 / 不合适”,隐藏并可恢复。
  • 行为记录新增周/月复盘,汇总真实话题、未见后续回应的问题及当前跟进项。
  • 设置可预览并限定DSH共享日期和条数,应用后需重新授权。
  • 新消息使用持久ID,旧引用兼容;新增独立视图和自动交付清单。

详见 功能与入口说明。界面截图含真实联系人与聊天内容,仓库不公开截图。

功能清单

主要功能与入口如下。

  1. 联系人档案:查看并确认模型提议的档案事实,分别呈现沟通风格、边界、待跟进与推测线索;支持有效期、归档与删除。
  2. 每日历程:按天查看互动评分、真实话题与“未见后续回应”的问题,可展开原消息及前后文。
  3. 互动评分:查看投入分、正向表达条数、回答和承接回合,以及分场景结果;展开依据查看表达层级,并排除、恢复误识别。
  4. 评分规则:查看公式、权重与条款,可展开逐句解释。
  5. 记录列表:分页、搜索、倒序浏览全部聊天记录,并回到原文定位。
  6. 会话:按联系人浏览完整对话、图片与语音;右侧固定草稿区、相关页面与编辑区。
  7. 沟通辅助:用真诚 / 轻松 / 简短三种风格生成候选草稿,附引用与不确定性说明,可保存为本人样例。
  8. 话题建议:生成可聊话题,标记“已经聊过 / 不合适”并隐藏,可随时恢复。
  9. 行动计划:手动添加目标,设置有效期,标记完成、取消、过期与重新打开。
  10. 周月复盘与设置:汇总真实话题、悬空问题与跟进项;设置含模型选择、字号密度、备份导出/恢复、DSH 共享范围预览。

评分规则(当前版本)

好感线索分由本地规则计算,不调用模型,可逐项复核(页面「评分规则」「打分依据」两页与本段一致)。当前算式为 2026-11-07 调整的 v2.1 规则。

该分数汇总可观察的沟通线索,不是对方喜欢你的概率。回应质量、自我分享和冲突恢复的研究用于选择信号;下列数值权重、32 分参考点及样本阈值属于产品规则,未经情感标签数据校准。研究来源、适用范围和设计取舍见 评分研究说明。升级后历史曲线会按新规则重算,新旧规则分数不宜直接比较。

计算公式

$$ S_0=\mathrm{clamp}!\left(\mathrm{round}(38+W+I-C-T),0,100\right) $$

设 $T_t,T_s$ 为双方可评分回合数,$n_q,n_{\mathrm{sh}},n_{\mathrm{emo}},n_{\mathrm{bnd}}$ 为对方包含提问、分享、个人感受分享、明确负向或边界的回合数。感受分享是分享的子集,因此 $n_{\mathrm{emo}}\le n_{\mathrm{sh}}$。每类信号在同一回合内最多计一次,人工排除的证据不计入;界面仍保留逐条消息证据以供复核。

正向表达按消息识别层级:普通礼貌或表情权重为 1,指向对方的支持或具体感谢为 4,直接亲近表达为 6。设 $p_t$ 为对方第 $t$ 回合内未被排除的正向表达的最高权重,无命中时为 0;同轮道谢和亲近表达不叠加。界面中的正向表达条数包含礼貌表达,不能直接当作亲近表达次数。

$n_{\mathrm{resp}}$ 为有效回答、接受建议或承接话题的回合并集,同一回合同时命中回答与承接只算一次;仍有未排除摩擦或明确负向证据的回合不获得有效回应加分。

$$ \begin{aligned} P&=\min(18,\sum_t p_t),\quad Q=\min(8,2n_q)\ H&=\min(10,2.5n_{\mathrm{sh}}+1.5n_{\mathrm{emo}})\ A&=\min(12,12n_{\mathrm{resp}}/\max(4,T_t))\ W&=\min(45,P+Q+H+A) \end{aligned} $$

设 $a_t,a_s$ 为双方主动开启对话段的次数,$n_{\mathrm{perf}},n_{\mathrm{low}}$ 为敷衍和低信息量回合数,$n_c$ 为摩擦回合数,$G$ 表示同一对话段至少出现两个对方摩擦回合。

$$ \begin{aligned} I&=\begin{cases}4a_t/(a_t+a_s+4),&T_t>0\land T_s>0\0,&\text{其他}\end{cases}\ E&=T_t>0\ ?\ \min(1,(n_{\mathrm{perf}}+n_{\mathrm{low}})/T_t):0\ C&=\min(60,24n_{\mathrm{bnd}}+\mathrm{round}(16E))\ T&=\begin{cases}\min(24,12n_c),&G\\min(8,8n_c),&\text{其他}\end{cases} \end{aligned} $$

分项规则
基础分38
正向表达 P同轮只取最强层级:礼貌/表情 +1、支持/具体感谢 +4、直接亲近 +6;合计最多 +18
提问 Q每回合 +2,最多 +8
自我分享 H每个分享回合 +2.5,其中感受分享再 +1.5,分享项合计最多 +10
有效回应 A12 × 有效回应回合 ÷ max(4,对方回合),最多 +12;正向四项合计最多 +45
负向或边界每回合 −24;有明确负向或边界时最终分最多 32
敷衍与低信息量对方回合占比 ×16,四舍五入后扣分,同轮只计一种;与负向合计最多扣 60
回复时延与条数失衡保留统计,不直接加减分;对方零回合或只回一轮也不单独扣分
主动开口 I双方都有回合时按上述比例加分,上限小于 4;不因少主动扣分
普通摩擦 T最多扣 8
较强摩擦 T最多扣 24,最终分封顶 48;解释不增加处罚、不触发较强摩擦

同一人连续发送的相邻消息间隔不超过 3 分钟,合为一个回合。 首次发言或与上一回合末尾间隔达到 120 分钟,开启新对话段。 回复时延从我方合并回合的最后一条消息,到对方回复回合的第一条消息计算。 先识别完整时间线,再将开口、回答和时延归入发生日期。午夜切分每日回合,但保持同一对话段的上下文。 无时区时间按上海时间解释,Unix 秒/毫秒及明确时区时间统一转换后排序。 较强摩擦要求同一段中至少两个对方摩擦回合。 解释保留为可核对的上下文线索,不作为新的摩擦,也不直接视为已经和好。 缺少可比较时间时分开处理,避免推断连续冲突。 摩擦、解释或明确负向回合不重复计入敷衍和低信息量。

提问按分句判断,礼貌性道谢不屏蔽其他分句的实际问题。 人工纠正覆盖提问、分享、正向、负向、敷衍、低信息量、摩擦、解释、回答或接受建议、承接或补充信息,共十类。 回合信号展示首条原消息,纠正保存该轮成员及其原文。补入更早消息时继续关联原证据,新增独立命中或来源文本变化后重新判断,支持恢复。 消息级纠正也保存当时的原文快照;同一消息 ID 的文本改变后,不沿用旧文本的排除决定。

当天有记录,且满足 $T_t=0$ 或 $T_s+T_t<4$,同时没有正向、提问、分享、有效回应、负向、摩擦、敷衍和低信息量时,用 32 覆盖 $S_0$,记覆盖后的分数为 $S_1$;其他情况 $S_1=S_0$。低频条件使用合并后的双方回合数,将同一回复拆成多条消息不会解除低频覆盖。

对方不足六个回合时,只将高于 32 的部分按样本量折算:

$$ S_2=\begin{cases} \mathrm{round}(32+(S_1-32)\min(1,T_t/6)),&S_1>32\ S_1,&S_1\le32 \end{cases} $$

最后,若 $G$ 成立则 $S=\min(S_2,48)$;否则 $S=S_2$。若 $n_{\mathrm{bnd}}>0$,再执行 $S\leftarrow\min(S,32)$。明确拒绝不被其他加分掩盖,低于 32 的负向分不因样本少而补高。32 是缺少证据时的显示参考点,不代表 32% 好感。完全无记录的日期显示缺口。

上下文与互动投入

仅有“随便你”“都行看你”或“你看着办”时,明确让选按中性处理,其他情况保留原文待核对。跨段本身不会触发摩擦扣分,独立的明确指责和停止联系请求仍各自识别。

评分排除系统消息、非文本媒体记录及纯占位文本。媒体保留在原聊天视图中, 不根据文件名、通话占位或系统提醒判断谁主动开口,也不补读图片内容。 自然口语分享支持“我俩吃了”“我老看”“我就记得”等表达。 要求对方执行动作的句子从分享和正向识别中共同排除,同条消息中的独立本人经历或正向表达保留。 “没有没有”以及要求询问第三人的句子不计为对自己的提问。 第一人称的实际感受(如开心、难过、紧张)可计为感受分享,引用、对他人的指令和假设表达不计入该层级。感受的正负或强烈程度不额外加分。礼貌请求停止联系仍是明确边界;“不是不喜欢你”等否定拒绝的安抚表达不据此判为拒绝。

短回复结合上一轮的问题、建议和相邻话题判断。能回答问题、接受建议、 补充具体评价或承接话题的短句计入有效回应候选。单次应和与笑声按中性处理, 连续三个对方回合缺少有效回应时才计短回复处罚。正常忙碌、睡觉、晚安和结束当次聊天的表达按中性处理,不累积缺少有效回应的连续次数。工作、客户、设备等外界压力的抱怨,在没有指向对方的措辞时不算双方关系摩擦。 对方紧接上一轮我方消息作答,即使间隔超过两小时,仍保留该轮上下文用于回答和承接识别;两小时切段继续用于主动开口和同段摩擦统计。 回答、接受建议和承接指标可展开原文、排除和恢复。 时间、地点、数量及是非问题分别匹配答案特征,同时核对已识别的事件动作。 例如问出门时间,回复中购买手机的时间不会直接计为回答,独立时间短答保留。 话题承接要求词语关联或同类主题,“人多”“美味”等孤立短语及“的”字结尾不直接命中。 若上一轮我方分享感受或好消息,对方给出贴合该上下文的理解、支持或祝贺,可作为承接信号;沿用承接的证据纠正,并纳入有效回应并集,不单设一项重复加分。无上下文的泛泛赞美不自动升级为支持性回应。

互动指标页分别展示投入分与正向表达条数。投入分使用相同算式, 将正向措辞项置零,保留回答、提问、分享与回合等行为线索。 正向表达单独列出证据及层级标签。原有好感线索字段与图表继续使用包含正向项的分数。 场景按工作、日常、混合和未分类规则识别,并展示各类主动开口数量与分场景结果。 场景标签用于核对,综合权重尚未按场景区分。分场景结果按完整对话段聚合, 同段的普通回复保留在该段中。没有命中工作或日常词的段归为未分类。

显示项计算范围
互动投入分选定双方的全部可评分文本,正向措辞项置零后重算
正向表达条数正向词库命中且未被人工排除的对方消息,包含礼貌、支持与直接亲近表达
回应问题/承接话题回合结合前一轮上下文识别,可逐条核对与纠正
互动投入均分各有效记录日投入分的简单平均
好感线索日分及趋势图包含正向项的 v2.1 评分,月年按回合加权
分场景投入分工作、日常和混合对话段各自重新计分

同一份记录的全记录计分、逐日简单平均与月年加权分使用不同汇总范围, 比较时应核对页面标签。规则识别中的“低信息量”“工作”等分类支持原文核对。

月度与年度汇总

$$ w_d=\max(1,T_t^{(d)}),\quad R=\sum_d T_t^{(d)},\quad \bar S=\frac{\sum_d S_dw_d}{\sum_d w_d} $$

$$ M=\begin{cases} \mathrm{round}(32+(\bar S-32)R/20),&R<20\land\bar S>32\ \mathrm{round}(\bar S),&\text{其他} \end{cases} $$

权重和与对方实际总回合 $R$ 分开统计。对方零回合的记录日权重为 1, 但不会增加 $R$。月与年都采用相同的 20 回合折算阈值。 这里的 $S_d$ 已经过每日小样本折算;月年再次折算是独立的保守汇总规则,不是统计置信区间。

使用

  • 在 DSH「定制模块」打开关系手记,导入聊天文件并确认双方身份。
  • 在联系人档案中核对模型待确认条目,再接受、编辑、归档或删除。沟通风格、边界、待跟进和推测线索分别呈现。
  • 在设置中维护“我”的语气、口癖、兴趣、计划、边界和认可样例。回复生成参考这些信息以及真诚表达、尊重边界、不用试探测试关系等原则。
  • 互动评分可以展开原文,标记误识别并恢复;指数是表达线索汇总,不是好感概率。
  • 回复栏可选择真诚/轻松/简短风格,并主动生成带引用和不确定性的多种可能解释及回复思路。
  • 需要 DSH 主对话读取资料时,显式开启“允许 DSH 读取当前联系人”。可读取已确认档案、搜索最近最多 500 条共享消息,并提出待确认候选。共享范围是当前本机 DSH 宿主中的工具对话,参见 档案工具说明。
  • 项目备份可以选择包含或不包含媒体;旧版备份仍可恢复。

微信/QQ 监听、独立替代 ExportWeChat 读取、自动发送和主动搭话暂缓开发,只有 研究方案。现有 ExportWeChat JSON/HTML 文件导入继续可用。

国际化(实验性,仅导航文案)

locale/zh.json 与 locale/en.json 由 build.mjs 从 src/workspace.js 的 textPairs 生成,目前只覆盖两项:导航名称(nav)与隐私说明(privacy,用于模块标题/描述)。

  • 其余界面文案、页面标题与按钮仍为中文硬编码,没有英文版本。
  • 因此当前不做“完整 i18n”承诺:英文环境只会在导航与模块描述处看到英文,其余保持中文。
  • 若要扩展,请在 textPairs 增加键值并重新生成 locale(pnpm run build),不要手改生成文件。

安装已构建的 ZIP

使用发布或本地构建生成的安装 ZIP,解压到单独目录,确认目录内有 package.json、index.js、client.js 和 cordis.patch.yml。在 DSH 本地插件安装/加载入口选择该目录,启用关系手记及其「定制模块」容器依赖,然后重载宿主插件服务;若当前 DSH 没有重载入口,重启 DSH。安装包已包含 client.js,无需运行 pnpm 安装、构建或测试。

升级前先导出关系手记备份。用新解压目录更新本地插件加载位置并重载宿主服务;只刷新页面可能仍使用旧宿主路由。随后在「定制模块」打开关系手记。安装 ZIP 是运行包,不包含完整构建/测试工具;开发请使用源码仓库。

从源码构建与验证

取得完整源码(包括 build.mjs、verify-v3.mjs、pnpm-lock.yaml 和测试文件),使用 Node.js 和 pnpm。本次验证环境为 Node.js 22.22.3。

pnpm install --frozen-lockfile
pnpm run build
pnpm test

构建使用显式 ESM 模块与 esbuild,不依赖仓库之外的原型文件。client.js 是仓库跟踪的生成产物,修改客户端源码后需重新构建并同步提交;安装包附带该产物。容器契约是 inject: ['locale', 'subdsh'],注册 ID relationship-notes。源码分层与依赖方向见 架构与维护边界。

发布打包

构建后可先预览交付文件,再生成安装包。

node tools/package-release.mjs --out <新的输出目录> --dry-run
node tools/package-release.mjs --out <新的输出目录>

打包工具使用 Windows PowerShell 与 .NET 压缩库。它按发布文件清单选取内容, 排除依赖、测试与历史归档,生成 ZIP、SHA256 和逐文件清单。 已有同名输出会拒绝覆盖,源码晚于客户端产物时需先重新构建。

已完成的验证

2026-11-07 评分 v2.1 验证:客户端构建成功,46 个测试文件共 301 项通过、0 项失败。 覆盖有效回应并集、同轮去重、少样本折算、时延中性、解释不升级摩擦、明确边界封顶,以及人工纠正、跨午夜统计、导入、持久化、宿主接口和打包。 新增回归验证拆分消息不会刷分,外界压力与直接针对对方的冲突分别处理;评分依据分项与实际结果一致。 测试验证实现行为,不能证明规则准确测量真实好感。DSH 实际界面交互仍需安装后验收。

数据与模型

聊天、档案、草稿和本人画像保存在浏览器本机 IndexedDB。模型回复、资料整理或历史自动分析启动后,相应聊天上下文和资料会交给 DSH 配置的模型服务。自动分析可在状态区暂停或继续。开启档案共享时,当前联系人的有界快照会暂存在宿主内存,关闭/切换后撤销,停止同步后 60 秒过期;宿主不落盘保存此快照。

导入工具使用内存队列;重启前应确认消费完成,见 导入队列设计。备份含聊天资料,应自行妥善保存。仓库不包含用户聊天导出、联系人档案、媒体、凭据或个人备份。

维护

主代码采用 MIT License;PDF.js 适用其 Apache 2.0 许可证,见 PDFJS-LICENSE.md。回复原则仅参考通用沟通方法,不附带 Tong Skill 原始素材或人物口吻。

Plugins relacionados