今天简要总结一下prompt engineering,也是对我学习内容的一个回顾
一、什么是提示工程
提示工程(Prompt Engineering)是面向大语言模型的提示词开发和优化技术。它的核心目标是在不改变模型权重或架构的前提下,通过精心设计的输入来最大化发挥LLM的能力。
可以将提示工程理解为一种"软件工程"方法——通过优化输入而非修改底层代码,来改善系统表现。
三大核心能力
| 能力维度 | 核心作用 | 关键技术 |
|---|---|---|
| Prompt 设计 | 让模型准确理解任务意图 | 指令设计、示例提供、角色定位、思维链 |
| Prompt 优化 | 提升输出稳定性与质量 | 自我反思、自动优化、分步推理 |
| Prompt 系统化 | 处理复杂多步骤任务 | 工作流设计、链式调用、RAG、多代理协作 |
二、基础知识:模型参数与提示词要素
模型参数设置
在使用LLM之前,需要理解几个关键参数:
- Temperature & Top_p:控制输出的随机性和创造性。Temperature越高越发散,Top_p控制概率分布的截断点。
- Temperature:范围通常是0-2,推荐值0.7-1.0。创意写作用高值(1.5+),事实性任务用低值(0.3-0.5)
- Top_p:范围0-1,推荐值0.9。与Temperature配合使用,一般二者选其一调整
- Max Length & Stop Sequences:限制生成长度,设置终止条件。
- Max Length (Max Tokens):控制生成的最大token数,需考虑输入+输出总和不超过模型上下文窗口
- Stop Sequences:自定义终止符号,如"\n\n"、"###"等,让模型在特定标记处停止生成
- Frequency Penalty & Presence Penalty:减少重复内容,鼓励主题多样性。
- Frequency Penalty:范围-2.0到2.0,根据token出现频率降低其概率,减少逐字重复
- Presence Penalty:范围-2.0到2.0,根据token是否出现过降低概率,鼓励引入新主题
提示词的核心要素
一个完整的提示词通常包含四个部分:
- 指令(Instruction):明确告诉模型要做什么
- 使用动词开头:分析、总结、翻译、生成、评估等
- 避免歧义:用"列出3个要点"而非"说说看"
- 可以包含角色设定:如"你是一位资深的数据分析师"
- 上下文(Context):提供背景信息或约束条件
- 包括任务背景、目标受众、使用场景
- 设定约束:语气、风格、长度限制、禁止内容
- 示例:“这是一篇面向初学者的技术文章,需要通俗易懂”
- 输入数据(Input Data):需要处理的具体内容
- 清晰标注输入边界,使用分隔符如"“”、###、<<<>>>
- 结构化数据用JSON、表格等格式
- 长文本可以分段标注:[段落1]、[段落2]
- 输出指示(Output Indicator):期望的输出格式或结构
- 指定格式:JSON、Markdown、表格、列表
- 提供输出模板或示例
- 设定输出长度:如"用100字以内总结"
- 可以用"输出:"、"答案:"等标记引导模型开始生成
设计原则:具体、明确、避免模糊。越清晰的指令,模型表现越稳定。
实用技巧:
- 分隔符使用:用三重引号、XML标签等明确区分指令和数据,防止提示词注入攻击
- 迭代优化:从简单提示开始,根据输出逐步添加约束和细节
- 版本管理:记录有效的提示词模板,建立提示词库
- 测试验证:用多个样例测试提示词的稳定性和泛化能力
三、核心技术演进路径
提示工程技术呈现出明显的演进规律:
零样本/少样本 → CoT(增强推理)→ RAG/ReAct(引入外部知识/行动)→ ART/Reflexion(自动化/反馈循环)→ MCoT/GraphPrompts(多模态/结构化)我们可以将这些技术按复杂度分为四个层级:
Level 1:基础提示技术
零样本提示(Zero-shot Prompting)
直接给出指令,不提供任何示例。适用于模型已经理解的常见任务。
少样本提示(Few-shot Prompting / ICL)
在指令中提供几个示例,让模型通过模仿来学习任务模式。这类似于机器学习中的"迁移学习"——通过少量样本引导模型行为。
Level 2:推理增强技术
链式思考(Chain-of-Thought, CoT)
引导模型展示推理过程,而非直接给出答案。包括:
- 零样本CoT:在提示词中加入"让我们一步步思考"
- 少样本CoT:提供带推理过程的示例
自我一致性(Self-Consistency)
生成多个推理路径,通过投票机制选择最一致的答案,提高准确性。
思维树(Tree of Thoughts, ToT)
将推理过程结构化为树状结构,支持分支探索和回溯,适合需要规划的复杂问题。
Level 3:知识与工具增强
检索增强生成(RAG)
在生成前先检索相关知识,将外部信息注入上下文。解决模型知识过时和幻觉问题。
ReAct框架(Reasoning + Acting)
结合推理与行动,让模型在推理过程中调用外部工具。形成"思考→行动→观察→再思考"的循环。
Reflexion(自我反思)
让模型评估自己的输出,并基于反馈进行迭代改进。构建"生成→评估→反思→重新生成"的闭环。
ART(Automatic Reasoning and Tool-use)
自动选择推理策略和工具,减少人工设计提示词的负担。
PAL(Program-Aided Language Models)
让模型生成程序代码来解决问题,特别适合数学计算和逻辑推理任务。
Level 4:高级与专业化技术
多模态思维链(Multimodal CoT)
将CoT扩展到图像、视频等多模态输入,实现跨模态推理。
基于图的提示(Graph Prompts)
将知识结构化为图谱,通过图遍历来组织推理过程。
自动提示工程师(APE)
使用LLM自动生成和优化提示词,形成"提示词的提示词"。
链式提示(Prompt Chaining)
将复杂任务分解为多个子任务,每个子任务使用独立的提示词,输出作为下一个的输入。
补充技术
- Embedding Prompt(软提示):直接优化嵌入向量而非文本
- Prompt Caching:缓存常用提示词部分,减少计算成本
- Function Calling:让模型以结构化方式调用外部函数
- Instruction Tuning:通过指令数据集微调模型,提升指令遵循能力
技术组合策略
- CoT + Self-Consistency:生成多条推理链后投票选择最优答案,适合高风险决策场景
- RAG + ReAct:先检索知识再执行动作,构建知识驱动的智能体系统
- Reflexion + PAL:让模型生成代码并自我评估优化,适合编程任务
四、上下文工程:提示工程的进阶
上下文工程(Context Engineering)与提示工程的关系可以理解为:"说什么"与"如何说"的区别。提示工程侧重于指令设计和任务分解,而上下文工程关注为模型提供最优的背景信息和环境配置。
核心目标
- 提高准确性:提供精准的背景信息,减少歧义和误解
- 提升效率:优化上下文长度和结构,平衡信息量与token成本
- 赋予能力:通过上下文注入新知识和技能,突破模型训练时的知识边界
- 增强可控性:通过上下文约束来规范模型行为和输出格式
主要技术
1. 知识融入
- 领域知识注入:将专业术语、规则、标准纳入上下文
- 实时数据集成:通过API调用获取最新信息(如天气、股价)
- 历史对话记忆:维护多轮对话的上下文连续性
- 示例库管理:动态选择最相关的few-shot示例
2. 结构化引导
- 输出模板:预定义JSON、XML等结构化格式
- 格式约束:使用schema验证、正则表达式限制输出
- 分段标记:通过特殊标记(如###、—)划分上下文区域
- 角色定义:为模型分配明确的身份和行为准则
3. 上下文管理
- 长文本处理:
- 滑动窗口:保留最近N个token的对话历史
- 摘要压缩:对历史对话进行总结以节省空间
- 分块索引:将长文档切分并建立检索索引
- 优先级排序:
- 相关性评分:根据语义相似度筛选上下文
- 时间衰减:赋予新信息更高权重
- 重要性标注:手动或自动标记关键信息
- 动态裁剪:
- 自适应截断:根据token限制智能删减次要内容
- 上下文蒸馏:提取核心信息生成精简版本
上下文工程与RAG的关系
RAG可以看作是上下文工程的一个重要应用场景。RAG通过检索系统动态构建上下文,而上下文工程则提供了管理和优化这些检索内容的方法论。
实践模式
静态上下文模式
在系统提示词(System Prompt)中预设固定的背景信息、角色定义和行为规范。适用于任务目标明确、知识相对稳定的场景。
动态上下文模式
根据用户输入实时检索和注入相关信息。典型应用包括:
- 对话式搜索:基于用户问题检索知识库
- 代码补全:根据当前代码上下文提供建议
- 个性化推荐:结合用户历史行为调整上下文
混合上下文模式
结合静态和动态方法,在固定框架基础上动态注入可变内容。例如客服机器人中,产品知识为静态上下文,用户订单信息为动态上下文。
上下文工程的挑战
- 上下文窗口限制:不同模型有token数量上限(如GPT-4为8K/32K),需要精心设计信息密度
- 注意力稀释:"中间丢失"现象——模型对上下文中间部分的关注度较低
- 噪声干扰:无关信息可能误导模型,降低输出质量
- 成本控制:上下文越长,API调用成本越高,需权衡质量与费用
优化策略
- 信息压缩:用更短的表达传达相同信息,避免冗余
- 关键信息前置:将最重要的内容放在上下文开头或结尾
- 渐进式上下文:分阶段提供信息,避免一次性加载过多内容
- 上下文验证:定期评估注入的上下文是否真正有助于任务完成
- 缓存机制:对常用的上下文片段进行缓存复用
评估指标
- 上下文利用率:模型实际使用的上下文比例
- 信息密度:单位token内包含的有效信息量
- 检索精度:动态上下文的相关性评分
- 成本效益比:上下文带来的质量提升与token成本的比值
五、实践案例:文生图提示词工程
以文生图(Text-to-Image)为例,一个生产级的提示词需要包含:
- 主体描述:核心对象的详细特征
- 风格指定:艺术风格、渲染方式
- 质量控制:分辨率、细节要求
- 负面提示:明确不希望出现的元素
通过系统化的提示词模板,可以大幅提高生成质量的稳定性。
示例:高质量人物肖像生成
提示词结构:
主体:一位年轻女性,黑色长发,穿着白色连衣裙,微笑表情 环境:站在樱花树下,春天的公园,阳光透过树叶 风格:电影级照明,浅景深,bokeh效果,自然色调 质量:8K分辨率,超高细节,专业摄影,柔和光线 负面提示:模糊、低质量、变形、多余的手指、不自然的姿势常见模型的提示词特点
- Stable Diffusion:支持权重调整(使用括号和冒号),如
(masterpiece:1.2)表示加强"杰作"概念 - Midjourney:使用
--参数控制风格,如--ar 16:9设置宽高比,--stylize 750控制艺术化程度 - DALL-E:更接近自然语言,支持详细的描述性语句,对构图指令理解较好
提示词优化技巧
- 关键词顺序:越靠前的描述权重越高,将最重要的特征放在开头
- 具体而非抽象:用"柔和的金色日落光线"代替"好看的光线"
- 艺术家风格引用:加入"宫崎骏风格"、"Greg Rutkowski"等可以快速定义视觉风格
- 技术术语:使用"电影级照明"、“景深”、"黄金时段"等专业词汇提高质量
- 迭代测试:固定种子值(seed)进行A/B测试,逐步调整提示词
文生图提示词模板
[主体] + [细节特征] + [动作/表情] + [环境/背景] + [光照] + [视角/构图] + [艺术风格] + [质量描述] + [负面提示]通过这种结构化方法,可以显著提升生成图像的可控性和一致性,特别是在批量生成或品牌化内容创作场景中。
六、技术对比与选择
基础对比表
在实际应用中,选择合适的提示工程技术需要考虑三个核心维度:
1. 任务复杂度
- 简单查询/生成:零样本或少样本提示即可
- 需要逻辑推理:使用CoT或Self-Consistency
- 需要规划决策:采用ToT或ART
- 多步骤复杂任务:选择Prompt Chaining或多代理系统
2. 知识需求
- 模型已知领域:直接提示或少样本示例
- 需要实时/专业知识:RAG或检索系统
- 需要外部工具:ReAct或Function Calling
- 需要代码执行:PAL(程序辅助)
3. 质量与成本权衡
- 高准确性要求:Self-Consistency + Reflexion
- 快速响应优先:简单提示或缓存策略
- 成本敏感场景:避免多次调用,优化上下文长度
- 持续改进需求:APE自动优化或A/B测试
扩展技术对比矩阵
| 技术 | 复杂度 | Token成本 | 延迟 | 准确性提升 | 局限性 |
|---|---|---|---|---|---|
| Zero-shot | 低 | 低 | 低 | 基线 | 任务理解有限 |
| Few-shot | 低 | 中 | 低 | +10-30% | 示例选择影响大 |
| CoT | 中 | 中高 | 中 | +20-50% | 简单任务可能过度工程 |
| Self-Consistency | 中 | 高 | 高 | +30-60% | 需多次推理,成本高 |
| ToT | 高 | 高 | 高 | +40-70% | 仅适合需要搜索的任务 |
| RAG | 中高 | 中高 | 中 | 视检索质量 | 依赖检索系统质量 |
| ReAct | 高 | 高 | 中高 | 视工具质量 | 需要工具接口开发 |
| Reflexion | 高 | 很高 | 很高 | +50-80% | 多轮迭代,成本显著 |
注:准确性提升为相对Zero-shot的典型改善幅度,实际效果因任务而异
场景化技术选择指南
场景1:客服问答系统
- 基础方案:Few-shot + RAG(检索FAQ和知识库)
- 进阶方案:+ Function Calling(查询订单、执行操作)
- 高级方案:+ Reflexion(根据用户反馈优化回答)
场景2:数据分析助手
- 推荐组合:CoT + PAL + ReAct
- 理由:需要推理分析逻辑(CoT)→ 生成数据处理代码(PAL)→ 执行并观察结果(ReAct)
场景3:创意内容生成
- 推荐方案:Few-shot + Self-Consistency
- 理由:提供风格示例(Few-shot)→ 生成多个版本供选择(Self-Consistency)
场景4:专业文档撰写
- 推荐组合:RAG + CoT + Prompt Chaining
- 理由:检索专业资料(RAG)→ 结构化推理(CoT)→ 分步完成大纲、内容、校对(Chaining)
场景5:代码调试与优化
- 推荐组合:PAL + Reflexion + Few-shot
- 理由:生成修复代码(PAL)→ 测试并反思(Reflexion)→ 参考已知修复模式(Few-shot)
技术组合的协同效应
某些技术组合会产生1+1>2的效果:
黄金组合:
- CoT + Self-Consistency:推理 + 多路径验证,适合高风险决策
- RAG + ReAct:知识检索 + 工具使用,适合需要实时信息和执行能力的智能体
- Few-shot + CoT:示例学习 + 推理展示,适合新型任务快速上手
互补组合:
- Prompt Chaining + RAG:每个子任务检索不同知识,避免上下文过载
- Reflexion + PAL:代码生成后自动测试和调试
- ToT + Function Calling:在决策树的每个节点可以调用工具获取信息
常见选择误区
❌误区1:默认使用最复杂的技术
- 简单任务用Zero-shot或Few-shot往往更高效,过度工程会增加不必要的成本和延迟
❌误区2:忽视迭代优化
- 从简单方案开始,通过A/B测试逐步引入复杂技术,而不是一开始就构建复杂系统
❌误区3:只关注准确性,忽视成本
- Self-Consistency和Reflexion能显著提升质量,但token消耗可能是基础方案的5-10倍
❌误区4:技术堆叠而非有机组合
- 盲目组合多种技术可能导致提示词冗余和性能下降,需要精心设计接口
实践建议
起步阶段:
- 用Zero-shot验证任务可行性
- 添加3-5个Few-shot示例观察提升
- 如果涉及推理,尝试加入"让我们一步步思考"
优化阶段:
- 识别失败案例的模式(是否缺知识?推理错误?格式问题?)
- 针对性引入RAG(缺知识)、CoT(推理弱)、结构化输出(格式问题)
- 建立评估基准,量化改进效果
生产阶段:
- 监控关键指标:准确率、延迟、成本、用户满意度
- 建立提示词版本管理和回滚机制
- 持续收集边界案例,迭代优化提示词库
七、未来展望
提示工程正在向更智能、更自动化的方向发展:
- 自动提示词生成与优化
- 多智能体协作系统
- 个性化提示词适配
- 跨模态提示工程
随着模型能力的增强,提示工程的重点将从"如何让模型理解"转向"如何让模型更好地协作和创造价值"。
参考资源:
*提示工程指南 *
Google AI Gemini 提示设计策略