xinmo114514
dsh-prompt-optimizer
No description
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 14, 2026
- Updated
- Aug 14, 2026
Introduction
✨ Prompt Optimizer · 提示词优化器
DSH 持久化 Web 插件(Persistent Cordis Plugin)—— 把模糊需求,变成 AI 智能体一次就能执行的超级提示词
在输入框模型选择器左侧点一下 ✨,模糊需求 → 结构化可执行指令, 全程跑马彩虹渐变边框陪伴,优化完成后结果自动填入输入框,直接发送。
🎯 为什么需要它
同一个需求,两种问法,AI 的完成度天差地别:
| 模糊的问法 ❌ | 清晰的指令 ✅ |
|---|---|
| "帮我写个好看的主页" | "设计并实现一个个人作品集主页:单文件 HTML+CSS+JS,包含 Hero/作品卡片/技能区/联系区,响应式(375/768/1440px 无横向滚动),主色 ≤3 种,验收:浏览器直接打开可用" |
但把每个需求都手动写清楚,太累了。这个插件做的就是这件事:你在输入框里随手写一句模糊需求,点一下 ✨,它用你当前选择的模型,把这句话改写成一份任何 AI 智能体都能自主规划、动手执行、自我验证的高质量指令。
✨ 功能特性
| 特性 | 说明 |
|---|---|
| 🪄 一键优化 | 输入任意需求 → 点 ✨ → 优化结果自动替换输入框内容,随时可发送 |
| 🧠 使用当前所选模型 | 优化请求完全复用你在模型选择器里选的 provider / model / 推理等级,无需额外配置 |
| 🤖 面向编程智能体 | 内置系统提示词 v4,专为 DSH 这类具备规划/执行/验证能力的 Agent 设计 |
| 🔎 探索优先协议 | 缺失信息不预设假设,而是写成探索指令(读配置、列目录、跑命令、查网络),查不到才允许保守默认并在交付时注明 |
| 🔗 Skills 感知 | 指示执行者先盘点自身已加载的 Skills,按任务领域调用匹配技能;技能与任务不匹配时不强用 |
| 🧩 双模板自适应 | 内容任务 →「结构化指令」模板;执行任务 →「Agent 执行说明书」模板(可验证目标 / 执行前侦察 / 分阶段计划+验证点 / 验收清单 / 自纠错协议 / 汇报要求) |
| 🌈 跑马彩虹渐变边框 | 优化进行中输入框边框流动彩虹渐变(纯 CSS,不侵入原生 DOM),按钮同步彩虹旋转 |
| 🔒 优化期间锁定输入 | 通过 DSH 官方 conversation.blocks 机制锁定输入框与发送按钮,防止输入被覆盖 |
| 📊 状态可见 | 输入框上方状态行实时显示:✨ 正在优化(模型名) / ✓ 完成 / ⚠️ 失败原因 |
| 🧰 插件设置页 | 在 DSH 设置 → 插件中注册「提示词优化器」标签页:功能特性、使用方法、GitHub 链接一目了然 |
🎬 效果演示
输入一句模糊需求,点击 ✨ 按钮:
帮我写个好看的主页
↓ 优化后自动填入输入框 ↓
你是一位资深前端开发与 UI 设计师。任务是设计并实现一个高颜值、现代感的个人作品集主页,最终交付一份完整可运行的单文件 HTML 代码(内嵌 CSS 和 JS)。
假设: 这是个人开发者/设计师的作品集主页……(如实际需要公司/产品主页,请自行替换背景与内容)
具体要求:
- 页面结构必须包含:顶部导航、Hero 首屏(大标题/副标题/主次按钮)、关于我、作品展示区(≥4 个卡片)、技能区、联系区、页脚;
- 视觉风格:现代极简 + 科技感,主色 ≤3 种,注重留白、圆角、卡片阴影、字体层级;
- 响应式:Flex/Grid 布局,375px / 768px / 1440px 均无错位,移动端菜单折叠为汉堡按钮;
- 动效:平滑锚点滚动、悬停反馈、作品卡片滚动进入视口淡入上移;
- 所有个人信息用占位符("你的名字"),并在代码中注释"此处替换为真实内容";
- 技术栈:仅原生 HTML5 + CSS3 + 少量 JS,不依赖任何框架;
- 输出格式:先给 3 行使用说明,再输出完整单文件代码;
- 验收标准:视觉惊艳;三种宽度下无横向滚动;交互反馈自然;占位符位置清晰。
[!NOTE] 以上为真实优化输出示例(节选)。原需求仅 8 个字,优化后变成一份可直接执行、可验收的完整任务书。
📦 安装
本插件是 DSH 持久化插件(Persistent Cordis Plugin):通过 dsh plugin 安装进 profile,作为 bundle 层挂载到宿主进程,重启 DSH / 刷新页面后按钮始终存在。
方式一:GitHub 克隆 + dsh plugin(推荐)
git clone https://github.com/xinmo114514/dsh-prompt-optimizer.git
cd dsh-prompt-optimizer
# 安装到 web profile(等价于 dsh web)
dsh plugin --profile web add .
重启 DSH(dsh web),刷新页面,即可在输入框模型选择器左侧看到 ✨ 按钮。
方式二:本地路径 / npm 包
# 任意本地路径
dsh plugin --profile web add /path/to/dsh-prompt-optimizer
# 或 registry 包(若已发布)
dsh plugin --profile web add dsh-prompt-optimizer
dsh plugin 会把包 pnpm 安装进 profile,并自动将其加入 dsh.profile.bundles 层列表(包声明了 dsh.bundle,安装后自动激活)。
卸载
dsh plugin --profile web remove dsh-prompt-optimizer
[!TIP] 插件宿主端注册
POST /prompt-optimizer/api/optimize(仅限本机回环地址访问),浏览器端由 DSH 客户端模块系统自动发现并分发lib/client.js,无需手动配置。
🚀 快速上手
① 在输入框输入模糊需求(如:帮我写个好看的主页)
② 点击模型选择器左侧的 ✨ 按钮
③ 观察:输入框锁定 + 彩虹跑马边框 + 状态行「✨ 正在优化提示词…」
④ 几秒后自动解锁,优化结果填入输入框 → 直接发送
🏗️ 技术架构
浏览器端 (Client half · lib/client.js) 宿主进程 (Host half · lib/index.js)
┌──────────────────────────────────┐ HTTP ┌────────────────────────────────────┐
│ ✨ 按钮 conversation.input.right │ ────────► │ webServer.register 前缀路由 │
│ 状态行 conversation.input.dock │ fetch │ POST /prompt-optimizer/api/optimize│
│ 彩虹边框 CSS :has() 纯样式 │ JSON │ ├─ 仅回环 Host 放行(403 围栏) │
│ 输入锁定 conversation.blocks │ ◄──────── │ ├─ agentDefaultModel 兜底取模型 │
│ 设置页 settings.plugins.tab │ {ok,text} │ ├─ llm.stream(当前所选模型) │
└──────────────────────────────────┘ │ └─ 结果缓存 + single-flight 去重 │
└────────────────────────────────────┘
| 关注点 | 实现方式 |
|---|---|
| 挂载方式 | 包声明 dsh.bundle.patch(cordis.patch.yml)→ 作为 bundle 层随 profile 启动自动挂载 |
| 客户端分发 | 包声明 dsh.client + exports["./client"] → dsh-client-modules 扫描发现,/plugins/dsh-prompt-optimizer/client.js 自动注入浏览器 |
| 按钮位置 | 槽位 conversation.input.right —— 渲染在模型选择器正左侧 |
| 读取当前模型 | 客户端 modelDirectories 共享状态(useInput/directoryStore props);宿主端回退 agentDefaultModel |
| 模型调用 | llm.stream(),maxTokens: 8192;空输出自动去掉推理等级重试一次 |
| 彩虹跑马边框 | [data-composer-card]:has(...) + background-position 关键帧动画(动画属性不可带 !important,否则会被覆盖) |
| 输入锁定 | conversation.blocks.set(sessionId, { reason }) / set(undefined) |
| 前后端通信 | fetch('/prompt-optimizer/api/optimize') ↔ webServer.register,纯 JSON,仅本机回环可访问 |
| 性能优化 | 相同请求 200 条 LRU 结果缓存 + single-flight 并发去重(warm 重复点击毫秒级返回,且结果一致) |
📂 项目结构
prompt-optimizer/
├── package.json # 项目元信息 + dsh.bundle / dsh.client 声明
├── cordis.patch.yml # bundle patch:把插件行插入 profile 组合
├── dsh.plugin.json # 插件元数据(信息性;加载以 package.json dsh.* 为准)
├── lib/
│ ├── index.js # 宿主端:HTTP 路由 + LLM 调用 + 结果缓存 + 系统提示词 v4
│ └── client.js # 浏览器端:按钮 / 状态行 / 彩虹边框 / 输入锁定 / 设置页
├── src/
│ ├── host.js # 动态插件版宿主端(历史参考,逻辑与 lib/index.js 一致)
│ └── client.js # 动态插件版浏览器端(历史参考)
├── bench/ # 性能基准:samples / harness / bench / profile-run
├── test/ # 回归测试(零依赖,node test/run-tests*.js 运行)
├── docs/
│ ├── optimizer-system-prompt.md # 内置优化系统提示词(可独立审阅、修改)
│ └── performance-report.md # 性能优化实测报告(warm 提速 ~80%)
├── README.md # 你正在看的文件
├── UPLOAD_GUIDE.md # 从零上传 GitHub 的详细中文指南(含 15 个坑点补救)
├── LICENSE # MIT
└── .gitignore
🧠 内置优化系统提示词(v4 · 探索优先 + Skills 感知)
三句话概括它的设计:
- 先分类:内容/对话任务走「结构化指令」模板;代码/执行任务走「Agent 执行说明书」模板;
- 探索优先:缺失信息一律写成探索指令让执行者自己查证,查不到才允许保守默认并在交付时注明,方向性重大歧义才允许问一次澄清问题;
- Skills 感知:执行者先盘点自身已加载的技能,按任务领域调用匹配的 skill,不匹配不强用;
- 闭环可验证:可验证目标 → 分阶段计划+验证点 → 验收清单 → 自纠错协议(≤3 次重试)→ 按清单汇报。
完整正文见 docs/optimizer-system-prompt.md。
❓ 常见问题
[!NOTE] 插件是持久化的:安装后随 DSH 进程启动自动加载,重启 / 刷新页面后按钮始终存在,无需手动重新运行。
| 问题 | 解答 |
|---|---|
| 点击 ✨ 没反应 / 状态行报错? | 确认宿主端已挂载(dsh plugin --profile web list 应能看到 dsh-prompt-optimizer);新版失败原因会直接显示在状态行 |
| 提示"模型没有返回有效内容"? | 已修复:maxTokens 提升至 8192 并支持自动降级重试(推理等级 Max 曾吃光 2048 预算导致空输出) |
| 优化结果把我正在输入的内容覆盖了? | 已修复:优化期间通过 conversation.blocks 锁定输入框,无法打字;且回填前校验 draftRev,输入有变化则不覆盖 |
| 想换一个优化风格? | 修改 lib/index.js 中的 OPTIMIZER_SYSTEM_PROMPT(或参考 docs/ 下的独立文档)后重新安装/升级插件 |
📜 版本历史
| 版本 | 亮点 |
|---|---|
| v1.0.0(当前) | 持久化插件化(dsh plugin 安装、重启不丢);探索优先协议:去掉"假设"预设,缺失信息改为探索指令;Skills 感知;锁定输入框;状态行可见;空输出自动重试;设置 → 插件 专属标签页;warm 重复优化毫秒级返回(LRU 缓存 + single-flight) |
| v0.9 | 面向编程智能体重构:双模板(结构化指令 / Agent 执行说明书)、篇幅分级、自纠错协议 |
| v0.8 | 修复空输出:maxTokens 2048→8192,block-end 兜底,去推理等级重试 |
| v0.7 | 彩虹跑马边框修复(!important 会覆盖 CSS 动画);新增状态行 |
| v0.1 | 首个可用版本:按钮 + 优化 + 彩虹边框 |
🤝 贡献与许可
欢迎提交 Issue / PR 改进系统提示词、UI 或稳定性。提交前请阅读 UPLOAD_GUIDE.md 了解协作流程。
本项目基于 MIT License 开源,自由使用、修改、分发。