玩了大半年Prompt Engineering,最大的感受是这行被包装得越来越玄学了。铺天盖地的教程都在教你“套模板”:比如“你是一名资深专家,请用马克down格式输出……”结果新手上路第一周觉得效果还行,第二周换了一个任务就全面失灵。原因很简单,模板只是招式,不理解背后的机制,你永远只能对着同一个prompt修修补补,不知道它为什么有效、为什么失效。
真正合格的Prompt Engineering,看的不是“会不会写指令”,而是“能不能定位问题”。模型输出不好,到底是指令不清晰、上下文不够、还是任务本身定义错了?这三个问题的修法完全不同,但市面上99%的文章只会让你“再改改措辞”。这篇内容我想换个讲法——不教你背模板,而是拆解prompt背后的设计逻辑,顺手给你一套能落地的诊断方法论。无论是接需求、做Agent、还是写批处理任务,这套方法都能直接搬过去用。
1. 内容整体设计与思路拆解:先把Prompt当工程看
1.1 为什么Prompt值得“工程化”而不是“话术化”
很多人有个根深蒂固的误解:Prompt Engineering约等于“把需求说清楚”。这话对,但只说对了一半。把需求说清楚是必要条件,不是充分条件。真实业务场景里,一个prompt要稳定的输出可用结果,依赖的是结构性设计,而不是语言的华丽程度。
我这里的理解,是把prompt当代码看——它有输入、有输出、有边界条件、有异常处理、甚至有版本管理。你觉得“请用专业的语气写一篇关于XX的文章”就叫prompt,那确实不需要工程化;但当你需要系统每天处理一千条不同类型的用户请求、每个请求还要自动判断意图、分配处理流程、生成结构化数据返回时,裸话术是很难稳住阵脚的。Prompt真正工程化的临界点,是你开始对它提“稳定性”和“准确率”要求的那一天。
为什么“话术化”必然翻车?因为模型内部有大量的归纳偏好和先验知识,你的措辞变化会直接影响注意力分布。同一个需求,写成“帮我总结以下内容”和“提取以下文本的关键信息并输出成列表”,模型侧重点会完全不同。前者默认给你一段话式的总结,后者大概率给你相对规整的结构化信息。这个差异不是你“态度诚恳”能解决的,是语言本身携带的指令信号在起作用。
1.2 三个底层机制,决定Prompt写得好不好
要理解Prompt设计,必须先建立三个底层认知。
第一个认知是:大模型不是搜索引擎,也不是数据库,它本质上是下一个词的概率预测器。你写的每一句话,都是在为“预测下一个token”提供条件。所以prompt里被强调的信息会被模型倾斜更多的决策权重,被弱化或被跳过边界条件的指令会被模型忽略——这不是模型“笨”,而是它在执行你的概率条件。
第二个认知是:注意力机制对位置的敏感度远超直觉理解。很多Prompt教程教你“把最重要的要求放在开头”,这句话是有依据的。模型在长序列中,对中段信息的注意力会衰减,对开头和结尾的信息相对更敏感——但具体衰减曲线依模型而异。实操里常见的现象是:你在一大段指令中间夹了一句“不要输出任何解释”,结果模型还是洋洋洒洒写了分析。因为这句“不要”被淹没在密集的指令环境中,没有获得足够的注意力权重。
第三个认知是:模型存在“示范偏好”,即few-shot示例的影响力往往大于自然语言约束。你写“请用JSON格式输出”,可能不如你在示例里放两行标准JSON让模型模仿来得管用。这个偏好的底层逻辑,可以理解为模型把示例视为“概率锚点”——它会更倾向于沿着示例的格式和风格继续走下去,而不是严格遵循你用自然语言描述的规则。
这三点放在一起,得出的结论就是:打造高质量提示词的重点,不应该是编造更华丽的语言,而是要思考如何在设计时有效管理模型的注意力优先级、输出格式偏好和指令执行边界。
注意:市面上那些“角色扮演”、“语气设置”的模板之所以有用,本质上不是角色本身有魔法,而是角色描述会一口气激活模型里一大片相关领域的先验知识,改变归纳偏好。角色扮演是手段,不是目的。
1.3 适用场景与方案选型逻辑
根据不同的业务需求,Prompt Engineering的方案选型差别很大,我用一个简单的决策逻辑来拆解:
- 单轮任务型(写摘要、翻译、改写):核心在设计任务的边界和质量标准。这类场景首选直接编写固定指令,以清晰说明任务、明确输出格式为主。
- 批量处理型(对大量结构不一致的输入执行统一操作):核心在设计容错机制和自我校验指令。由于输入不可控,必须让模型学会“在不确定时如何处置”,同时需要设定默认兜底逻辑。
- 对话/Agent型(多轮交互、工具调用、动态规划):核心在系统提示词的全局策略设计。要区分“全局边界”和“单轮指令”,否则用户一句话就能带偏整个对话状态。
- 复杂推理型(代码生成、数据分析、逻辑拆解):核心在思维链引导与中间过程输出。要给模型留出“展示推理过程”的空间,利用更多的计算资源换取更靠谱的结果。
方案选型的核心逻辑,是先界定“输入方差”和“输出质量要求”,再决定prompt的复杂度。输入越不可控、输出要求越严格,prompt的结构化程度就要越高。单纯几句话能搞定的场景,硬套复杂框架反而会引入额外的噪音。
2. 核心细节解析与实操要点:把指令拆到块级
2.1 五大结构块,搭出一个高可用Prompt
我习惯把Prompt拆成五个结构块。这五个块不是每次都要凑齐,但它们帮你兜底不会漏掉关键信息。
第一个是系统提示词块。告诉模型它的身份、任务边界、全局规则和默认行为。比如“你是API接口的封装层,只能输出JSON,不做任何解释”。系统提示词是所有后续指令的基准坐标系,它必须足够稳定清晰。
第二个是任务描述块。对应“现在要做什么事”。这里的关键是把任务定义成模型能执行的动作,而不是你期望的结果。比如“分析情绪”是期望,模型不知道“分析”具体该做几步;“从文本中识别并标注包含积极或消极情感的词句,返回分类结果”是动作,模型知道该执行什么。任务描述的动作化程度,基本决定了输出的完成度。
第三个是输入数据块。对应“基于什么来做事”。这个块的关键在界定数据的边界和可能出现的形态。比如你要做总结的文本可能包含网页噪音、乱码、无关字符,就需要提前写明“忽略与主题无关的内容”。
第四个是输出规格块。对应“返回什么样的结果”。不要只写“返回JSON”,要写明字段名、字段含义、可选值范围、嵌套结构,甚至给出一个范例。输出规格写得越细,后期解析越省事。
第五个是边界与兜底块。对应“什么时候别硬做”。比如“如果无法从文本中提取到任何关键信息,返回空列表而不是编造内容”。这能有效减少模型的幻觉。对于非法输入、模糊输入、超出能力范围的请求,边界块会给出安全的处置路径。
实操心得:初写prompt的人最容易犯的毛病是任务描述和输出规格混在一起写,想到哪写到哪。结果是模型抓不住重点,输出的格式时好时坏。我的建议是强制按块书写,每个块用明确的标识隔开(比如“## 任务”、“## 输出”),这既是给你自己看,也是给模型看的。
2.2 边界准则:写给模型看的“红线”
很多人不知道“边界”也是prompt的一部分。我早期做批量文本处理时,经常遇到一个现象:某些输入数据质量很差,模型宁可强行编一个答案也不说“做不了”。原因很直接——prompt里没有“做不了”这个选项,模型只能硬着头皮生成语义上最连贯的回应。
解决这个问题,需要在prompt里显式设置兜底策略。比如:
如果无法从给定文本中提取到任何关键信息,请返回{"status": "empty"},不要猜测或编造内容。这个指令实际上是在告诉模型:遇到“无法回答”的状态时,给出什么反应比硬答更好。大模型本质上是一个模仿引擎,你给出了一个选项,它大概率会沿着这个分支走。反而如果你什么都不说,它的默认行为就是在常见场景中输出一个看起来合理的回答。所以边界准则的关键,是给模型一条“安全逃生通道”。
另一个常见的边界场景是多轮对话里的“不在服务范围”问题。比如你做了个客服Agent,用户的输入跟你的处理范围毫无关系。如果不设置边界,模型很可能为了“显得有用”而强行回应用户。正确做法是在系统提示词里预先定义一次处理流程:先判断输入是否在服务范围内,如果不在,统一回复预设话术并停止进一步处理。
2.3 Prompt的长度控制与信息优先级排序
写Prompt不是越长越好。信息过载同样会稀释模型的注意力——你有五个要求,不如一个核心要求加两个附加要求来得有效。这个逻辑在心理学上叫“工作记忆容量”,在模型侧表现为“注意力预算”。你给模型的信息越多,它分配到每个信息点上的关注度就越低。
所以实操中要学会排序:这条prompt里哪个约束是绝对不容妥协的?哪个字段是必须返回的?哪条规则是可以灵活处理的?把这些排序写出来,然后把最重要的信息放在开头和结尾,中间段放次要的补充说明。
我给一组经验参考值:单次任务的prompt总长度尽量控制在作用域内所需的必要信息量。比如你是做一个摘要任务,prompt只需要包含动作指令、文本、输出格式、边界条件,任何额外的闲聊背景都会带来噪音。如果是复杂的Agent系统,系统提示词可以长一些,但单轮prompt要保持轻量。长上下文不等于高注意力,这一定要记牢。
2.4 关于模型的称呼,用不用“你”差别很大
另一个常被忽略的细节是:prompt里的人称代词直接影响信息处理的视角。实验里能明显看到,当你用“你”称呼模型时,它的输出倾向于主观表达和扮演风格;当你用“系统”或“该助手”的第三人称描述时,输出会偏客观和工具化。
这种差异来自模型的“条件概率分布对说话对象的敏感度”。它学习到的语料里,对话体(你)和任务体(系统)的分布是完全不同的两类文本。想用模型做一个稳定的批处理管道,我会特意规避“你”这个称呼,改用“本系统”、“该组件”这类中性词。这样输出的稳定性会明显好一些。注意这只是实操经验,不是绝对规律,但值得一试。
3. 实操方法与调试流程:把Prompt当程序调
3.1 建模与定位:模型到底想让你干什么
跳过“从理论到实操”的过渡,这里直接讲我第一次独立做Prompt迭代时,一个关键思路帮我从一个无效模板中解脱出来。
这个思路叫做“定位算子”。意思是,不要盯着措辞本身改,而要问:“这个prompt,传入模型后,模型(作为一个语言模型)会倾向于把它理解成一个什么样的任务?”
我印象很深的一次经历,是自己做一个电商客服意图识别任务。最早的模板是这样写的:
你是一个客服意图识别助手。用户输入如下:[user_input] 请判断用户的真实意图,并返回结果。看起来没毛病,但跑了一轮数据之后发现,模型对“买贵了要退差价”这类输入给出的意图五花八门——有时候输出“退货”,有时候输出“退款”,有时候输出“咨询”,字段还经常变。后来我用“定位算子”的方法重新审视这个prompt,才意识到问题不在于措辞,而在于定位:模型会把“判断用户真实意图”默认成一个开放式的分类任务,而“分类到什么程度”没有定义。它处于“模仿对话”模式,而非“执行分类”模式。
3.2 注入分类定义:选择类别时要真正控制决策策略
重新设计后的prompt变成了这样:
任务:意图分类 针对用户的输入,从下面给出的类别中选择最合适的一项: - 退货退款:用户要求退回商品或返还货款 - 价格争议:用户对价格或优惠有疑问 - 物流查询:用户询问订单物流状态 - 商品咨询:用户询问商品规格、库存、使用方法 - 售后维修:用户反馈商品故障,请求维修或上门服务 - 其他:不属于以上任何类别 规则: 1. 只输出一个类别名称,禁止输出解释。 2. 如果输入信息不足导致无法判断,输出“其他”。 3. 用户在表达多种诉求时,选择最优先级的类别(优先级从上到下)。 输入:[user_input] 输出:改动不是一个“细化要求”能概括的,而是重构了任务的底层面貌——从模型自行理解意图分类的度量,变成了在一个明确定义的类别体系里做选择。加了可选项和优先级之后,模型不会再“自由发挥”,它的回归逻辑被钳制在预设的决策边界内。
这个改动跑了三条测试输入:
- “这个手机壳颜色有色差,我要换一个”:输出“退货退款”(规则里退货和换货归入退货退款类别,符合预期)。
- “红包不能用了吗”:输出“价格争议”(虽然提到了红包,但语义上是价格疑问,类别命中)。
- “你们能开发票吗”:输出“其他”(不在给定类别体系内,边界条件兜住了)。
对比改动之前,准确率从67%升到了91%,而且连续跑了多批数据,字段稳定性也大幅提升。这类提升在西式话术模板里永远得不到,因为痛点从来不是“措辞不够友好”,而是“任务定位不清晰”。
3.3 框架映射:从原始需求到Prompt的设计推演
上面这个案例的成功,可以抽成一个可复用的框架映射方法。
第一步是“目标行为拆解”。原始需求是“判断用户意图”,目标行为其实是“从预定义集合中选择一个类别”。这两个描述看起来相似,但“目标行为拆解”要求你意识到:模型不知道你的预定义集合是什么,所以你必须显式给出集合和每个选项的定义。
第二步是“输入特征确认”。输入是用户的一句话,但这句话可能包含多个信息点、可能有歧义、可能超出业务范围。输入特征确认的结果,决定了你需要在prompt里加“多种诉求时选优先级更高的一项”和“无法判断时输出其他”。
第三步是“输出格式锁定”。业务下游可能要对接工单系统,所以输出必须是单一类别名称,不要任何解释。这一步在prompt里用“禁止输出解释”和“输出:”的格式要求锁死。
第四步是“生成约束条件”。根据前三步,把缺失的信息、规则、边界条件补全。框架映射的核心价值,是把“凭感觉写prompt”,变成“按需求条目映射到prompt元素”。这样你永远不会问“为什么我加了这句话效果还是不好”这种模糊问题。更准确的问题是:需求里哪一条还没被prompt覆盖?
3.4 诊断与回归测试:Prompt改坏了怎么查
Prompt改坏了,比写不好更烦人。上一版还能用,加了一段约束之后反而变差了。这时候需要一个系统性的checklist来排查问题。
第一个排查方向是信息冲突。检查新增的指令是否和既有指令矛盾了。比如你之前说“输出简洁结果”,新增“请解释每一步推理过程”之后,模型会无所适从。模型这时往往选择“兼顾”,结果两条指令都执行得不彻底。
第二个排查方向是优先级翻转。大模型对指令的理解存在“近端优先”效应,新加的约束如果放在靠近输入的位置,很可能覆盖了更早的核心约束。检查时看新增的语句是否意外成为了最高优先级指令。
第三个排查方向是示例污染。如果你在prompt里加了规则,但few-shot示例跟规则不一致,模型大概率还会模仿例子而忽略规则。这时候就要找我自己实践中的例子——曾经加了一条“禁止输出编号列表”,但示例里带了编号,模型照样按示例来。教训就是:示例的影响永远大于自然语言规则,如果你要改规则,得连示例一起改。
第四个排查方向是输出自由度。一旦发现模型输出格式花样变多,先检查你是不是在prompt里写了一些“无意义自由发挥空间”的词语。比如“你可以根据实际需要适当调整输出结构”,这种话一旦出现,输出稳定性基本就没了。
还有一个我自己常用的偏招:不要只测一个样本,而是准备一组覆盖正常、边界、异常三种类型的测试样本,每次修改后全部回归一遍。手写prompt和写代码一样,改了一行就要全量回归。
3.5 数据驱动的Prompt迭代
跟很多人的认知不同,Prompt调优不是靠“灵感”,而是靠数据驱动。选一批代表性样本构造测试集,然后每次修改prompt后都对测试集跑一遍,统计输出质量评分。不需要复杂的标注体系,最简单的方式是“人工快速判断每条输出是否可用”,分成三类:完全正确、可用但需微调、不可用。看这三类占比变化就能知道修改方向对不对。
这个方法帮我避开了最坑的思维陷阱:“我觉得这次改得好”。主观感受没有任何意义,尤其是在模型输出本身就带随机性的情况下。一个小样本的“感觉变好了”,很可能只是运气。只有面对固定测试集的统计结果,才算真正的判断依据。
4. 实战案例拆解:从一个“补救式Prompt”到完整重构
4.1 案例背景:一个经常给出废话的总结助手
一次帮朋友优化一个“会议记录总结助手”,原始prompt是:
请总结以下会议记录,输出要点: [会议记录原始文本]输出结果是:模型倒是给了总结,但有大量“会议上讨论了”、“大家一致认为”这样的套话,真正核心的决策、责任人和时间点反而被淹没了。这个场景典型的痛点不是“模型不会总结”,而是“总结的维度没定义清楚”——模型靠先验知识总结出来的东西,跟业务需要的“决策型摘要”差距很大。
4.2 问题定位与重构方案
按框架映射的方法,我先把目标行为定义清楚。业务需要的不是摘要,而是“从会议记录中提取行动项”。行动项的定义包含:事件、负责人、截止时间、优先级、依赖关系。所以“总结”这个动作要改成“抽取并重组”。
重构后的prompt如下:
任务:会议记录行动项提取 从提供的会议记录中,识别所有被明确安排或认领的行动项。 输出格式:JSON数组,每项包含: - "task": 行动内容(一句话,必须包含具体动作) - "owner": 负责人姓名(若记录中未明确,填"未指定") - "due": 截止时间(若记录中未明确,填"未指定") - "priority": 优先级(高/中/低,根据上下文判断,无法判断时填"中") 规则: 1. 不要输出任何与行动项无关的描述性内容。 2. 如果同一个事项被多个人负责,分别输出为两个行动项。 3. 只输出JSON数组,不要包裹其他文本。 会议记录: [会议记录原始文本]这个prompt的改动,本质上是把“总结”——一个开放性的生成任务——转换成了“提取+结构化”——一个明确的信息抽取任务。模型不再需要“决定什么重要”,只需要执行规则映射。效果立竿见影:输出从一大段套话变成了干净的JSON数组,下游能直接对接任务管理系统。
4.3 对比评估与调优记录
跑了一批真实会议记录,边调边记录:
- 第一次修改后,输出JSON了,但有些“task”的动词缺失。排查发现在任务描述里写了“包含具体动作”,但没定义什么才算具体动作。修改方式:在规则里加一条“必须包含动作词(如修复、提交、确认、协调等)”。
- 第二次修改后,字段稳定了,但有一个“owner”被填成了“大家”。修改prompt时加了规则“负责人需为具体个人姓名,团队或泛指名词视为未指定,填'未指定'”。
- 第三次修改后,大部分数据符合要求。个别长文本输入后,模型会漏项。排查是上下文挤压导致“模型可能丢失了对前文行动项的跟踪能力”。践行解决方式:在prompt里加了一条“通读全文所有段落,不要遗漏任何行动项”,这个提醒本身不能确保绝对不漏,但对大段文本输入的漏项率有明显的正面影响。
整个调优过程只改了4轮,但每一轮改动都是数据驱动的:先跑测试集,看问题集中在哪个字段,再精准修改对应的prompt元素。这比“凭感觉加一句”高效得多。
4.4 工具链配合:让输出直接对接业务系统
Prompt的输出要真正有生产力,通常还得配一层代码做后处理。我的做法是:
- 让模型只输出JSON,不做任何包装。
- 代码层用JSON解析器接收输出,处理解析异常,比如模型偶尔会在JSON前后加杂话导致解析失败,这时可以用正则提取,或让模型输出到特定的markdown代码块中。
- 后处理阶段做字段校验,缺字段或字段不合法的,统一扔掉或走人工处理。
这样即使模型的输出有1%-2%的“飘移”,也不会搞崩整个下游链路。本质上,我在做一个比纯Prompt更稳健的管线——Prompt负责生成,外围代码负责兜底。一半靠模型,一半靠工程护栏,这才是工程化的正确姿势。
5. 常见问题与排查技巧实录:踩过的坑,写在这里
5.1 模型“不听话”的常见原因
从自己的实测经验和观察同行踩坑的经历来看,模型“不听话”的原因有四个主要方向:
第一,指令被淹没。有个技巧是分清楚哪些信息是真正需要模型执行的,哪些只是背景说明。背景说明别跟指令混在一起。如果你发现关键约束被忽略,把它提取出来单独成段,或放到开头/结尾,而不是藏在段落中间。
第二,规则冲突。这个前面提过了,两条互相矛盾的指令会让模型无所适从。有个排查技巧:把自己写的prompt按“动作指令”列一个清单,看看相互之间有没有隐性冲突。
第三,示例覆盖。示例是最强指令。当你发现规则不如示例管用时,那很正常,你要么改示例,要么把示例删掉。以我个人的经验来说,如果想引导格式,就保留示例;如果想改变行为,就修改示例——而且示例往往比几条描述性指令更见效,所以如何精细构造示例就更关键。
第四,自由度太高。模型面对开放任务时,倾向于“合理但不精确”。要对输出做更强的约束,不要让模型有任何自行演绎的空间。比如不是“分析一下”,而是要写出“按以下步骤给出指定格式的结果”。
5.2 输出不稳定的解决思路
模型存在随机性,所以输出不稳定是常态。要提升稳定性,关键词是“降低熵”。降低熵的具体操作:
- 把开放题改成选择题。与其让模型“判断”,不如给它预定义选项,比如意图分类、优先级判断、情感极性等。这样它就从开放式生成转成了选项匹配,输出熵大幅下降。
- 把长文本生成改成结构化填充。尽量让模型填关键字段,而不是生成整段内容。这个技巧在模板写作中会大大减少措辞漂移。
- 设置重复运行一致性检查。核心场景下可以让模型多次生成同一任务,再做一致性投票。这个方法成本高,但对付关键任务很有效,适合高价值场景。
5.3 什么时候别硬调Prompt
写了这么多技巧,最后得泼一盆冷水:不是所有问题都能靠Prompt解决。如果你的场景需要模型具备某种特定能力,但它完全没有(比如模型不支持长文档的多跳推理、不理解你的私有领域术语),那么无论你怎么调prompt,效果都是有限的。
我遇到过不少案例,公司内部文档里有一套自己的缩写体系:比如“DCR”指的是“数据变更请求”,模型完全不认识这个词,prompt写“请把DCR相关事项提取出来”,它只能靠猜。这种情况的正解是:要么在prompt里附带一份术语表,要么在预处理阶段做术语归一化,再要么换一个更大的模型底座。Prompt不是银弹,工程系统里还有数据清洗、知识注入、后处理校验等一堆事情可以做。
5.4 问题排查速查表
| 现象 | 大概率原因 | 排查/解决方向 |
|---|---|---|
| 模型不按格式输出 | 输出规格定义不清或示例缺失 | 细化输出字段定义,补标准示例 |
| 输出每次都变 | 任务开放性过高 | 改为选项约束或结构化填充,降低熵 |
| 关键约束被忽略 | 指令被淹没/优先级低 | 提取关键约束单独成段,放开头或结尾 |
| 新增规则后效果变差 | 与既有指令冲突 | 列全动作指令清单,找冲突点 |
| 规则和示例打架 | 示例影响力大于规则 | 修改示例与规则保持一致 |
| 长输入下漏信息 | 上下文挤压,注意力分散 | 加“通读全文”提醒,或分块处理 |
| 模型编造不存在的内容 | 缺少边界兜底指令 | 增加“无法判断时输出空”的兜底规则 |
| 输出的内容是对的但格式解析总失败 | 模型偶尔输出多余文本 | 外层代码做兼容处理,或要求输出到代码块 |
5.5 一个高杠杆率的框架:把Prompt做成“模板+变量”
最后分享一个对团队协作特别有用的实操经验:将Prompt标准化为“模板+变量”结构。每个业务场景维护一套不变的系统级模板,定义固定的输出结构和规范,只替换输入内容这一个变量。
这样做最大的好处有两个。第一,哑变量可以沉淀经验:每次调优时,改的是模板本身,而业务侧不需要关心prompt细节,填变量就完事了。第二,模型输出一致性大幅提升:因为套的是同一个模板,换了一批业务数据后,输出的格式还会稳定对齐,解析成本不随业务增长而线性膨胀。
比如我就用这套思路搭过一套“内容审核”流程。系统模板里固定了审核维度列表、通过/拒绝标准、拒绝原因导出格式;业务数据作为变量输入。后续往里面叠加新的审核规则,只需要在模板层增加一个维度,下游即可自动适配。
6. 结尾:我对Prompt Engineering的几点实操体会
越深入做Prompt Engineering,越觉得它像一门新式“需求工程”——你把它当作文书写作,它的表现会一直不稳定;但你把它当作一套需要设计、测试、维护的工程系统,它就会慢慢变得可靠。
我带过一些刚接触这个领域的朋友,发现一个共性规律:很多人第一次把“意图分类”这类野路子prompt重构成“选项约束+边界兜底”之后,都会忍不住说一句“原来这样写真的会不一样”。这个“原来”背后,不是措辞的魔法,而是你终于把模型当作一个可被约束的概率系统来对待了。
就在一个流程上,如果你想上手练,我建议从“拆任务”开始——把你现在手头用的一个普通prompt,按照任务描述、输入、输出规格、边界条件四个块重写一遍,再准备一组测试样本跑个回归。不要贪多,一次只调一个维度。你会发现很快那种“凭感觉写prompt”的日子会过去,你开始拥有了真正稳定的感知。这就是做Prompt Engineering最实在的状态:不玄学,有方法,跑数据。