Prompt Engineering(提示词工程)实施总结


Prompt Engineering(提示词工程)实施总结

Prompt简介

定义:输入给LLM的指令性文本
本质:指令性文本,利用显式指令和隐性约束,通过语义编码触发LLM内部的Transformer层,进行注意力机制计算,进而将人类意图转化为模型可理解的概率分布空间。
特性:
  LLM敏感性:LLM对输入提示词极其敏感,细节不同,结果不同。
  LLM性能提升:改进提示词的设计,可以显著提高LLM完成任务的准确性,进而显著缩短AI生成内容的迭代周期。
意义:明确、具体的提示能显著提高模型输出和期望的契合度。

基本Prompt结构

基本Prompt要素构成:指令、上下文(背景)、输入数据、输出格式
  指令(必须):模型执行的特定任务或者指令,告诉模型应如何响应。
  上下文(背景,非必须):涉及参考的和任务相关的外部信息或者额外内容的上下文,用于引导LLM产生最佳回复,理解需求。
  输入数据(必须):提出的希望得到回复的输入或者问题,应清晰完整来确保模型生成满意结果,注意输入长度和类型。
  输出格式(非必须):要求或期望输出的内容所满足的格式、类型和结构。

Prompt类型

System Prompt(系统提示词)

定义:先预设背景角色、风格或者规则,然后由用户提出具体请求,模型按照所设角色身份特点回答问题。利用聊天模型的系统消息或者在提升中明确指定模型角色的Prompt方式。系统+用户组合提示,即角色扮演
应用场景:需要特定身份和专业领域知识场景。例如编程助手,智能问数助手等。
应用效果:角色提醒可以提升LLM的性能和准确性,并改善LLM的任务边界遵守,可持续用户的整个对话周期。

User Prompt(用户提示词)

定义:为了获取AI的具体回答或者完成特定任务,由用户输入的问题、请求和命令。
User Prompt(用户提示词)类型(按照提示方式分类):
陈述型提示(命令Prompt)
定义:用陈述句或者命令式语句直接告诉模型执行某项任务、清晰描述期望输出的Prompt方式。
应用场景:定义明确、无歧义性、可有一定的结果预期的场景。
应用效果:适合模型直接产出所需结果,例如纪要总结、翻译等。
问答型提示(询问Prompt)
定义:用提问句或者疑问式语句向模型提问,不断尝试获取答案的Prompt方式。
应用场景:模拟问答、解释说明、咨询建议等场景。
应用效果:一句话的问题让模型直接回答要点。可以直接模拟问答场景,适合检索事实或者获取解释。

Chain-of-Thought(思维链提示, CoT)

定义:引导模型展示逐步推理过程的Prompt方式。例如加入“让我们一步一步思考”指令(零样本CoT),或者包含推理过程示例来实现(少样本CoT)
应用场景:数据解题过程呈现,逻辑推理过程呈现。
应用效果:适合需要复杂推理、逐步分析的任务或问题。由于模型会展示每一步,这样就容易理解模型为什么会得出这个结论,进而判断这个结论是否满足准确性和可解释性的要求。保留思考过程对于优化Prompt设计至关重要。
局限性:这对模型规模有要求,小模型输出的推理链往往不可靠,反而准确性下降,也增加了输出内容对提示微调的敏感度。
思维链提示类型(按样本分类):
零样本提示(zero-shot prompting)
定义:在不提供示例的情况下,仅通过指令或者问题来让模型完成任务。优点是无许训练,快速验证效果,缺点就是受模型影响比较大,复杂任务的效果差。
单样本提示(one-shot prompting)
定义:提供一个示例(输入-输出对),让模型根据这个示例来类比处理新输入。优点是简单任务效果提升明显,缺点是可能会过拟合,示例质量对结果影响大。
少样本提示(few-shot prompting)
定义:提供多个示例(2-5对)展示任务的输入输出模式,让模型根据这个模式来类比处理新任务,归纳任务规律。优点是应对复杂任务泛化能力强,其在数学等推理任务上,相比零样本提示,能显著提升LLM的能力。缺点是对示例数量、质量要求比较高,消耗更多的token,成本比较高。
few-shot prompting格式化形式样例:

