☰
提示工程实战:万能框架、优化技巧与评估指标
2026/9/28 5:36:20 网站建设 项目流程

先说个现象:同样都是和 AI 对话,有人三句话就能拿到能直接用的方案,有人来回改十遍还在原地打转。差别往往不在模型强不强,而在你交出去的那段话——也就是 Prompt——质量高不高。我刚开始认真研究提示工程(Prompt Engineering)的时候,也迷信过各种花哨技巧,后来发现真正能稳定提升效果的,就是三件事:一套万能框架、几种优化技巧、一批能衡量好坏的常用指标。这篇就把这三件事一次说透。不管你是写文案、搞代码、做数据分析,还是只想让日常办公效率高一点,下面这些内容都可以直接拿去用。

1. 先搞懂模型是怎么"读"你这句话的

1.1 模型不是人,它靠概率猜你的意思

大语言模型的底层逻辑,说穿了就是:根据已经出现的文本,预测下一个最可能出现的词。你写的 Prompt 不只是"提问",它实际上是给模型划定了一个概率空间——你说得越清晰,模型猜测的范围就越小,答案自然越准。反过来,你说得含糊,模型就只能用训练数据里最平均、最通用的方式来回应你。

我习惯把这想象成一个能力很强但不认识你的新同事。你只说"帮我把这件事处理一下",他大概率会一脸懵;但如果你告诉他"我是谁、要什么结果、有什么限制、最后交给我什么格式",他就能直接干活。模型的"理解"不是真正的理解,而是上下文模式匹配,所以它特别依赖你给出的信息结构。你给的信息结构越完整,它输出的时候需要自行脑补的部分就越少,翻车概率自然下降。

1.2 宽泛提问为什么会翻车

"帮我写一份方案"这类 Prompt 的问题,不是模型笨,而是需要它自己脑补的东西太多:方案给谁看?什么行业?预算多少?结构要几部分?风格是保守还是激进?每一个维度都是自由发挥,多一个自由发挥,就多一分跑偏概率。我实际测试过一个常见模型,问它"怎样提升销售额",它给了一堆正确的废话:了解客户、优化产品、加强营销。听起来都对,但完全没法落地。换成"我是做企业级 SaaS 的,客单价两万,目前试用转化率只有 5%,请给一套针对中小团队的转化率提升方案",输出立刻变成可以执行的清单。差别不在模型,在信息密度。

还有两个容易被忽略的概念:上下文窗口和位置偏差。模型只能看到上下文窗口内的内容,而且对开头和结尾的记忆通常比中间更强。所以写 Prompt 时,核心要求尽量放开头或结尾,中间留作细节描述;太长、太杂的背景反而可能淹没重点。我看到不少人喜欢把背景材料一股脑全塞进去,结果模型被无关信息带偏。我的经验是:背景只保留和任务直接相关的信息,哪怕少一点,也比杂乱更强。

另外必须明确:模型没有记忆。每次对话都是独立的,前一次的回答不会自动成为后一次的背景,除非你在同一个会话里并且明确引用了它。所以 Prompt 必须自带上下文,不能指望它"记得"你上次说过什么。这也是下面五维框架里背景那一维非常重要的原因。

2. 万能框架:五维定位法,把模糊诉求变成清晰指令

2.1 五维拆解:角色、任务、背景、约束、输出

我研究过不少公开的 Prompt 框架,比如 CRISPE、BROKE 这类,本质上都是在解决同一个问题:让模型不用猜。综合下来,我自己最顺手、也最常推荐给团队的是五维定位法,五个维度分别是角色、任务、背景、约束、输出。这个框架的好处是足够简单,一句话就能记住,而且覆盖了最容易出错的几类信息。

具体拆开讲:

  • 角色:你希望 AI 站在什么身份上回答。同样一段话,让它以"资深律师"身份和以"热心网友"身份回答,专业性和措辞都会差很多。角色其实是在限定它调用哪一类训练知识,能直接影响输出的语气、术语密度和立场。
  • 任务:核心动作。最好用动词开头,一条 Prompt 只安排一个主任务。如果一句话里同时出现"分析、总结、给出建议"三个动作,模型很容易顾此失彼,最后每个都只做一半。
  • 背景:它完成任务需要知道的信息,包括目标受众、使用场景、已有材料、限制条件。筛选标准很简单:如果换成真人来做这件事,他必须知道什么?不知道会不会做错?
  • 约束:边界条件。长度、风格、语气、必须包含什么、不能出现什么。这里有个技巧:能正向表达就正向表达,这个我在后面优化技巧里会细说。
  • 输出:你期望拿到的成品形态。是正文、表格、代码、还是 Markdown 格式?提前指定,能省掉大量二次加工的麻烦。

