大肥鱼记忆与养成
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 联动。