1
2
3
4
5
6
7
8
9
10
11
Q: <Question>?
A: <Answer>

Q: <Question>?
A: <Answer>

Q: <Question>?
A: <Answer>

Q: <Question>?
A:

Prompt构建技巧(以DeepSeek-R1为例)

高质量提示词设计原则

澄清意图,指令清晰具体,毫不猜测(避免含糊不清):使用明确、清晰、精准、不歧义的语言描述需求、意图,从而让LLM毫不猜测理解任务,错判意图。
  技巧:对于明确性任务,可以设置字段名、表名、格式等,避免格式错乱。或者加入具体细节或限制性条件;提示词避免过于宽泛含糊或者措辞模棱两可,也不宜太过繁琐复杂。
明确任务和预期输出:清楚地定义LLM要完成的任务,并指出期望的回答答复形式或者风格。
  技巧:提示中指明期望的输出格式或者评价标准。
给足信息、必要背景、数据或上下文信息:提示词中的背景信息会影响回复内容,原因在于LLM对最靠近的上下文信息非常敏感,所以要提供供任务完成所必须的背景、数据等细致详尽信息。可以先提出问题,再补充要求,最后在限定输出。
  技巧:在提示词中补充必须信息,相关信息要全,不相关的信息一律不准出现。可以不添加额外的系统提示,所有指令可以直接都包含在用户提示中。对于少样本提示,应该避免提供示例,否则可能降低模型性能。只需要详细描述希望LLM解决的问题、执行的任务和输出格式。若必须使用,需要确保示例和任务高度一致。
必要约束信息:在提示词中设置LLM一定边界,使得LLM聚焦输出内容,避免无关信息,在对回复内容有严格格式的场景更适用。
  技巧:可就场景做示例举例,进而使任务的内容、要求更加明确,启发LLM正确思考,并实现限定输出形式。
提示词结构清晰,避免一次堆叠过多指令内容:可分为角色扮演、条件指令、任务拆解、格式提示、结构化标记和示例。避免一次任务要求LLM同时完成多项任务或者设置多重限制约束条件。
  技巧:
  1. 角色扮演:指定角色,首先赋予LLM特定语境、立场、角色,有助于LLM更精确地理解任务,要求回答的内容风格要专业一致,这会影响LLM回答的专业度和口吻。例如,现在,你是*角色,正在做*事+对角色的要求。
  2. 条件指令:一般是在交互式场景下的简单明了问题,可用户提示词方式提问。
  3. 任务拆解(分步指引):复杂逻辑分析是LLM的短板,可以将复杂任务或推理计算,按照分步思考、逐步推理的方式,将多个子任务拆解执行。分步完成替代一次完成,多次对话交互完成复杂任务细化。对于必要分支设置简化逻辑,预判岔路,预判岔路并指定处理方式,利用添加的细节描述,进而使任务要求明确。
  4. 格式提示:设置期望的输出格式,例如常用的JSON、Markdown等,可以使用占位符或者示例格式。
  5. 结构化标记和示例:利用分割符等标志,区分各种提示模块内容;利用指令/上下文/示例/输入/输出等设置醒目提示标签。明确输出的特征和质量。

DeepSeek-R1的API调用

DeepSeek-R1的API调用
  官方API调用平台:https://platform.deepseek.com/api_keys
  DeepSeek API文档:https://api-docs.deepseek.com/zh-cn/
使用注意:

  1. API key 仅在创建时可见可复制,请妥善保存。不要与他人共享API key,或将其暴露在浏览器或其他客户端代码中。为了保护帐户安全,官方可能会自动禁用发现已公开泄露的API key。
  2. DeepSeek API 使用与 OpenAI 兼容的 API 格式,可以使用 OpenAI SDK 来访问 DeepSeek API,或使用与 OpenAI API 兼容的软件。
  3. OpenAI的ChatCompletion等对话模型支持系统提示词。
  4. 调用对话API样例脚本(Python):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Please install OpenAI SDK first: `pip3 install openai`

