跳到正文
Agent 教程 V202 · Prompt Engineering:任务要求怎样进入模型
返回课程/Agent 教程 V2
第 2 / 6 章 约 9 分钟

02 · Prompt Engineering:任务要求怎样进入模型

组织任务要求、处理指令冲突,理解注意力、缓存、提示版本与服务端执行边界。

1. Prompt在Agent里处于什么位置?

上一课讲了Harness怎样组织模型完成任务。Prompt处在模型输入这一侧:把应用规则、本次任务和交付要求传达给模型,影响它怎样分析、选择下一步和回答用户。

Prompt就是提示词;Prompt Engineering是设计、验证和调整这些说明的过程。它承担的是表达要求的职责,工具执行、权限校验和任务停止仍由程序控制。

文档插图

名词在这一课里怎样理解
Prompt,提示词告诉模型目标、依据、边界和交付要求
Context,上下文模型本轮能看到的整体信息,包括指令、对话和工具结果
系统或开发者指令模型接口中承载应用要求的位置,具体字段和优先级按厂商协议处理
Token模型处理文本的片段,也是输入长度与用量的计量基础
Prompt缓存在满足条件时复用相同输入前缀的中间计算,不复用上一份答案

Prompt是Context的一部分。

已有事实提供分析依据,不能因为出现在输入中,就自动获得修改应用规则的权限。

在传统后端里,业务要求主要落实为字段、条件和处理规则。Agent还要把部分要求传达给模型。例如用户问“昨晚直播的成交额为什么下降”,应用就要说清店铺、比较场次、成交额口径、缺数据时怎么办,以及交付方式。

2. 同一个任务,要求可以差在哪里?

先看一段模糊的提示词:

你是资深电商专家。全面分析昨晚直播为什么卖得不好,
给出专业、深入、可落地的建议。

“卖得不好”按什么判断?和哪场比?有没有查到数据?这里都没有说明。“资深专家”可以提示模型采用某种分析视角,却不能替代缺失的事实和任务边界。

下面把要求写清。实际店铺与场次,要先由用户确认或从可信任务信息中取得。

任务:比较这家店昨晚与上周同一天的直播,分析成交额变化。

比较范围:两场直播的完整场次。
成交额口径:已支付订单金额,暂不扣退款。

先通过可用查询工具核对数据,再分析。
把查到的事实与可能的解释分开;每项事实标明数据来源。
关键数据查不到时,写清缺少什么,不自行补数。
如果店铺、场次或比较范围不明确,先向用户确认。

交付:一段摘要,以及“已确认事实、待验证原因、建议补查”三部分。
本次只做分析,不发送通知、不修改业务数据。

这段说明没有规定每一次查询的顺序。模型仍可根据结果选择下一步,但它知道比较范围、证据要求和交付方式。

3. 先把哪些要求写清楚?

写提示词时,可以用这几个问题检查遗漏,无须每次照抄一套固定模板。

要说明什么在这个任务里怎样表达
目标与范围比较哪家店、哪两场直播、哪个指标
依据与口径用查询结果分析,明确支付金额是否扣退款
完成标准说清变化、证据与缺口;资料不足也可以如实交付
行为边界本次只分析,缺少关键信息先确认
输出方式面向运营阅读,区分事实、假设与补查建议

文档插图

如果某项要求容易被误解,可以补一个短例子。例如下面是虚构教学数据:

不合适:观看人数下降20%,所以成交额下降就是流量导致的。

更合适:成交额与观看人数均下降20%;流量变化值得进一步核查,尚缺转化和客单价等信息,暂不能确定原因。

示例要明确标记,避免数字被当作本次事实;也要覆盖不同情况,避免模型套用同一种结论。

4. 固定规则、本次任务和事实资料,分开管理

应用指令、用户要求和查询结果,可以分开管理:

