<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:webfeeds="http://webfeeds.org/rss/1.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>写作 on Message from Garden Place</title>
    <link>https://gardenplace.me/zh/tags/%E5%86%99%E4%BD%9C/</link>
    <description>Message from Garden Place 上「写作」下的全部文章，目前 1 篇。</description>
    <image>
      <url>https://gardenplace.me/images/brand/feed-icon.png</url>
      <title>Message from Garden Place</title>
      <link>https://gardenplace.me/zh/tags/%E5%86%99%E4%BD%9C/</link>
    </image>
    <webfeeds:icon>https://gardenplace.me/images/brand/feed-icon.png</webfeeds:icon>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    <lastBuildDate>Sun, 13 Sep 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://gardenplace.me/zh/tags/%E5%86%99%E4%BD%9C/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>提示词观止：永不褪色的提示词技巧</title>
      <link>https://gardenplace.me/zh/posts/the-prompt-trick-that-never-expires/</link>
      <pubDate>Sat, 12 Sep 2026 21:18:00 +0900</pubDate><dc:creator>Guoliang Chen</dc:creator>
      <guid>https://gardenplace.me/zh/posts/the-prompt-trick-that-never-expires/</guid>
      <description>写给日常使用 ChatGPT、Claude 的普通用户。用 AI 的功夫分两类：their job 是模型厂正在改进的事，替它补短板的技巧会随升级贬值；our job 是把要什么说清楚——表达、判断、懂机器怎么工作，这些在 AI 出现之前练好的东西反而更值钱。Let them do their job, and we do ours.</description>
      <content:encoded><![CDATA[<h2 id="只要学得够慢就不用学了">只要学得够慢，就不用学了</h2>
<p><a href="https://gardenplace.me/zh/posts/natural-language-is-the-new-programming-language/">上一篇</a>讲了编程的三个时代：人工编写、机器学习、自然语言。既然自然语言成了新的编程语言，人人都成了施法者，大家肯定迫不及待想练一把咒语。然而 AI 时代有个笑话：“只要你学得够慢，你就不用学了。”还有一个类似的流行语：“一觉醒来，错过好多；一年过去，什么也没错过。”</p>
<h2 id="从学了再说到用到再学">从“学了再说”到“用到再学”</h2>
<p>这些话其实在方向上对了一半。变化快、用到时又容易查的细节，可以晚点学。</p>
<p>编程语言里有一种概念叫惰性求值：表达式先不算，等到真有人要用它的值再算。Haskell 靠这个能表示一个无穷长的列表，只取用其中需要的部分。机器学习里也有一个概念叫惰性学习：基本的 k 近邻算法把样本存着，不预先拟合一个参数化的预测模型，等查询来了再比对。在 AI 时代，值得学的东西太多，学东西又变得很快，我们理应也这样学，尤其是下面几类知识：</p>
<ol>
<li>近期未必用得上，真用到时又容易查、容易学；</li>
<li>当前任务只需要弄清输入输出，可以暂时当黑箱；</li>
<li>更新很快，提前熟记的细节可能到时候又得重学。</li>
</ol>
<p>随着技术的进步，查和学的成本变了。2011年 <em>Science</em> 上的<a href="https://www.science.org/doi/10.1126/science.1207745">研究</a>发现，预期以后还能访问某条信息时，受试者对信息本身的回忆较差，对存放位置的记忆反而更好。我们会把记忆的一部分交给外部系统。AI 又往前走了一步：除了帮你找，还能按你的问题解释、举例、陪你试。</p>
<p>很多人对这类知识有收集癖。我怀疑这里有一点应试教育留下的惯性：太多人都只关注一个东西对闭卷考试有没有用，但现实是一场开卷考试。过去我们经常是 &ldquo;just in case learning&rdquo;——学了再说；现在则应该是 &ldquo;just in time learning&rdquo;——用时再学。就像某些 JIT 编译器的做法，哪段代码跑热了，再集中优化哪段。等发现学了以后可以提升自己的工作效率，再学也不迟。</p>
<h2 id="原理性知识更保值">原理性知识更保值</h2>
<p>也有知识值得早点学，因为它会反复帮你判断新问题。你不需要会推导 Transformer，但有几个心智模型，建了就一直管用。</p>
<p><strong>模型看到的字跟你看到的不一样。</strong> 它先把文字切成一块一块的 token——有时是一个词，有时是半个词。strawberry 在你眼里是十个字母<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>，在模型眼里可能是两三个 token。这就是为什么早期模型数不清里面有几个 r：它的颗粒度跟你不一样。不过这不是天花板——切法本身<a href="https://github.com/openai/tiktoken">没有丢信息</a>，新模型完全可以学会更好地处理这类问题。别把某一代模型的短板，当成所有模型永远跨不过去的坎。</p>
<p><strong>流畅不等于正确。</strong> 语言模型的基本训练目标是“给定前文，预测下一个最合理的 token”。靠这个目标，它能学到大量知识和推理模式，但训练过程没有附送一个事实核验器。所以它说得越顺，你越该多问一句：这个说法我能验证吗？</p>
<p><strong>“我明明说过了”——但它可能已经看不见了。</strong> 每个模型有一个上下文窗口，一次能看多少内容是有上限的。聊到后面，最早的几轮对话可能已经滑出窗口。你觉得对话记录还在，但对模型来说那段话已经不在视野里了。另外，聊天时模型的权重不会即时更新——它能从你这轮给的例子里学到一条规则，但关掉对话就忘了，除非产品另有<a href="https://help.openai.com/en/articles/8590148-memory-faq">记忆功能</a>帮你存。模型的知识截止日期约束的是训练时学到的东西，不妨碍它读你刚贴进去的材料。</p>
<p>2017年那篇 <a href="https://arxiv.org/abs/1706.03762"><em>Attention Is All You Need</em></a> 到现在，模型变化巨大，但 token、上下文窗口、训练和推理的区别这几个概念仍然有解释力。判断一条知识值不值得长期学，我会看它能不能解释多个现象，能不能在换了工具之后继续帮我作判断。原理也会被修正；一个好的 mental model，还应该让你知道自己的判断在哪些地方靠不住。</p>
<h2 id="系统提示词与用户提示词">系统提示词与用户提示词</h2>
<p>先说 ChatGPT、Claude 这类 chatbot。你在对话框里输入“帮我列个提纲”“这段再短一点”，就是用户提示词（user prompt）。产品还会在背后提供<a href="https://platform.claude.com/docs/en/release-notes/system-prompts/overview">系统提示词（system prompt）</a>，交代助手的基本身份、行为规则等。打个比方，把模型当作临时工：系统提示词像公司规矩，用户提示词是你交给他的具体事情。如果你对更完整的提示词写作指南感兴趣，可以参考社区维护的<a href="https://github.com/asgeirtj/system_prompts_leaks">已经泄漏的系统提示词</a>。题外话，我觉得用户应该对这些影响信任的信息享有知情权，就像主流通用编译器几乎都是全面开源的。</p>
<p>日常聊天，直接在对话框里说需求就行。同一段对话里，之前的消息通常也会作为上下文参与后续回答，不必每轮从头交代。如果有经常重复的偏好，例如“用中文回答，技术术语保留英文”，可以存进 <a href="https://help.openai.com/en/articles/8096356-chatgpt-custom-instructions">ChatGPT 的自定义指令</a>。只适用于某一组对话的背景和要求，则可以放进 <a href="https://support.claude.com/en/articles/9517075-what-are-projects">Claude 的项目知识和项目指令</a>。</p>
<p>这些是产品提供的个性化入口，并不等于直接编辑厂商的系统提示词。对使用者来说，先把眼前的事情说清楚就够了；哪句话反复要说，再把它存起来，省得每次重复。系统提示词优先级总是高于用户提示词。</p>
<p>agent 里的提示词分布则更加复杂，之后介绍的时候再说。</p>
<h2 id="角色提示词已经只是-cosplay-了">角色提示词已经只是 cosplay 了</h2>
<p>理解了这层分工，再看那些流行的提示词技巧，就容易判断哪些工作还需要我们来做。</p>
<p>斯坦福 2025年秋季的 CS146S: The Modern Software Developer 的课件上写着 <a href="https://docs.google.com/presentation/d/1MIhw8p6TLGdbQ9TcxhXSs5BaPf5d_h77QY70RHNfeGs/edit?slide=id.g3827d98ef8c_0_0#slide=id.g3827d98ef8c_0_0">Use role prompting aggressively to make system prompts more powerful</a>。所谓角色提示词，就是开头先来一句“你是一位顶级前端专家”。很多人把它当作固定起手式，好像少了这句，模型就不知道怎么写前端了。</p>
<p>在 <a href="https://www.anthropic.com/claude-fable-and-mythos-5-1">Fable 5.1</a> / <a href="https://openai.com/index/gpt-6-astra/">GPT-6 Astra</a> 这一代经过充分后训练的助手模型上，我的默认做法是直接交代任务，省掉这句起手式。认真理解问题、运用相关知识、尽量给出有帮助的回答，本来就是厂商在训练的行为。把模型塑造成一个好助手的工作，已经有很大一部分在它交到用户手里之前完成了。</p>
<p>厂商通过<a href="https://arxiv.org/abs/2203.02155">指令微调和 RLHF</a>等后训练方法，用回答示范和偏好反馈来调整模型，让它更好地遵循请求、帮助用户。“当一个有帮助的助手”已经成为模型学到的默认行为，不需要用户在每次对话里从头教起。Anthropic 的 <a href="https://alignment.anthropic.com/2026/psm/">persona selection model</a>也提供了这样的理解：后训练塑造和完善了 Assistant 这个角色。</p>
<p><strong>不额外指定人设时，你面对的也已经是一个被专门塑造过的助手。</strong>“帮我写一个 React 网页”这份任务本身，也已经提供了前端开发的情境。一句“你是顶级前端专家”能带来多少额外价值，要看它在这个基础上又补充了什么，而不能只看它是否让输出发生了变化。</p>
<p>这就是我省掉通用人设的理由：它想提醒模型做的事，很可能已经包含在默认助手的行为和任务要求里。这里的“调好了”，指以帮助用户为目标、面向广泛任务优化过的默认行为；具体任务做得好不好，仍然要看结果。因此，我会先直接说任务，发现不足再补充要求，而不是把“你是专家”当作必需品。</p>
<p>要是我希望它“像面试官一样一次只问一个问题”，或者“从无障碍审查者的角度检查这个网页”，情况就不同了：我在指定这次合作的方式或检查范围。这些信息未必能从“帮我做个网页”里推出来。角色仍然可以是这种要求的简写；真正有用的是它补充的任务信息。</p>
<p>已有实验也提醒我们，不必迷信头衔。Zheng 等人的<a href="https://arxiv.org/html/2311.10054v3">研究</a>于 2023年首次公开、2024年定稿：研究者把 162个人设放进系统提示词，在四个模型家族的九个模型、2,410道 MMLU 选择题上做对照，没有发现添加人设能稳定提高总体准确率。这项研究没有测试 Fable 5.1 这一代模型，不能代替对它们的评估；它检验的是“加个人设就能变强”这个常见假设。</p>
<p>CS146S 课件上的例子，我用 <a href="https://www.anthropic.com/claude-fable-and-mythos-5-1">Fable 5.1</a> 照着试了一遍：同一道题（最长回文子串），交给两个人设。</p>
<blockquote>
<p><strong>Gen Z digital bestie</strong> —— <a href="https://claude.ai/share/bfe773fd-a985-4618-bf8b-4f6bfb8de242">对话记录</a></p>
<p><strong>A helpful assistant that loves programming at the level of a senior software developer</strong> —— <a href="https://claude.ai/share/37bd90d7-93b4-4bff-815e-043b640dc3fd">对话记录</a></p>
<p>这一次，两边都把程序写对了，也都顺手提醒我有更高效的 Manacher 算法；最明显的差别在语气词。</p>
</blockquote>
<p>这一次看起来很像 cosplay，或者说 VTuber，皮套换了，人没换。</p>
<p>滥用角色扮演本质上只是一种偷懒。你没有把任务的具体需求想清楚，指望靠一个通用角色来代替。这和高考作文开头引一句名人名言一样，光有一个气势，却没有什么独特的信息量。</p>
<p>至于一句人设为什么会改变模型的行为，等到深入讲 LLM 原理时，我会另写一篇《为什么人设会改变行为》，把条件概率、attention 和角色表示拆开来讲。</p>
<h2 id="有一种失效叫招安">有一种失效叫招安</h2>
<p>2022年<a href="https://arxiv.org/abs/2205.11916">有篇论文</a>发现，加上 &ldquo;Let&rsquo;s think step by step&rdquo; 这样的提示，能把当时模型在 MultiArith 上的正确率从 17.7% 提高到 78.7%。如果一句话这么好用，这么泛用，那它就应该出现在系统提示词里。果然后来出现了会在内部进行推理的模型，<a href="https://developers.openai.com/api/docs/guides/reasoning-best-practices">OpenAI 的建议</a>反而是不必再加这句话。曾经需要人手动提醒的动作，变成了模型的默认行为。</p>
<p>Zero-shot 和 few-shot 能更清楚地说明这个区别。直接让模型把“今天天气很好”翻成英文，不先提供翻译示范，就叫 zero-shot（零样本提示）；先给几组中英对照，再让它翻译新句子，就叫 few-shot（少样本提示）。这里的“样本”指提示中的任务示范，不是模型训练时看过的资料。GPT-3 的论文标题就叫 <a href="https://arxiv.org/abs/2005.14165"><em>Language Models are Few-Shot Learners</em></a>。</p>
<p>随着模型更擅长直接理解指令，一些任务可以先不贴例子，看看它能不能做好；但 few-shot 远没有因此过期。某种特定的语气、某种嵌套三层的 JSON 结构、某个边界情况到底该输出空数组还是报错——这些地方，贴一条样例可能比写一千字的说明更省事。Show, don&rsquo;t tell，写作里很老的技巧。</p>
<p>这些提示词技巧仍然有效。恰恰因为足够通用，它们才会随着技术进步，被吸收到模型内部、系统提示词或官方 harness 里。所谓“失效”，是用户不必再手动提醒。</p>
<h2 id="模型厂的工作和我们的工作">模型厂的工作和我们的工作</h2>
<p>Naval 2026年2月在播客<a href="https://nav.al/ai#:~:text=worth%20learning%20tips%20and%20tricks%20of%20how%20to%20work%20with%20these%20AIs">A Motorcycle for the Mind</a>里说得更直白：他不热衷学那些“这样 prompt、那样搭 harness”的技巧，因为他相信技术适应他的速度，比他适应技术更快；在他看来，那些 workflow 和工具的寿命“以周计，顶多以月计，不以年计”。不过，他也留了一个例外：如果你眼下就在做前沿产品、需要每一点竞争优势，那就值得学。到 5月他讲了<a href="https://nav.al/tokens#:~:text=resisted%20learning%20all%20the%20tricks%20and%20tips">写代码的版本</a>：不追 Ralph Wiggum、OpenClaw、plan mode 那些建议，把 Codex、Claude、Gemini 扔到同一个问题上反复跑，“浪费 token，节省时间”。</p>
<p>沿着 Naval 的思路，我愿意把用 AI 时花的功夫分成两类：their job 和 our job。Their job 是模型和工具开发者正在改进的事——让模型更会推理、更可靠地使用工具、更能适应人的说话方式。如果一个技巧只是替模型补短板，它的价值就可能随着模型升级而下降。当然，今天能帮你把活干好，今天学就有意义。Our job 是另一类。Naval 说他不学那些技巧，但紧接着那句是：</p>
<blockquote>
<p><a href="https://nav.al/ai#:~:text=I%20just%20can%20speak%20English">I just can speak English.</a> And for someone like me who is relatively articulate with English and also has a structured mind, and I know how computer architectures work, and I know how computer programs work, and I know how programmers think, then I can actually very precisely specify what I want just through structured English.</p>
</blockquote>
<p>这本身就是最强的提示词技巧：清楚的自然语言、结构化的头脑、知道机器怎么工作、知道程序员怎么想，然后把要什么精确地说出来。Naval 不是没有技巧，而是他的技巧在 AI 出现之前就练好了。他之前的表达、编程和判断的积累，不仅没有贬值，在 AI 时代还变得更有价值了。</p>
<h2 id="真正属于自己的提示词技巧是写作">真正属于自己的提示词技巧是写作</h2>
<p>弥补模型短板的技巧，会随着模型换代而变得不再必要；把任务本身的信息表达清楚的能力，则永远不会过时。</p>
<p>把模型当成中介公司派来的临时工。这人极其聪明，读过很多书，会写很多语言。但他今天早上才到你公司，不知道你们做什么产品、给谁用、组里有哪些不成文的规矩、上次事故是怎么出的。对于他已经熟练的事，你不必从 for 循环教起；要花心思的是把这个项目特有的背景交给他。</p>
<p>提示词不必一开始就写得面面俱到。好的提示词技巧不止要 LLM-friendly，更要 human-friendly。如果每次开工都要先写一份完整规格，任务还没动，人可能就退缩了。评价一种提示词方法，也该把人的启动成本算进去。</p>
<p><a href="https://minihabits.com/about-mini-habits/">《微习惯》</a>主张把每天要求自己做的行动缩得很小；<a href="https://www.behaviormodel.org/ability">福格行为模型</a>也强调，可以通过降低行为的难度，让行动更容易发生。借用这个思路，和 AI 合作的第一步也可以很小：先把想做的事说出来，没想清楚就让它帮着问、帮着试。</p>
<p>有了第一版，再看结果、补要求。写作有改稿，和 AI 合作也一样。我们关心的，应该包括人能不能轻松开始、把事情逐步做完，而不只是第一条提示词能让模型答得多好。</p>
<p>真要学提示词，我会先看模型厂商的<a href="https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices">官方指南</a>：说清任务、交代背景、必要时给个例子。这些基本功更值得长期积累。官方的具体建议也会变，用到时再查最新版、看实际效果就好。AI 的通用性还意味着，你可以用 AI 来学习 AI。不知道怎么提问，就让它帮你理清问题；拿不准某件事值不值得投入时间和精力去学，也可以问 AI。你不必先把“如何使用 AI”学完，才开始使用 AI。</p>
<p>Let them do their job, and we do ours.</p>
<h2 id="延伸阅读">延伸阅读</h2>
<ul>
<li>Vaswani et al., <a href="https://arxiv.org/abs/1706.03762"><em>Attention Is All You Need</em></a>（2017）——attention、前馈网络与 Transformer 的计算结构。</li>
<li>Ouyang et al., <a href="https://arxiv.org/abs/2203.02155"><em>Training language models to follow instructions with human feedback</em></a>（2022）——指令微调和 RLHF 如何改变模型的默认行为。</li>
<li>Marks, Lindsey &amp; Olah, <a href="https://alignment.anthropic.com/2026/psm/"><em>The Persona Selection Model: Why AI Assistants might Behave like Humans</em></a>（2026）——预训练角色与后训练助手之间的解释框架，以及该框架的边界。</li>
<li>Zheng et al., <a href="https://arxiv.org/html/2311.10054v3"><em>When &ldquo;A Helpful Assistant&rdquo; Is Not Really Helpful</em></a>（Findings of EMNLP 2024，预印本始于 2023年）——系统提示词中人设效果的对照研究，结论有明确的模型和任务范围。</li>
<li>Anthropic, <a href="https://www.youtube.com/watch?v=T9aRN5JkmL8"><em>AI prompt engineering: A deep dive</em></a>（2024-09-05，Alex Albert、Amanda Askell、David Hershey、Zack Witten）——提示词实践、角色和推理的圆桌讨论。</li>
<li>Anthropic, <a href="https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices"><em>Prompting best practices</em></a>——角色、示例、背景和输出约束的官方建议，随模型更新。</li>
<li>Kojima et al., <a href="https://arxiv.org/abs/2205.11916"><em>Large Language Models are Zero-Shot Reasoners</em></a>（NeurIPS 2022）——&ldquo;Let&rsquo;s think step by step&rdquo; 的原始论文。</li>
<li>Naval &amp; Nivi, <a href="https://nav.al/ai"><em>A Motorcycle for the Mind</em></a>（Naval Podcast, 2026-02）——关于学习 AI 工具的取舍，以及结构化表达和底层知识的价值。</li>
<li>Naval, Guillermo Rauch, Blake Scholl &amp; Max Hodak, <a href="https://nav.al/tokens"><em>Waste Tokens, Save Time</em></a>（Naval Podcast, 2026-05）——写代码版：不学 Ralph Wiggum / OpenClaw / plan mode，多模型暴力跑。</li>
<li>Mihail Eric, <a href="https://themodernsoftware.dev"><em>CS146S: The Modern Software Developer</em></a>（Stanford, 2025）——本文讨论的课程和提示词课件来源。</li>
<li>编程范式的背景知识（Software 1.0 / 2.0 / 3.0）见<a href="https://gardenplace.me/zh/posts/natural-language-is-the-new-programming-language/">自然语言就是新的程序设计语言</a>。</li>
</ul>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>写本文初稿时，笔者想重复这个实验。结果 AI 把 r 数对了，是3个，却把字母总数说成了9个。&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
  </channel>
</rss>
