前言¶
在 DeepSeek Harness(DSH)里做角色向对话时,上下文一拉长,常见做法是整段历史压成摘要再塞进 system。事实往往还在,称呼、口癖、关系张力、某句原话的语气会被改写成第三人称概述,模型之后「知道设定」,但不像那个角色。
下面介绍社区插件 dsh-flavor-memory(维护者 lishicheng2054),它在 DSH 里提供一层面向角色聊天的长期记忆:本地 JSON 持久化,不依赖向量库,检索优先;压缩只负责「想起来」,原文永久保留作事实源。
这是什么¶
插件 npm 包名为 dsh-flavor-memory,当前版本 0.4.3(见 npm 与仓库 package.json)。简介可概括为:DSH plugin: flavor-preserving long-term memory for character chat. Local JSON, no vector DB, retrieval-first.
同一套引擎还可作为 OpenAI 兼容本地网关运行,适合不改前端、只改 base URL 的接入方式;本文以 DSH 插件用法为主。
和普通摘要差在哪里¶
项目 README 把「味道」拆成多层保存,而不是揉成一份总摘要:
| 层级 | 作用 |
|---|---|
| 灵魂层 | 身份、价值观、底线;默认建议模式,压缩时不被摘要改写 |
| 声音层 | 称呼、口癖、句长、禁用表达、原话样本;可锁定、审批或按上限演化 |
| 关系层 | 关系阶段、信任、承诺、秘密、未解冲突,结构化单独存 |
| 场景层 | 增量场景卡,只记「这段时间发生了什么变化」,并带原文引用 ID |
| 近场层 | 最近几轮原文(DSH 侧由宿主负责上下文) |
| 深档案 | 全部原文永久保留,按需检索,不删除 |
核心原则:摘要只负责「想起来」,原文才是事实源。 压缩后仍会重新注入 240 字以内的人格回执;场景卡必须引用原始消息 ID 并保留逐字原话;检索先返回元数据(时间、标签、命中原因、约 80 字片段),模型确认后再读全文。
核心功能(已文档说明的部分)¶
记忆引擎与归档¶
- 监听
user/message与assistant/message,归档真人消息与模型回复,优先用 DSH 消息 ID 去重。 autoCompactEvery对尚未归档的增量消息自动生成带引用 ID 的场景卡(设为 0 可关闭)。- 控制台可列出角色实际有归档的会话 scope,切换查看、搜索原文;「压缩率」只统计已生成场景卡的消息,无卡片时显示 0%。
模型可调用的工具¶
flavor_memory_pin:保护/取消保护一条原文。flavor_memory_search:只返回命中元数据与片段。flavor_memory_read:按 ID 读原文。flavor_memory_remember:追加一条原文。flavor_memory_compact:创建带引用 ID 的增量场景卡。flavor_memory_anchor:读取当前人格回执和关系状态。flavor_memory_fact:登记、更新或列出当前事实;更新时旧值进历史,不删原文。
角色卡、世界书与 Studio¶
- 支持 SillyTavern V2 角色卡导入/导出;扩展字段
extensions["dsh-flavor-memory"]保留灵魂、声音、关系、触发规则、演化历史等。 - DSH Web 设置页可打开 角色记忆 管理角色;也可独立启动 Studio:
npm run studio
# http://127.0.0.1:8790/flavor-memory/studio
灵魂、声音、关系支持 locked / suggest / bounded / free 四种演化模式;默认 soul=suggest、voice=bounded、relationship=bounded。
运行环境¶
package.json 要求 Node >= 22,DSH >= 0.2.0-rc.2 且 < 0.3.0(0.2.0-rc.2 标注为 compatible)。
安装与启用¶
建议先在独立 profile 验证,不要直接改日常 profile。插件以当前 DSH 进程权限读写本地文件;安装前请自行查看 GitHub 源码 与仓库内 LICENSE,确认可接受后再装。
从 npm 安装(README 推荐的最简方式)¶
插件页「添加插件」填包名 dsh-flavor-memory,或命令行:
dsh plugin --profile flavor-test add dsh-flavor-memory
装完后可用仓库提供的自检(在插件目录或解压后的包内):
npm run doctor -- --profile flavor-test
看到 flavor-memory 自检:通过,且 dsh-load 通过,表示 DSH 已识别插件。README 称 0.4.3 在全新 profile 下 npm run doctor 13 项全通过。
从 GitHub Release 安装¶
插件页可填 Release 直链(v0.4.3 示例):
https://github.com/lishicheng2054/dsh-flavor-memory/releases/download/v0.4.3/dsh-flavor-memory-0.4.3.tgz
也可填 git+https://github.com/lishicheng2054/dsh-flavor-memory.git 或本地 tgz 绝对路径。SHA-256(v0.4.3):FA3BA5F429E75B46C97A50E9A7DEF26595FAD022C0C8E31754A4009252965E9F。
本地 link 或 setup 脚本¶
已有源码目录时,README 示例:
dsh plugin --profile flavor-test add link:C:\Users\lsc15\Desktop\个人尝试与研究\工具与测试\flavor-memory
或使用包内 setup(需替换为你的路径与 profile):
npx dsh-flavor-memory-setup setup --profile flavor-test --character-file examples/ayu.character.json --force
npm run setup 会自动写 profile 依赖、把 dsh-flavor-memory 加入 bundles、生成人格配置并调用 DSH 组合配置自检。安装后 cordis.patch.yml 会插入 flavor-memory 条目。
配置角色¶
DSH 的 config 是整块替换,不是深合并;在 profile 的 cordis.patch.yml 里覆盖同 id 配置时需写全字段。示例:
- id: flavor-memory
config:
characterId: ayu
characterName: 阿鱼
dataFile: ~/.dsh/flavor-memory/memory.json
maxCards: 6
voiceSamples: 3
maxPromptChars: 4000
autoCompactEvery: 20
baseStabilityDays: 30
soul: "阿鱼:嘴硬心软,先损后哄,不主动说教。"
voice:
- 叫她老板
- 短句
- 被关心时先嘴硬
relationship: 刚开始互相试探
常用字段含义(摘自 README):
characterId:记忆库角色 ID,稳定不要改。dataFile:本地 JSON 记忆数据;默认角色资料库为~/.dsh/flavor-memory/characters.json(profilesFile)。maxCards/voiceSamples/maxPromptChars:场景卡数量、语气样例条数、注入字符硬上限。autoCompactEvery:每多少条未归档新消息自动生成一张场景卡。baseStabilityDays:未强化记忆的基础稳定期。saveDelayMs:防抖保存间隔,默认 40ms。
首次启动会创建数据文件并写入角色;重启不会用配置覆盖已有灵魂和档案。
无独立角色文件时,可用最小 JSON 或 CLI 参数,再跑 npm run setup(见 README「零配置文件模板」)。
典型用法流程¶
- 用独立 profile 安装
dsh-flavor-memory并npm run doctor自检。 - 在
cordis.patch.yml写好characterId、soul、voice、relationship与dataFile等完整 config。 - 正常与 DSH 对话;模型需要细节时先
flavor_memory_search,再flavor_memory_read;重要原话用flavor_memory_pin保护。 - 需要可视化调角色、世界书、演化审批时,打开 DSH Web 角色记忆 或
npm run studio。 - 若不想改 DSH 前端,可另启 OpenAI 兼容网关(
npm run gateway,默认http://127.0.0.1:8787/v1),客户端只改 Base URL 与本地GATEWAY_TOKEN(环境变量见 README)。
适用场景与注意¶
适合: 长期角色扮演、需要保留口癖与关系演进、希望本地 JSON 可控、检索先于全文注入的场景;与 SillyTavern 角色卡工作流衔接时也可利用导入导出。
注意:
- 无向量库,召回逻辑以项目实现的检索与场景卡/事实层为准,不要按 RAG 插件预期去配 embedding。
- 插件与数据文件权限等同 DSH 进程;
dataFile路径请放在你信任的位置并备份。 - 社区目录 SkillHub 插件页 与 GitHub 为独立生态信息源,与 DeepSeek / 幻方无官方从属关系。
- 网关模式下会话 scope、重复消息去重等需适配层配合(README 对 QQ / NoneBot 等有说明)。
结尾¶
dsh-flavor-memory 把角色聊天的记忆从「一份越写越平的摘要」改成「分层锚点 + 可检索原文 + 带引用的场景卡」,在 DSH 里以插件和工具形式接入,也可选本地 OpenAI 兼容网关。进一步细节以仓库 README 与 CHANGELOG 为准。
- 目录页:https://www.skillhub.cn/plugins/lishicheng2054/dsh-flavor-memory
- GitHub:https://github.com/lishicheng2054/dsh-flavor-memory