Rewrites each request against a learned prompt profile and automatically updates habits, anti-hallucination rules, and learning records.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:Hua1Q1nG/dsh-prompt-self
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time. Only install sources you trust, and pin a commit (github:owner/repo#sha).
README
个人 Prompt 画像引擎 —— 为 DeepSeek Harness(DSH) 打造的双面客户端插件:在消息级自动改写你的 prompt、自动学习你的书写习惯,并提供可视化的开关与画像查看界面。
起因:希望 AI 能记住「我喜欢怎样的表达、经常省略哪些约束、哪些说法容易让它误解」,并在每次对话前自动补齐 —— 而不是早期那样,每次满意后还得自己敲一句
-fin手动让 AI 记录(-fin的来龙去脉见下文「关于 -fin」)。
✨ 特性
- 消息级自动改写:每次发出新请求,引擎先用 LLM 按你的个人画像改写(消除歧义、补齐习惯性省略的约束、应用防幻觉规则),再把优化版注入给模型执行 —— 模型看到的、执行的始终是优化后的意图。
- 自动学习画像:每次回合结束后,自动分析「原始请求 + 最终回答」,提炼你的书写习惯、防幻觉规则与优化经验,持续沉淀到画像文件 —— 不再需要
-fin(仍保留-fin作为"立即学习并确认"的兼容触发)。 - 可视化控制(设置 →「Prompt 画像」):
- 「自动改写优化」「自动学习画像」两个开关,即点即存、实时生效;
- 画像三栏视图:习惯清单 / 防幻觉规则 / 学习记录(含计数、更新时间、折叠);
- 中英双语,跟随应用语言。
- 对话区快捷入口:输入框上方常驻「● Prompt 画像 · 已开启」状态胶囊,点击弹出浮动面板,无需进设置即可查看/切换。
- 零侵入:不改动 DSH 应用代码,全部通过官方扩展点安装(web profile 补丁 + 用户预设 + skill 文件 + AGENTS.md)。
关于 -fin(旧的手动反馈指令)
-fin 是本插件前身(prompt-self-optimizer 技能)时代留下的手动反馈指令:那时还没有自动学习,用户对某次回答满意,就要自己敲一句 -fin(可理解为「finish —— 这次不错,记下来」),AI 才会把刚才这组「请求 + 回答」学进画像。
它的痛点是:每次都靠人记得敲,漏一次就少学一次,还得多打一句话。于是本插件把这一步自动化——每次回合结束(turn/end)自动分析并学习,日常不再需要 -fin。
不过 -fin 仍被保留,作为**「立即学习 + 确认」的兼容触发**:哪怕把「自动学习画像」开关关掉了,敲一句 -fin 也能强制学习最近一次交互,并得到简短确认,老用户沿用旧习惯也不会失效。
🏗 工作原理
你发出 prompt
│
▼
┌──────────────────────────────┐
│ 宿主引擎(Agent 层预设) │
│ agent/pre-step 钩子 │
│ 1. 读画像 profile.md │
│ 2. 读运行时开关 config.json │
│ 3. LLM 按画像改写 prompt │
│ 4. 注入「优化后的请求」消息 │
└──────────────────────────────┘
│
▼
模型以优化版为准执行 ──→ 回合结束(turn/end)
│
▼
┌──────────────────────────┐
│ 自动学习:LLM 分析 │
│ (请求, 输出) → 合并画像 │
│ 习惯清单 / 防幻觉规则 / 学习记录 │
└──────────────────────────┘
浏览器半边(dsh.client)
├─ 设置页「Prompt 画像」:开关 + 画像查看
└─ 对话输入坞:状态胶囊 + 弹出面板
↕ 通过宿主侧 Web 路由读写
GET /prompt-self/profile 画像 + 开关状态
GET/POST /prompt-self/config 开关读写
📁 目录结构
.
├── package.json # 插件清单(dsh.bundle + dsh.client 声明与导出)
├── cordis.patch.yml # bundle 补丁(安装入口,加载宿主半边)
├── lib/
│ ├── index.js # 宿主引擎(改写/学习/路由/开关)
│ └── client.js # 浏览器半边(设置页 + 输入坞 UI)
├── install/ # 安装材料
│ ├── code-prompt-self/ # 用户预设(code 预设副本 + 引擎行)
│ │ ├── agent.cordis.yml
│ │ └── prompt-self/ # 引擎内嵌副本(预设按相对路径加载)
│ ├── web-profile.cordis.patch.yml # 追加到 web profile 补丁层
│ ├── skills/prompt-self-optimizer/SKILL.md # 画像查看/解释 skill
│ ├── AGENTS.md # 用户全局指令(注入每个会话)
│ └── settings.yaml.example # 默认预设切换示例
└── tests/
└── engine.test.mjs # 引擎自测套件(6 组用例,mock LLM)
📦 安装(DSH Desktop,Windows)
约定:
<DSH_HOME>为 DSH 家目录。DSH Desktop 默认为C:\Users\<你>\AppData\Roaming\dsh-desktop\harness;其余部署通常为~/.dsh。
0. 插件市场一键安装(推荐)
插件已声明 dsh.bundle 与 dsh.client,可直接从 GitHub 源码安装:
dsh plugin --profile web add github:Hua1Q1nG/dsh-prompt-self
这一步装好「宿主层 Web 路由 + 设置页 Prompt 画像 + 对话输入坞」。要启用消息级改写与自动学习引擎, 还需安装用户预设(下面第 3 步)——引擎运行在 Agent 层,与 web profile 半边是双面结构。
1. 复制插件包到 web profile
把 package.json、cordis.patch.yml 与 lib/ 复制到 <DSH_HOME>\profiles\node_modules\dsh-prompt-self-client\:
这一步让 web profile 的插件行可以通过裸包名 dsh-prompt-self-client 解析到插件,并由模块系统把浏览器半边提供给 Web GUI。
2. 在 web profile 补丁层注册插件行
把 install/web-profile.cordis.patch.yml 的内容追加到 <DSH_HOME>\profiles\web\cordis.patch.yml。
3. 安装用户预设并切换默认
robocopy "install\code-prompt-self" "<DSH_HOME>\.agent-presets\code-prompt-self" /E
再编辑 <DSH_HOME>\settings.yaml,把默认预设切换为 code-prompt-self(见 install/settings.yaml.example)。
引擎行的
name: './prompt-self/lib/index.js'按预设目录内的内嵌副本相对解析,开箱即用; 若你希望与第 1 步的公共副本共用一份(避免两处维护),可改为name: '../../profiles/node_modules/dsh-prompt-self-client/lib/index.js', 或直接写绝对路径。
4. 安装 skill 与全局指令(可选但推荐)
robocopy "install\skills\prompt-self-optimizer" "<DSH_HOME>\skills\prompt-self-optimizer" /E
copy install\AGENTS.md "<DSH_HOME>\AGENTS.md"
SKILL.md:让模型在用户要求查看/解释画像时知道去哪读、怎么讲;AGENTS.md:用户全局指令,确保模型以插件注入的优化版为准、不自行重复优化、不篡改画像文件。
5. 重启并验证
完全退出并重启 DSH Desktop,然后:
- 打开设置 →「Prompt 画像」,确认开关与画像三栏正常显示;
- 输入框上方出现「● Prompt 画像 · 已开启」胶囊;
- 随便发一条消息,观察回答是否符合画像习惯;回合结束后刷新画像页,「学习记录」应自动新增条目。
🎛 使用
| 入口 | 位置 | 能力 |
|---|---|---|
| 状态胶囊 | 对话输入框上方 | 一眼看清引擎状态(绿=全开/黄=部分/灰=暂停),点击弹出面板快速切换 |
| 设置页 | 设置 →「Prompt 画像」 | 开关 + 画像完整视图 + 刷新 |
| 语言 | -fin(可选) |
立即学习最近一次交互并简短确认(自动学习已覆盖日常场景) |
| 查看画像 | 对话里说「看看我的画像」 | 模型经 skill 读取并展示画像 |
⚙️ 配置
预设引擎行(Agent 层)
- id: prompt-self-client
name: './prompt-self/lib/index.js'
config:
enabled: true # 主开关(组合级)
provider: deepseek-official
model: deepseek-v4-flash # 辅助调用模型(改写/学习,建议用快模型)
完整配置项(均有默认值,均可省略):
| 键 | 默认 | 说明 |
|---|---|---|
enabled |
true |
组合级主开关 |
forceEngine |
false |
单组合(无预设作用域)profile 下强制启用引擎(测试用) |
profilePath |
<DSH_HOME>/skills/prompt-self-optimizer/profile.md |
画像文件路径 |
recordsPath |
<DSH_HOME>/skills/prompt-self-optimizer/profile.records.md |
学习记录档案路径(默认自动推导,0.2.0) |
statePath |
profilePath + ".state.json" |
已学习配对去重状态 |
configPath |
profilePath + ".config.json" |
运行时开关文件 |
provider / model |
deepseek-official / deepseek-v4-flash |
辅助 LLM 路由 |
optimizeMaxTokens |
1200 |
改写输出上限(推理型辅助模型需留出推理余量) |
learnMaxTokens |
3200 |
学习输出上限 |
optimizeTimeoutMs / learnTimeoutMs |
30000 / 120000 |
调用超时 |
maxPromptChars / maxOutputChars |
6000 / 10000 |
学习样本截断 |
maxHabits / maxRules / maxRecords |
40 / 40 / 30(预设行已设 20 / 18 / 10) |
画像容量上限 |
maxProfileChars |
6000 |
改写调用注入画像的总长截断(字符,0.2.0) |
运行时开关(可视化 UI 写入)
profile.md.config.json(由开关 UI 自动维护):
{ "optimizeEnabled": true, "learnEnabled": true, "model": "deepseek-v4-flash" }
引擎按 mtime 缓存读取,改动即时生效,无需重启;-fin 显式学习不受 learnEnabled 限制。
Web 路由(宿主层)
| 路由 | 方法 | 说明 |
|---|---|---|
/prompt-self/profile |
GET | 画像三栏 + 开关状态 + 更新时间 |
/prompt-self/config |
GET / POST | 运行时开关读取 / 写入(POST body:{optimizeEnabled?, learnEnabled?, model?}) |
🧪 测试
tests/engine.test.mjs 使用真实 cordis 作用域与调度语义 + mock LLM,覆盖:注入与缓存复用、跨会话作用域隔离、turn/end 自动学习、-fin 强制学习、运行时开关、Web 路由处理器。
运行前提:@deepseek-ai/* 依赖可从测试文件的 node_modules 祖先目录解析(把仓库放进任意 DSH profile 目录,或已安装 DSH 依赖的环境):
cd <DSH_HOME>\profiles
node --test <仓库路径>\tests\engine.test.mjs
❓ FAQ
优化后的 prompt 我看不到? 注入发生在模型侧(消息级改写),原始消息仍按你的原话展示;会话日志中留有 session/prompt-self-optimized 事件可查。若希望模型说明依据,可在画像中追加相关习惯。
为什么某次回答没有按画像优化? 检查:主开关 enabled(预设行)与「自动改写优化」开关;画像为空(无任何习惯/规则/记录)时会跳过改写;辅助模型调用失败时引擎会静默放行原始请求(不阻塞对话)。
想暂停一切? 设置页关掉两个开关,或把预设行的 enabled 改为 false 后重启。
画像文件在哪? <DSH_HOME>/skills/prompt-self-optimizer/profile.md(核心画像:习惯清单 + 防幻觉规则,可手动编辑;学习记录由插件自动维护在同目录 profile.records.md)。
换机器 / 升级 DSH 后? 重新执行安装步骤;若 DSH 自带的 code 预设更新,建议以新版为基准重做 install/code-prompt-self/agent.cordis.yml(只多了末尾的引擎行)。
注意:若在插件管理里执行 pnpm 安装操作,未登记依赖的 dsh-prompt-self-client 目录可能被清理,重新执行第 1 步即可。
📄 许可
Links
More in this category
volcengine/OpenViking#examples/dsh-memory-plugin★ 28855
OpenViking memory and context bundle for DeepSeek Harness: pre-step auto-recall and profile injection, session capture, `viking://` URI guarding, and recall/write memory tools backed by an OpenViking server.
vectorize-io/hindsight#coding-agents★ 20092
Hindsight, agent memory that learns: long-term project memory with auto recall and retain, knowledge pages, deep reflection, and per-repo memory banks.
bowenliang123/dsh-context★ 179
Context insight panel: see what the model's context window is made of and how it evolves — composition vs. window size, per-request history, compression/injection events, and per-message token stats.
dsh-engramory★ 155
The Engramory curated-memory discipline as an installable plugin ([npm: dsh-engramory](https://www.npmjs.com/package/dsh-engramory)): a deterministic 200-line / 25 KB cap on the `MEMORY.md` index via `ctx.tools.guard()` — growth denied, a shrinking rewrite always passes — plus the protocol registered as a runtime skill. The store is plain markdown, one file per fact, shared with Claude Code, Codex, Kiro, and OpenClaw.
omdsh-dev/dsh-mnemon★ 71
Cross-agent, local-first persistent memory plugin for DeepSeek Harness (DSH), powered by Mnemon. It shares long-term memory across Mnemon-enabled agents and adds runtime memory, searchable project documents, semantic recall, knowledge graph, and a Sidebar UI.
modusensus/dsh-mneme#dsh-mneme★ 21
Structured memory engine for DeepSeek Harness. Offline semantic search, entity-attribute-timeline, autoDream self-consolidation, and human-editable Markdown storage.