from openai import OpenAI

client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com")

response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": "You are a helpful assistant"},
{"role": "user", "content": "Hello"},
],
stream=False
)

print(response.choices[0].message.content)

DeepSeek-R1调用方式:传统调用和Function Calling

传统调用

使用对话API中样例式样,支持系统提示词。其模型参数如下:
温度(temperature):temperature 参数默认为 1.0,用于控制输出的随机性,较低值会让回复更准确、更一致,而较高值会增加创造性和多样性。0-0.2会确保结果稳定一致,0.7及其以上获取会更加多样性。
DeepSeek建议场景设置温度如下:

场景 温度
代码生成/数学解题 0.0
数据抽取/分析 1.0
通用对话 1.3
翻译 1.3
创意类写作/诗歌创作 1.5

核采样(top_p): 核采样系数,用于控制输出的概率分布。
最大长度(max_tokens): 限制回答长度,可根据需要设置上限以避免无休止的长篇输出,降低成本(根据DeepSeek定价,每百万tokens输出12元)。
Token 用量计算:token 是模型用来表示自然语言文本的基本单位,DeepSeek计费单元,可以直观的理解为“字”或“词”;通常1个中文词语、1个英文单词、1个数字或1个符号计为1个token。一般情况下模型中token和字数的换算比例大致如下:1个英文字符 ≈ 0.3个token。1个中文字符 ≈ 0.6个token。

工具调用(Function Calling, 函数调用)

定义:通过引入外部工具或者开发者提供的函数,使大模型可以以结构化方式调用外部工具或者函数信息进行回答,从而解决大模型原本无法解决的问题。由OpenAI在chat completions的API中添加的新能力。
场景:适合于工具性提示设计场景,提升LLM在工具或函数调用、数据提取场景下的使用可靠性问题,减少自由文本解析导致的麻烦。
OpenAI的Function Calling官方文档地址:https://platform.openai.com/docs/guides/function-calling#page-top

DeepSeek-R1下Prompt特点

DeepSeek-R1擅长Prompt类型:复杂推理数学、代码调试;超长文档摘要、长对话跟踪;知识问答并解释。
DeepSeek-R1不擅长Prompt类型:格式严格输出;少样本提示学习;创意类、深度角色扮演;快速简单直白任务。
原因分析:通过对DeepSeek-R1内容指令遵循能力实现机制的分析,其MoE大规模混合专家中有专精于数据代码等专家,RL阶段的特别训练,进一步增强了在复杂推理数学方面的适应能力。其MLA多头潜变量注意力,降低显存的同时,增强了上下文长对话或文档的一次吞吐和全局一致性。

Prompt使用适配要求(以DeepSeek-R1为例)

单轮直接指令(Instruction + Context(必须) + 明确要求):以单轮问答形式工作,将上下文和指令内容合并一起,在一次用户提示中清晰给出,这样有助于LLM提取要求并简答。
明确角色并非系统提示词(角色设定 + 任务描述):在用户提示内扮演角色做风格模仿引导,利用多轮会话每次重申角色设置。这样有助于LLM朝着所需风格方式生成文本。
结构化提示:适度结构化提示词有利于解析任务内容,明确指出格式规范。
避免过度复杂和示例过载:少样本提示或者过长的提升反而有可能让LLM性能下降,需要保持指令具体而且要聚集。

Prompt模板

Prompt模板

定义:给任务设计的模板或范式,结果形式中通常包含特定的入参位置和提示词。
Prompt模板四要素:立角色、述问题、定目标、补要求。
立角色:明确按上一个专家角色。
述问题:说清楚问题、背景和实际情况。
定目标:确定输出的内容是什么,要求LLM做什么。
补要求:补充特别注意事项。
注意:20%的世界用于撰写Prompt模板,补齐模板四要素,将80%的时间(大约两周)投入到Prompt模板的调试优化过程中,。