为什么习惯按"角色→任务→背景→约束→输出"这个顺序写?因为角色放在最前面,会主导后面所有内容的语气;输出放在最后,等于先想清楚终态再倒推过程。这个顺序不是死的,但保持稳定会让自己复查时更容易发现漏了哪一维。我还给自己定了一个自查口诀:每次写完 Prompt,问五个问题——它知道自己是什么身份吗?它知道要做成什么吗?它有足够的信息吗?有什么限制?最后我要什么格式?五个问题只要有一个答不上来,就先别发给模型。

2.2 套用框架前后对比

光说理论不好记,我拿最常见的场景演示一下。原始 Prompt 只有一句话:"帮我写一份产品推广方案。"

套上五维之后:

角色:你是一名有 5 年经验的消费电子行业营销顾问 任务:为我们的新品耳机写一份推广方案 背景:产品主打降噪和长续航,目标用户是 25-35 岁的通勤上班族;本月在电商平台首发,预算 30 万 约束:方案需包含目标人群、核心卖点、渠道组合、预算分配、时间节奏五个部分;不能用"黑科技"这类空泛词;全文 800 字以内 输出:Markdown 格式,每个部分用三级标题;文末附一段 50 字以内的推广语

对比一下就能看出来,第一版输出大概率是"尊敬的客户,感谢您……"这种模板开头;第二版输出会直接给你一套有结构、有数字、可执行的方案。关键不是写得长,而是把模型做决策时需要的信息都提前给了它。很多时候,Prompt 效果差不是因为技巧不够,而是基本的信息维度没补齐。

3. 框架落地:不同任务类型下的 Prompt 变体

3.1 文案写作与问答咨询

写文案的时候,我一般会把"受众"和"风格"提到最高优先级。因为同样的内容,给老板看和给用户看完全是两种写法。我的通用模板是:角色 + 受众 + 字数 + 语气 + 禁用词 + 要包含的核心卖点。比如:

你是资深公众号编辑。读者是刚工作 1-3 年的年轻人,请为《写给职场新人的时间管理建议》写一段 120 字左右的开头。语气要有共鸣感,不用"在这个快节奏的时代"这类陈词滥调。直接给两个备选版本,分别标注风格差异。

这样写,模型不会拿一篇中老年风格的鸡汤来糊弄你。问答咨询类则相反,最优先的是"信息边界"。模型最大的风险是自信地编造,所以我会在 Prompt 里明确写"如果你不确定,请直接说不确定,并列出你还缺哪些信息"。如果问题涉及具体数字、日期,我还会要求它标注信息来源,或者至少提示不确定程度。这种写法能明显降低幻觉率,尤其是在知识库覆盖不稳定的领域。

3.2 代码生成与数据分析

代码生成类任务,五维里我通常把"背景"替换成一个最小可运行示例,把"约束"换成技术栈和异常处理要求。比如:

你是资深 Python 开发。写一个函数,把大型 CSV 文件按指定列去重后输出为新的 CSV。 背景:文件最大 2GB,内存有限;只允许使用标准库。 约束:用流式读取方式处理,不能一次性 load 进内存;需要处理异常并给注释;附一段调用示例。 输出:先输出完整代码,再用 3 行说明用法。

代码类 Prompt 最容易翻车的点,是模型给出理论上正确但跑不起来的结果。所以我通常会在约束里明确"给出可在 Python 3.11 直接运行的代码",并且在让它写 SQL 时指定数据库版本比如 MySQL 8.0,避免因为语法差异产生重复返工。

数据分析类任务,更重要的是让模型理解数据结构。我一般会在 Prompt 里放一段建表语句或字段说明,再定义指标口径,最后指定输出形式。例如:

下面是订单表结构(order_id, user_id, amount, create_time)。 请计算每个用户最近 30 天的订单数和总金额,按总金额降序排列。 输出:一条 MySQL 8.0 兼容的 SQL,并在末尾用两句话解释思路。

3.3 办公文档与跨工具场景:别把"Prompt"这个词搞混

顺带说一句,Prompt 这个术语在软件圈很早就有:SQL Prompt 是写 SQL 时的智能提示插件,Windows 命令行里的 command prompt 是命令提示符,PPT 里一些 AI 插件也把生成按钮叫 prompt。它们和"给大模型写提示词"不完全是一回事,但核心逻辑相通——都是用一个短指令让系统做一件事。我见过有人搜 SQL Prompt 下载了半天,结果发现和自己想的大模型提示词不是同一个东西;也有人因为 command prompt 窗口闪退,误以为是大模型问题。理解这种概念差异,能省不少时间。

