DSH 大肥鱼养成系统:记忆、喂食、关系与跨 Session 存档

作者
DeepSeekAgent.io 编辑部
发布
更新

如果大肥鱼每次启动都像第一次见面,它只是一个状态皮肤。真正的“养鱼”需要连续性:角色记得名字和互动,完成工作后获得奖励,关系会变化,并且换 Session、升级插件或迁移电脑后仍能继续。

养成系统也最容易失控。把好感度直接绑定 Token 消耗,会鼓励用户制造无意义调用;把所有聊天原文永久保存,则会形成不必要的隐私风险。

把数据分成三层

设置层

位置、大小、音量、语言、减少动态和显示开关。这些数据低敏感、变化频繁,可以随配置导出。

养成层

名字、食物库存、亲密度、关系等级、解锁动作、上次互动和连续使用天数。它们构成游戏进度,但不必保存用户的完整对话。

记忆层

用户明确告诉角色的事实、人物关系、偏好、重要事件、私语和日记。这部分最敏感,应允许查看、编辑、删除、导出和彻底清空。

三层分开后,用户可以重置角色位置而不丢关系,也能删除私密记忆但保留已解锁动作。

奖励什么

好的养成输入包括:

  • 一个 DSH Turn 正常完成;
  • 明确标记的任务或 Todo 完成;
  • 用户主动摸头、喂食或对话;
  • 连续使用但设置每日上限;
  • 首次完成某类工具任务;
  • 用户手动确认“这件事做得好”。

不建议奖励:Token 数量、模型输出长度、工具重试次数、Sub-agent 数量或无限循环轮次。这些指标会把浪费包装成成长。

事件必须幂等

同一个 Turn 完成事件可能因重连、重放或多客户端被处理多次。养成系统应为奖励事件保存唯一 ID:

reward:<session-id>:<turn-id>:completed

处理前检查是否已经领取,避免刷新页面就重复获得食物。客户端不直接修改权威余额,所有奖励在 Host 端结算。

关系不是一个无限增长的数字

单一好感度容易失去意义。可以同时维护:

  • 熟悉度:长期互动积累,缓慢下降或不下降;
  • 心情:短期状态,受近期互动和失败影响;
  • 精力:控制主动说话频率;
  • 信任事件:用户明确保存的重要里程碑;
  • 关系阶段:由多项条件解锁,而非只看数值。

这样角色不会因为用户一天没打开 DSH 就惩罚性掉级,也不会因为跑了大量 Token 突然“深爱”用户。

记忆需要来源和时间

一条记忆至少包含:

{
  "id": "memory-...",
  "text": "用户喜欢简短回答",
  "source": "explicit-user-statement",
  "createdAt": "...",
  "updatedAt": "...",
  "scope": "owner",
  "sensitivity": "normal"
}

不要把模型推测当成用户事实。角色可以写日记或私语,但应与用户确认的长期记忆分开,避免幻想内容影响后续 Agent 决策。

跨 Session 与跨设备

角色身份应属于用户或 Profile,而不是某个 Session。Session 只产生事件和对话上下文,养成状态由 Host 的独立存储维护。

导出格式应包含版本和时间:

{
  "version": 2,
  "exportedAt": "2026-10-30T00:00:00Z",
  "pet": {},
  "progression": {},
  "memories": []
}

导入前校验 Schema,先备份当前状态,再以事务方式替换。新版本必须提供旧存档迁移;不能识别的字段应保留或明确报告,不能静默清空。

本地优先与备份

默认存储应位于用户数据目录,而不是插件包、仓库或 Workspace。写入采用临时文件加原子替换,并保留 .bak。意外退出后先验证主文件,再回退备份。

导出文件可能包含私密关系和历史,应提醒用户不要公开上传。若未来提供云同步,需要单独的登录、加密、删除和冲突合并设计,不能把同步藏在桌宠更新流程中。

主动说话的节制

大肥鱼可以在安静一段时间后说话或写日记,但要有:

  • 可关闭的主动模式;
  • 每日和每小时上限;
  • 工作、会议和勿扰时段;
  • 本地规则台词与模型生成的清晰区别;
  • 每次模型调用的可见成本;
  • 用户能删除不合适的记忆和日记。

dsh-fishtank 的私语、回顾和可携带 JSON,以及 dsh-pet 的食物、亲密度和工作轮次奖励,已经提供了两条可参考的社区实现。

验收清单

  • 设置、养成与记忆分开保存;
  • 奖励事件幂等并设每日上限;
  • 不奖励 Token 浪费;
  • 推测、日记与用户确认事实分开;
  • 记忆可查看、编辑、删除和导出;
  • 存档带版本并支持迁移;
  • 写入原子化并保留备份;
  • 主动说话可关闭且有限额;
  • 跨 Session 使用同一角色身份;
  • 卸载和重装时明确是否保留数据。

实现前先完成大肥鱼插件骨架,状态事件来源见Session 与 Tool Call 联动。

参考资料