Prompt模板设计注意事项

  1. Prompt模板化,可以从简单开始,不断迭代优化。
  2. 要求等重要内容要放到Prompt后面。
  3. 需要显示明确说明使用或者参考的经验知识。
  4. 最好让模型输出CoT的思考过程,这个在模板反复迭代设计过程中很有帮助。同时要考虑提示的长度,思考细节要相关,对结果有贡献,太多不必要的细节不一定是好的方法。
  5. Prompt的特殊格式和符合会对LLM的返回结果有影响,建议使用清晰的分隔符来分隔指令和上下文,例如“###”。
  6. 对于难以一次实现的复杂任务,可以通过拆解来实现。
  7. 设计提示时,避免说出什么不要做,而是要说出应该做什么。
  8. 学习Prompt模板可以从示例开始,可以利用官方的Prompt模板库,例如DeepSeek API文档官方提示库
  9. 针对数据任务可以特殊处理。
  10. 设置合理的参数:温度(temperature)、核采样(top_p)设置要合理,以避免输出不相关或重复的内容。
  11. 补齐短板,善加引导。引导模型重复思考,慢慢捋清思路和步骤,并自检每一步的正确性。不要急于求成。

Prompt提示词库

典型Prompt库
OpenAI官方提示词指南
ChatGPT分门别类的引导语大全
Claude 提示词工程指导文档
Nir Diamant发布的提示词工程技术库
DeepSeek API文档官方提示库

Prompt Engineering(提示词工程)流程

Prompt Engineering(提示词工程)流程

流程:评测准备、模板细化、验证调优、Prompt自动优化

  1. 评测准备:根据业务目标、场景技能和背景,设计评测指标和评测数据集,完成目标设定和评测数据准备。
    注意:
      2. 评测数据集应包含调试数据集和验证数据集,数据集内容应包括Prompt输入和预期输出。
      3. 评测数据集在数量上要保证覆盖所有子场景,按照实际业务比例分布,调试和验证数据集内容不重复。在质量上,评测数据集要保证准确,选取最新的知识内容,最好是业务的真实案例或者符合业务实际的场景情况。对业务高频使用的数据一定要纳入到数据集中。
      4. 评测指标可分为自动和人工专家评测指标,用自动化评测和人工专家评测方案获取评估结果。
      5. 评测驱动开发:业务场景分析->设计评测指标和数据集->评测任务执行->评测结果分析。评测质量决定Prompt迭代优化。
  2. 模板细化:在Prompt模板四要素基础上进一步细化分解,利用内容的不断补全提升模型效果。
    注意:
      可以通过机构化的模板构造格式清晰的Prompt,明确角色的各项对应能力和背景,并针对性的对已有内容补充完善。
  3. 验证调优:根据评测数据集的内容,可分为调试验证和评测验证。
      调试验证:重点关注生成结果的质量,可利用控制变量的方法不断迭代循环,利用得到的Badcase,借助Prompt模板调优策略对Prompt模板做优化,确保正向演进,目标是实现Prompt模板在调试数据集上综合最优。
      评测验证:利用调试验证通过后的Prompt模板,同时关注结果的质量和效率。针对评测中出现的Badcase,需要构造类似的场景的测试数据到调试数据集中,通过调试数据集验证后,再进行评测验证。评测验证过程中应该拉业务一起测试。
  4. Prompt自动优化:用AI的方法优化Prompt模板。根据APO技术(自动提示词优化),构建自动优化模块或使用平台优化能力,确定目标LLM输入调试和评测数据集,即可得到优化后的Prompt模板。

