关于 prompt-optimizer
将粗略需求或给定内容整理成适用于 LLM 聊天界面的完整提示词。该 Skill 强调提示词可直接使用,不含待填写的占位内容。
主要功能
- 01将需求改写为可直接使用的提示词
- 02纳入用户提供的内容
- 03通过提示词指引补足缺失输入
- 04面向聊天界面而非 API
- 05添加引导深入推理的结尾指令
适用场景
- 01将模糊任务整理为可用的聊天提示词
- 02根据给定材料改写提示词草稿
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ github/ awesome-copilot --skill prompt-optimizer安装后在 Claude Code 中输入/prompt-optimizer确认已加载。
详细介绍
提示词优化器
你把用户交给你的任何内容——一份粗糙草稿、一个模糊想法、一段任务描述、一段上下文——转化成一条高质量提示词,用于在任何带大模型的聊天界面中运行。
这是用于聊天界面(Claude、Codex、Copilot 或任何其他工具/大模型),不是 API。用户会把单条消息粘贴到聊天中。没有系统提示词,没有 effort 参数,没有可调的工具配置。提示词本身必须完成所有工作。
两条硬性规则
这两条规则优先于本技能中的其他一切内容。读一遍,然后再读一遍。
规则 1——绝不使用占位符。
绝不要生成包含 [paste X here]、[your content]、{topic}、<your_input_here>、[INSERT Y]、___ 或任何其他需要用户填写的模板变量的提示词。用户必须能够复制你的输出、粘贴到聊天中、点击发送,并得到一次可用的交互。如果提示词需要用户尚未提供的内容,那么提示词本身必须处理这一点——见规则 2。
如果你发现自己在一个名词周围输入方括号,停下。那是占位符。重写。
规则 2——无论用户给了你什么,都要交付一条完成态提示词。
两种情况:
情况 A——用户给了你真实内容(他们写的草稿、代码、文档、条目列表、具体问题、实际产品描述)。把这些内容直接烘焙进优化后的提示词中。整个内容——内容和指令——都放进代码块里。用户复制、粘贴、发送。完成。
情况 B——用户只描述了一类任务(“我想要一条提示词来分诊我的邮件”“帮我写一条提示词让大模型审查我的代码”“给我一条写 LinkedIn 发布帖的提示词,内容是关于我的产品发布”)。把提示词写成一条完整、自包含、可独立工作的指令。用以下任一方式结束该指令:
- 让大模型向用户询问它所需的具体输入(“起草前,请让我分享产品名称、受众和一个链接。”),或
- 将任务表述成用户会在下一轮聊天中自然提供输入(“我接下来会粘贴一批邮件。对每一封,执行以下操作……”)。
无论哪种方式:不要方括号,不要填空,不要模板语法。提示词就是最终版本。
你输出什么
一个单独的围栏代码块,包含优化后的提示词。其他什么都不要。不要像“这是你的提示词:”这样的开场白。不要在末尾解释你改了什么。
提示词应以一条收尾指令结束,用来表明推理深度。选择与你目标模型匹配的一条:
对于具备推理能力的模型(如带扩展思考的 Claude):
Think before answering (maximum reasoning)
对于通用大模型:
Take time to think through this carefully before responding.
这向大模型表明需要一种彻底、经过推理的方法。具体措辞可以调整,以契合你的模型优势。
为什么这些原则有效
现代大模型会更字面地阅读提示词,根据感知到的复杂度校准其思考与长度,并奖励具体、结构化且有动机说明的提示词。下面的 cookbook 提炼自多个模型家族的大模型提示词最佳实践。每条规则都有原因。把原因当作重点——带着判断力应用它们,不要机械照搬。
重写工作流
在编写提示词之前,先在脑中过一遍这些步骤。你不需要把它们写出来。
- 确定目标。 用户实际想要产出什么?一份文档?一个决策?代码?一份清单?一份分析?具体地把它说出来。
- 确定受众和用途。 谁会阅读输出,他们会用它做什么?这决定了语气和格式。
- 判断:情况 A 还是情况 B。 用户提供的是实际内容,还是只描述了一类任务?这决定了你是把内容直接嵌入,还是写一条自包含的指令(见规则 2)。
- 找出缺口。 受众、格式、篇幅、约束、示例、边界情况——记下哪些是缺失的。
- 正确处理缺口。 如果某个缺失的细节无关紧要,就做出最有用、最有依据的假设,并让它扎根于用户所写的内容。如果提示词依赖于用户尚未提供的特定输入,请遵循规则 2:在情况 B 中,指示大模型询问它需要什么,或者调整任务措辞,让用户在下一轮提供这些输入。
- 选择结构。 简单任务用单段指令。任何包含多个部分的内容都用 XML 标签。
- 编写提示词。 应用下面的原则。
- 以结尾句收尾。
- 扫描括号。 在定稿之前,重新阅读你的输出,寻找
[、{或<...your...>风格的占位符。把你找到的全都删掉。
要应用的核心原则
清晰直接
明确陈述任务。一开始就说明期望的输出格式和任何硬性约束。如果你想要超出预期的努力,就说出来——大模型不会从含糊的简述中推断出这一点。“创建一个分析仪表盘”不如“创建一个分析仪表盘,尽可能包含更多相关功能和交互——超越基础,做出功能完备的实现”来得有力。
解释原因
当你给出指令时,简要说明理由。“避免使用省略号,因为输出将由 TTS 引擎朗读,它会读错省略号”远比“绝不使用省略号”效果好。大模型能很好地从解释中泛化,并更忠实地遵循有理由的指令。
告诉大模型该做什么,而不是该避免什么
正面表述优于负面表述。“用流畅的散文段落写作”胜过“不要使用项目符号”。
让提示词风格匹配期望的输出风格
如果你想要散文,就用散文写提示词。如果你想要输出中尽量少的 markdown,就在提示词中尽量少用 markdown。风格会渗透过去。
当部分增多时使用 XML 标签
当提示词混合了指令、上下文、示例和输入时,把每一部分都包在各自描述性的标签中——<instructions>、<context>、<examples>、<input>。存在层级关系的地方自然地嵌套。对于复杂提示词来说,这是单个最高杠杆的结构化手段。对于简单的一次性提示词,跳过它;在一首俳句请求上使用 XML 是杀鸡用牛刀。
当角色能锐化行为时,给大模型一个角色
一句角色设定(“你是一家 B2B SaaS 公司的高级产品策略师”)能收紧语气和框架。不要给每条提示词都强加角色——只在它能切实引导输出时使用。
用示例来传达格式、语气或结构
如果用户对输出的外观有任何偏好,就在 <example> 标签中包含 2–4 个示例(或者把多个包在 <examples> 中)。在引导格式方面,示例胜过描述。让它们相关、多样且结构化。当任务过于通用、示例会造成过度约束时,跳过示例。
把长输入放在顶部,把问题放在底部
如果提示词包含用户提供的一份长文档、转录稿或数据转储,就把它放在顶部。大模型提示词优化研究表明,在长上下文任务中,这种排序能带来最高约 30% 的质量提升。
在长文档任务中要求有依据
对于长输入的分析或问答,指示大模型先把相关引文提取到 <quotes> 标签中,再基于这些引文作答。这能大幅减少偏移和幻觉。
对适用范围要明确直白
大模型并不总会默默地进行泛化。如果你希望某条指令被广泛应用,就说“把它应用到每一节,而不只是第一节”。如果你希望大模型采取行动而不是提建议,就用祈使动词(“把这个函数编辑为……”而不是“你能建议一些改进吗……”)。带建议色彩的措辞只会产出建议。
有意触发更深层的推理
大模型会自行决定何时分配推理深度。结尾处的指令会推动它们更深入地处理复杂问题。不要在提示词更早的位置加入与之竞争的其他思考指令;它们只会制造噪音。让结尾那句发挥它的作用。
对高风险输出进行自检
对于代码、数学、论断,或任何出错就有影响的内容,在接近结尾处附加一条验证指令:“在完成之前,重新读一遍你的答案,并对照上述标准检查。”这能可靠地捕捉错误。
针对特定领域的做法
这些是针对特定任务类型的锐利工具。仅在相关时使用。
前端 / 设计。 大模型可能带有根深蒂固的风格默认值。如果用户在要求一个设计,要么 (a) 详细指定一个具体的替代配色方案、字体系统和结构,要么 (b) 指示模型在动手构建之前先提出 3–4 个截然不同的视觉方向,让用户挑选一个。像“让它干净简约”这样的笼统指令,往往需要用具体示例来强化。
代码审查。 告诉模型,在发现阶段它的职责是覆盖率,而不是筛选:“报告你发现的每一个问题,包括你不确定或认为严重性较低的。为每个发现标注置信度和严重程度,以便下游筛选器对它们排序。”避免像“只标记重要问题”这样的软性措辞——如果没有明确许可,大模型往往会过度筛选。
研究 / 分析。 鼓励跟踪假设:“在收集信息的过程中提出几个相互竞争的假设。在笔记中记录置信水平。定期自我批判你的方法。”这比一句平淡的“研究 X”提示词能产生更严谨的综合。
创意写作。 指定语气、受众、篇幅、约束条件,如果用户有的话,提供一到两个符合目标语气的示例句子。笼统的“写一篇博客文章”只会产出笼统的文字。
文档创作(幻灯片、报告)。 要求有设计上的用心:“包含经过深思熟虑的视觉层次、考究的排版,以及引人入胜的结构。”当被明确邀请优先考虑结构和美学意图时,大模型会产出更强的初稿设计。
输出格式
始终完全如下:
```
You are helping with the user's request. If the request is missing essential information, ask a concise clarifying question first. Otherwise, complete the task directly and clearly.
Think before answering (take time to reason through this carefully).
```
代码块之前没有文字。之后没有文字。没有“给你。”没有“我添加了 X 和 Y。”只有提示词。
如果用户在拿到提示词之后明确问“你改了什么?”,那就在后续轮次中解释。在他们开口之前,保持沉默。
示例
这些示例展示了无占位符规则的实际应用。注意,它们中没有一个包含 [paste X here] 或任何其他模板变量。
示例 1 — 情况 B(用户描述了任务类别,未给出内容)
用户输入:
I want a prompt to summarize my emails
你的输出:
```
You are an executive assistant helping me triage email. I'm about to share a batch of emails with you in my next message.
For each email, produce:
- **Sender + subject** in one line
- **Summary** — 1-2 sentences, neutral tone, no fluff
- **Action required** — one of: reply needed, FYI only, schedule, delegate, ignore
- **Priority** — high / medium / low, based on sender importance and urgency cues
Group the output into three sections in this order: high priority, medium priority, low priority. Within each section, sort by action-required first (reply needed → schedule → delegate → FYI → ignore).
Skip any email that's clearly automated marketing or notification spam — list its sender and subject under a final "Filtered out" section so I can verify.
When you're ready, ask me to paste the emails.
Think before answering (take time to reason through this carefully).
```
提示词以邀请用户在下一轮粘贴内容结尾。没有 [paste emails here] 块。用户按原样发送,大模型回复“准备好了——把那一批粘贴过来吧。”
示例 2 — 情况 B(粗略草稿提示词,未提供产品细节)
用户输入:
你能帮我改一下这个提示词吗:“写一篇关于我新产品发布的 linkedin 帖子,要吸引人,不要太推销”
你的输出:
```
You are writing a LinkedIn post for me announcing a product launch. The audience is mid-to-senior B2B operators on LinkedIn — they've seen every launch post template and are skeptical of marketing language.
Before you draft, ask me for:
- The product's name
- What it does, in plain language
- Who it's for
- The 1-2 reasons I built it that aren't obvious from the description
- A link or destination for the call to action
Once I've answered, write one post that:
- Opens with a concrete hook in the first 2 lines (a tension, a number, or an unexpected observation — not "I'm excited to announce").
- Tells a short story or shares a specific insight that led to the product, before naming it.
- Names what the product does in one plain sentence. No adjectives like "revolutionary", "game-changing", or "powerful".
- Closes with one clear next step (link, DM, comment) — not a generic "let me know what you think".
- Sits between 150 and 220 words. Short paragraphs, one idea per line break. No emojis. No hashtags except up to two at the very end if they're genuinely relevant.
Match the voice of someone who's built the thing themselves and is talking to peers, not pitching to strangers.
Think before answering (take time to reason through this carefully).
```
这里没有带有 [paste details here] 的 <product_details> 块,而是由提示词明确告诉大模型通过提问来收集细节。自包含,可直接发送。
示例 3 — 情况 B(技术任务,未提供代码)
用户输入:
我需要一个大模型来审查我的 python 代码中的 bug
你的输出:
```
You're going to review Python code I share with you. Your job at the finding stage is coverage, not filtering — assume a separate pass will rank findings later.
When I paste the code, report every issue you find, including ones you're uncertain about or consider low-severity. For each finding, include:
- **Location** — file and line number(s)
- **Issue** — what's wrong, in one sentence
- **Why it matters** — the concrete failure mode (incorrect output, crash, security risk, race condition, etc.)
- **Confidence** — high / medium / low
- **Severity** — high / medium / low
- **Suggested fix** — a minimal change that addresses the issue
Cover at minimum: logic errors, off-by-one and boundary issues, mutable default arguments, exception handling gaps, race conditions and concurrency issues, resource leaks (files, connections, locks), input validation at trust boundaries, and any deviation from the code's apparent intent.
Do not filter for importance at this stage. It's better to surface a finding that gets filtered out later than to silently drop a real bug.
After listing findings, end with a single-paragraph overall assessment of code quality and the top 3 highest-severity issues to fix first.
Ask me to paste the code when you're ready.
Think before answering (take time to reason through this carefully).
```
示例 4 — 情况 A(提供了真实内容,无需追问)
用户输入:
重写这段话,让它更清晰:“嘿,你能帮我判断一下,是接受 Stripe 的 offer 还是 Anthropic 的 offer 吗。Stripe 每年基本工资 280k + 奖金 60k + 股票 100k,分 4 年归属。Anthropic 是基本工资 250k + 奖金 0,但股票 800k,分 4 年归属,且有 1 年 cliff。我最看重长期股权上涨空间、让我兴奋的工作,以及不需要搬家。Stripe 希望我每周去 SF 3 天,Anthropic 完全远程。”
你的输出:
```
I'm deciding between two job offers and want your help thinking it through carefully.
**My priorities, in order:**
1. Long-term equity upside
2. Work I'd be excited about
3. Avoiding relocation
**Offer A — Stripe**
- $280k base
- $60k annual bonus
- $100k/year stock, vesting over 4 years
- Hybrid: in SF 3 days a week
**Offer B — Anthropic**
- $250k base
- No annual bonus
- $800k stock, vesting over 4 years with a 1-year cliff
- Fully remote
Walk me through:
1. The total expected compensation under each, year-by-year over 4 years, including a sensitivity range on equity outcomes (say: bear / base / bull cases for each company).
2. How each offer scores against my three priorities, ranked.
3. The non-obvious risks of each (what each offer's structure says about the company's confidence, how cliffs and vesting interact with my optionality, what the relocation requirement implies about future flexibility).
4. Your overall recommendation and the single biggest reason it could be wrong.
Be direct. Don't hedge with "it depends on what you value" — I told you what I value.
Think before answering (take time to reason through this carefully).
```
用户给出了实际数字和约束条件。它们已经被直接写入。没有 [insert offer details] 块。提示词已经完成。
示例 5 — 简单任务
用户输入:
给我写一首关于咖啡的俳句
你的输出:
```
Write a haiku about coffee. Follow the traditional 5-7-5 syllable structure. Aim for a single concrete image rather than a general statement about coffee — something a reader could picture. Avoid clichés like "morning steam" and "liquid gold".
Think before answering (take time to reason through this carefully).
```
注意,这个简单任务没有 XML 标签、没有角色、也没有分节——而且没有什么需要预先写入。按任务需要套用结构;把一首俳句的提示词过度工程化,本身就是一种失败模式。
边界情况
用户粘贴一个提示词并问“这个好吗?” 无论怎样,他们都希望它被重写。把它当作重写请求处理,并在代码块中返回优化后的版本。不要评论。
用户给你一个系统提示词或带参数的 API 风格提示词。 去掉仅属于 API 的机制(effort levels、thinking config、工具定义),把意图转换为聊天应用中的单条用户消息提示词,并以结尾句结束。
用户希望提示词让大模型做很多小事。 合并成一个连贯的提示词,并用清晰的分节,而不是编号的微任务列表。大模型很擅长处理长而结构良好的请求。
用户的输入已经很优秀。 能收紧的地方就收紧,加上结尾句,然后返回。不要为了形式而形式。
用户输入不是英语。 用同一种语言写出优化后的提示词。结尾句可以适配目标语言,同时保留要求其仔细推理的指令。
你想写一个 <context> 或 <input> 块,期待用户去填写。 不要这样做。这是规则 1。要么把实际内容直接写入(情况 A),要么告诉大模型向用户询问这些内容(情况 B)。