行业资讯

Agent 技能自我进化:Hermes 式学习循环在 DeepSeek Harness 上的落地

发布时间:2026/8/23 19:20:33
Agent 技能自我进化:Hermes 式学习循环在 DeepSeek Harness 上的落地 https://github.com/QIANLING-0831/dsh-memory-plusAgent 技能自我进化Hermes 式学习循环在 DeepSeek Harness 上的落地️标签#Agent自进化 #技能管理 #Hermes #学习循环 #DeepSeek-Harness关键词Agent 技能自我进化, Hermes 学习循环, skill_write, 后台反思蒸馏, DeepSeek Harness摘要让 Agent 从自己完成的回合里学会新技能是 Nous Research Hermes Agent 等自进化框架的标志能力。本文拆解它落到 DeepSeek HarnessDSH要过哪几道坎DSH 原生 skill 系统的文件格式与注入方式、模型可调的技能管理器工具、以及一个后台定时反思蒸馏循环水位线 冷却 启发式门槛 严格 JSON 契约 原子写并给出一套可运行的实现dsh-memory-skillsMIT。1. 背景DSH 原生 skill 系统是什么DSH 自带技能系统deepseek-ai/dsh-skilldsh-skill-filesystemdsh-tool-skill技能是Markdown 文件 YAML frontmatter两种布局目录包name/SKILL.md或平铺name.mdfrontmatter 至少含namekebab-case与description可选whenToUse、disable-model-invocation、user-invocabledsh-skill-filesystem从若干根扫描技能并注入会话技能目录根有优先级项目.dsh/skills100 用户$DSH_HOME/skills400 bundled 600模型通过原生skill工具按名加载技能正文。--- name: pnpm-recovery description: Fix lockfile mismatch whenToUse: 当 pnpm install 失败时 --- Run pnpm install --no-frozen-lockfile, then rebuild.关键点技能文件是纯文本、无插件状态——所以自己写技能本质上就是写这些 Markdown 文件。2. 技能管理器让模型能增删查模型通过三个工具操作技能dsh-memory-skills提供工具作用skill_write(name, description, whenToUse?, content)创建/更新技能写 DSH 原生文件skill_delete(name)删除托管技能skill_list()列出可用技能原生目录 托管的标记(managed)核心是原子写写临时文件再 rename失败不残留半成品write({name,description,whenToUse,content}){assertSkillInput(input);// kebab-case 必填校验 上限constfilethis.pathFor(input.name);consttmp${file}.${randomUUID()}.tmp;writeFileSync(tmp,renderSkillFile(input),utf8);renameSync(tmp,file);// 原子替换return{created,path:file};}写入目标默认$DSH_HOME/skills正是dsh-skill-filesystem的 user-dsh 根rank 400目录自带 watcher 自动失效缓存——写完立刻进会话技能目录下一步就能被原生skill工具加载无需重启。3. 后台自我进化反思 → 蒸馏 → 写技能后台意味着不在请求路径上fire-and-forget不能打断主循环、不能污染会话历史、不能动 KV 前缀缓存。3.1 触发定时 水位线// 每 evolveIntervalMs默认 60s跑一次setInterval(()this._evolveTick().catch(...),this.config.evolveIntervalMs);async_evolveTick(){for(constsessionofthis.ctx.sessions.list()){conststatedb.prepare(SELECT last_seq FROM skill_evolve_state WHERE session_id?).get(session.id);constfreshsession.events.filter(ee.seq(state?.last_seq??-1));// 启发式门槛近期有足够长的 assistant 消息// 冷却期每会话 evolveCooldownMs 内不重复// 到达则 _evolveSession(...)最后回写水位线}}水位线保证每段事件只被反思一次冷却期 窗口最近 N 条 门槛把 LLM 成本压平。3.2 反思一次严格 JSON 契约的 LLM 调用向ctx.llm.stream发一条固定的 system prompt“背景技能策展人”要求只返回 JSON{evolve:true,name:kebab-case 技能名,description:一句话,whenToUse:何时用,content:Markdown 正文,reason:为何值得留存}{evolve:false,reason:一次性内容不构成技能}解析时剥掉 json 围栏、用括号配平提取首个 JSON容错降级为跳过constparsedparseEvolutionResponse(text);if(!parsed?.evolve)return{kind:skipped};if(!isSkillName(parsed.name)||!parsed.description||!parsed.content)return{kind:invalid};this.writeSkill({name:parsed.name,description:parsed.description,content:parsed.content},{sessionId});3.3 记录与容量每次动作写入派生库skill_events日志created / updated / skipped / invalid / cap / error可查托管技能有上限默认 50达上限时跳过并记cap避免白烧 LLM技能文件是纯 Markdown卸载插件也不丢。4. 与 dsh-memory-evolve205★的取舍社区已有大而全的dsh-memory-evolve五轨记忆 技能自进化 COI 调度 WebUI。dsh-memory-skills刻意小而聚焦只做技能管理器 后台反思蒸馏这一件事~700 行零运行时依赖直接写 DSH 原生技能文件复用官方 skill 系统不另起炉灶与全家桶其他包CJK 检索 / 混合检索 / 去重组成完整记忆地基。要不要上 WebUI、多人协同、git 分支感知属于后续扩展项。5. 真机验证与一个真实踩坑在真实 harnessheadless profile用一次性任务跑通了完整闭环skill_write → 生成 $DSH_HOME/skills/verify-tool.mdfrontmatter 正确实时进会话目录 skill_list → - verify-tool (managed): verification skill for testing skill_delete → 文件删除目录实时清空 skill_events → 记录 created / deleted含会话 ID / 时间戳踩坑记录值得写进你的实现cordis 插件加载器读命名导出——如果你的插件同时export default apply加载器会把裸函数当入口inject列表失效启动报cannot get property tools without inject。其他官方插件都没有默认导出照做即可。6. 小结技能 DSH 原生 Markdown 文件 → 用skill_write增删、用ctx.skills目录暴露自进化 定时水位线扫描 一次严格 JSON 反思 原子写 日志全部在请求路径之外真机验证证明写入即对会话可见增删查闭环日志可审计。仓库https://github.com/QIANLING-0831/dsh-memory-plus packages/dsh-memory-skillsMIT欢迎试用、提 issue。