Prompting 与 Prompt Engineering 实战指南:提示设计、高级推理技术与安全防御(awesome-generative-ai-guide)

原创2026-10-03 00:49:121,952 阅读
文章标签:文档教程人工智能大模型

Prompting 与 Prompt Engineering 实战指南:提示设计、高级推理技术与安全防御(awesome-generative-ai-guide)

本指南以仓库 topics/prompting.md 话题页及其指向的核心课程文档 free_courses/Applied_LLMs_Mastery_2024/week2_prompting.md 为骨架,系统讲解如何写出有效的 Prompt、如何结构化上下文,以及从零样本到思维链、再到外部工具增强的完整提示技术谱系。读完你将掌握 Prompt 四大基本要素、八条工程最佳实践、三大类高级提示方法(CoT/ToT/GoT、CoVe/ReAct、Active Prompting/ART/CoK)、提示注入等五类安全风险及防御策略,并能对照仓库内的生产级 Agent 源码理解 System Prompt 与守卫机制的真实落地方式。

一、Prompting 与 Prompt Engineering:核心概念

在语言模型的世界里,Prompting(提示) 指为模型构造精确指令或查询、以生成期望输出的艺术与科学。它通常是用户呈现给模型的输入——一般为文本——用以唤起特定的回应。一条提示的有效性,取决于它能否引导模型理解任务并产出与用户预期一致的输出。

Prompt Engineering(提示工程) 是围绕这一目标快速成长起来的领域,其要点在于:

  • 提示工程是释放大语言模型(LLM)在各种应用中潜力的强效工具:在研究中,它能显著提升模型在问答、算术推理等任务上的表现;
  • 提示工程不仅是"写提示词",更是一组与 LLM 交互、开发 LLM 应用所必需的能力集合——涉及理解与挖掘 LLM 能力、保障安全,以及引入领域知识集成等新特性;
  • 它对于让 AI 行为与人类意图对齐至关重要。专业提示工程师钻研 AI 的复杂细节,但这项技能并非专家专属——任何人为 ChatGPT 等模型打磨提示词的人,都在从事提示工程。

提示工程概念概览图

图片来源:Zapier 的 Prompt Engineering 博客专栏(见原课程文档)。

二、为什么要精心设计 Prompt:LLM 的训练机制与五大原因

大语言模型通过无监督学习在海量多样化文本数据上训练。训练中,模型学习根据前文语境预测句子中的下一个词,从而捕获语法、事实、推理能力乃至部分常识。Prompting 正是高效使用这些模型的关键,原因如下:

  1. 上下文理解(Contextual Understanding):LLM 基于从多样文本中学到的模式理解上下文并生成回应。提示需要以模型熟悉的方式结构化,帮助模型建立相关关联、产出连贯响应。
  2. 训练数据模式(Training Data Patterns):训练中模型捕获了文本的细微语言模式。有效提示通过采用模型在训练数据中见过的相似语言与结构,使输出与习得模式保持一致。
  3. 迁移学习(Transfer Learning):LLM 运用迁移学习,将训练获得的一般知识迁移到当前任务。精心构造的提示充当桥梁,把预训练知识与用户期望的具体信息或动作连接起来。
  4. 上下文化提示换取上下文化响应(Contextual Prompts for Contextual Responses):使用与训练数据相近的语言与语境,可让模型在同构上下文中更准确地生成内容。
  5. 缓解偏见(Mitigating Bias):模型可能继承训练数据中的偏见,深思熟虑的提示可通过补充上下文或调整提问框架来鼓励中立回应,使输出符合伦理标准。

总结而言:LLM 的训练是从海量数据中学习,而提示是用户引导模型产出有用、相关且合规响应的手段——这是一个用户与模型协作达成目标的过程。同时,一个名为对抗性提示(adversarial prompting) 的领域正在兴起:它刻意构造提示以利用模型的弱点或偏见,诱使模型生成误导性、不恰当或暴露其局限的响应。保护模型免受有害响应危害,是亟待解决且活跃的研究课题。

三、Prompt 基础:四大要素与一个可复现示例