Prompt模板调优策略

  1. 添加示例。利用少样本提示(few-shot prompting)等方式,让LLM触类旁通。在Prompt模板设计中,在结构化提示中专门加入一个示例区域,示范期望的输入和输出格式。或者设置示例库,利用动态示例技术(Dynamic Few-Shot),将用户输入和示例库中的示例动态匹配,动态选择相似度最高的示例作为用户输入的参考示例,进而提升LLM回答准确率。
  2. 添加专家背景。利用专家对信息或分类的详细业务描述,给提取的字段或分类下业务定义,让LLM更好理解意图。或者在背景中添加业务总结的内部业务规则,使LLM通过Prompt模板学习内容业务规则,并在输出时遵循这个规则来思考。优点是可以解决推理错误、信息提取和分类错误、LLM幻觉问题。
  3. 添加CoT(思维链)。在Prompt模板的背景知识中添加专门的区域,明确LLM应该执行思考过程,或者在Prompt模板中添加“一步一步思考”的指令,让LLM对问题逐步思考,让LLM学会推理。优点是可以解决推理错误、LLM幻觉问题。
  4. Prompt模板拆分。将原来Prompt长模板拆分为多个Prompt短模板,各种完成部分任务,进而减少对LLM的内容输入,提升LLM单任务的准确性。优点是可以解决推理错误、信息提取和分类错误问题。
  5. 其他方法:Prompt模板添加“反复强调”内容或者对不清楚的问题回答不知道;要求模型不要做什么;在Prompt模板中将重要内容放在后面。

Prompt Engineering(提示词工程)注意事项

  1. 必须科学地构建评测集,单靠case by case来发现问题,导致问题永远也找不完,影响上线验收的标准。
  2. 选择合适的LLM,要综合考虑资源和效果。在LLM更新或者升级时不要盲目乐观,有些精心设计的Prompt,升级模型后反而有可能出现准确率下降的问题。
  3. 注重业务专家的知识和经验,Prompt Engineering(提示词工程)的实际落地过程中往往比一开始的设想更复杂。

学术界解决方案

Prompt论文及优化方案

论文 内容
[1] Does Prompt Formatting Have Any Impact on LLM Performance? 2024年Jia He等人提出,本文探讨了不同提示模板对 LLM 性能的影响。实验表明,不存在适用于所有任务和模型的通用格式,鲁棒性和模型规模相关,Prompt格式变化对模型性能有统计学上的显著影响。
[2] Rethinking Semantic Parsing for Large Language Models: Enhancing LLM Performance with Semantic Hints 2024年Kaikai An等人提出,在prompt中嵌入语义提示能够持续提升LLM在各种任务上的性能。
[3] Why Prompt Design Matters and Works: A Complexity Analysis of Prompt Search Space in LLMs 重点,2025年Xiang Zhang等人提出,Prompt工程的理论基础。本论文提供了一个理论框架,解释了为什么有些提示成功而有些提示失败。我们表明,提示充当选择器,在 CoT 推理过程中从模型的完整隐藏状态中提取与任务相关的信息。每个提示都定义了一条穿过答案空间的独特轨迹,而轨迹的选择对于任务性能和未来在空间中的导航至关重要。Prompt之所以有效,是因为它能够科学地指导模型在复杂的推理链条中,每一步都抓重点。设计最优Prompt,就需要深入理解任务的计算需求,并确保提示能够引导LLM在每一步都准确地抓住并用好解决问题所需的核心信息。GitHub地址:https://github.com/juntaic7/CoT-with-Supervision
[4] Large language models are human-level prompt engineers 2022年Yongchao Zhou等人提出,提出自动提示词工程 (Automatic Prompt Engineer,APE),用于自动生成和选择指令,能显著改善零样本提示、少样本提示和思维链下LLM的表现。GitHub地址:https://github.com/keirp/automatic_prompt_engineer
[5] Automatic Prompt Optimization with “Gradient Descent” and Beam Search 2023年Reid Pryzant等人提出,Automatic Prompt Optimization (自动提示词优化,APO),利用LLM在离散的token上做Prompt优化
[6] LARGE LANGUAGE MODELS AS OPTIMIZERS 2023年Chengrun Yang等人提出,Optimization by PROmpting (OPRO)方法,使用LLM本身做为优化器,通过不断迭代来寻找问题最佳的Prompt,GitHub地址:https://github.com/google-deepmind/opro
[7] EvoPrompt: Connecting LLMs with Evolutionary Algorithms Yields Powerful Prompt Optimizers 2023年Qingyan Guo等人提出,用于离散提示优化的全新框架 EvoPrompt, 将Prompt中离散的token视为进化算法(EA)中基因序列,通过选择、变异等手段,从而进化出最优的Prompt。GitHub地址:https://github.com/beeevita/EvoPrompt
[8] PromptAgent Strategic Planning with Language Models Enables Expert-level Prompt Optimization 2023年Xinyuan Wang等人提出,PromptAgent一种优化方法,可以自主生成与专家手动生成的提示质量相当的提示。
[9] Chain of Draft: Thinking Faster by Writing Less 2025年Silei Xu等人提出草稿链(CoD)的新范式,在 CoD 中,LLM 在解决任务时生成简洁但信息丰富的中间推理输出。通过减少冗长程度并专注于关键洞察,CoD 在准确率上达到甚至超越 CoT。GitHub地址:https://github.com/sileix/chain-of-draft
[10] Black-Box Prompt Optimization: Aligning Large Language Models without Model Training 2023年Jiale Cheng等人提出, Black-Box Prompt Optimization (黑盒提示优化,BPO),其理念是优化用户提示以适应 LLM 的输入理解,从而在不更新 LLM 参数的情况下最大限度地实现用户的意图。GitHub地址:https://github.com/thu-coai/BPO
[11] Evaluating the Effectiveness of Black-Box Prompt Optimization as the Scale of LLMs Continues to Grow 2025年Ziyu Zhou等人提出,验证不同的黑盒提示优化方法在越来越大的LLM的性能表现,发现黑盒优化方法的有效性随着模型尺寸的增加而降低。
[12] Revisiting Prompt Optimization with Large Reasoning Models—A Case Study on Event Extraction 2025年Saurabh Srivastava等人提出,在参数规模越来越大、性能越来越好的大型推理模型中,提示优化仍然可以给模型带来性能上的提升。
[13] Automatic Engineering of Long Prompts 2023年Cho-Jui Hsieh等人提出,提出新的自动长提示词工程算法,并证明该算法能有效提升准确率。
[14] What Makes Good In-Context Examples for GPT-3 重点。2021年Jiachang Liu等人提出,提出检索与测试样本语义相似的样本来构建其对应的提示词,基于检索的提示选择方法始终优于随机基准方法。
[15] Chain-of-Thought Prompting Elicits Reasoning in Large Language Models 重点。2022年Jason Wei等人提出,首次提出CoT(思维链),通过让LLM逐步推理,将复杂问题分解为多个简单子问题来逐步推理。
[16] Does Prompt Formatting Have Any Impact on LLM Performance 重点。2024年Jia He等人提出,探讨了不同提示词模板对 LLM 性能的影响。
[17] Quantifying Language Models’ Sensitivity to Spurious Features in Prompt Design or: How I learned to start worrying about prompt formatting 2023年Melanie Sclar等人提出.在少样本设置下,几种广泛使用的开源 LLM 对提示符格式的细微变化极为敏感。

