提示的作用
提示(Prompt)是用户输入给模型的信息,用来引导模型生成符合需求的输出。大模型在预训练阶段学习了“根据前文续写”的能力,提示工程本质上是在设计一段前文,让模型沿着期望的方向续写。
同一个问题,不同的提示可能得到完全不同的结果:
请评价这部电影。请从剧情、表演、摄影三个方面评价这部电影,每部分不超过 100 字。你是一位严格的影评人。请用三点指出这部电影的缺点,并给出改进建议。提示工程的目标不是“让模型更聪明”,而是把任务说清楚:明确角色、目标、输入、输出格式和约束。
提示的组成
一个完整的提示通常包含:
- 角色/背景:模型扮演谁、处于什么场景;
- 任务指令:要做什么,动词尽量明确;
- 输入数据:待处理的文本、代码或问题;
- 示例:可选的输入—输出样例;
- 输出格式:长度、结构、语言、是否引用来源;
- 约束:不能做什么、遇到不确定时如何处理。
结构化提示常用分隔符区分指令和数据,例如:
【任务】判断用户评论的情感倾向。【评论】<<<用户评论>>>【输出】只输出“正面”“负面”或“中性”。分隔符能降低指令与数据混淆的风险,也便于模型定位输入边界。
离散提示与连续提示
提示构建策略可以分为两类:
- 离散提示(硬提示):用自然语言词构造模板,依赖人的先验知识,可读、可迁移,但需要手工调试;
- 连续提示(软提示):在嵌入空间学习一组可训练向量,不对应真实词,通过反向传播优化。
软提示的代表是 P-Tuning 和 Prefix Tuning。它们把提示参数化,让模型自己学习“什么样的上下文最有利于任务”,但需要训练数据,且可解释性较弱。具体机制见 参数高效微调。
上下文学习
上下文学习(In-Context Learning, ICL)在提示中提供若干示例,让模型通过类比完成新样本,不更新参数:
输入:这部电影太精彩了。输出:正面
输入:剧情拖沓,演员表演生硬。输出:负面
输入:画面不错,但故事很无聊。输出:ICL 的效果取决于:
- 示例质量:示例必须正确、格式一致;
- 示例数量:通常几个到几十个,过多会占用上下文;
- 示例顺序:模型可能受近因效应影响;
- 示例相关性:与测试样本相似的任务和领域更有效。
ICL 不需要训练,但推理成本随示例长度增加,且对提示格式敏感。SFT 则把任务模式写入参数,行为更稳定,见 LLM 有监督微调。
自动提示优化
手工提示依赖反复试错。自动提示优化把“写提示”转化为搜索或优化问题。
APO
APO(Automatic Prompt Optimization)从一个初始提示出发,迭代执行:
- 用当前提示让模型生成输出;
- 将输出与标准答案比较,得到误差或“失败原因”;
- 把失败原因和当前提示交给大模型,让它改写提示;
- 在验证集上评估新提示,保留更好的版本。
它类似梯度下降,只是“梯度”由自然语言描述的误差代替,更新对象是提示文本而不是参数。缺点是优化容易局限在初始提示附近。
APE
APE(Automatic Prompt Engineer)先让大模型根据少量示例生成一批候选提示,再在验证集上给每个候选打分,选择得分最高者;也可以对高分候选做重采样和改写,继续搜索。相比 APO,APE 从多个初始点出发,探索范围更广,但候选生成和评估的成本更高。
| 方法 | 搜索方式 | 优点 | 局限 |
|---|---|---|---|
| 手工提示 | 人工试错 | 灵活、可解释 | 依赖经验,难以规模化 |
| APO | 从初始提示迭代改写 | 有明确误差反馈 | 容易陷入局部最优 |
| APE | 生成候选 + 打分筛选 | 探索范围广 | 评估成本高 |
自动优化得到的提示往往可读性较差,甚至包含看似无意义的词,但在特定任务上有效。它适合固定任务和大规模评估,不适合需要人工审查的高风险场景。
实践建议
- 先明确评估标准:没有稳定的验证集,就无法判断提示是否变好;
- 一次只改一个因素:角色、示例、格式、温度分别调整,便于归因;
- 用分隔符和格式约束:减少指令注入和输出解析错误;
- 让模型承认不确定:在提示中要求“不知道时说明”,比强迫回答更安全;
- 防范提示注入:外部文档、网页内容可能包含恶意指令,不能无条件当作可信输入;
- 控制上下文长度:示例和检索内容越多,成本和延迟越高,也可能稀释关键信息。
对于需要多步推理的问题,单纯的提示模板不够,需要思维链、思维树等技术,见 CoT、ToT 与 GoT。需要外部知识时,则要结合 RAG。
相关阅读
- 推理链与搜索式提示:CoT、ToT 与 GoT
- 检索增强生成:RAG
- 智能体与工具调用:基于大语言模型的智能体
- SFT 与上下文学习:LLM 有监督微调
- 生成任务的评价:大语言模型的评价