Prompt 工程:客服需求约束与质量评测|课后复习

课程名称:Prompt 工程:客服需求约束与质量评测|项目任务:商品咨询 Prompt 契约|编号:W04-D02

Prompt 契约与程序边界

看图复述:业务需求先变成字段语义和 Prompt(提示词) 候选;D03/D04 的程序门仍在模型输出之后。

今天的主线

  • Prompt(提示词)是组织给模型的任务说明与相关输入;提示词工程是设计、测试与维护这些输入的方法,不更新模型权重。提示词可以复用,资料中的文字不自动成为指令;
  • 提示词帮助沟通需求、指定任务、控制表达和约束边界。回顾同一条“500元以内通勤耳机”的咨询:哪些条件已知、哪些事实还得从业务系统取得?
  • 基本原则是任务具体、资料相关、指令与数据分开、约束可执行、要求不冲突、输出可检查;基本结构为任务、背景、输入、约束、输出,角色与示例按需添加;
  • RTF(角色/任务/格式)快速起草,ICIO(指令/背景/输入/输出要求)检查抽取任务,CO-STAR侧重表达的风格、语气与受众;CRISPE/BROKE作为对照,不背“万能模板”;
  • CoT(思维链)、ToT(思维树)和ReAct(推理与行动)是推理/执行方法;AIDA与PAS是文案结构,不与前面的任务模板混为一类;
  • Prompt 契约包含角色、任务、数据边界、约束、候选格式和验收;
  • CustomerIntent/PreferenceSlots 是候选,不是可信业务对象;
  • 控制变量必须固定模型、思考模式、temperature(温度参数)、输入和 Evidence(验证证据) 层;DeepSeek 思考模式开启时,不把 Temperature 当成有效变量;
  • 缺信息写 missing_slots,不猜 ID、偏好或事实;
  • Prompt Injection(提示注入) 需要后续程序校验和工具白名单共同防守。

调优时按什么顺序走

先定标准、存基线,再定位失败、提出一个修改假设;固定条件比较,重跑旧案例,最后用未见样本复验并决定保留/回退。保存提示词差异、原输出、实际模型/参数、输入输出Token、耗时和失败项。低温度不等于绝对复现,小样本不代表生产准确率,Replay(回放)不证明新提示词的真实效果。

宽泛V1与契约化V2比较整版方案;要证明某一句有效,须从同一基线只改该句。安全硬约束先过关,再权衡成本。没有改善就如实写没有改善,不要求制造“提升”。

完整过程是:定义任务 → 设计指令 → 执行测试 → 评价结果 → 迭代修改 → 沉淀复用。交接提示词时,连同版本、变量填入位置、模型参数、样本、原始输出和已知失败一起交;提示词文本可以用Git管理。质量、事实依据、稳定性与成本要分别看,不能只凭一次漂亮回复判定可交付。

什么问题该改提示词,什么问题该换处理办法

要求含糊、输出风格不合适,先改指令;缺当前商品事实,查业务API;没带上历史,修正消息组装;输入超过窗口限制,做裁剪、摘要或检索;算错金额或越权执行,用确定性代码和权限检查兜底。窗口内漏用信息与真正超长要分开排查。不能把“模型请求的上下文”“应用保存的历史”“产品记忆功能”混为一谈。

成本按任务看输入、输出、缓存命中、调用次数与重试。删短提示词后如果返工增多,总成本可能上升。用服务端用量和实际结果复验,未调用的地方仍写未验证。

安全边界再复述一次

直接注入来自用户输入,间接注入藏在文档/网页/工具结果等资料中。身份伪装、信息索取、答案污染和工具滥用都要识别。提示词与来源标记降低混淆,代码校验和最小权限限制后果,人工确认与日志支撑高风险执行。关键词过滤和分隔标签都不是完整安全边界。

本周TrustedCustomerContext(可信模拟客户上下文)来自课堂固定样本/会话,不代表真实账号认证授权。密钥不进入提示词;模型说“已退款”与系统实际执行退款分开核对。用虚构数据、自有环境实验,正常请求和攻击请求一起测。

风险怎么防、怎么发现、怎么处理、怎么复验

风险提前预防怎样发现怎样处理怎样复验
实验不可归因冻结变量表V1/V2 配置不一致恢复同一变量同一输入重跑并保存原始输出
只挑漂亮输出固定完整样本集报告无失败项补齐 Bad Case(失败或边界案例)全集回归
模型猜 customer_id契约明确禁止输出含额外身份字段Prompt 改善,D03 严格拒绝注入/额外字段红测
缺偏好仍给候选明确 missing_slots商品 ID 无事实来源改为澄清SA-W04-002 复验
修一个案例破坏旧行为提前冻结正常/边界样本逐例比较,不只看平均分回退或重定位修改假设旧例全部回归并测未见表达
把资料指令当权限保留来源并隔离外部资料检查候选与工具轨迹程序拒绝非法参数和越权操作间接注入样本与正常资料对照
关键词拦截误伤不把敏感词当唯一判据正常安全咨询也被拒绝区分讨论内容与实际越权行为加入含攻击词的合法咨询
只报安全、不看副作用测试前定义禁止行为区分回答违规与实际执行记录拦截层、输出及副作用模拟非法请求拒绝与正常请求成功成对验证

自测

