dsh-pss:用 LoRA 权重承载会话记忆,并实时查看检索链路

前言

在 DeepSeek Harness(DSH)里做带记忆的 Agent,常见做法要么把摘要和历史一直塞进上下文,prompt 随轮数变长;要么用向量库切块检索,存储随历史线性增长,且相似度召回容易带上无关旧话。维护者 LFLmLXY 的 dsh-pss(GitHub:LFLmLXY/dsh-pss,社区目录:skillhub 插件页)走另一条路:把「这段会话里用户关心什么」压进一组 LoRA 权重与定长状态,检索时用 adapter 改写查询意图,再对接 BM25 知识库与会话记忆;同时提供 HTTP Dashboard 星图,把 ingest、意图、检索、装配、编译等步骤可视化。下文按定位、能力、安装与用法说明,事实以仓库 README 与 package.json 为准(当前版本 0.3.0,许可证 MIT)。

这是什么

PSS(Parameterized Session State)即参数化会话状态:会话结束或销毁时通过 compile 把本轮 history 训进 LoRA;下一轮 retrieve 时加载该会话 adapter,把「问题 + 会话质心 + 关键词」改写成检索意图,查知识库并拼 context pack 给模型,而不必把整段对话历史再读一遍。README 称存储与上下文体积与对话轮数无关——状态文件为定长的 centroid(32 维)、keywords(48 条)、lora 引用等,落盘在 sessions/<id>.json,实测约 1.5KB。

插件分类为「记忆」;运行时依赖 Node(package.json 要求 >=20),DSH 侧要求 >=0.2.0-rc.1。默认 v0.3 工程闭环可用,意图生成默认 intentBackend: 'local'(本地启发式);接上 Python 后端后可切 lora 走真实 adapter。

核心功能

O(1) 恒定存储

每轮只更新定长结构:会话质心 EMA(c ← 0.78c + 0.22v)、带衰减的关键词表、LoRA adapter 引用。历史本身不进持久状态,仅在 compile 时喂给训练器,训完即弃。

参数化意图与双通道检索

用户口语化提问(例如「那 O(1) 那块怎么做的?」)可由会话专属权重扩成与知识库更对齐的检索词,再 BM25 top-k。工具 pss_retrieve 供模型主动拉记忆;pss_remember 可把结论写成 digest 进入会话记忆索引,检索时与内置知识同台排序并分别标注 [记忆] / [知识]。

实时脑图探针

内置 HTTP 服务(默认 127.0.0.1:8964)提供星图 Dashboard:探针记录 user → intent、intent → knowledge、knowledge → answer、session → lora 等关系,约每 3 秒增量拉取图数据。节点按类别着色(用户输入、PSS 意图、知识片段、AI 回答、系统事件),便于观察一次 retrieve 的全链路。

可选离线 LoRA 训练后端

python_backend 提供 FastAPI 服务(默认示例 http://127.0.0.1:8077)。未装完整训练栈时可 PSS_DRY_RUN=auto 走 dry-run,仍写 adapter_manifest.json 与占位权重,保证流水线可跑通;有 GPU 时可配置 base model 做真训练。

安装与启用

插件以当前 DSH 进程权限运行,安装前请自行审阅源码与 MIT 许可证。社区目录与 DeepSeek / 幻方无官方从属关系,DSH 生态是「一切皆插件」的独立插件体系。

方式 A:仅体验脑图(不装 DSH)

README 提供的本地演示步骤如下(需自行 clone 仓库,本文不展开 clone 细节以外的环境假设):

cd dsh-pss
npm install
npm run dev

浏览器打开 http://127.0.0.1:8964/。可选:npm run dev -- --no-demo 不灌演示语料,--port=9100 换端口。

方式 B:作为 DSH 插件安装

在插件目录构建后,用本地路径安装(README 原文示例,请换成你的实际路径):

npm install
npm run build
dsh plugin add D:/path/to/dsh-pss

等价做法是在 profile 的 cordis.yml 中插入与 cordis.patch.yml 一致的 bundle 配置,例如:

- insert:
    - id: dsh-pss
      name: dsh-pss
      config:
        port: 8964
        autoStart: true
        seedDemo: true
        intentBackend: local

装好后:DSH 里用户每说一句话插件会 ingest;模型可调用 pss_retrieve;会话销毁时自动 compile。脑图仍在 http://127.0.0.1:8964/。

方式 C:接上 Python 训练/intent 后端(可选)

cd python_backend
pip install -r requirements.txt
python main.py

在 DSH 插件配置中增加:

      config:
        trainerUrl: http://127.0.0.1:8077
        intentBackend: lora
        intentBackendUrl: http://127.0.0.1:8077

真训练需额外 requirements-train.txt 与 GPU,并按 README 设置 PSS_DRY_RUN=0 与 PSS_BASE_MODEL 等环境变量。

典型用法与 HTTP 接口

装入 DSH 后,日常路径是:对话过程中自动 ingest → 需要上下文时由模型或你通过 pss_retrieve 检索 → 会话结束 compile 更新 LoRA。也可直接调插件共用的 REST API(默认仅监听本机),常用路径包括:

方法 路径 说明
GET / 脑图页面
GET /api/pss/health 健康检查
POST /api/pss/ingest {sessionId?, role, text} 吸收一条消息
POST /api/pss/retrieve {sessionId?, query} 双通道检索
POST /api/pss/remember {sessionId?, text} 写入结论型记忆
POST /api/pss/compile {sessionId, history?} 触发编译

自检可运行 npm run smoke(README 标注 smoke 34 passed)。知识语料可替换仓库内 knowledge/pss.md。

适用场景与注意

适合:希望在 DSH Agent 里控制长对话的 token 与存储成本、又需要「会话级」检索意图(而非纯向量相似度)的开发者;需要调试记忆链路时,星图 Dashboard 比纯日志更直观。

注意:

  1. 默认 local 意图后端是可解释的启发式,与接上 lora 后端的行为不同;评估效果时应明确当前 intentBackend 与是否启用 trainerUrl。
  2. Dashboard 与 API 默认绑定 127.0.0.1,若改端口或暴露到公网需自行评估安全风险。
  3. LoRA 真训练依赖 Python 环境与可选 GPU;dry-run 仅保证流程闭环,不代表生产级模型质量。
  4. 插件依赖 @deepseek-ai/schemastery,并以 peer 方式对接 @deepseek-ai/cordis、@deepseek-ai/dsh-tools(在 DSH 环境中由宿主提供)。

结尾

dsh-pss 把会话状态压成定长结构与 LoRA adapter,用参数化意图衔接 BM25 与会话记忆,并用星图把 retrieve / compile 链路摊开。若要在目录里查看元信息或跟踪更新,可访问 skillhub.cn/plugins/LFLmLXY/dsh-pss;源码与完整 API 列表见 github.com/LFLmLXY/dsh-pss。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