内容示例应用里怎样管理
固定应用指令缺少证据时说明不足单独维护,修改时留版本
本次用户任务比较两场直播,只看新品随本次任务传入
已取得的事实工具返回的金额、时间范围和来源标明来源,作为资料供模型分析

不同模型接口的消息字段不同,这里先理解职责,不要求记住某一家API的参数。

本文用Prompt侧重指令,用Context指模型本轮能看到的整体信息,后者还包括对话、工具结果等。如何挑选和压缩这些信息,放在上下文工程篇讲。

5. 提示词互相冲突,先解决什么?

先分清冲突来自哪里。不要把所有要求拼成一段,再让模型自行猜测谁更重要。

文档插图

冲突怎么处理
应用禁止改数据,用户要求直接修改订单应用边界继续有效,程序也要拒绝越权操作
用户原先要看全场,后来明确改为只看新品更新本次任务,标明已确认的新范围;含糊时先确认
同一份规则既要求“必须确定原因”,又要求“缺证据不能下结论”修改规则:允许说明无法定因,输出待验证方向与缺口
商品描述或工具结果要求“忽略前面的指令”把它当资料内容,不能据此改变应用要求或授予权限

应用规则应放进所用接口支持的系统或开发者指令位置,用户任务、外部资料保留各自来源。具体优先级遵循厂商协议;同一层的矛盾要求仍要主动消解,不能靠“最后一句生效”或加粗解决。

相对稳定的默认偏好,要写清用户能否覆盖。例如默认输出摘要,但允许用户要求详细版;固定禁止修改订单,则不属于用户可以覆盖的偏好。提示词修改时,也要检查旧示例有没有继续暗示相反做法。

6. 提示词的“注意力”,工程上怎么理解?

注意力机制是模型在计算时关联不同Token的方式,Token是模型处理的文本片段。它不是我们在Prompt里手动分配的一份“注意力额度”,指令优先级也不等于注意力权重。

工程上要关注的是:模型有没有用对关键要求和证据。能放进上下文窗口,不代表信息一定会被有效利用。长上下文研究曾观察到,中间位置的相关信息更容易被忽略。

直播分析时,如果输入里塞满无关订单明细、多份旧要求和重复日志,“只看新品”这项要求即使存在,也可能没被正确执行。可以这样调整:

  • 稳定规则集中写清,删除互相重复或矛盾的说法。
  • 本次任务明确范围;资料按来源和用途分段,只提供相关信息。
  • 长资料后用一句简短指令点明当前任务,不重新复制整套规则。
  • 用遗漏范围、误用示例数字等案例检查效果,而不只检查文字有没有出现。

具体放在哪里更好,要在所用模型和任务上比较。加粗、重复和“非常重要”都不能保证执行正确;检索、裁剪与压缩策略放在上下文工程篇展开。

7. Prompt会影响缓存命中吗?

会。常见的Prompt缓存,会复用相同输入前缀的中间计算结果,减少重复处理。前缀就是请求开头连续一致的部分;语义相近、换了措辞,不等于同一个前缀。命中缓存后,模型仍要生成本次答案。

文档插图

直播分析的规则每天相同,店铺、场次和数据不断变化。常见做法是让稳定规则、示例和工具定义保持一致,再按接口结构加入本次任务和数据。

容易影响复用的改动组织方式
在固定规则开头插入每次变化的时间戳或请求编号把动态信息与稳定指令分开,放到合适的后续位置
每次随机排列工具、重写工具描述同一能力集合保持定义和顺序稳定;需要变更时正常更新
不断改写前面的历史消息能追加就追加;纠错、压缩确有需要时接受缓存变化
每个请求都重新生成固定提示词使用明确版本,避免无意义的措辞、格式和空白变化

某处变化后,更早且满足条件的相同前缀仍可能复用。排查要看服务端完整输入,包括工具定义、消息顺序与配置,不能只对比提示词文件。