基本提示工程原则围绕针对具体任务定制的要素展开:

  1. Instruction(指令):清晰说明希望模型执行的任务或动作,设定响应语境并引导行为。
  2. Context(上下文):提供外部信息或额外语境,帮助模型更准确地理解任务。在引导模型走向期望结果时,上下文往往至关重要。
  3. Input Data(输入数据):包含需要模型处理或回答的输入/问题本身。
  4. Output Indicator(输出指示):定义期望输出的类型或格式,引导模型以符合预期的方式组织信息。

一个文本分类任务的示例提示如下:

Classify the text into neutral, negative, or positive
Text: I think the food was okay.
Sentiment:

在该示例中:

  • 指令:"Classify the text into neutral, negative, or positive."
  • 输入数据:"I think the food was okay."
  • 输出指示:"Sentiment."

注意示例未显式使用上下文,但上下文可以并入提示以提供辅助理解任务的额外信息。同时必须强调:并非四个要素每次都全部必需,格式可随任务变化。关键在于构造能有效传达用户意图、引导模型产出相关且准确响应的提示。

四、提示工程最佳实践:八条可操作准则

针对 OpenAI API 的提示工程,业界形成了一套成熟的最佳实践准则(原课程文档中归纳为以下八条):

  1. 使用最新模型(Use the Latest Model):为获得最佳效果,优先采用最新、能力最强的模型。
  2. 结构化指令(Structure Instructions):将指令放在提示开头,并使用 ### 或 """ 分隔指令与上下文,提升清晰度与有效性。
  3. 具体且描述性强(Be Specific and Descriptive):清晰阐明期望的上下文、结果、长度、格式、风格等,越具体越好。
  4. 用示例明确输出格式(Specify Output Format with Examples):通过示例表达期望的输出格式,让模型更容易理解并准确回应。
  5. 遵循 Zero-shot → Few-shot → Fine-tune 的路径:先尝试零样本(zero-shot),再尝试少样本(few-shot,提供示例);若都不奏效,再考虑微调模型。
  6. 避免空洞描述(Avoid Fluffy Descriptions):减少模糊、不精确的描述,使用清晰指令,避免无谓冗长。
  7. 给出正向引导(Provide Positive Guidance):与其声明"不要做什么",不如明确说明应采取的正面动作。
  8. 代码生成场景使用"引导词"(Leading Words):生成代码时,用"引导词"将模型导向特定模式或语言,提高代码生成准确率。

需要谨记:构造有效提示是迭代过程,往往需要试验才能找到最适合具体用例的方案。提示模式可能与具体模型及其训练方式(架构、数据集等)高度相关。

五、高级提示技术全景:三大分类体系

提示技术是快速演进的研究领域。最简单的形式是仅提供指令的零样本提示(zero-shot) 与给出示例的少样本提示(few-shot)。更精巧的技术可按高层次类别归类——以下分类基于当前技术归纳,并非穷尽或最终定义,且许多方法会横跨多个类别,兼具多种方法的优势。

高级提示方法分类图谱

A. 逐步模块化分解(Step-by-Step Modular Decomposition)

这类方法将复杂问题拆解为更小、可管理的步骤,引导 LLM 一次解决一步而非一步到位,显著增强多步推理能力。

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

CoT 通过中间推理步骤增强复杂推理能力:为 LLM 提供一系列推理步骤,引导其逐步求解。下图示例要求模型判断一组奇数之和是否为偶数,模型被引导逐步推理、在给出最终答案前先展示中间推理过程,最终正确求解。

思维链提示推理示例

图片来源:Wei et al. (2022),原课程文档所引论文。

1a. 零样本/少样本思维链(Zero-shot/Few-shot CoT)

零样本思维链只需在原始问题后追加一句"Let's think step by step",即可引导模型进入系统性推理流程;少样本思维链则提供若干相似问题的示例来增强推理。两类方法均能显著提升性能——而缺少该提示时模型常常给出错误答案。相关研究见 Kojima et al. (2022) 与 Zhang et al. (2022)。

1b. 自动思维链(Automatic Chain-of-Thought, Auto-CoT)

Auto-CoT 旨在自动化生成推理链示例,代替手工构造。其核心是用带"Let's think step by step"提示的 LLM 逐个自动生成推理链,过程分两个阶段:

  1. 问题聚类(Question Clustering):按相似度将问题划分为若干簇;
  2. 示例采样(Demonstration Sampling):从每簇选取一个代表性问题,用零样本思维链加简单启发式生成其推理链。

