
1. 从“写提示词”到“提示设计”这个角色到底在做什么提示工程这几个字听起来像是个纯调参的活儿但干久了你会发现它本质上是个产品岗。真正的提示工程架构师不是在跟模型对话而是在跟用户体验对话。模型只是中间的那层翻译器提示词是唯一你能直接控制翻译方向的地方。我接触过的很多团队一开始都以为提示工程就是“把需求说清楚让模型听话”。结果做出来一看模型确实听话了但用户用起来还是一头雾水。问题出在哪出在提示词解决的是“模型能不能答对”而用户体验解决的是“用户能不能顺畅地得到他想要的结果”。这两件事中间隔着一整条产品链路。举个我实际处理过的场景。某个知识库问答系统最初的提示词写得非常完整把所有业务规则、回答格式、语气要求全塞进去了。模型表现也确实稳定内部测试准确率很高。但上线以后用户反馈最多的居然是“不知道能问什么”。原因很简单提示词把模型约束得太死用户输入稍微偏离预设范围系统就回一句“抱歉我暂时无法回答这个问题”。这句话对模型来说是兜底对用户来说就是劝退。所以提示工程架构师要做的不是把提示词写到完美而是把提示词放进整个用户旅程里去设计每一次交互的预期、反馈和容错。提示词只是抓手体验才是终点。这篇文章就围绕这个核心讲透几件事提示设计的目标拆解、边界约束、系统化落地、问题排查以及一个完整的实战案例。适合正在做 AI 产品、对话系统、智能客服或者想从“写提示词”进阶到“做提示设计”的开发者参考。我会尽量把每一步背后的思考逻辑讲清楚而不是只给结论。2. 提示设计必须想清楚的三件事目标、边界、兜底2.1 目标定义可观测、可验证而不是“感觉对了”很多人写提示词第一个动作就是直接开始写“你是一个……”。这个顺序其实是反的。正确顺序是先定义清楚这个对话系统要达成什么样的用户目标这个目标怎么衡量模型回答成什么样算好什么样算差我习惯把目标拆成两层。第一层是任务目标比如“用户问天气模型要给出温度、风力、降水概率三个字段”。第二层是体验目标比如“用户问天气时模型要先确认城市再给出预报如果用户没有给城市要主动询问而不是猜一个城市”。任务目标决定提示词里的硬性约束体验目标决定提示词里的交互逻辑。缺了任务目标模型会自由发挥缺了体验目标模型会答对但让人不舒服。一个重要原则是所有目标都要落到可观测的信号上不能靠感觉。比如“回答友好”这种目标没法量化就容易翻车。我会把它改成“回答要包含用户输入中的原始城市名并且开头先做确认”这样就能写进测试用例里用脚本去验证。这里有一个我踩过很多次的坑目标定义得太宽。比如“提供专业的法律建议”这种目标等于没有目标。模型的输出没法验证用户的期望也没法对齐。后来我改成了“只针对用户描述的具体情境给出对应法条引用和常规操作建议不做法律效力判断”。这个定义看起来更窄但用户满意度反而更高因为期望对齐了。目标定义的输出物是一份“验收清单”每个对话场景都对应一组可验证的回答特征。后续所有提示词的迭代本质上都是在让输出更贴近这份清单。2.2 边界约束让模型在“安全区”内作答边界约束是提示设计里最容易被忽视的部分。模型的能力很强但产品场景里不是所有能力都该被暴露。没有边界约束的提示词就像把一把没装保险的电动工具交给用户看起来自由度提高了实际上风险全在你这边。边界约束要回答三个问题哪些输入不要接哪些输出不能给哪些情况下主动转移话题哪些输入不要接这个比较好理解比如不相关领域的闲聊、攻击性内容、诱导性提问。这些要在提示词里明确“拒绝策略”但拒绝策略本身也要讲用户体验。直接说“我无法回答”是最差的方案更好的做法是“引导到能力范围内”。哪些输出不能给这个更复杂。很多时候模型知道答案但产品责任上不允许直接给。比如医疗场景模型可以推荐挂什么科室但绝不能下诊断、开药方。提示词里要写清楚“可以做什么、不可以做什么”而且要用场景化的描述不能说“不要给医疗建议”就完了模型分不清哪些算建议哪些不算。我一般是给正例和反例让模型照葫芦画瓢。主动转移话题这个很多人没想过。用户问了一个模型解决不了的问题除了拒绝还有一条路是把话题引导到模型能解决的问题上。比如用户问“你能帮我写作业吗”你可以拒绝但更好的体验是“我虽然不能帮你代写但可以帮你梳理思路你想从哪道题开始”这就是从边界约束走向体验设计的典型手法。边界约束的终极目标是让模型在“安全区”内自由发挥。安全区越大用户体验越自然安全区边界越清晰系统风险越低。这两者需要平衡而平衡点就是提示工程架构师要反复打磨的东西。2.3 兜底策略用户的每个无效输入都得接住兜底策略是提示工程里最见功力的一部分。因为模型的能力再强也架不住用户输入千奇百怪。有人发语音转文字带一堆噪音有人一句话没说完就发了出去有人用表情包交流还有人输入法和模型能力“互相成就”出了一堆乱码。这些情况你全得接住。我遇到一个特别典型的案例是个面向 C 端的娱乐向产品。用户经常发来“哈哈哈”“6”“”这种极短输入。最初的系统遇到这种输入直接走拒绝流程用户体感就是“这个 AI 真高冷”。后来我们把兜底策略改成了“轻量互动模式”遇到极短输入时不判断意图先给一个轻松的回话比如“看来你心情不错想聊点啥”把主动权再交回给用户。就这么一个小改动会话长度直接提升了不少。兜底策略的设计原则是无路可走时给用户一条“有尊严”的路。“有尊严”的意思是不要让用户觉得是自己不会用、问错了而是让用户觉得是系统在引导他更好地表达。具体来说兜底策略有三个层面第一识别层。判断输入是不是空、是不是乱码、是不是跟当前上下文无关。第二处理层。根据识别结果选择对应的兜底动作。比如输入太短就追问输入乱码就提示重新表达无关输入就引导回正题。第三转移层。如果用户反复尝试都无法得到有效答复要提供人工客服入口或者“换个问法”的建议让用户始终有路可走。这三种策略都要写进提示词里但同时也要配合产品逻辑实现。你只在提示词里写“如果用户输入无法理解请引导用户换一种表达”模型可能读不懂这句话。更有效的写法是给模型一个内置的“理解失败处理流程”把每一步的行为指令都写清楚模型才知道怎么执行。兜底策略最考验架构师对用户心理的理解。一个设计良好的兜底用户往往察觉不到它的存在但能感觉到系统一直在线一直在试图帮自己。这才是“极致用户体验”里最容易产生口碑的部分表面上不起眼实际上决定了用户愿不愿意继续用下去。3. 把提示工程落进系统模板化、上下文与动态组装3.1 模板化管理别把提示词写在对话里写进代码里很多人第一次接触提示工程就是在后台聊天界面里把自己的需求发给模型试了几轮觉得效果还不错就复制粘贴到代码里。这种做法不是不能用但一旦产品进入迭代阶段问题就全冒出来了。第一个问题是不可维护。提示词散落在代码各个位置要改一个措辞得全局搜。第二个问题是不稳定。模型接口升级、系统消息变了、业务规则变了都要手动去改提示词改完不知道会不会影响其他场景。第三个问题是没法版本化。你想回滚到上一个效果更好的提示词版本发现找不到历史记录。我的做法是把提示词当成代码来管理。每个场景一个独立目录里面包含系统提示词、少样本示例、参数配置三个文件。系统提示词写清楚角色的任务和约束少样本示例提供输入输出的范式参数配置单独拎出来管理 temperature、top_p、max_tokens 等参数。模板化的另一个好处是方便做 A/B 测试。你想验证“语气更正式是否带来更高信任度”直接改一条模板再对另外一组用户保留旧模板看数据说话。没有模板化这种实验几乎没法做因为你改了一处另外的地方也跟着变了变量控制不住。模板化管理的核心是抽象能力。同一个产品里可能有十几种对话场景每个场景的提示词内容不同但结构往往相似角色设定、任务描述、边界说明、输出要求、兜底策略。这五个模块是公共的把它做成一个基类每个场景往里填具体内容就能大幅降低维护成本。我在实际项目里用过类似“提示词即配置”的方案把每个场景的提示词拆成若干 segment每个 segment 是一个 markdown 文件运行时按顺序拼接。这样产品同学也能自己调文案不需要碰代码。提示词的本质是内容内容就应该让最懂内容的人去维护而不是每次改动都走开发排期。3.2 上下文注入的优先级不是所有信息都要塞给模型上下文注入是提示工程里最影响成本和质量的因素也是很多团队最容易失控的地方。你总想让模型知道得越多越好上下文塞得越来越满但模型处理长上下文的能力和注意力分配是有限的。信息太多时关键信息反而容易被淹没。这不是玄学是实际发生过的问题。我给一个团队做咨询时遇到过一个案例他们把整个用户订单流水全部塞进上下文希望销售助手能给每个问题都给出精准回答。结果模型确实能引用到某条流水但经常张冠李戴把上一单的信息当成当前单的信息。后来我们压缩了上下文只保留当前订单的关键字段、用户最近一次交互、以及商品目录的前三条候选准确率反而上来了。上下文注入要分优先级我一般按这个顺序排第一优先级当前会话的即时目标。比如用户正在问的订单号、正在看的商品 ID这是模型判断当前问题的最核心依据。第二优先级用户的关键属性。比如用户是否会员、历史偏好、信用等级这些影响回答的个性化程度。第三优先级系统级的业务规则。比如退款政策、库存状态、配送范围这些是回答正确性的基础。第四优先级历史会话摘要。比如用户之前问过什么尤其是刚刚才发生的几轮但不要无限堆积原始对话要用摘要替代原始记录。这个优先级顺序不是固定的要根据具体业务调。但核心原则是不变的上下文里该有什么、不该有什么要在代码层就过滤好而不是全丢给提示词去判断。提示词负责“怎么用这些信息”代码负责“放哪些信息进来”职责分开系统才干净。另外一个很容易被低估的问题是重复信息消耗上下文额度。为了确保模型不遗漏某个信息我见过有人把同一条规则用三种不同写法塞了三遍。这不会让模型更重视反而会稀释那些真正重要的信息的权重。提示词不是字越多越好信息密度高才是关键。3.3 多轮对话中的提示词动态组装换场景、转意图、清记忆多轮对话是提示工程里最能拉开差距的地方也是最难的地方。单轮问答只要把静态提示词写好基本就能跑。多轮对话不行用户的每一次新输入都会改变当前对话的上下文状态提示词必须跟着动态变化否则用户体验就会出现“断片”感。最常见的多轮问题是场景切换。用户跟你聊了十轮星座运势突然问一句“那你能帮我查一下附近哪里有吃的吗”。这个时候如果你还在用星座那套提示词的语气和结构去回复用户就觉得这个 AI 不聪明。理想的做法是检测到意图切换后迅速重组提示词清掉上一个场景的特定规则注入当前场景的任务描述再保留一小段有参考价值的历史摘要比如用户之前在意的偏好。意图中转是另一个难点。用户不一定会直接告诉你他换了一个新话题很多时候是蹭着上一句话的尾巴跳过去的。比如用户问“适合职场的穿搭”你回答了一大段。他又补一句“那如果是要见客户呢”这个时候他到底是想延伸穿搭话题还是想切换到商务礼仪答案是两者都有。优秀的提示词架构里会专门设计这种“追问模式”保持原有意图但把当前问题的角度收窄让回答更聚焦。多轮对话还有一个容易被忽略的细节记忆的粒度。用户四轮前提了一句“我不吃辣”第八轮你推荐餐厅时应该记得但也不能把所有历史细节全部倒进上下文。我的方案是做一个“滚动记忆摘要”每轮对话结束后用一次轻量的摘要模型将当前轮的内容压缩成一句话存进一个环形队列只保留最近 N 轮。这样既不丢关键信息又不至于撑爆上下文窗口。多轮对话的动态组装本质上是把“提示词”从静态文本变成了一个实时状态机。这个状态机的设计水平直接决定用户感受到的“智能感”。很多产品说自己的模型不够聪明其实不是模型不够聪明而是状态机设计得太粗糙该记的没记该忘的没忘该换的没换。4. 一套可复用的提示工程排查方法论4.1 输出质量问题的定位是模型不行还是提示词没写对提示工程做得久了你会发现一个问题的高频开场开发跑过来说“这个场景效果不好模型太笨了”。但当我真正去排查的时候十次里面有七八次根因都在提示词不在模型。一个系统的输出质量出问题最有效的排查方法不是去猜而是做“变量隔离”。先把问题分成几个层面是理解层面的错比如模型没领会用户意图还是生成层面的错比如理解了但表达不对还是合规层面的错比如越过了边界。这三个层面的排查方向完全不同。理解层面的错多半是上下文给得不够或者用户输入太模糊。排查方法是逐轮打印出系统接收到的原始输入检查是不是有截断、乱码、错位。我见过一个案例用户在多轮对话里提到“上次说那个”系统直接把“那个”当成指代对象去搜索当然搜不到。这种问题不是你提示词再多写几句就能解决的必须靠代码层补充指代解析或者摘要机制。生成层面的错多半是输出指令不明确。比如你要求“回答要简洁”模型理解的“简洁”和你想要的“简洁”很可能不是一个东西。解决方案是把“简洁”翻译成可操作的结构约束“回答不超过三句话第一句给结论第二句给理由第三句给补充建议”。这种约束比形容词管用得多。合规层面的错往往不是提示词写得不够严而是你没有给模型足够多的“辨别样例”。边界规则如果用抽象描述模型只能猜。我一般会配 5 到 10 组正例反例让模型看清楚什么能说什么不能说。模型学习边界靠的是示范不是靠抽象的“不要”“禁止”“务必”。排查完以后要把结论记录下来形成一份“质量归因清单”。下次再遇到效果不好先把清单过一遍能少走一大半弯路。4.2 成本与延迟的控制质量不是唯一指标提示工程架构师如果只看输出质量不看成本和延迟早晚要出事。模型接口的费用随着调用量上涨是很快的而你塞的上下文越多、输出越长单次调用的费用越高。延迟更是直接决定用户留存慢到一定程度再准的回答也没人看。成本控制的第一个杠杆是 prompt 瘦身。很多团队上线前不清理提示词里堆了大量历史迭代中已经用不到的内容。我见过一条提示词里面同时存在两套互相矛盾的风格要求因为它们分别来自两个不同的实验版本代码合并时都留下来了。瘦身不是简单删字而是重新审一遍每个模块是否还在起作用。第二个杠杆是缓存。对用户高频问的问题和常见的对话前缀可以考虑做结果缓存。虽然不是所有场景都能直接缓存但至少对“首次问候”“常见 FAQ”这类型问题能省掉相当一部分重复计算。有些模型平台也提供语义缓存能力实测下来对重复率较高的 C 端产品效果显著。延迟控制的思路和成本控制不一样你要保住体验底线。我会给每个场景设置一个“最大提示词长度”预算超了就砍再超就精简前缀。对于追求实时的场景比如语音交互和客服首响我会刻意选择更轻量的模型哪怕牺牲一点复杂推理能力也要把响应时间压下去。这里要多说一句不要一块模型模板到处套。有些场景根本不需要那个大模型你在工具链里放一个轻量模型走一套更短的提示词用户体感完全不差成本却能降一半甚至更多。提示工程架构师的价值之一就是知道什么时候该用重型武器什么时候该用轻量方案。4.3 回归测试用例设计提示词也在积累技术债也得还提示词改一次看似简单实际上每个改动都可能影响十几种用户输入的表现效果。你修好了一个边缘 case可能带崩了三个常规 case。为了避免这种情况提示工程也要有回归测试。我一开始做回归测试是靠人工把几十条典型用户输入纪录在一个表格里每轮迭代后一条条跑眼都快花了。后来意识到这活儿必须自动化就搭了一套简单的测试脚本把测试用例和预期输出特征写成结构化数据每次提示词变更后跑一遍自动比对输出是否通过检查项。用例设计上我按几个维度覆盖常规场景、边界输入、恶意输入、用户误操作、长尾输入。常规场景保证主干功能不坏边界输入测试极限情况比如超长输入、空输入、纯标点恶意输入测试合规防线比如诱导越狱、人身攻击用户误操作测试容错能力长尾输入保证小众问法也能被兜住。比自动化更重要的是用例本身要“活”。每在线上遇到一个你没预料到的新问题就把它沉淀成一条新用例。这样测试集合就像产品的记忆体越过越饱满系统的鲁棒性也会稳定增长。这是我见过很多团队忽略的点他们上线后就把测试用例扔一边了然后嘞每次出问题都要从头查一遍。回归测试的本质是把“经验”沉淀成“资产”。没有这套资产提示词就是每一次都在从零开始的未知探索。5. 完整案例拆解从零搭建一个文档问答助手5.1 需求定义不先想清楚用户是谁后面全是白干前面讲了一大堆原则这里用一个完整的案例把它们串一遍。假设你要做一个面向企业内部员工的文档问答助手核心诉求是员工可以直接用自然语言提问系统从公司知识库里找到答案。这个产品看起来简单但真正做起来每一步都是提示工程决策。用户画像先想清楚员工分两种一种是新员工对整体业务不熟问题往往很宽泛比如“报销流程是啥”另一种是老员工问的问题很具体常常带上部门名词和项目代号比如“某项目的预算审批卡在哪个环节了”。这两种人的信息需求和回答预期完全不一样提示词的写法也必须区分。产品目标拆成三层任务层准确从文档中检索并提炼答案体验层回答要有出处可溯源新员工提问时能给出引导式追问安全层只回答知识库覆盖范围的问题不编造、不承诺。基于这些需求我设计的第一版提示词原型大概是这样的结构。角色定位是一个文档助手引导用户给出足够信息任务描述是检索知识库并提炼答案输出要求是附带原文摘录约束是不知道就说不知道且给出下一步提问建议。这套原型跑通后再进行边界、单体、多轮三层迭代。边界部分加入了对跨部门敏感信息的拒绝策略单体部分把复杂回复改成结论先行加来源说明多轮部分引入了追问补全机制遇到不完整问题时针对缺失字段连续追问。这个案例里最核心的一点是提示词只是最后落地的那一层前面所有产品判断、信息架构、交互设计才是真正的决定因素。5.2 提示词原型到版本迭代三个版本的演进过程第一版提示词原型写好后我通常会先在真实业务文档上测一轮而不是直接上漂亮话和完整规则。这时候的主要目标是看模型的输出和预期差距有多大差距大的地方就是后续要补的模块。我第一版就发现两个问题一个是用户问“报销要多久”这种开放问题模型的回答信息量太大塞了一大段流程另一个是模型经常直接给出答案却不给依据员工无法判断信息可靠。所以第二版我动了两个地方。先说前者代码层做了三类问题识别宽泛问题走路径引导模板具体问题走精确答案模板混合问题先拆解再分步回答。再说后者输出格式上加了强制约束要求先答要点再附依据依据必须精确标注文档编号和章节名。这些改动落到提示词上不是简单加几句话而是新增了一个“回答格式路由模块”。它像一个分发器先判断用户问题属于哪种类型再决定走哪套回答模板。这个模块本身也是提示词的一部分我把它单独抽成一个子提示你是一位问题分类器把用户输入分为宽泛类、具体类和混合类分别输出对应的处理指令。这么设计的好处是模型只需要专注做好分类这一件事不需要在回答的同时还要想着格式准确率会更高。第三版的重点转向长尾问题。我把过去一个月线上遇到的所有“用户提问后得到不满意回答”的案例全部都翻出来逐条分析。最后发现大部分问题都不是知识库没内容而是用户问法和文档里的用词对不上比如用户说“打款”文档里写的是“放款”。这个问题靠提示词本身解决不了要靠代码层的同义词扩展。我做了一个和用户问题相关的关键词扩展逻辑当检索引擎召回不足时自动把同义词库里的词作为补充检索条件。提示词这边配合用多轮追问收集关键词确保检索的准确性。三版迭代下来最终的效果从“听起来像个会聊天的搜索引擎”变成了“看起来像个知道业务又在行的老员工”。这中间每一步都离不开前面说的目标拆解和边界约束。5.3 这个案例里踩过的坑以及可以复用的小技巧这个案例里面踩过的坑比顺利的场景值钱得多。我挑几个有代表性的写出来算是给后面要做类似项目的人排排雷。第一个坑是过度相信模型的“引用能力”。第一版提示词里我要求模型回答必须带文档引用模型答得头头是道引用格式也都对。后来一抽查发现引用编号编得毫无根据文档里根本没有那条内容。这个问题的根因是模型的引用是“生成”的不是“检索”的。解决方案是在代码层就做强制绑定收到答案后按引用的文档编号去检索原文档用检索到的真实内容替换模型的转述而不是轻信模型的输出。第二个坑是提示词里的“反例”不能乱放。我想提示模型不要涉及隐私话题就放了几句禁止描述的例子。结果模型学到了一个坏毛病看到“隐私”两个字就完全拒绝整个对话连正常的部门信息查询都一刀切了。后来我把反例从提示词里移出来改成在模型输出的后置校验里去做处理效果反而更好。第三个坑是版本管理混乱。某一次迭代后一个场景的回退效果变得特别差排查了半天最后发现线上跑的提示词根本不是我们测试的那一版。某位同事手动改了一处文案后直接部署了没有同步更新测试集合。从那以后我强制要求所有提示词改动必须走版本管理并且和代码同一次发布。可以复用的小技巧也有几个。一个是“对比法”调优同一个输入准备两组提示词一个只改了单个变量对比输出差异很快能看到哪句话在起作用。另一个是“前缀压缩”每次效果波动时先砍掉一半提示词看结果如果还能维持效果再逐步加回去这个过程能帮你判断哪些内容其实是核心的哪些其实是装饰。还有一个小技巧也是我认为最重要的把提示词里的所有规则都写成“如果 A 就 B”的条件式而不是“要 B”“应该 B”的祈使式。模型对条件式的理解比祈使式可靠得多因为条件式明确告诉他触发条件而祈使式只告诉他行为模型还得自己判断什么时候该执行。6. 提示工程架构师的能力模型怎么在一线真正发挥作用聊完了方法论和案例最后说点关于角色本身的。提示工程架构师这个岗位现在正处在“人人都能做但不是人人都会做”的阶段。入门门槛低任何人打开一个模型平台都能写几句提示词。但真正的架构师不是写提示词的人而是那个能够定义问题、拆解系统、控制成本、评估风险、迭代质量的人。这个角色的能力模型大概由四块组成。第一块是语言能力你要能写出信息密度高、逻辑严密、指令清晰的自然语言废话越少越好。第二块是系统设计能力你得知道提示词在整条链路里处于哪个位置上下游是什么哪些问题应该在代码层解决哪些应该靠提示词解决分工越清晰系统越稳定。第三块是数据意识你要能从线上日志里看出提示词的薄弱点用数据驱动迭代而不是拍脑袋。第四块是产品判断力你得理解用户期望、业务边界、风险底线提示词写得再漂亮脱离产品需求就没有意义。我在实际带人的时候发现一个提示工程新手和一个架构师之间最明显的差距不在写作技巧而在“遇到问题往哪看”。新手会把所有问题都归结为“提示词不够好”然后无限加词。架构师会先问这个问题是输入的问题、检索的问题、输出格式的问题还是系统策略的问题定位准确了改动才有的放矢。这个岗位还有一个很特殊的地方你做得越好你越“透明”。当用户体验顺畅自然的时候用户意识不到背后有一个人在精心设计每次交互他们只觉得这个 AI“懂事”“聪明”。提示工程架构师的价值恰恰就藏在这种“被感知为智能”的用户体验里。最后给想入行或者正在做这件事的朋友一个建议不要沉迷于写华丽的提示词。多花时间去研究你的用户怎么说、怎么问、怎么犯错。所有极致体验的起点都是对人性的理解提示词只是把这份理解翻译给模型听。