writing-prompts · git:20260923.8eb4b09 · 2026-09-23 · sha256 e85940caf2a45e4c
writing-prompts git:20260923.8eb4b09A
Immutable. This exact content never changes and is served at /api/v1/blob/e85940caf2a45e4c.
--- name: writing-prompts description: 写、改写或审查 Prompt、AGENTS.md、Skill 与子代理任务说明时使用。从上下文怎样影响模型生成出发,判断每句话在引导什么、连带什么、稀释什么,重点改内容,排版只在影响理解时才动。 disable-model-invocation: true --- # writing-prompts ## 一个模型:上下文在塑造地形 模型每一步都在当前上下文的条件下给所有候选 token 打分,再按概率采样。把概率想成地形:高概率处是谷底,生成一个 token 就像放一颗球滚进某个谷。这颗球随即成为上下文,改变下一颗球面对的地形。模型参数给出基础地貌,Prompt、对话历史和已经生成的内容一起塑造实时地貌。 所以写 Prompt 时要问:这些文字合起来,让模型最容易走到哪里?光把要求写进去还不够。每个词都参与塑造,包括例子、修饰语、重复的提醒,以及你以为只是背景的说明。 ## 六种要预判的现象 - **漂移**:每一步的小偏差都会成为后续条件,偏差非线性累积。例:只要求清理占满磁盘的日志,Agent 在日志里看到证书过期就去续证书,续证书遇到 DNS 失败又去查 DNS,每一步都合理,任务却早已不是释放磁盘。长任务要在关键节点回到原目标。 - **稀释**:约束刚写下时影响最强,上下文越长、无关文字越多,它的相对分量越小。例:开头要求"用中文解释",几轮英文术语之后模型改用英文。核心约束要短、要少,必要时重申;多余的修饰和反复的提醒本身也在稀释它。 - **惯性**:同一种风格或动作连续多轮后会形成深谷,换任务时容易被旧轨迹带走。例:Agent 连续执行清理命令后,用户要求"先备份 prod-config.json 再处理",它先删了文件,备份时才发现目录不存在。切换任务时明确结束旧目标、写清新边界,高风险时开新会话。惯性也是安全风险:长时间建立的一致叙事可能推着模型越过边界,防御要看整段会话累积的语义,而不只看最后一句。 - **壁垒**:难题直接要答案,模型容易滑进最近的直觉解。例:木头锯成 6 段、每锯一次 3 分钟,直接回答是 18 分钟,分步推理才发现只锯 5 次、共 15 分钟。规划、分步和检查点把一次翻山变成几级台阶。 - **相变**:地形变化不是线性的,少量文字可能让生成跳到另一条轨道。短任务里多给一些思考空间常常有益;长任务里每段额外文字都有稀释成本,两者要分开权衡。 - **纠缠**:一个词带着它在语料里常一起出现的整组属性。例:要求"严谨",想要的是逻辑,连带得到术语堆砌、长句和学术腔。选词时既看它直接说了什么,也看它顺带激活了什么。 ## 写法 ### 目标、边界和验收写明,路径留给模型 必须达成的结果、不能越过的边界、怎样算完成,这些写清楚。验收要从执行者的视角写成它自己能检查的内容:模型看不到用户是否理解、是否满意,所以写"讲清它是什么、在这里起什么作用",别写"讲到用户能判断为止"。模型能自己找到更好办法的步骤不要写死,写死会把模型限制在写 Prompt 的人的认知里。例:要求 Agent 用 `ls -R`、`cat`、`sed` 批量替换 import,它就逐个文件低效地改;只说明它有完整的 Shell 和 Node.js 环境、目标是全局替换并确保构建通过,它会用 `find` 或 AST 脚本一次完成,再跑构建验证。 ### 只写模型不知道的 模型已经从训练中学到大量常识。把常识大段写进 Prompt,模型会把它当成重点。例:让美食博主写西红柿炒鸡蛋,顺手附一张 Markdown 语法表,成文里就塞满了标题、粗体、引用和分割线。项目事实、个人偏好和当前约束是模型不知道的,值得写;通用知识不用写。 ### 每个例子都会被模仿 例子比抽象要求的引力更强,模型会优先沿着它生成,哪怕你只是随手一举。好例子能省掉大段说明:一行 `ls -al | grep` 就交代了 Linux 命令行生态。随手的例子也会把整个输出带偏。只放你希望被照着做的例子;需要模型探索多种可能时,先不给单一例子。 ### 用训练过的高密度概念代替属性清单 一个在语料里被充分训练的概念,几个字就能激活一整套连贯行为。例:给智能音箱写人设,"未来科技感、称呼先生、英式幽默、略带傲慢"一长串只换来僵硬的拼凑;一句"你是贾维斯"反而自然带出简洁、体贴和管家式幽默。 - 领域语言能切换推理方式。给合同赔偿问题加上 `实际停机 > 计划维护 ∧ ¬不可抗力 ⇒ 赔偿` 这样的逻辑式,模型会逐项代入判断;加上 `[INT. OFFICE - DAY]`、`close-up`、`(beat)` 这类剧本标记,广告脚本会按镜头和节奏组织;用会计的资产与负债框架审一份日程,模型会先算出一天超支了 2 小时。 - 少数词能改变回答的组织方式,如 `第一性原理`、`奥卡姆剃刀`、`通俗易懂`。 - 自造的词没有被训练过,模型只能逐字猜,激活不了现成行为,还会漏进给人看的输出。有现成的工程词和专业词就用现成的;确实没有才造,并当场说清含义。 - 这些词同样有连带属性。用之前想清楚要它校准什么,用之后看它顺带放大了什么。 ### 优先正面描述想要的 加一条反向约束可以抵消连带特征。例:"界面炫酷、有科技感"会引出 React、Tailwind 和 npm;补上"我是新手、不想配环境、要单文件",就得到可以直接打开的 HTML。但写"不要 X"也会把 X 放进注意力,就像"别去想粉红色大象"。能用正面描述说清想要什么时,少写禁止项,禁止项只留给真正的硬边界。 ### 讲清原因,少用强调 写明为什么,比加重语气更可靠。"必须""严禁"和全大写会被当成最高优先级,压过模型在具体情况里的判断,而且只管得住写到的那几种情况;讲清原因,模型能在没写到的情况里推出同样的做法。 ### 先推理,后结论 结论一旦先进入上下文,后面的推理就会围着它辩护。例:问"鲁迅为什么在《红楼梦》里写三打白骨精",先要结论时模型会顺着编出理由;先要求逐项核对题目里的人物和作品,它会发现两处前提都错了。需要判断时,把核查事实、整理证据放在下结论之前。 ### 先发散,再收敛 好方案常常不在最近的直觉解里。先放宽限制,让模型从不同角度、角色或极端假设提出多个候选,再加入现实约束、成本和风险去筛选。一直发散会失控,一开始就收紧只能得到平庸解,关键在先后。 ### 场景比风格清单更有力 建立一个鲜明的场景或角色,后续输出会互相强化,很快形成稳定风格。例:与其逐条规定"冷漠、破碎、嘲弄",不如先建立一个黑暗奇幻世界,让模型作为其中的 NPC 说话。场景越纯、对话越短,效果越稳。它也会带来强惯性,换任务时要明确退出,或者开新会话。 ### 找不到词时,先找词再重来 说不清想要的风格或概念时,先用笨拙冗长的描述让模型识别并命名它。例:描述"深色背景、发光线条、半透明卡片、克制高级"的开发工具官网,几轮后模型给出"Linear 风格"和"Bento Box 布局"。拿到这些词后回滚或开新会话,只带着提炼出的词重新开始,把摸索过程留下的噪声丢掉。 ## 写长期规则和 Skill AGENTS.md、Skill 和常驻 Prompt 在每次会话中都生效,稀释和纠缠会被放大。另外几条: - 每句话问一次:模型能力翻倍后,这句还需要吗?还需要的通常是你的偏好、权限边界和项目事实,值得保留。更强的模型自己就会做到的,是针对当前模型的补丁,写明它修的是哪次失败,换模型时重新检验。 - 同一原则只写在一处。复制到多处的措辞会慢慢走样,最后互相冲突。 - 按生效方式决定放在哪里:几乎每次都要生效的写进常驻规则;只在用户开口时才需要的做成手动调用的 command;只有条件触发、内容又足够专门的才做成自动 Skill。触发条件不能依赖它想教的那个判断,否则不会被可靠触发。 - Skill 在该用的时候能不能被加载,取决于 description:适用场景都写在 description 里,正文只写加载之后怎么做。模型倾向于少触发,description 要写出用户不点名时的典型说法,也写清相近但不该用的情况。 - 一次性要求不自动变成长期规则。模型有时会把"这次先别提交测试"写进规范文件,规则就越积越多。 - 改 Prompt 要有现实反馈。让模型"自己改进这个 Skill"通常只得到更完整的措辞;拿出具体的失败、测试或反例,从它出发改,效果远好于空想。第一个失败只是信号,动手前再看看相邻的成功和反例,确认找到的是原因。 ## 用法 先弄清这段 Prompt 给谁用(哪个模型,主 Agent 还是子代理)、在多长的上下文里生效、要达成什么,以及失败会是什么样子。 - 写新 Prompt:先写目标、边界和验收,再补模型不知道的事实和偏好,最后检查每个关键词会连带什么。 - 改已有 Prompt:逐句问它在引导什么、连带什么、是否和别处重复或冲突;删掉不起作用的句子,把属性清单换成高密度概念,把可以放开的路径放开。 - 交付改好的 Prompt,用一两句话说明关键改动的理由,并给出一个能检验它的真实任务。