目标是消除手工构造多样化有效示例的成本,通过启发式方法鼓励模型生成简洁而准确的推理链。

2. 思维树提示(Tree-of-Thoughts, ToT)

ToT 扩展了思维链思路:允许语言模型以连贯文本单元("thoughts",思维)作为解决问题的中间步骤,支持模型做出审慎决策、考虑多条推理路径并自我评估选择。其关键特性包括:

  • 连贯单元("Thoughts"):以连贯文本单元作为中间推理步骤;
  • 审慎决策(Deliberate Decision-Making):有意图地做决策并评估不同推理路径;
  • 回溯与前瞻(Backtracking and Looking Ahead):推理过程中可回溯或前瞻,灵活应对复杂问题。

该方法特别适合需要全面、自适应推理能力的任务。相关研究见 Yao et al. (2023)。

3. 思维图提示(Graph-of-Thought, GoT)

人类的思维过程往往呈非线性,GoT 将思维建模为图(graph) 而非简单链,以刻画非顺序思维的复杂性。节点代表思维单元,边代表连接;与树不同,GoT 使用有向无环图(DAG),可建模分叉与汇合的路径,比传统线性方法更具优势。GoT 采用两阶段框架:先生成推理依据(rationales),再产出最终答案,通过图编码器(Graph-of-Thoughts encoder)学习表示,并以门控融合机制(gated fusion)整合图表示与原始输入。相关研究见 Yao et al. (2023)。

B. 综合推理与验证(Comprehensive Reasoning and Verification)

这类方法不满足于给出最终答案,而是生成详尽的中间步骤,并内建自我验证机制:LLM 在生成中间答案或推理轨迹时自主校验其一致性与正确性,若内部验证失败则迭代修正,使推理符合逻辑连贯性。

1. 自动提示工程师(Automatic Prompt Engineer, APE)

APE 将指令视为可编程元素,通过搜索 LLM 提出的候选指令池来优化指令:借鉴经典程序合成与人工提示工程思想,用评分函数评估候选指令的效果,选出得分最高者作为最终提示。该方法提升提示生成效率,并利用 LLM 内嵌知识改善输出质量。相关研究见 Zhou et al. (2022)。

2. 验证链(Chain of Verification, CoVe)

CoVe 专门应对 LLM 的幻觉(hallucination) 问题,引入系统性验证流程:模型先起草初始响应(可能含错误),随后规划并提出独立的验证问题,以无偏方式核实初始响应;模型回答问题后,根据验证结果生成融入修正的最终响应。CoVe 通过无偏验证显著提升最终响应的事实准确性。相关研究见 Dhuliawala et al. (2023)。

3. 自一致性(Self Consistency)

自一致性针对思维链提示中朴素贪心解码的局限:用少样本思维链采样多条多样化的推理路径,再从中识别最一致的答案。该方法提升思维链在算术与常识推理任务上的表现,通过路径多样性与一致性优先,带来更稳健、准确的响应。相关研究见 Wang et al. (2022)。

4. ReAct(推理 + 行动)

ReAct 框架在 LLM 中交错生成语言推理轨迹与任务特定动作,弥补思维链等方法"无法接触外部世界、易产生事实幻觉与错误传播"的局限。其工作原理:

  1. 动态推理与行动(Dynamic Reasoning and Acting):交错生成推理轨迹与动作,支持复杂任务中的动态推理;
  2. 与外部环境交互(Interaction with External Environments):动作步骤允许与搜索引擎、知识库等外部来源交互,收集信息并修正推理;
  3. 任务性能提升(Improved Task Performance):推理与行动集成使其在语言与决策任务上超越既有基线;
  4. 增强人类可解释性(Enhanced Human Interpretability):提升 LLM 响应的可理解性与可信度。

相关研究见 Yao et al. (2022)。

C. 使用外部工具/知识或聚合(External Tools/Knowledge or Aggregation)

这类方法借助外部来源、工具或聚合信息增强 LLM 性能,通过多响应聚合提升鲁棒性,让多样化视角与推理路径贡献更可靠、全面的答案。

1. 主动提示(Active Prompting,聚合类)