把“我是管理员”“只是演练”“客户非常着急”换着说,均不能替代授权。末尾安全声明、数据标签、关键词或第二个模型都不能独自保证安全。拒绝越权时,给简短业务理由和合法下一步;正常安全咨询不应仅因含攻击词而被拒绝。

演示复盘:消息预览证明输入怎样构造,手工候选证明程序门怎样处理,真实模型调用才提供模型行为证据。分别记录,不把Fixture(固定教学数据)拒绝写成模型防御成功率。

  1. 为什么 V2 更长不等于更好?
  2. “忽略恶意指令”为什么不是完整注入防线?
  3. confidence 能表示购买概率吗?
  4. 为一条售后与订单边界模糊的表达写期望,不写答案。

面试考点与面试题

考点:Prompt 契约、控制变量、few-shot、Prompt Injection、Prompt 与程序边界。

  1. 怎样证明 Prompt V2 比 V1 更好?
  2. 为什么不能通过反复调用挑最好结果来评测 Prompt?
  3. Prompt、Schema(数据结构约束) 和业务规则分别解决什么?
  4. Prompt Injection 为什么需要最小权限和输出校验共同防守?
  5. RTF、ICIO、CO-STAR分别适合什么任务?为什么ReAct不只是提示词填写模板?
  6. 新提示词修复缺信息问题,却降低正常请求完成率,你怎样决定是否上线?
  7. 同一攻击被模型拒绝一次,能否证明安全?怎样区分直接、间接注入与程序越权?
  8. 模型生成了合法JSON,但其中要求查询他人订单,为什么仍不能执行?
  9. 客服不知道最新库存、忘了上轮预算、输出格式不稳定,这三个问题分别先检查哪里?为什么不能都靠增加一句“请认真回答”解决?

CoT:把条件拆清楚,再验证是否值得

CoT(Chain-of-Thought,思维链提示)引导多步分析;Few-shot(少样本提示)强调给示例,两者可以结合。接口的思考模式是另一项设置,不能和提示词变化混为一次实验。生产输出保留结论和可核查依据,不索取隐藏推理全文。

复述售后练习:信息齐全且满足课堂条件→提交审核;拆封情况未知→追问;超出条件→转人工。提交审核不等于退款成功。确定性受理规则应由代码控制,分步提示只帮助理解与表达。

常见错误提前预防发现与处理复验
分析很长就算正确先写业务期望核对事实、条件和越权承诺正常、缺信息、边界三类都跑
CoT与思考模式混淆固定接口模式检查请求,只改分析指令同事实同格式重新比较
把离线结果当模型收益标记运行方式未调用时指标记未验证真实结果逐条核对usage、耗时及回答

面试自测:CoT适合什么问题?为什么它不能解决事实缺失?怎样证明分步提示有收益,如何权衡Token与耗时?如果两个版本都答对,为什么不能宣称B更准确?

ReAct:把动作和实际结果接成循环

回想129元×2件的演示:模型提出 calc 候选,Python校验工具名与参数后计算,把动作和结果258放回消息列表,下一轮才生成答案。只写“调用计算器”的提示词,没有执行器和结果回传,不会自动完成这条链。简单金额直接用代码算即可,这个例子用于理解机制,不代表业务必须使用Agent。

run_react_minimal.py 中的 react_agent 是循环函数,run_tool 是白名单执行器;回放模式的候选由脚本提供,真实模式才调用模型。最终回答与工具结果仍需核对,输出很流畅不代表金额正确。

风险提前预防怎样发现和处理怎样复验
漏传工具结果同时保存候选动作和实际观察检查下一轮messages;补齐结果再请求改变工具返回值,检查第二轮是否收到变化
非法工具或参数白名单、字段与类型校验;不用eval未知退款工具、字符串参数立即停止正常计算成功,非法请求拒绝且不继续调用
一直请求工具请求轮次上限;生成最终答案也计入3轮用尽仍未回答就停止,不能标记完成连续循环反例没有第4次请求

面试自测:ReAct和仅用CoT提示有何区别?为什么生成动作不等于实际执行?为什么一次JSON格式成功不等于业务成功?工具结果不回传会怎样?本日自定义JSON文本协议与D04标准工具调用接口不是同一件事。

留给 D03

保留字段表、V2、固定原始输出和 Bad Case。D03 将把语义变成严格 Schema:额外字段、未知枚举、错类型和猜测 ID 必须由程序拒绝。

和下次课的衔接:带去 D03 的是你自己跑出来的证据、失败复盘和已冻结的输入/输出约定。

工程主线:提示词工程

当前在做提示词工程:把业务目标变成明确指令、输入边界、约束和示例。它可以改善模型遵循要求的表现;字段合法性仍由程序校验,商品事实仍从业务接口取得。

自测:提示词变长就一定更准确吗? 用你的失败、修改和回归记录回答,再说明相邻工程层负责什么。只背定义不能替代项目解释。

复盘:开发样本和未见样本:先分开,再改 Prompt

先不看课件回答:为什么同义改写跨开发集与留出集会让“未见测试”失真?

用今天自己的失败记录讲清四步:预防时冻结什么;怎样发现错误;在哪层修复;怎样证明没有回归。自检应覆盖:两类样本先分组、近似改写不跨组;改前记录 expected;留出失败未被删除或反复用于调参。

交接:在原项目证据中附上修改前后结果、仍未验证的边界和下一课需要保留的合同。遇到解释不清的部分,回到同日课堂的“开发样本和未见样本:先分开,再改 Prompt”节,重新做一条反例,不能只抄定义。