🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

记忆技能自演化 lsmax-72/dsh-rsi

DeepSeek Harness
lsmax-7218 天前有提交已提供中文文档扫描:含敏感能力

面向个人用户、安装在 dsh 中的 Chat Memory+Skill 自动演化插件

31.4/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/15 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add lsmax-72/dsh-rsi
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · model
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 18 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/31) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

engines.node 要求 >=24,不满足 Node 22.19.0;仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-rsi(未发布到 npm,仅可源码安装)
✗Node 引擎要求 >=24 · 基线 Node 22.19 不满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/12 09:36:31

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 29 处,展示前 29 条)
  • 删除本地文件递归
    build/build.mjs:8
    await rm(join(root,'lib'),{recursive:true,force:true});
  • 写入本地文件
    build/build.mjs:32
    await writeFile(join(root,'lib/client.js'),client.outputFiles[0].contents);
  • 读取本地文件
    build/verify-core.mjs:6
    const manifest = JSON.parse(await readFile(join(root, 'vendor/source-manifest.json'), 'utf8')).core;
  • 读取本地文件
    build/verify-core.mjs:8
    const bytes = await readFile(join(root, 'vendor/core/src', entry.path));
  • 读取本地文件
    build/verify-panel.mjs:4
    const manifest=JSON.parse(await readFile(new URL('../source-manifest.json',root),'utf8')).panel;
  • 读取本地文件
    build/verify-panel.mjs:5
    for(const entry of manifest.files){const bytes=await readFile(new URL(entry.path,root));if(createHash('sha256').update(bytes).digest('hex')!==entry.sh
  • 发起网络请求
    src/api/contract.ts:17
    const result=await ctx.remote.rsi.request(operation,payload);
  • 写入本地文件
    src/core/local-core.ts:31
    await mkdir(dataDir, { recursive: true });
  • 发起网络请求
    src/index.ts:14
    @Remote async request(operation:string,payload:any) { await this.ready; return this.runtime.request(parseOperation(operation),parsePayload(payload));
  • 写入本地文件
    src/runtime/runtime.ts:60
    const temporary=recordPath+'.tmp';await writeFile(temporary,JSON.stringify(record)+'\n',{mode:0o600});await rename(temporary,recordPath);
  • 写入本地文件
    src/runtime/runtime.ts:60
    const temporary=recordPath+'.tmp';await writeFile(temporary,JSON.stringify(record)+'\n',{mode:0o600});await rename(temporary,recordPath);
  • 写入本地文件
    src/runtime/runtime.ts:69
    const root = join(this.directory,'learning-runs'); await mkdir(root,{ recursive:true });
  • 写入本地文件
    src/runtime/runtime.ts:71
    await writeFile(recordPath,JSON.stringify(record)+'\n',{flag:'wx',mode:0o600});
  • 删除本地文件递归
    src/runtime/runtime.ts:114
    const invalid=!!this.state.get(`profile-invalid:${scope}`);if(invalid)await rm(join(core.directory,'profile'),{recursive:true,force:true});
  • 删除本地文件递归
    src/runtime/runtime.ts:118
    const globalInvalid=!!this.state.get('profile-invalid:global');if(globalInvalid)await rm(join(global.directory,'profile'),{recursive:true,force:true})
  • 删除本地文件递归
    src/runtime/runtime.ts:465
    await rm(core.directory,{recursive:true,force:true});
  • 删除本地文件递归
    src/runtime/runtime.ts:476
    await rm(join(core.directory,'profile'),{recursive:true,force:true});this.state.set(`profile-invalid:${scope}`,Date.now());
  • 读取本地文件
    src/runtime/state.ts:15
    const path = realpathSync(resolve(cwd));if(!statSync(path).isDirectory())throw new Error('工作区必须是目录');
  • 写入本地文件
    src/runtime/state.ts:36
    mkdirSync(directory, { recursive: true, mode: 0o700 });
  • 写入本地文件
    src/runtime/state.ts:38
    try {writeFileSync(this.lock,this.token,{flag:'wx',mode:0o600});} catch(error:any) {
  • 读取本地文件
    src/runtime/state.ts:40
    const pid=Number(readFileSync(this.lock,'utf8').split(':')[0]);
  • 写入本地文件
    src/runtime/state.ts:42
    unlinkSync(this.lock);writeFileSync(this.lock,this.token,{flag:'wx',mode:0o600});
  • 删除本地文件
    src/runtime/state.ts:42
    unlinkSync(this.lock);writeFileSync(this.lock,this.token,{flag:'wx',mode:0o600});
  • 读取本地文件
    src/runtime/state.ts:86
    close() { this.db.close();if(readFileSync(this.lock,'utf8')===this.token)unlinkSync(this.lock); }
  • 删除本地文件
    src/runtime/state.ts:86
    close() { this.db.close();if(readFileSync(this.lock,'utf8')===this.token)unlinkSync(this.lock); }
  • 读取本地文件
    src/skills/resources.ts:7
    const root=await realpath(base.path),files:any[]=[];let bytes=0;
  • 读取本地文件
    src/skills/resources.ts:9
    for (const entry of await readdir(path,{withFileTypes:true})) {
  • 读取本地文件
    src/skills/resources.ts:11
    const absolute=join(path,entry.name),stat=await lstat(absolute);
  • 读取本地文件
    src/skills/resources.ts:17
    const content=await readFile(absolute);files.push({path:local,content:content.toString('base64'),encoding:'base64',is_executable:!!(stat.mode&0o111)})
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-api-gateway@deepseek-ai/cordis@deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/dsh-session-persistence@deepseek-ai/dsh-skill@deepseek-ai/dsh-tools@deepseek-ai/dsh-typert-protocol
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 记录聊天记忆
  • 技能自动演化

README

由 DeepSeek 最新模型翻译生成
dsh-rsi 让 Coding Agent 从历史任务中积累可复用的 Memory 与 Skill,并在后续会话中按需使用。 dsh-rsi 是面向 DeepSeek Harness(dsh) 的单用户、本地自动学习插件。它不改变 dsh 核心 Agent 执行循环,采集真实会话与工具执行轨迹,异步提炼两类长期资产: - Chat Memory:保存事实、用户偏好、项目约定和长期场景,支持更新、冲突处理与检索。 - Skill:从任务执行经验中提炼可复用的方法,支持创建、增量修订、版本管理和按需加载。 目标不是让模型自行修改权重或插件源码,而是实现外部记忆和技能资产的持续演化。 项目状态:开发中。
展开完整文档(README 剩余 1 节)
dsh-rsi

让 Coding Agent 从历史任务中积累可复用的 Memory 与 Skill,并在后续会话中按需使用。

dsh-rsi 是面向 DeepSeek Harness(dsh) 的单用户、本地自动学习插件。它不改变 dsh 核心 Agent 执行循环,采集真实会话与工具执行轨迹,异步提炼两类长期资产:

- Chat Memory:保存事实、用户偏好、项目约定和长期场景,支持更新、冲突处理与检索。
- Skill:从任务执行经验中提炼可复用的方法,支持创建、增量修订、版本管理和按需加载。

目标不是让模型自行修改权重或插件源码,而是实现外部记忆和技能资产的持续演化。

项目状态:开发中。

核心能力

| 能力 | 实现方式 |
| 真实轨迹采集 | 通过 dsh 会话事件读取用户/助手消息、工具调用及结果,过滤插件自身会话和重复历史 |
| 分层 Chat Memory | L0 原始对话 → L1 原子记忆 → L2 项目/主题场景 → L3 长期画像;L1 支持去重、修正和合并 |
| Skill 增量演化 | Review Agent 结合当前任务轨迹与已有 Skill,决定跳过、新建、局部修改或整体更新 |
| 渐进式资产消费 | Memory 混合检索并按预算注入;Skill 经官方 Provider 暴露,正文和资源按需加载 |
| 本地治理与恢复 | 工作区/Global 隔离、持久化学习任务、阶段恢复、Skill 版本及回滚、后台调用额度 |
| 集成管理界面 | 在 dsh 插件详情页查看 Memory、Skill、来源、版本、学习状态和成本 |

工作原理

dsh-rsi 学习与消费闭环

1. 采集:保留真实任务证据

插件监听 dsh 的 session/event,在任务轮次结束后读取已持久化的会话事件。Memory 主要使用用户与助手正文;Skill Review 额外使用工具调用、执行结果及结束原因。后台学习任务写入 SQLite,并通过来源游标与唯一任务 ID 防止重复入队。

2. 学习:Memory 与 Skill 分别演化

Memory: L1 从对话中提炼原子记忆,使用已有记忆检索与 LLM 判断执行 Store / Skip / Update / Merge;L2 异步整理相关场景,L3 在满足触发条件时更新长期画像。底层 L1 被纠正后,旧的派生场景与画像会暂时失效,等待重建。

Skill: Review Agent 读取任务轨迹与已有 Skill,调用资产工具创建或修订 SKILL.md,并将较长的脚本、模板等保存为资源文件。写入时执行版本校验,历史版本保留,可人工编辑、禁用或回滚。

两条学习路径共享会话采集和后台调度,但 Skill 不必等待 L2/L3 生成完成。

3. 消费:下一次任务按需使用资产

- Memory:在 agent/pre-step 的首个模型步骤前,使用 SQLite FTS5、向量检索与 RRF 召回相关 L1,并在默认 6000 字符预算内提供相关记忆、场景导航和画像。模型还可通过 rsi_memory_search、rsi_conversation_search、rsi_profile_read 查询详情。
- Skill:通过 dsh 官方 Skill Provider 暴露带 rsi- 前缀的技能名称与描述,Agent 自行决定是否加载正文及对应版本的资源。

系统架构

dsh-rsi 系统架构

项目主要由四部分组成:

| 模块 | 主要职责 |
| dsh 宿主接入 | 会话事件、模型步骤、Skill Provider、插件管理 API |
| 后台执行与治理 | 模型桥接、学习队列、预算、诊断日志和作用范围 |
| Memory / Skill 核心 | 分层提炼、检索、Review Agent、资源与版本处理 |
| 管理页面与 UI 适配 | 资产浏览、编辑、版本管理、学习状态和设置 |

快速开始

环境要求

- 官方 dsh;当前兼容目标为 0.2.0-rc.2(Cordis 4.0.4)。
- Node.js 24 或更高版本。
- 在 dsh 中配置可用的模型;后台学习默认跟随来源会话的模型。

1. 构建插件

git clone https://github.com/lsmax-72/dsh-rsi.git
cd dsh-rsi
npm ci

npm ci 会通过 prepare 自动运行构建;如果安装时禁用了生命周期脚本,需要手动执行 npm run build。

2. 安装到 dsh

在项目目录执行 pwd(Windows 可获取对应的绝对目录路径)。打开 dsh 的 插件 → 添加插件,选择或输入构建后的项目目录,安装并启用。随后进入插件详情页。

项目当前为 private: true,未发布到 npm。

3. 开始使用

1. 在 dsh 中打开一个项目工作区,正常执行 Coding Agent 任务。
2. 在插件「概览」中查看后台学习任务、资产数量与模型调用记录。
3. 在「记忆」「技能」页检查和修正生成的资产。
4. 后续在相同工作区的新会话中继续任务,检查 Memory 召回与 Skill 是否被自然加载。

首次使用时资产为空是正常现象;任务结束也不保证一定生成新 Memory 或 Skill。

资产管理

管理入口:dsh 左侧「插件」→ dsh-rsi → 插件详情。

| 页面 | 功能 |
| 概览 | 工作区选择、任务状态、资产数量与学习成本 |
| 记忆 | 查看 L0–L3、来源追溯、L1 纠正或删除 |
| 技能 | 查看正文和资源、编辑、禁用、历史版本及回滚、复制为 Global Skill |
| 设置 | 学习开关、语言与调用预算、资产导出和清理 |

记忆管理页(模拟数据)

技能管理页(模拟数据)

以上管理页面截图使用模拟数据。当前 L2/L3 不支持直接编辑,Skill 资源提供只读预览。

工作区和 Global

项目资产按 dsh 会话绑定的工作区真实路径隔离;个人偏好这类通用记忆可以放进 Global,Skill 也可以手动复制成 Global 版本。后续任务只消费当前工作区和 Global 的资产,不会自动访问其他工作区的专属内容。范围分类与冲突判断要交给 LLM,仍可能出错。

默认数据目录是 $DSH_HOME/plugin-data/dsh-rsi;没配 DSH_HOME 时用 ~/.dsh/plugin-data/dsh-rsi。其中 rsi-state.sqlite 保存队列、设置与调用记录,各 Scope 分别保存 memory.sqlite、skills.sqlite、Skill 资源及画像文件。完整布局见实现进度。

默认配置

| 配置项 | 默认值 |
| 自动学习触发 | 稳定阶段每 2 轮或空闲 30 秒;保留首次 Warmup |
| 每日后台模型请求预算 | 100 次 |
| 单次模型输出上限 | 4096 Token |
| 单次后台模型运行循环上限 | 16 步 |
| 单次后台模型运行超时 | 180 秒 |
| 自动 Memory 注入预算 | 6000 字符 |

请求预算按 UTC 日期计算,包含工具循环和失败的模型请求;它不是费用或 Token 总量上限。后台学习会增加模型调用成本,即使学习暂停,已保存的资产仍可消费。

开发与文档

npm run build

提交代码前请阅读 AGENTS.md。

进一步阅读:产品需求 · 实现进度

本项目不包含模型权重训练、自动修改插件自身源码、团队权限系统或自动索引整个代码库。更多项目文档保存在 docs/。

开源参考与致谢

本项目的设计与实现参考了以下开源项目:

- TencentDB-Agent-Memory
预览分享卡片长什么样 ↓lsmax-72/dsh-rsi
分享 · DeepSeek Harness Hub
lsmax-72/dsh-rsi

面向个人用户、安装在 dsh 中的 Chat Memory+Skill 自动演化插件

回到顶部