主动提示通过动态选择任务特定示例提升 LLM 对多样任务的适应性。思维链方法通常依赖固定的人工标注示例,可能不适用于所有任务。主动提示的四步流程:

  1. 动态查询(Dynamic Querying):对一组训练问题,用或不用少量思维链示例查询 LLM,生成 k 个候选答案,引入不确定性;
  2. 不确定性度量(Uncertainty Metric):基于 k 个答案的离散程度计算不确定性指标,反映模型对最合适响应的不确定程度;
  3. 选择性标注(Selective Annotation):选择不确定性最高(模型答案缺乏共识)的问题交给人标注,针对 LLM 识别出的不确定点提供新示例;
  4. 自适应学习(Adaptive Learning):将新标注示例纳入训练数据,丰富模型对特定问题的理解与适应性。

相关研究见 Diao et al. (2023)。

2. 自动多步推理与工具使用(Automatic Multi-step Reasoning and Tool-use, ART,外部工具类)

ART 将思维链提示与工具使用集成在冻结 LLM(frozen LLM)之上:从库中选取任务特定示例,让模型自动生成中间推理步骤;测试时把外部工具融入推理过程,实现对全新任务的零样本泛化。ART 可扩展,支持人工更新任务与工具库。相关研究见 Paranjape et al. (2023)。

3. 知识链(Chain-of-Knowledge, CoK)

CoK 通过动态集成来自多样化来源的接地信息(grounding information),生成更富事实性的推理依据,降低生成中的幻觉风险。其运作分三阶段:推理准备(reasoning preparation)——形成初始推理依据与答案并识别相关知识域;动态知识适配(dynamic knowledge adapting)——从识别出的知识域增量适配知识、完善依据;答案整合(answer consolidation)——为最终答案提供坚实基础。相关研究见 Li et al. (2024)。

六、提示风险与对抗:注入、泄露、越狱与偏见

提示带来多种风险,其中提示劫持(prompt hacking) 是显著威胁,它利用 LLM 的漏洞。具体风险包括:

  1. 提示注入(Prompt Injection):恶意行为者向提示注入有害或误导内容,诱导 LLM 生成不当、有偏见或虚假的输出。不可信文本被操纵后可使模型说出攻击者想要的任何内容,破坏生成内容的完整性。
  2. 提示泄露(Prompt Leaking):攻击者从 LLM 响应中提取敏感信息,造成隐私与安全担忧。修改 user_input 以尝试泄露提示本身,即一种提示泄露形式,可能暴露内部信息。
  3. 越狱(Jailbreaking):允许用户绕过安全与审核功能,生成争议性、有害或不恰当的响应。提示劫持方法(如伪装 pretend)可利用模型难以拒绝有害提示的弱点。
  4. 偏见与错误信息(Bias and Misinformation):引入偏见或误导信息的提示,可能使输出固化或放大既有偏见、传播错误信息,强化社会偏见。
  5. 安全担忧(Security Concerns):提示劫持构成更广泛的安全威胁,使攻击者能破坏 LLM 生成内容的完整性,甚至将模型用于恶意目的。基于提示的防御与持续监控等防御措施至关重要。

为应对这些风险,必须实施稳健的防御策略、定期审计模型行为、警惕提示引入的潜在漏洞,并通过持续研究与开发增强 LLM 对提示攻击的韧性、缓解生成内容中的偏见。

七、仓库源码印证:生产级 System Prompt 与注入防御实战

提示工程的原则并非纸上谈兵——本仓库的 interview_prep/system-design 案例代码将上述最佳实践与风险防御落地成了可运行的 Agent 系统,可作为直接的实战参照。

1. 结构化 System Prompt:指令放在开头、明确输出格式、给出正向引导

在 enterprise-research-assistant 的 llm.py 中,规划器与决策器的系统提示严格遵循最佳实践:指令置于开头("You plan research over internal company sources."),输出格式通过示例与约束明确("reply with EXACTLY one line in one of these forms: SEARCH: / ANSWER / ACTION: ... / ESCALATE"),并给出正向引导("Never invent facts or sources"、"Answer only from the provided context")。customer-support-agent 的 llm.py 的 _DECISION_SYSTEM 同样用单行约束 + 正反例约束模型行为——这正是"用示例明确输出格式"与"正向引导替代否定式指令"的源码级体现。