参考文献

[1] 面向开发者的 Prompt 工程
[2] Prompt Engineering Guide
[3] 面向开发者的 LLM 入门课程
[4] Prompt 学习指南
[5] 提示词工程指南
[6] 面向初学者的prompt工程保姆教程
[7] 什么是 Prompt Engineering?
[8] OpenAI 官方 Prompt 工程指南
[9]Prompt Engineering 是什麼?提示工程指南:6 大關鍵原則!
[10] 提示工程与AI智能体构建指南
[11] Learning Prompt
[12] 从新手到高手:全面解析 AI 时代的「魔法咒语」——Prompt
[13] 微软提示工程技术
[14] How to write “System” Instructions for OpenAI’s GPT-4 Chat API
[15] Giving Claude a role with a system prompt
[16] Learn Prompting
[17] Strategies for Managing Prompt Sensitivity and Model Consistency
[18] DeepSeek API 文档
[19] DeepSeek-R1: Model Architecture
[20] DeepSeek提示词工程和落地场景
[21] 针对 DeepSeek R1 的提示工程指南
[22] What you need to master Prompt Engineering
[23] How to talk to AI Part 2 – Good Prompt/Bad Prompt
[24] Function Calling
[25] Google 官方提示工程 (Prompt Engineering)白皮书
[26]Dynamic few-shot examples with LangSmith datasets


文章作者: 青山生柳
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 青山生柳 !
  目录