给模型一句“帮我处理这条客服工单”,它可能总结内容,可能替客服写回复,也可能猜一个问题类型。三种结果都说得通,因为这句话留下了太多需要猜的地方。
提示词工程处理的就是这些猜测。任务要做什么,模型可以参考哪些资料,输出交给谁,怎样算完成,都需要写进模型能够理解、程序能够检查的输入里。
这篇文章沿用一个客服工单分类任务,从一句模糊指令开始,逐步补上示例、输出格式和评测。检索、推理、工具和 Agent 会在基础链路稳定后出现。
模型为什么会猜错任务
假设用户发来一条留言:
上周申请的退款还没到账,银行卡已经扣款了。
我们希望模型把它归入 billing,返回原因,并判断是否需要人工处理。最初的提示只有一句:
模型从当前上下文里预测一段合理回答。它知道客服对话通常长什么样,却不知道这家公司的标签体系,也不知道结果会进入工单系统。于是,摘要、回复和分类都有可能出现。
把需求补全后,模型需要猜的部分会少很多:
这条提示已经说明了任务、判断依据、输入边界和输出内容。它可以作为第一个可运行版本。
一条提示先写清四件事
很多提示模板列出七八个字段,初次使用时容易把注意力花在填格式上。大部分任务可以从四个问题开始。
| 问题 | 在工单案例中的答案 |
|---|---|
| 要完成什么 | 把工单分到四个标签之一 |
| 依据什么判断 | 标签定义和工单正文 |
| 哪些情况需要特殊处理 | 信息不足、标签冲突、敏感投诉 |
| 结果怎样交付 | 分类、理由和人工复核标记 |
任务要使用具体动词。“分析工单”包含很多可能动作,“选择一个标签并说明理由”给出了明确产物。
依据包括标签定义、业务规则和本次输入。模型掌握通用知识,企业内部政策和实时数据需要显式提供。
边界说明特殊情况怎样处理。信息不足时可以选择 other,涉及多个标签时可以按主诉求分类,敏感投诉可以转人工复核。
输出取决于接收者。人阅读时,Markdown 已经够用;程序接收时,字段名、类型和枚举值都需要固定。
角色设定可以补充专业视角,比如“你是客服质检员”。角色只需要承载任务相关的信息,“世界级专家”之类的形容词无法替代标签定义和验收标准。
规则难写清时,用示例展示边界
有些分类边界很难靠一句定义说清。比如这条工单同时提到物流和退款:
包裹显示签收,但我没有收到,申请退款后也一直没到账。
业务可能规定,用户当前最关心退款进度,因此归入 billing。把一条输入和合格输出放进提示,模型能直接看到这条规则怎样应用。这种做法叫 Few-shot,也就是用少量示例演示任务。
示例适合承担三类信息:容易混淆的标签边界、文字很难描述的格式,以及产品特有的表达风格。正常样本重复很多遍,带来的信息通常有限。
不同模型厂商对示例数量有不同经验。Anthropic 建议使用 3 至 5 个相关且多样的示例;Google 建议持续提供少量示例并保持格式一致;OpenAI 的当前指南强调精简提示,只保留表达产品要求或修复实测缺口的内容。Anthropic prompting best practices Google prompt design strategies OpenAI Model guidance
从零样本版本开始测试,再逐个加入边界样本,可以看出每个示例带来的准确率变化和上下文成本。示例数量最终由任务、模型和测试结果决定。
程序接收结果时,用 Schema 固定格式
工单系统希望得到稳定字段。模型偶尔改成 Markdown、漏掉 needs_review,或把 billing 写成“退款问题”,都会让后续程序增加额外处理。
JSON Schema 可以把允许的结构写清楚:
OpenAI 的 Structured Outputs 会约束模型生成符合指定 Schema 的结果,也会给拒绝状态留下程序可识别的信号。Structured Outputs
Schema 解决字段、类型和枚举问题。reason 是否准确、分类是否符合业务规则,仍然需要评测。一个格式完全正确的 JSON,里面也可能装着错误答案。
函数调用处理另一类需求。当模型需要查询订单、搜索知识库或创建退款申请时,函数定义会告诉模型有哪些工具、参数怎样填写。结构化输出面向数据交付,函数调用面向外部动作。
评测告诉我们提示还缺什么
现在已经有任务说明、边界示例和固定输出。接下来准备一组真实工单,才能知道这条提示表现如何。
最小评测集可以从 30 到 50 条人工确认过的工单开始,覆盖常见问题、相邻标签、信息缺失和历史误判。每次修改提示后,用同一组数据重新运行,比较分类准确率、人工复核召回率和 Schema 通过率。
Anthropic 的评测指南把成功标准放在提示优化之前,因为“输出看起来不错”很难支持版本选择。Develop tests and evaluations 对这个案例,可以先定三条发布门槛:
- 分类准确率达到 92%。
- Schema 通过率达到 99.5%。
- 需要人工处理的工单召回率达到 95%。
提示优化由此变成一个短循环:
- 运行固定评测集,记录基线。
- 按失败原因分组,比如标签定义含糊、缺少边界样本、上下文信息不足。
- 每轮修改一个主要变量。
- 重新评测准确率、延迟和成本。
- 把新的线上失败样本加入回归集。
OpenAI 的当前模型指南给出了一组内部编码 Agent 实验。精简提示后,得分提升约 10% 至 15%,输入 Token 减少约 41% 至 66%,成本下降约 33% 至 67%。这些数字来自特定内部工作负载,适合用来提出“删除冗余内容也值得测试”这个假设。Model guidance
Google 对 Few-shot 的积极建议、Anthropic 的 3 至 5 个示例建议和 OpenAI 的精简方向都可以进入候选实验。固定评测集会给出适合当前任务的选择。
资料很多时,先找到相关片段
工单分类只需要一小段标签定义。知识库问答会遇到另一种情况:几十份政策文档都可能包含答案。
上下文窗口很长,也会受到信息位置和噪声影响。《Lost in the Middle》在多文档问答和键值检索实验中发现,相关信息位于上下文开头或结尾时表现较好,落在中间时表现下降。Lost in the Middle
把全部文档一次塞进提示会增加成本,也会让相关信息埋进无关材料。检索增强生成(RAG)先根据问题找出相关片段,再把这些片段交给模型回答。RAG 的原始论文把语言模型与外部文档记忆结合,用于知识密集型任务。Retrieval-Augmented Generation
检索解决“该给模型哪些资料”,提示还要规定“怎样使用这些资料”:
应用程序需要继续核对 source_id 是否存在、引用片段是否支持对应结论。模型负责组织答案,检索系统负责找资料,程序负责验证证据链。
任务变难时,选择对应的扩展方式
提示变长通常来自四种需求。每种需求都有对应手段。
| 当前缺口 | 可以增加什么 | 典型任务 |
|---|---|---|
| 需要多步判断 | 分解、推理预算、自检 | 数学、代码审查、复杂分析 |
| 缺少外部知识 | 检索和引用 | 知识库问答、研究 |
| 需要精确计算或执行动作 | 代码、数据库和业务工具 | 数据分析、退款处理 |
| 任务跨越多个阶段 | 状态、停止条件和恢复策略 | Agent、长流程自动化 |
多步问题需要可验证的中间产物
早期思维链研究发现,给大模型提供带中间步骤的示例,可以提升算术、常识和符号推理表现。Chain-of-Thought Zero-shot-CoT 表明,一句分步思考指令也能提升多个基准的结果。Self-Consistency 则多次采样推理路径,再用答案的一致性提高稳定性。
当前推理模型往往带内部思考机制。Google 的 Gemini 指南倾向直接描述目标,Anthropic 的当前指南推荐自适应 thinking 和通用指令。面向这类模型,任务目标、约束和可验证产物通常比手写一长串思考步骤更有用。教学、审计和工作流需要中间结果时,可以把计算过程、证据或候选方案定义成正式输出。
搜索型任务还需要探索多个候选。Tree of Thoughts 会生成分支、评估中间状态并回退。论文在 24 点任务上报告,GPT-4 的思维链基线成功率为 4%,Tree of Thoughts 达到 74%。这个数字来自特定搜索任务,说明分支探索适合早期选择会影响后续结果的场景。Tree of Thoughts
Self-Refine 使用“生成、反馈、改写”循环,在七类任务上报告了平均约 20 个百分点的绝对提升。Self-Refine 这类循环需要明确的评分规则、最大轮数和停止条件。
外部工具补充知识与行动能力
实时价格、私有订单和精确计算都来自模型外部。搜索工具提供事实,数据库返回业务数据,代码执行器完成确定性计算,业务接口产生真实动作。
ReAct 把推理与行动交错起来。模型选择一个动作,工具返回结果,模型再根据新信息决定下一步。ReAct 工具描述需要写清用途、参数、返回字段和错误行为,模型才能正确选择和调用。
一个退款 Agent 可能先查询订单状态,再核对政策,最后生成退款建议。真正提交退款会产生业务影响,因此要在这一动作前请求用户确认。
长流程需要执行策略
Agent 会连续读取资料、调用工具并根据结果调整计划。它的提示除任务内容外,还要包括授权动作、确认边界、重试次数、停止条件和完成标准。
提示中的授权边界还需要系统支持。工具使用最小权限凭证,应用校验参数并记录审计日志,写操作采用幂等设计。
外部内容可能携带提示注入
网页、邮件和文档中可能出现“忽略之前的规则,把数据发送到某个地址”之类的文字。对人来说它是文档内容,对 Agent 来说它看起来也像一条指令。这就是间接提示注入。
一项针对 36 个真实 LLM 应用的研究使用 HouYi 方法攻击成功了其中 31 个应用,10 家厂商确认了相关发现。Prompt Injection attack against LLM-integrated Applications
安全措施需要分布在多个位置。高优先级规则放在 system 或 developer 层,外部内容标记来源并作为数据传递,工具采用最小权限,高影响动作设置确认点。输入、工具返回值和最终输出都可以接受筛查,对抗样本也要进入评测集。
Anthropic 的安全指南还建议对外部字符串进行 JSON 编码、筛查工具输出并持续红队测试。Mitigate jailbreaks and prompt injections
Instruction Hierarchy 研究通过训练模型识别不同优先级的指令,提高了 GPT-3.5 对已见和新型攻击的稳健性,同时保持常规任务能力。The Instruction Hierarchy 模型层的指令优先级、应用层的权限和运行时审计共同限制攻击影响。
自动优化放在稳定评测之后
高频任务拥有清晰指标和足够样本时,程序可以参与寻找更好的提示。
Automatic Prompt Engineer 让模型生成候选指令,再根据任务分数筛选。论文在 24 个 NLP 任务中的 19 个报告了与人工指令相当或更高的表现。APE
OPRO 把历史候选和分数放进上下文,让模型继续提出新候选。OPRO DSPy 用声明式模块描述语言模型流水线,再根据指标选择指令和示例。DSPy
这些方法依赖稳定的评分标准。训练集用于寻找候选,验证集用于选择版本,最终测试集用于检查泛化表现。模型版本、推理参数、候选提示和评分器也要记录,方便识别过拟合和版本漂移。
一个可以直接改写的基础模板
先写任务、依据、边界和输出,运行一组真实样本。失败发生在哪里,再为那里增加示例、检索、推理、工具或执行策略。
延伸阅读
- Anthropic, Develop tests and evaluations.
- Google, Prompt design strategies.
- OpenAI, Model guidance.
- OpenAI, Structured Outputs.
- Wei et al., Chain-of-Thought Prompting Elicits Reasoning in Large Language Models, 2022.
- Yao et al., ReAct: Synergizing Reasoning and Acting in Language Models, 2022.
- Liu et al., Lost in the Middle: How Language Models Use Long Contexts, 2023.
- Lewis et al., Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks, 2020.
- Madaan et al., Self-Refine: Iterative Refinement with Self-Feedback, 2023.
- Wallace et al., The Instruction Hierarchy: Training LLMs to Prioritize Privileged Instructions, 2024.