2. 零样本/少样本路径与可回退设计

两个案例的模型层都提供双重实现:无 API Key 时走确定性离线策略(等价于零样本规则引擎),有 Key 时通过 init_chat_model 接入任意提供商。llm.py 中 plan() 与 decide() 均"try model, fall back to offline"——与"先零样本、再少样本、必要时微调"的分级思路一脉相承,也印证了提示模式与具体模型训练方式相关、需要可回退机制的观点。

3. ReAct 式推理-行动循环与越狱/注入防御

enterprise-research-assistant 的 research_agent.py 的守卫节点(guardrail)直接对应"提示注入"风险:通过 _INJECTION_MARKERS(如 "ignore previous instructions"、"disregard all" 等)扫描检索文本,一旦命中注入标记即判定 FAIL 并升级给人类;同时校验答案是否 grounded(每个引用都必须来自本次检索且用户有权阅读),防止引用泄露不可读来源。customer-support-agent 的 support_agent.py 的守卫节点同样检测注入标记与接地性,并在退款等高影响请求时路由到人类升级路径——这正是第六节"安全风险与防御策略"在生产代码中的直接落地。相关案例完整文档见 enterprise-research-assistant/README.md 与 customer-support-agent/README.md。

八、常用提示工程工具一览

以下是原课程文档收录的知名提示工程工具,多为开源或免费、适应性良好(注意:可能还有其他工具,但知名度或付费情况不一):

  1. PromptAppGPT:低代码、基于提示的快速应用开发框架。支持低代码提示开发、GPT 文本与 DALLE 图像生成、在线提示编辑器/编译器/运行器、自动 UI 生成及插件扩展,目标是让基于 GPT 的自然语言应用开发门槛更低。
  2. PromptBench:基于 PyTorch 的 LLM 评估 Python 包。提供易用 API 进行快速模型性能评估,内置多种提示工程方法(少样本思维链、情感提示、专家提示),支持对抗性提示评估与动态评估以缓解测试数据污染。
  3. Prompt Engine:面向 LLM 的 NPM 工具库,用于创建与维护提示。旨在简化 GPT-3、Codex 等模型的提示工程,提供构造输入的实用工具,将提示工程模式与实践编码化。
  4. Prompts AI:高级 GPT-3 实验场,帮助用户发现 GPT-3 能力并辅助开发者针对特定用例做提示工程,面向创意写作、分类、聊天机器人等场景优化。
  5. OpenPrompt:基于 PyTorch 的提示学习库,用于将 LLM 适配到下游 NLP 任务。提供标准、灵活、可扩展的提示学习管线框架,支持从 HuggingFace Transformers 加载预训练语言模型。
  6. Promptify:LLM 提示测试套件,几行代码完成 NLP 任务,处理越界预测,输出以 Python 对象形式返回便于解析,支持自定义示例与样本,可对 HuggingFace Hub 上的模型运行推理,并优化提示以降低 OpenAI token 成本。

九、在仓库中的学习路径

本主题在仓库中按学习旅程与难度分级组织(见 README 的旅程与分级表格):

十、延伸阅读:原课程文档推荐的资源与论文

原课程文档列出的可选阅读与论文(此处仅保留主题与作者信息,便于在文献库中检索):

  • 入门读物与课程:Prompting Guide(提示指南)、aman.ai 的提示工程入门、DeepLearning.AI 的 ChatGPT 提示工程开发者课程、Learn Prompting 课程体系。
  • 进阶论文(按主题检索):CoT 综述(Wei et al., 2022)、零样本思维链(Kojima et al., 2022)、Auto-CoT(Zhang et al., 2022)、ToT(Yao et al., 2023)、GoT(Yao et al., 2023)、APE(Zhou et al., 2022)、CoVe(Dhuliawala et al., 2023)、自一致性(Wang et al., 2022)、ReAct(Yao et al., 2022)、Active Prompting(Diao et al., 2023)、ART(Paranjape et al., 2023)、CoK(Li et al., 2024)——这些论文正是第五、六节各方法的原始出处,可作为深入研究的起点。
登录后查看全文
awesome-generative-ai-guide