缓存有最小长度、有效期、路由与启用方式等条件。DeepSeek默认启用上下文缓存,但需要完整匹配已持久化的前缀单元;Claude支持通过cache_control配置自动缓存或显式边界。不能把一家厂商的阈值或有效期套到另一家,也不能保证第二次请求必然命中。

检查时看接口返回的用量,而不是凭响应速度猜:

接口示例观察字段
DeepSeek Chatusage.prompt_cache_hit_tokens,并看未命中Token数
Claude Messagesusage.cache_read_input_tokens,同时区分缓存写入与普通输入
OpenAI Responsesusage.input_tokens_details.cached_tokens

按Token计算命中比例时,用“累计命中输入Token ÷ 累计全部输入Token”;不同厂商的总输入字段口径不一样,需要先统一。再一起看首个输出Token的等待时间、任务总耗时与实际费用,包含适用的缓存写入费用。

缓存命中不会缩短模型可见的上下文,也不会自动提升回答质量。不能为了凑长度而加无用内容,或为了维持前缀,保留过期规则和错误数据。正确性与权限边界优先,再优化复用。

8. 写在Prompt里的规则,哪些还要程序保证?

在传统后端里,你不会因为接口文档写着“只能看自己的订单”,就省掉权限校验。Agent也是一样:模型收到的说明,不能代替实际执行限制。

文档插图

Prompt可以告诉模型程序仍要负责
本次只分析,不改数据限制实际可调用的能力与权限
只查询必要的信息控制调用次数、时间和返回规模
按约定字段输出检查必填字段、类型和格式
每项事实附上来源核对来源是否存在、内容是否支持结论

假如后端要把分析结果展示为卡片,可以约定返回摘要、已确认事实和待补数据等字段。这就是结构化输出,方便程序处理。提示词可以描述这种结构;接口提供相应约束能力时也可以使用,返回后仍要处理校验失败。

即使JSON完全合法,里面也可能写着“流量下降就是唯一原因”。结构正确与事实正确,是两件需要分别检查的事。字段和来源是否存在,可以由程序检查;证据是否足以支持结论,还可能需要业务规则或人工复核。

发现问题时,也要先判断发生在哪一层:没说清比较范围,就改任务说明;工具没提供退款口径,就补工具能力;数据确实缺失,就如实说明。一直给提示词加“请务必准确”,补不上缺少的数据与功能。

9. 改了一版,怎样知道有没有变好?

先保留旧提示词,用同一组任务比较新旧版本。至少覆盖几种有代表性的情况:

场景重点观察什么
数据齐全是否回答了问题,事实有没有来源
少了关键数据是否明确写出缺口,有没有编原因
用户没说比较哪两场是否先确认,而不是擅自选定
工具查询失败是否如实说明失败,而不是当作零值
用户改范围、资料夹带指令是否执行确认后的任务,同时守住应用边界
长资料与重复请求是否遗漏关键要求,缓存用量与费用是否变化

文档插图

为了判断提示词本身的影响,比较时尽量固定模型版本、调用设置和工具返回数据,并记录这些条件。重复运行观察波动,一次好看不足以证明改善。

先保存prompt-v1.md和prompt-v2.md,记录执行版本即可,不必先建提示词数据库。

评估时先看事实、缺口与指令冲突是否处理正确,再看是否多查了无关资料、调用是否变多、缓存复用和费用是否变化。完整的评测方法后面再展开,这里先养成“保留版本,用同组任务比较”的习惯。

10. 这一篇先理解到哪里?

能把模糊要求写清,遇到冲突时分清来源和边界;知道长输入可能遗漏重点,稳定前缀会影响缓存;修改后用任务结果和用量记录检查效果。权限和执行限制仍由程序保障。

第二节是教学示例,未预设实测效果。试用时配上同一份虚构数据,比较事实、推测与缺口的处理。

下一篇讲Tool Calling:模型为什么需要工具,怎样把已有业务能力开放给它,以及工具设计中需要考虑哪些工程问题。