4. 优化技巧:从"模型能懂"到"模型答得好"

4.1 少用否定句,多用正向指令

模型对"不要 XX"的处理很不稳定。你写"不要写太长",它可能反而关注"长"这个属性;你写"不要提到价格",它反而容易在输出里带出价格——因为否定句会让模型把注意力放到被禁止的词上。我的做法是,把所有"不要"改写成"要"。比如:

  • 不要用生僻词 → 用初中生能看懂的词汇;
  • 不要超过 500 字 → 控制在 300 到 500 字之间;
  • 不要用官方套话 → 用口语化、有温度的表达。

这样改写之后,模型收到的指令是清晰的行为目标,而不是一个模糊的禁区。实测下来,正向指令的稳定性和完成度都明显更高。

4.2 给示例比给描述更管用

如果希望模型模仿某种风格,描述一百遍"要有幽默感、节奏要快",不如直接给它一小段示例。这就是 few-shot 的核心逻辑:给模型一个输入-输出对,它会自己归纳出格式、语气、结构。我在写公众号文章和英文邮件时经常会用这招。比如写英文邮件,与其要求"请写得专业且友好",不如给它一句参考:"I'd love to catch up next week if you have time—happy to work around your schedule." 然后让它照这个语气写。模型很少让你失望。

示例比描述更有效的原因在于,语言描述风格的时候,不同的人对"幽默"和"专业"的理解差异很大,但示例是确定的锚点。一个例子顶三段形容词,这在 Prompt 优化里是最容易被低估的技巧。

4.3 复杂任务先拆解,再要求"先思考后回答"

模型直接回答复杂问题容易出错,这和大模型"抢答"的习惯有关。你按下回车,它就开始生成,没有机会先停下来整理思路。最简单的解决办法是加一句话:"请先一步步分析,最后再给出结论。"这就是思维链(Chain of Thought,CoT)的用法。我在一个需求分析场景里验证过:直接问"我们应不应该做某个功能",模型的回答比较空;改成让它先列出"当前产品定位、目标用户、成本、风险"四个维度,再逐个分析,最后给出建议,质量完全不一样。

要注意的是,思维链不等于把内心独白全部吐出来。如果你只关心结论,可以要求它"内部推理后,在回答里只给结论,并在末尾附上简短的推理摘要"。另一个很实用的升级技巧是自我纠错:输出后追一句"请检查上面的回答,找出可能不准确、不完整或语气不合适的地方,再给一版修正稿"。相当于让模型自己当审稿人,在长文案和代码生成场景里尤其管用,能把明显的小问题提前过滤掉。

4.4 用参数配合 Prompt,效果加成

Prompt 不是唯一变量。同一个 Prompt,temperature 不同,输出可能从"稳如老狗"变成"天马行空"。我的经验是:做信息抽取、格式转换、代码生成时,temperature 设 0 到 0.3;做文案创意、头脑风暴时,设 0.7 到 1.0。top_p 通常和 temperature 二选一即可,不必两个都动。max tokens 也要给够,不然长文章写到一半被截断,等于白写。

但要注意顺序:先调 Prompt,再调参数。参数是辅助,别指望把 temperature 调高就能救回一个信息缺失的 Prompt。如果 Prompt 本身含糊,再高的创造性也只是让你得到一段更加流畅的跑题内容。

5. 常用指标:好 Prompt 不是感觉出来的

5.1 机器评估指标:BLEU、ROUGE、BERTScore 怎么选

做提示工程绕不开评估。机器评估方面,最传统的是 BLEU,它看生成文本和参考文本的 n-gram 重合度,适合机器翻译类任务,但对生成式回答偏严格,因为同一个意思完全可以用不同的词表达。ROUGE 更看重召回,适合摘要类任务,结构相似但表述灵活时分数还好。近几年大家用得比较多的是 BERTScore,它基于语义向量算相似度,和人类判断的相关性更好,但仍然不能完全代替人。

实际使用时我的建议是:不要只用单一指标,尤其不要只看 ROUGE 或 BLEU 的分数变化就下结论。指标只能帮你发现"有没有变差",不能告诉你"有没有好到可用"。所以我把机器指标当筛子,而不是裁判。

5.2 业务指标:格式遵循率、幻觉率、人工评分

真正给团队或客户交付时,我更关心业务侧的指标。这些指标不用算复杂的公式,但更贴近真实使用体验:

