前言¶
在 DSH 里让模型「学一个主题」,常见做法是临时搜资料、写进对话上下文,会话结束就散掉;知识是否核验、来源是否冲突、任务有没有预算边界,往往靠提示词自觉,难以复现。社区维护者 ILRI7512 的 dsh-autolearn(目录分类:工作流)把链路收成一条可重复流水线:学习目标 → 有界学习任务 → 可追溯知识库 → 证据核验 → 冲突检测 → 评估报告,并以 TypeScript 引擎 + 11 个 DSH 原生工具 挂进 Harness,可选 MCP 适配器与本地 CLI,默认不依赖 Python 运行时。
这是什么¶
dsh-autolearn 是 DeepSeek Harness 的自主学习插件(README 标注状态 v2.0.0)。业务逻辑在 src/ 的 TypeScript 实现中,README 写明生产运行时 0 个外部依赖;DSH 侧通过 adapters/dsh 注册 11 个工具(由 README 所述 60 个 MCP 工具收敛而来),与可选 adapters/mcp、cli 共用同一套 AutolearnServices 门面。数据库 schema 与 v1.2 兼容(v7),旧知识库可直接打开。
- 目录页:https://www.skillhub.cn/plugins/ILRI7512/dsh-autolearn
- 源码:https://github.com/ILRI7512/dsh-autolearn
- 许可证(package.json):MIT
架构与数据流¶
下面是从 README 提炼的调用关系,便于理解「模型看到的工具」落在哪一层。
DSH Agent
│ ctx.tools.register(原生 JSON Schema + 运行时校验)
▼
adapters/dsh(11 工具 + 审批 hook) adapters/mcp(可选) cli(用户侧)
└──────────────┬───────────────────────┬───────────────┘
▼
application/services(唯一业务门面)
▼
Learning · Knowledge · Retrieval · Verification · Practice · Security · Storage
▼
node:sqlite(WAL/FTS 无关的自建倒排 + float32 向量索引)
插件卸载时,README 说明会释放 SQLite 连接、索引文件锁与 hook 等资源。
核心功能:11 个原生工具¶
经过上面的步骤理解架构后,可按工具名分工。下表摘自 README,「风险」列用于判断是否需要宿主审批或写库。
| 工具 | 作用 | 风险 |
|---|---|---|
learning_create |
建项目 + 生成主题任务链(discover→extract→verify→practice + 缺口/评估/报告) | write |
learning_run |
跑一轮有界学习(预算/时长/任务数/停滞停止;失败重试与依赖阻塞) | write |
learning_status |
项目/任务/覆盖率/核验率/未达标项/最近运行/缺口 | read |
knowledge_search |
BM25 + 特征哈希向量 + RRF 混合检索,带核验/冲突/时效/许可警告 | read |
knowledge_manage |
save / update / invalidate / rollback / export / get / partitions | write(invalidate/rollback 需确认) |
knowledge_verify |
verify / verify_formula / list_evidence / find_duplicates / detect_conflicts | read |
source_manage |
discover / read / list(SSRF 防护、域名白名单、体积/超时限制) | read/external |
learning_evaluate |
覆盖率/核验率/来源完整率/冲突/实践通过率/成本 + 可选报告 | read |
learning_review |
失败/阻塞/耗尽重试/冲突/缺口复盘;可重置失败任务(需确认) | read/write |
system_diagnostics |
数据库/外键/索引一致性、schema、权限、网络策略、最近拒绝 | read |
system_maintenance |
integrity / rebuild_index / backup / verify_backup / restore / delete_chunk / vacuum | destructive(宿主审批) |
DSH 原生工具在 tools/pre-execute 可对高风险操作返回 {kind:'ask'};用户拒绝则不执行,判定异常时 README 写明为失败关闭(不自动放行)。
环境要求¶
| 项 | 要求 |
|---|---|
| Node.js | ≥ 22.6(内置 node:sqlite 与原生 TypeScript 跑测试) |
| DSH | 支持 Cordis 插件与 ctx.tools 的版本(仓库验证于 0.2.0-rc.2 契约) |
| Python | 不需要(legacy 目录仅作参考) |
| 构建 | TypeScript 5.9(devDependency) |
安装与启用¶
先做依赖安装与构建,再把插件 link 进 profile。命令均来自 README,路径需按本机仓库位置替换。
# 1) 类型检查 + 构建(产出 dist/)
pnpm install
pnpm run typecheck
pnpm run build
# 若仓库位于 FAT/exFAT/共享存储(不支持 symlink),pnpm 可能失败:
# npm i -g typescript && tsc -p tsconfig.build.json
dsh plugin --profile web add link:/path/to/dsh-autolearn/plugins/autolearn
在 profile 的 package.json 中确认 bundles 包含本地包名(示例结构如下):
{
"dsh": { "profile": { "bundles": ["@deepseek-ai/dsh-base", "...", "@local/dsh-autolearn"] } }
}
重启 DSH 后,模型可见工具为 learning_create、learning_run、knowledge_search 等 11 个。README 还记录:若出现 webServer 未注入导致 entry 激活失败,需使用已修复版本(子上下文 ctx.inject(['webServer'], …)),web profile 正常时会打印 [dsh-autolearn] settings API ready: <settingsPath>。
引擎目录与环境变量¶
默认按顺序解析引擎目录(DSH_AL_HOME 可覆盖):
DSH_AL_HOME<repo>/config.json存在 → 仓库根<repo>/dsh_autonomous_learning/config.json存在 → legacy 引擎目录(v1.2 的data/在此)- 仓库根
常用环境变量(缺省见 README):
| 环境变量 | 用途 |
|---|---|
DSH_AL_HOME |
引擎目录(config.json / data/) |
DSH_AL_DATA_DIR |
数据目录覆盖,缺省 <home>/data |
DSH_AL_MODE |
assisted / auto / lab |
DSH_AL_ALLOW_NETWORK |
是否允许外部抓取,缺省 false |
DSH_AL_CONFIG |
配置文件路径 |
DSH_AL_LOG_LEVEL |
DEBUG/INFO/WARNING/ERROR,缺省 INFO |
设置卡在 DSH 插件设置页修改的模式、每日预算、任务上限会在下一轮开始时生效;dataDir 变更需要重启。
典型用法¶
在 DSH 里跑学习闭环¶
- 用
learning_create建项目并生成任务链。 - 用
learning_run执行有界一轮(受预算、时长、任务数、停滞条件约束)。 - 用
learning_status/learning_evaluate查看进度与报告维度。 - 用
knowledge_search检索已入库内容;用knowledge_verify做证据与冲突相关检查。
外部来源默认不走网络:DSH_AL_ALLOW_NETWORK 缺省为 false,需显式允许后 source_manage 才可抓取(且带 SSRF 与端口限制,见下文安全默认值)。
用户侧 CLI(审批与诊断)¶
README 提供的 CLI 示例:
node dist/cli.js pending
node dist/cli.js approve <token>
node dist/cli.js reject <token> [note]
node dist/cli.js status [projectId]
node dist/cli.js diagnostics
node dist/cli.js search "滑点" <projectId>
MCP / CLI 通道对破坏性操作使用本地确认令牌(作用域 = action + target、15 分钟有效、单次消费)。
可选 MCP 兼容层(默认不启用)¶
node dist/adapters/mcp/server.js
README 说明默认不启用,是为避免与原生入口同时写同一数据库。客户端示例:
{
"mcpServers": {
"autolearn": {
"command": "node",
"args": ["/path/to/dsh-autolearn/dist/adapters/mcp/server.js"],
"env": { "DSH_AL_HOME": "/path/to/dsh-autolearn/dsh_autonomous_learning" }
}
}
}
安全默认值与运行权限¶
插件在 DSH 进程内执行,具备与宿主相同的系统权限边界;安装前应阅读源码与 MIT 许可证,并按组织策略评估写库、备份恢复与可选网络抓取。
README 列出的默认策略摘要:
| 项 | 默认 | 说明 |
|---|---|---|
| 网络 | 关闭 | allow_network=true 才允许抓取;仅 http/https + 限定端口 |
| SSRF | 默认拒绝私有/环回等地址 | DNS 钉死、重定向逐跳校验 |
| 路径 | 授权根 + data 目录 | realpath,防符号链接与 ../ |
| 密钥 | 入库前扫描拒绝 | 日志脱敏 |
| 证据 | 无证据一律 fail | 观点/假设不能 verified |
| 检索作用域 | 无 project 时仅 visibility='global' |
防跨项目泄漏 |
| 代码执行 | strict 沙盒(lab 模式) | 非 seccomp/LSM 内核沙箱;能力不足时失败关闭 |
文档正文在 data/documents/,不在 DB 备份清单内;做完整备份需复制 data 目录。
适用场景与已知限制¶
适合:需要在 DSH 工作流里把「学习某主题」变成可查询、可核验、可评估的本地知识库,并愿意用 11 个原生工具驱动有界任务,而不是单次对话堆上下文。
需注意(README「已知限制」):
- PDF/DOCX 解析未迁移,会报错并建议转 Markdown/TXT;HTML 用正则清洗。
use_model=true的模型辅助规划/抽取未迁移,会警告并只走规则链路。- 代码执行仅 JavaScript、仅 lab 模式;Python 执行已移除。
- 哈希向量为词汇级召回,README 未做检索质量评测、不宣称语义提升。
- 调度 tick、知识图谱查询等能力未迁移(表结构保留)。
测试方面,README 写明 171 项 node:test 与 legacy 197 项 pytest 基线;审计与性能材料在 reports/、docs/refactor/。
结尾¶
dsh-autolearn 把自主学习收成 DSH 原生工具链:同一 TypeScript 引擎服务 Cordis 插件、可选 MCP 与 CLI,强调证据核验、冲突检测与有界 learning_run,并兼容 v1.2 的 v7 知识库。进一步了解可从社区目录页与 GitHub 仓库阅读安装、环境变量与故障恢复表。