名称: octocode-prompt-optimizer 描述: 当用户要求"优化这个提示"、“改进这个SKILL.md”、“使这个提示更可靠”、“修复我的代理指令”、“审查这个AGENTS.md”、“加强这个提示”、“我的代理总是跳过步骤”、“向指令添加强制执行”,或需要将弱提示转换为可靠、可执行的代理协议时,应使用此技能。使用6步门控流程(有快速/完整模式)、命令强化、门注入和失败模式分析。
提示优化器技能
<what> 使用提示工程最佳实践分析和改进指令性提示、文档和代理指令,同时保留原始意图。 </what>
<when_to_use>
- 创建或改进提示
- 代理跳过步骤或忽略指令
- 指令缺乏强制执行
- 输出格式不一致
- 审查任何指令文档或提示
- 在不改变业务/领域逻辑的情况下加强代理操作文本 </when_to_use>
<global_forbidden priority=“maximum”> 关键 - 始终禁止:
- 更改已正常工作的部分
- 更改提示的现有逻辑/意图
- 在理解提示前进行更改
- 在关键部分留下弱词
- 未经验证输出
- 过度加强软指导
- 跳过门或复选框
- 使提示臃肿 - 目标行数增加<10%;如果>10%,必须在VALIDATE中记录一行理由
三重锁:
- 状态: 必须保留工作逻辑并按顺序遵循所有门
- 禁止: 禁止:未经用户批准更改意图
- 禁止: 禁止:跳过步骤或门
- 要求: 要求:输出前验证所有更改并完成所有复选框
违规会使优化无效。如果违规,请重新开始。 </global_forbidden>
<tool_control priority=“high”> 优化期间禁止的工具:
- 绕过质量门的直接文件/系统修改
- 任何执行与提示优化无关的代码或命令的工具使用
- 跳过READ→UNDERSTAND→RATE→FIX→VALIDATE流的工具
允许的工具:
- 只读文件访问(读取提示文件)
- 安全文件编辑/写入能力(仅当VALIDATE步骤通过后)
- 澄清问题能力(用于用户澄清)
- 文本输出(所有阶段)
兼容性说明(要求):
- 将能力名称映射到活动运行时的工具名称。
- 示例别名:只读文件访问 = Read/ReadFile/localGetFileContent;安全文件编辑/写入 = Write/StrReplace/ApplyPatch。 </tool_control>
执行流程
<execution_flow>
读取 → 理解 → 评级 → 修复 → 验证 → 输出
↓ ↓ ↓ ↓ ↓ ↓
门 门 门 门 门 门
| 步骤 | 动作 | 门要求 | 禁止直到门通过 |
|---|---|---|---|
| 1 | 读取 提示完全 | 所有复选框勾选 | 分析、更改 |
| 2 | 理解 提示功能 | 理解输出产生 | 评级、修复 |
| 3 | 评级 每个部分的问题 | 问题表产生 | 修复问题 |
| 4 | 修复 按严重性排列的问题 | 所有关键/高优先级问题修复 | 验证 |
| 5 | 验证 检查清单 | 所有要求检查通过 | 输出 |
| 6 | 输出 优化文档 | 格式严格遵循 | 不适用 |
关键: 必须完成每个门后才能继续。不要跳过步骤。
自适应模式选择器(要求)
| 模式 | 使用时机 | 允许压缩 | 不可协商项 |
|---|---|---|---|
| 快速路径 | 短/单用途提示,低歧义,<=3逻辑部分,无未解未知数 | 读取+理解可合并;评级+修复可压缩为一节(如果问题表仍产生) | 验证和意图保留检查始终要求 |
| 完整路径 | 多节提示,高歧义,>=4逻辑部分,冲突约束,或关键/高风险 | 无压缩。分别执行每个门 | 所有门和模板要求 |
模式选择规则(要求):
- 如果 任何未知块阻碍进展,存在冲突指令,或可能有关键/高风险问题 → 那么 使用完整路径。
- 如果 提示简单无歧义且风险低 → 那么 允许快速路径。
- 如果 不确定适用模式 → 那么 默认完整路径。
最小执行配置文件(极小任务)
- 如果 任务极小且无歧义 → 那么 使用快速路径并输出简洁。
- 必须: 保留意图,执行最小问题扫描,输出前通过验证。
- 必须: 遵循选定输出变体格式。
- 如果 出现歧义、冲突或高/关键风险 → 那么 立即升级到完整路径。
全局执行基线: global_forbidden和验证是每个门的真理约束;门部分专注于步骤特定要求。
</execution_flow>
步骤 1: 读取
<read_gate> 停止。不要继续分析。
先决条件
- [ ] 用户提供要优化的提示/文件
- [ ] 路径有效且可读
动作(要求)
- 必须完全读取输入文件
- 必须记录文档类型和目的
- 必须估算行数
门检查
继续前验证:
- [ ] 文件完全读取(无跳过部分)
- [ ] 文档类型识别
- [ ] 行数记录
禁止
- 读取前进行任何更改
- 跳过部分
允许
- 仅只读文件访问
- 文本输出以确认读取
失败时
- 如果 文件不可读 → 那么 向用户请求正确路径
- 如果 文件为空 → 那么 请求用户提供内容 </read_gate>
步骤 2: 理解
<understand_gate> 停止。不要继续评级。先理解这个提示的功能。
先决条件
- [ ] 步骤1(读取)完成
- [ ] 文件内容在上下文中
动作(要求)
- 必须识别目标 - 这个提示应实现什么?
- 必须识别逻辑部分 - 分解为节/阶段/步骤
- 必须识别流程 - 部分如何连接?
- 必须以下述输出格式记录理解
输出格式(要求)
## 理解
**目标:** [提示实现的目标]
**逻辑部分:**
1. [部分名称] - [目的]
2. [部分名称] - [目的]
...
**流程:** [部分如何连接]
假设与未知数(要求,如果提示未指定)
## 假设与未知数
**假设(临时 - 基于这些进行):**
- [假设1] - 如果错误影响: [后果]
**未知数(继续前必须询问):**
- [未知1] - 为何关键: [原因]
**需要澄清:** 是/否
如果 存在未知数 → 那么 停止并在继续评级前询问用户。
门检查
继续前验证:
- [ ] 目标明确陈述
- [ ] 所有逻辑部分识别
- [ ] 流程记录
- [ ] 理解输出产生
反思
- 我是否正确理解意图?
- 我是否识别了所有逻辑部分? 如果 不确定理解 → 那么 重新读取后再继续。不要猜测。
禁止
- 不理解目标就继续
- 基于假设进行更改
允许
- 文本输出(理解摘要)
- 如果需要,重新读取文件
失败时
- 如果 意图不清 → 那么 向用户请求澄清
- 如果 多解释 → 那么 提供选项并等待用户选择 </understand_gate>
步骤 3: 评级
<rate_gate> 停止。先评级每个逻辑部分的问题,不要修复。
先决条件
- [ ] 步骤2(理解)完成
- [ ] 理解输出产生
问题类别(必须检查所有)
| 类别 | 寻找什么 | 严重性 |
|---|---|---|
| 弱词 | 关键部分中的“考虑”、“可能”、“可以”、“或许”、“应该” | 关键 |
| 缺少强制执行 | 没有禁止/允许的规则 | 高 |
| 歧义指令 | “做一些”、“处理”而无具体说明 | 高 |
| 指代歧义 | “它”、“这个”、“那个”、“以上”、“以下”无清晰指代 | 高 |
| 缺少输出格式 | 预期输出无模板 | 中 |
| 缺少门 | 阶段转换无检查点 | 中 |
| 重复 | 相同逻辑/规则在多处重复(非仅示例) | 中 |
| 冗长/臃肿 | 节>20行可改为表格;无约束散文 | 中 |
| 表情符号作为指令 | 表情符号用作命令而非强词 | 中 |
| 冗余 | 相同示例重复,不必要变体 | 低 |
| 低密度 | 不约束行为的解释 | 低 |
评级输出(要求)
## 发现问题
| 部分 | 问题 | 严重性 | 需要修复 |
|------|-------|----------|------------|
| [部分名称] | [描述] | 关键/高/中/低 | [操作] |
门检查
继续前验证:
- [ ] 所有逻辑部分评级
- [ ] 弱词扫描完成
- [ ] 问题表产生
- [ ] 为每个问题分配严重性
禁止
- 完成评级前修复问题
- 忽略关键问题
- 跳过弱词扫描
允许
- 文本输出(问题表)
- 重新读取部分以评级
失败时
- 如果 未发现问题 → 那么 必须用弱词扫描双重检查
- 如果 扫描仍干净 → 那么 记录“未发现问题”并继续 </rate_gate>
弱词参考
| 弱词 | 上下文 | 替换 |
|---|---|---|
| consider, might, could, may | 关键部分 | 必须、要求 |
| consider, might, could, may | 可选指导 | 移除或保留为“可选地” |
| should, prefer | 关键部分 | 必须 |
| should, prefer | 软指导 | 保持原样 |
| do some, handle, process | 任何 | 指定确切动作:“运行X”、“调用Y” |
| as needed, if necessary | 任何 | 如果 [条件] → 那么 [动作] |
| feel free to, you can | 要求动作 | 完全移除,使用必须 |
| feel free to, you can | 可选动作 | “可选地,你可以…” |
关键: 禁止/必须/从不部分中的弱词必须替换。
步骤 4: 修复
<fix_gate> 停止。按优先级顺序修复问题:关键 → 高 → 中 → 低。
先决条件
- [ ] 步骤3(评级)完成
- [ ] 问题表产生
修复优先级(必须遵循顺序)
- 先关键 - 必须/禁止上下文中的弱词
- 然后高 - 缺少强制执行,歧义指令
- 中 - 缺少输出格式,缺少门
- 最后低 - 冗余,密度(仅当添加价值时)
命令强度层次结构
| 强度 | 关键词 | 用于 |
|---|---|---|
| 绝对 | 从不、总是、必须、禁止、关键 | 不可协商规则 |
| 停止 | 停止、暂停、不要继续、等待 | 门/检查点 |
| 要求 | 要求、强制 | 必要步骤 |
| 软 | 应该、偏好 | 仅可选指导 |
三重锁模式(关键规则要求)
1. 状态: “你必须X”
2. 禁止: “禁止: 不做X”
3. 要求: “要求: 验证X完成”
推理块(更改前条件要求)
要求时机:
- 完整路径激活,或
- 快速路径有任何关键/高优先级问题。
可选时机:
- 快速路径仅有中/低优先级问题;包括一行理由。
更改前(当要求时),产生一个<reasoning>块:
<reasoning>
1. **当前状态:** [现在存在什么]
2. **目标:** [我们试图实现什么]
3. **方法:** [为何此特定更改]
4. **风险:** [可能出错什么]
</reasoning>
门模板(添加门时)
<[名称]_gate>
**停止。不要继续。 [验证什么]**
### 先决条件
- [ ] [前一步骤完成]
### 动作(要求)
1. [动作]
### 门检查
**继续前验证:**
- [ ] [条件]
### 禁止
- [不做什么]
### 允许
- [允许什么]
### 失败时
- **如果** [条件] → **那么** [恢复]
</[名称]_gate>
门检查
继续前验证:
- [ ] 所有关键问题修复
- [ ] 所有高优先级问题修复
- [ ] 中/低优先级处理或记录为跳过
- [ ] 推理要求满足(块产生或快速路径低风险理由记录)
禁止
- 过度加强软指导(为可选项保留“应该”)
- 更改已正常工作的逻辑
- 添加不必要复杂性
- 跳过关键/高优先级问题
- 臃肿:>10%行增加未在验证中明确理由
允许
- 文本输出(草案修复)
- 迭代修复
失败时
- 如果 检测到过度加强 → 那么 撤销并重新评估使用评级步骤标准
- 如果 不确定逻辑是否改变 → 那么 比较前后意图 </fix_gate>
步骤 5: 验证
<validate_gate> 停止。先验证所有修复,不要输出。
先决条件
- [ ] 步骤4(修复)完成
- [ ] 所有关键/高优先级问题处理
验证检查清单(必须完成所有)
要求检查:
- [ ] 关键部分无弱词
- [ ] 关键规则使用必须/从不/禁止
- [ ] 无对话填充物
- [ ] 无冲突指令
- [ ] 逻辑流程保留
- [ ] 原始意图保留
- [ ] 三重锁应用于关键规则
- [ ] 行数目标满足(<10%)或记录合理例外
- [ ] 任何>10%增加包括一行理由,链接到必要门/清晰修复
附加检查(如适用):
- [ ] 门有先决条件、门检查、禁止、允许、失败时
- [ ] 输出有格式规范
- [ ] 如果/那么决策点规则
指代清晰(必须检查):
- [ ] 无歧义代词或位置引用无明确指代
- [ ] 所有实体有稳定名称(相同术语贯穿)
- [ ] 步骤/输出按名称引用,非位置
- [ ] 所有交叉引用无歧义
- [ ] 无隐含“这个”引用无清晰指代
- [ ] XML标签可选;仅用于注意控制需求(Markdown为默认)
反思(要求)
必须回答这些问题:
- 我会信任这个提示可靠执行吗?
- 最弱剩余部分是什么?
- 我改变了任何原始意图吗?(必须为否)
如果 识别弱点 → 那么 修复或记录为限制 如果 意图改变 → 那么 停止并撤销。返回到理解步骤。
完成定义(DoD)- 快速最终门
输出前所有必须为真:
- [ ] 单执行路径(无歧义分支)
- [ ] 所有输入/输出明确定义
- [ ] 所有决策点使用如果/那么
- [ ] 无孤儿引用(每个“它/这个”解析)
门检查
继续前验证:
- [ ] 所有要求检查通过
- [ ] 反思问题回答
- [ ] 无意图改变
禁止
- 未完成验证就输出
- 跳过检查清单项
- 继续失败检查
- 在注意控制需求外使用XML标签(Markdown为默认)
允许
- 文本输出(验证结果)
- 返回到修复步骤
失败时
- 如果 验证失败 → 那么 返回到修复步骤
- 如果 意图改变 → 那么 返回到理解步骤 </validate_gate>
步骤 6: 输出
<output_gate> 停止。验证步骤通过后再输出。
先决条件
- [ ] 步骤5(验证)完成
- [ ] 所有要求检查通过
- [ ] 无意图改变确认
输出格式(要求 - 按用户意图选择变体)
选择规则(要求):
- 如果 用户请求完整重写文档 → 那么 使用变体A。
- 如果 用户请求最小编辑/仅增量 → 那么 使用变体B。
- 如果 用户未指定 → 那么 默认变体A。
通用报告头(两种变体要求):
# 优化完成
## 摘要
- **发现问题:** [N]
- **应用修复:** [N]
- **意图保留:** 是
## 所做更改
| 类别 | 数量 | 示例 |
|----------|-------|----------|
| 命令强化 | [N] | [简要示例] |
| 门添加/修复 | [N] | [简要示例] |
| 冗余移除 | [N] | [简要示例] |
变体A - 完整文档(默认):
## 优化文档
[完整优化内容]
变体B - 补丁风格增量(最小编辑):
## 补丁风格增量
| 节 | 前 | 后 | 原因 |
|---------|--------|-------|-----|
| [节名称] | [旧文本] | [新文本] | [理由] |
禁止
- 偏离选定输出变体
- 未通过验证就输出
- 省略要求可交付物(变体A完整文档,变体B补丁风格增量)
允许
- 安全文件编辑/写入能力以保存优化内容
- 文本输出(摘要 + 文档)
失败时
- 如果 格式偏离 → 那么 重新生成输出
- 如果 用户请求更改 → 那么 返回到修复步骤 </output_gate>
参考: 指令优先级
<precedence_table> 规则冲突时,遵循此优先级(最高胜出):
| 优先级 | 类别 | 示例 | 备注 |
|---|---|---|---|
| 1(最高) | 安全/工具限制 | 禁止工具、从不动作 | 始终胜出 |
| 2 | 用户明确请求 | “我想要X”、“做Y” | 覆盖默认 |
| 3 | 禁止/必须规则 | “禁止:更改逻辑” | 覆盖偏好 |
| 4 | 技能默认 | 默认行为、模板 | 基线 |
| 5(最低) | 软指导 | “偏好”、“考虑” | 服从以上所有 |
解决规则: 两规则冲突时,较高优先级胜出。记录冲突和解决。 </precedence_table>
参考: 冲突解决微协议
<conflict_protocol> 指令冲突时使用此协议:
- 检测 - 明确命名两个冲突指令。
- 解决 - 应用优先级表(最高优先级胜出)。
- 记录 - 添加一行笔记:“冲突:[A] vs [B] -> 解决由[优先级N规则]”。
- 继续 - 仅使用解决的指令继续。
禁止: 两个冲突指令仍激活时继续。 </conflict_protocol>
参考: 上下文模式
<reasoning_patterns>
状态摘要(上下文保留)
仅当需要保留上下文时使用简洁摘要:
- 目标
- 进展
- 下一步
- 障碍(如有)
条件要求:
- 完整路径:在每个阶段转换或上下文转变时产生状态摘要。
- 快速路径:仅当上下文实质转变时产生状态摘要。 </reasoning_patterns>
参考: 高价值 vs 低价值内容
<content_guide>
| 保留(高价值) | 移除/减少(低价值) |
|---|---|
| 有明确动作的表格 | 无约束的解释性散文 |
| 命令式动词(停止、验证、执行) | 重复示例(保留1-2个) |
| 禁止/允许列表 | 可改为表格的长段落 |
| 如果/那么决策规则 | 关键规则中的犹豫语言 |
| Markdown默认 + 可选XML用于注意控制 | 用作指令的表情符号(除非输出要求) |
| </content_guide> |
快速参考
仅用作助记符;门部分是真理来源。
| 需要 | 模式 |
|---|---|
| 停止/检查点 | **停止。不要继续。** + ### 门检查 |
| 强制动作 | **要求:** 你必须[动作] |
| 禁止动作 | **禁止:** [动作] |
| 决策逻辑 | **如果** [条件] → **那么** [动作] |
| 关键规则硬化 | 三重锁:状态 + 禁止 + 要求 |
常见错误
<common_mistakes>
| 错误 | 为何失败 | 修复 |
|---|---|---|
| 过度加强软指导 | “偏好” → “必须”破坏可选灵活性 | 为真正可选项保留“应该/偏好” |
| 使用“它/这个/那个” | 代理失去上下文,应用于错误元素 | 明确命名每个实体 |
| 更改工作逻辑 | 用户信任原始行为 | 禁止:如果逻辑工作,不触碰 |
| 过度使用XML标签 | 无可靠性增益的噪音和风格漂移 | 保持Markdown默认;仅用于注意控制时使用XML |
| </common_mistakes> |