指标含义测试方法
格式遵循率输出是否严格按 Prompt 要求的结构和格式跑 N 次,统计格式正确的占比
任务完成率核心要求有没有全部覆盖列一个清单,逐项打勾
幻觉率有没有编造事实、数字、来源人工抽查关键信息
稳定性同一条 Prompt 跑多次,结果差异大不大重复跑 5 次对比
安全拦截率输出有没有被内容安全策略标记观察是否出现 flagged 或 blocked

这些指标里,稳定性和幻觉率最容易被忽略。我见过很多团队只看生成结果"看起来不错",结果一上线就发现同一个 Prompt 十次结果九种风格。这时候与其改 Prompt,不如先检查 temperature 是否过高,再检查约束是否写得太模糊。

顺带说一句,你可能遇到过一条报错:invalid prompt,你的提示词被内容安全策略标了红旗。这类情况往往不是模型坏了,而是措辞触发了安全过滤。解决办法通常不是硬闯,而是把意图用更具体、更中性的语言重新表达,并避免在 Prompt 里堆砌容易被误判的词。我后来专门把"安全改写"列入测试集,确保团队里任何人都能处理这种情况。

5.3 搭一套自己的 Prompt 回归测试集

评估 Prompt 最实操的方法,是建立一份回归测试集。我自己的做法是:把日常最高频的 10 到 20 个任务各沉淀一条 Prompt,形成一份测试集。每次准备修改某一条 Prompt 之前,先把这一条任务跑 3 到 5 次,记录上面说的关键指标;修改后再跑同样的次数,对比指标变化。如果一个指标提升但另一个明显下降,就要掂量权衡。

模板大概长这样:

任务指标修改前修改后备注
生成周报格式遵循率80%100%加了输出格式
写英文邮件人工评分3/54/5加了参考示例
数据分析幻觉率20%0%加了不确定时直接声明

如果你没有人工评分条件,可以让另一个模型当裁判:把 Prompt、输出、要求清单一起发给裁判模型,让它按维度打分。这就是 LLM-as-judge 的做法。注意裁判模型本身也有偏好,所以最好同一批样本用同一个裁判、同一套标准,保证分数可比。

6. 实战复盘:一封邀请函从 30 分改到 90 分的全过程

6.1 第一版:无角色、无背景、无输出约束

假设任务很简单:写一封新品发布会邀请函。第一版 Prompt 是"帮我写一封邀请函"。模型给的回复通常是:

尊敬的客户: 为了感谢您长期以来的支持,我们诚挚邀请您参加本次新品发布会……

看起来没毛病,但完全不能用:没有时间、没有地点、不知道发布会亮点、也不知道是给谁发的。原因就是五维全部缺失。我用指标一量:任务完成率大概只有 30%,格式没有要求,稳定性也随缘。

6.2 第二版:补全五维

第二版我按五维重写:

角色:你是某科技公司的市场部经理 任务:写一封新品发布会邀请函邮件 背景:发布会于 6 月 8 日下午 2 点在上海某酒店举办,展示新款智能手表,主打健康监测功能;收件人是合作两年以上的渠道商客户 约束:语气亲切但不失正式;正文 300 字左右;必须包含时间、地点、发布会亮点、报名方式;不要用大量感叹号 输出:主题行放最前面,然后是邮件正文

跑出来的结果明显可用了:有时间地点、有产品卖点、有报名方式,稍微改改就能发出去。格式遵循率 100%,任务完成率大概 80%——有一次漏了报名方式。这就引出了第三版。

6.3 第三版:用指标驱动微调

漏掉报名方式,说明"报名方式"这个信息在 Prompt 里的权重不够。我做的第一件事,不是加一堆"一定要写报名方式",而是把它同时放进背景和约束两个维度里强调,并在背景里把报名方式具体化:"报名方式:直接回复本邮件即可参加"。约束里再加一句"结尾必须写清报名方式"。

然后我在测试集里连跑 5 次,任务完成率变成 100%。同时我把 temperature 从默认值降到 0.3,确保稳定。最后再让模型模仿一个参考示例的开头语气,整体质感又上了一个台阶。整个过程没有改任何代码,只是围绕指标把 Prompt 从"能用"调到了"好用"。

说句实话,Prompt 没有终极完美的版本。模型在升级、任务在变化,今天好用的框架明天可能就要微调。我自己的体会是,真正拉开差距的不是背诵模板,而是建立一条"反馈回路":每次生成都是一次测试,不满意就对照五维看漏了哪一项,再用指标验证改完有没有变好。把这套流程跑顺,你不再需要到处找所谓的万能 Prompt,你自己写出来的,就是最顺手的万能 Prompt。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询