dsh-natural-dialogue
让 DeepSeek Harness 的日常交流更自然,并让记忆有来源、能检索、可修正。
这是一个独立的 DSH 插件项目。它保留宿主的模型与工具执行循环,通过回合钩子接入对话规划、长期记忆和表达学习,不修改 DSH 源码,也不依赖养鱼插件。
当前版本
0.3.1 实现了文本对话的架构基础与独立回复生成:
- 稳定人格、行为准则、默认表达与按回合抽样的临时语气。
- 回复前的独立规划调用,判断聊天、任务或情绪支持,并生成检索查询。
- 独立 Replyer 调用:DSH 执行阶段给出回复参考,Replyer 结合人格、近期对话和本轮记忆组织最终发言;不继承工具说明和工具权限。
- 带原话证据的事实、情景摘要、关系和表达记录,SQLite 持久化。
- 词项稀疏检索、可选语义向量、一跳关系扩展及按时间衰减的混合召回。
- 回复后的记忆整理任务队列,失败重试、幂等写入、冲突候选、人工确认、修正与删除。
- 表达从用户原话学习,默认需确认后才使用,不学习助手自己的话。
- 按工作区或指定会话隔离记忆,也可选择全库共享;默认排除养鱼和子代理。
- DSH 设置页内查看配置、证据、记忆状态、整理任务和最近召回结果。
当前以文本对话为范围,尚无图片记忆、跨回合自动事件分段、向量回填、复杂多跳图搜索、完整人物画像流水线或后台主动搭话。情景摘要以 DSH 回合为单位。具体映射与差异见 架构说明。
安装
需要提供 systemPrompt、llm 和 Agent 回合钩子的 DSH。命令行或源码安装需要 Node.js 20.3+;桌面端通常使用自带运行时。运行时接口版本与本地验证范围见架构说明。
桌面端安装(推荐)
在 DSH 中打开「插件 → 添加插件」(部分版本入口位于设置中)。
在安装框中粘贴以下 Git 地址:
git+https://github.com/aki66938/dsh-natural-dialogue.git核对仓库来源,确认安装,完成后选择启用。
重启 DSH,在「设置 → 自然对话」中配置人格和记忆。
插件管理器会下载源码和依赖,通常不需要手动执行 npm 命令。安装需要能访问 GitHub 和依赖注册表;更换 npm 镜像不能解决 GitHub 本身无法访问的问题。安装失败时先查看插件管理器的安装详情。
当前地址跟随默认分支。插件已完成本机加载与保存验证,尚未完成全新桌面环境从 Git 地址安装的端到端验证。
命令行安装
使用你实际运行 DSH 的 profile;桌面用户优先通过应用内插件管理器安装,避免装进另一套 profile。
dsh plugin --profile <实际的profile名称> add "git+https://github.com/aki66938/dsh-natural-dialogue.git"
从源码安装
git clone https://github.com/aki66938/dsh-natural-dialogue.git
cd dsh-natural-dialogue
npm ci --ignore-scripts
dsh plugin --profile <实际的profile名称> add "<本项目绝对路径>"
首次挂载插件需要重启 DSH。之后在「设置 → 自然对话」修改配置并保存,下一轮对话使用新配置。
首次配置
先保留「日常聊天」默认方案,也可以更改姓名、角色背景和口吻。建议在一个独立聊天工作区开始测试;默认按工作区隔离记忆,不自动导入旧会话。到记忆页确认事实与表达候选后,后续相关对话才会采用这些记录。关闭独立回复、自动整理等开关可以减少辅助调用。
默认开启规划、独立 Replyer 与新对话记忆整理,通常每轮额外一次规划、一次最终回复生成、一次整理调用,失败重试可能增加用量。Replyer 跟随主请求的实际 provider/model;规划和整理可以指定辅助 provider/model。近期对话会发送给你配置的模型服务,SQLite 数据库本身保存在本机。
新手建议先用一个独立聊天工作区测试。事实和表达默认先进入待确认队列,情景摘要可以自动生效。要把事实自动采用,关闭「事实记忆需人工确认」,但同属性矛盾的内容仍会留待审核。
不会自动导入旧会话、修改其他插件、主动发消息或执行外部动作。工作任务仍由 DSH 完成,插件不会为了口吻截断代码或弱化权限检查。
插件索引
当前可通过以上 Git 地址直接安装,不依赖市场收录。DSH 的「发现」使用可添加的第三方索引源,发布 GitHub 仓库不会自动成为官方内置插件。
已向 awesome-dsh-plugin 提交收录申请 #10071,具体要求见其贡献指南。提交申请不代表已收录,审核状态以该 PR 为准。
人格怎么设置
「设置 → 自然对话 → 人格」提供「日常聊天」方案,初始姓名是余小渔。角色背景、性格、行为和口吻分别设置:有自己的判断,平时说话简短随意,不为了聊天硬找话题。备用语气默认概率为 0,保持稳定口吻;关系、兴趣、价值观和对话示例可自行补充。
人格同时供主回复、回复前规划和表达学习参考;保存后下一轮生效。不更换记忆库,不自动改写已保存的人格。升级仅迁移能精确识别的旧默认文案,并自动备份;自定义姓名、手改内容和记忆保留。可点击「使用「日常聊天」」恢复初始方案,再保存。角色设定不改变 DSH 工具权限,不作为真实人类身份与经历的证明。
人格设定与执行阶段分开,独立 Replyer 使用专门的发言提示词,而非 DSH 整套工具提示词;本轮记忆与规划在首个请求之前送入消息。默认配置与职责分离不能保证效果完全等价。原有会话里的长篇助手回答也会影响后续输出,评估时请同时比较新会话与旧会话。
0.3.0 按普通 Replyer 的结构组织请求:人格系统消息、真实 user/assistant 历史轮次、单独的记忆/表达/临时语气参考、可选回复参考、最后的回复目标。内部规划 JSON 不再交给 Replyer;当前用户消息按 ID 去重。默认回复温度为 1,已保存的自定义配置不会由加载器自动覆盖。删减了额外的流程化发言规则;采样温度与消息结构都不能保证“像人”,需看多轮样本。
独立 Replyer
设置页可开关独立回复生成,默认启用。含工具调用的步骤原样流转,不经 Replyer;成功完成且没有工具调用的文本才作为回复参考。Replyer 没有工具,不能重新执行操作。它使用近期真实用户/助手发言、本轮记忆与表达参考及主模型结果,不读取工具规划为聊天历史。
代码块、行内代码、链接和常见文件路径用占位符保护;数字与部分执行状态也有校验。JSON、纯代码及用户要求逐字或机器可读的输出直接保留。校验失败、模型报错或等待超过默认 90 秒时,显示原始结果;状态页会记录回退原因。这些检查不能证明所有语义都完整保留,涉及重要事实仍需核对。
闲聊/讨论与精确任务输出分开:闲聊把前阶段内容视为可取舍的素材,不要求复述所有账号数字、路径或检查项;用到的引用仍须准确,不允许新增数字或执行成功声明。明确要求完整清单、报告或任务结果时采用严格保留。闲聊建议字数默认 240,是生成提示而非硬截断。旧会话中的长报告不会因此被删除。
这一版先缓冲主请求以判断是否包含工具调用,确认进入 Replyer 后再生成并校验最终发言,完成后整体显示,因此首字等待会更长。超过缓冲上限或遇到非文本内容时保留原始流。成功替换后不沿用原提供商的私有 replay 状态;已报告的两阶段用量合并计入宿主结果。插件不把内部草稿写成第二条可见消息,记忆整理读取最终可见发言。
记忆怎么工作
你说「我喜欢爵士乐」→ 本轮结束后生成带逐字证据的候选 → 你在记忆页确认 → 以后相关话题召回这条事实。
模型自己声称「已经完成」不会成为已验证的外部事实。对话摘要仅代表这轮谈了什么。推断错误可以修正:原条目标记为被替代,新条目记录你手动确认的文本与证据。
active 可召回;pending 待确认;superseded 已被替代;rejected 不采用;frozen 长时间未使用而冻结。保护记忆不会自动冻结。删除会从插件库移除条目;原 DSH 会话历史不由本插件删除。
可选语义向量
不配置向量服务也能使用稀疏检索与关系扩展。需要语义召回时,在高级设置填嵌入服务完整地址、模型和可选的密钥环境变量名。请求格式为 {model,input},响应格式为 {data:[{embedding:[数字数组]}]}。不在配置文件保存密钥值。
查询和记忆文本会发送给该嵌入服务。服务不可用时明确显示降级状态,继续稀疏检索。不同端点、模型或维度的向量不混用;更换向量模型后旧条目不会自动回填。
本地数据
默认位置:<DSH_HOME>/storages/dsh-natural-dialogue/。同一 DSH_HOME 下的多个 profile 默认指向这个目录,并不天然隔离;需要独立数据库时,通过插件选项 directory 指定不同目录。同一个数据库只允许一个进程写入。
config.json:设置,保存后在内存更新。memory.db:SQLite 记忆、证据、来源片段和整理任务。owner.lock:单进程写入锁;其他进程占用时拒绝同时写同一库。replyer-events.jsonl:逐轮生成/回退路径、原因、长度等诊断元数据,不保存消息正文。超过约 1 MB 时保留最近部分;设置页展示最近记录。
不要提交这些运行数据。仓库忽略了数据库、环境变量文件和日志。源片段默认保留 14 天;记忆条目及证据保留到你删除。冻结不等于删除,敏感信息过滤只是启发式保护,不能保证识别所有隐私。
开发与验证
npm test
npm run check
npm run format:check
测试使用临时库和模拟模型,不调用真实模型、不读取真实聊天、不发送消息。源码格式化使用 Prettier。
设计参考与历史来源集中列在 设计参考。当前默认提示词已重新编写,项目继续采用原有许可证。
GPL-3.0-only。
0.3.1 升级会备份并迁移已知旧默认人格,自定义姓名和文字保留。设置保存会检测过期版本,记忆操作不会覆盖未保存的设置草稿。记忆库不可用时人格仍可使用,状态页会显示降级原因。边界检查与已知限制见 架构说明。
No comments yet. Be the first to write one.