全书阅读:https://github.com/xiaer-ai42/infinite_archives/blob/main/books/Advanced_Prompting.md
提示工程进阶:思维链与结构化提示
书籍大纲
第一章:提示工程基础与演进
- 1.1 从命令到对话:交互范式的转变
- 1.2 提示工程的核心原则
- 1.3 Zero-shot与Few-shot学习
- 1.4 提示模板设计模式
- 1.5 常见陷阱与避坑指南
- 1.6 提示工程的理论基础
第二章:思维链推理(Chain-of-Thought)
- 2.1 思维链的发现与原理
- 2.2 标准思维链与自洽性思维链
- 2.3 零样本思维链(Zero-shot CoT)
- 2.4 思维链的适用场景与局限
- 2.5 思维链的变体:Least-to-Most、Decomposed
- 2.6 思维链的数学基础与理论解释
第三章:高级推理技术
- 3.1 思维树(Tree of Thoughts)
- 3.2 思维图(Graph of Thoughts)
- 3.3 自我反思与自评估
- 3.4 ReAct:推理与行动的结合
- 3.5 自我一致性(Self-Consistency)
- 3.6 多路径推理与集成
第四章:结构化提示设计
- 4.1 结构化提示的优势
- 4.2 角色设定与人设提示
- 4.3 任务分解与步骤化
- 4.4 输出格式控制
- 4.5 上下文窗口优化
- 4.6 模板化与参数化提示
第五章:多轮对话与上下文管理
- 5.1 对话历史管理策略
- 5.2 长对话的压缩与摘要
- 5.3 动态上下文选择
- 5.4 对话状态追踪
- 5.5 多任务对话架构
- 5.6 实战:构建智能对话系统
第六章:工具调用与外部知识
- 6.1 Function Calling原理
- 6.2 工具描述与接口设计
- 6.3 多工具编排策略
- 6.4 检索增强生成(RAG)
- 6.5 知识注入与提示融合
- 6.6 实战:构建工具使用型Agent
第七章:提示优化与自动化
- 7.1 自动提示优化(APO)
- 7.2 基于梯度的提示优化
- 7.3 提示压缩与蒸馏
- 7.4 A/B测试与迭代优化
- 7.5 提示版本管理
- 7.6 提示评估框架
第八章:行业应用与最佳实践
- 8.1 代码生成与编程辅助
- 8.2 数据分析与洞察提取
- 8.3 内容创作与营销文案
- 8.4 教育与个性化学习
- 8.5 企业知识管理与问答
- 8.6 提示工程的未来趋势

第一章:提示工程基础与演进
在人工智能的发展历程中,我们与机器的交互方式经历了深刻变革。从早期的命令行界面到图形用户界面,再到自然语言交互,每一次范式转变都极大地扩展了技术的可及性。大语言模型的出现标志着这一演进的最新里程碑——我们终于可以用自然语言与AI系统进行复杂、开放式的对话。然而,这种交互的效率和效果,在很大程度上取决于我们如何"提问"。这正是提示工程(Prompt Engineering)的核心所在。
1.1 从命令到对话:交互范式的转变
1.1.1 传统编程与自然语言交互
传统软件开发模式要求我们学习特定的编程语言和框架,用精确的语法规则表达我们的意图。一段代码要么编译通过并产生预期结果,要么因为语法错误而失败。这种交互方式虽然强大,但门槛较高,只有经过专业训练的人才能有效使用。
大语言模型改变了这一范式。我们不再需要学习正式的编程语言,而是可以用日常语言描述我们想要完成的任务。模型会尝试理解我们的意图,并生成相应的响应。这种交互更加自然,但同时也带来了新的挑战:
模糊性:自然语言天生具有歧义性。同一个词在不同上下文中可能有不同的含义,同一个请求可能被不同人理解为不同的意图。
隐含假设:我们往往有许多不言而喻的背景知识和期望,这些信息对AI模型来说并不总是显而易见的。
评估困难:不像编译错误那样明确,模型输出的"好"与"坏"往往是主观的、依赖上下文的。
1.1.2 提示的涌现
“提示”(Prompt)一词来源于戏剧中的"提词",指的是给演员的提示性词语。在LLM语境下,提示是我们提供给模型的输入文本,它引导模型生成我们期望的输出。
早期的语言模型(如GPT-2)主要被用作"续写"工具:给定一段文本,模型会继续写下去。但随着模型规模的扩大,研究人员发现,通过精心设计输入文本,可以让模型执行各种任务——翻译、摘要、问答、推理,甚至代码生成。这种现象被称为"上下文学习"(In-Context Learning),它意味着模型不需要更新参数,仅通过提示就能适应新任务。
1.1.3 提示工程的诞生
2020年,GPT-3的发布标志着提示工程作为一个研究方向的正式诞生。OpenAI的论文展示了通过设计不同的提示,GPT-3能够完成从数学推理到创意写作的各种任务。更重要的是,论文发现模型的能力会随着提示设计的改进而显著提升。
此后,提示工程迅速发展成为一个活跃的研究领域。研究人员提出了各种提示技术和设计模式,从业者分享了他们的实践经验,企业开始招聘专门的"提示工程师"。提示工程成为连接大模型能力与实际应用的桥梁。
1.2 提示工程的核心原则
1.2.1 清晰性原则
最基本的原则是:清晰地表达你的意图。这听起来显而易见,但在实践中却是最常见的失败原因。
问题示例:
这个提示过于模糊。什么样的AI?技术导向还是伦理讨论?多长的文章?什么风格?什么受众?
改进版本:
1.2.2 具体性原则
提供足够的细节和约束。细节不仅帮助模型理解你的需求,还能限制搜索空间,提高输出的一致性。
问题示例:
改进版本:
请帮我改进以下Python代码,重点关注: 1. 代码可读性(添加注释、改进命名) 2. 性能优化(减少不必要的循环) 3. 错误处理(添加try-except) 代码: [原始代码] 请提供改进后的完整代码,并解释主要修改点。1.2.3 上下文原则
提供必要的背景信息。模型没有你的记忆、专业知识或当前任务的上下文。你需要提供这些信息。
示例:
我正在开发一个电商网站的购物车功能(使用React + TypeScript)。 用户反馈说购物车数量更新有延迟感。 以下是相关代码: [代码] 请分析可能的原因,并提供优化建议。1.2.4 示例原则
通过示例展示你期望的输出格式。这就是"Few-shot"学习的基础。
示例:
请将以下产品描述转换为结构化的产品特性列表。 示例输入: "这款无线蓝牙耳机采用主动降噪技术,续航时间长达30小时, 支持IPX7级防水,配有Type-C快充接口。" 示例输出: - 耳机类型:无线蓝牙 - 降噪功能:主动降噪 - 续航时间:30小时 - 防水等级:IPX7 - 充电接口:Type-C快充 请处理以下输入: [你的产品描述]1.2.5 迭代原则
提示工程是一个迭代过程。第一次尝试通常不会完美,需要根据结果不断调整。
迭代策略:
1.3 Zero-shot与Few-shot学习
1.3.1 Zero-shot提示
Zero-shot提示是指不给模型提供任何任务示例,仅通过指令描述任务。这种方式依赖于模型在预训练中获得的知识。
将以下英文句子翻译成中文: "The quick brown fox jumps over the lazy dog."Zero-shot的优势:
Zero-shot的局限:
1.3.2 Few-shot提示
Few-shot提示通过提供少量示例,帮助模型理解任务的具体要求和期望的输出格式。
情感分析任务,判断评论的情感倾向(正面/负面/中性)。 评论:"这家餐厅的服务太差了,等了一个小时才上菜。" 答案:负面 评论:"产品质量很好,性价比很高,推荐购买。" 答案:正面 评论:"还行吧,没什么特别的。" 答案:中性 评论:"物流很快,包装也很仔细,但是尺码偏大。" 答案:Few-shot的优势:
Few-shot的最佳实践:
1.3.3 Zero-shot与Few-shot的选择
1.4 提示模板设计模式
1.4.1 角色设定模式
通过设定特定角色,引导模型采用相应的视角和专业风格。
你是一位资深软件架构师,拥有15年的分布式系统设计经验。 请从可扩展性、可用性、性能三个角度分析以下系统设计: [系统描述] 请给出详细分析报告,包括: 1. 当前设计的优势 2. 潜在的问题和风险 3. 改进建议角色设定的作用:
1.4.2 任务分解模式
将复杂任务分解为一系列子步骤。
请按以下步骤分析这篇文章: 步骤1:识别文章的主题和核心论点 步骤2:列出作者使用的主要论据 步骤3:评估论据的可靠性和相关性 步骤4:指出可能的逻辑谬误或弱点 步骤5:给出总体评价和改进建议 文章内容: [文章]1.4.3 输出控制模式
明确指定输出的格式、结构和风格。
请分析以下代码的时间复杂度和空间复杂度。 输出格式要求: ## 函数名 - 时间复杂度:O(?) - 空间复杂度:O(?) - 分析过程:[简要说明] 代码: [代码]1.4.4 约束设定模式
明确指出应该避免什么。
请解释什么是量子计算。 要求: - 使用非技术语言,面向普通读者 - 不要使用专业术语,或使用时给出解释 - 不要超过300字 - 不要涉及复杂的数学公式1.4.5 思维链模式
引导模型展示推理过程(将在第二章详细讨论)。
请逐步思考这个问题,展示你的推理过程: 问题:[问题描述] 请按以下格式回答: 1. 理解问题:[重述问题] 2. 分析要素:[列出关键信息] 3. 推理过程:[逐步推理] 4. 最终答案:[结论]1.5 常见陷阱与避坑指南
1.5.1 过度信任
问题:假设模型总是正确的,不进行验证。
案例:模型可能会自信地给出错误的事实、编造不存在的引用、或者提供有bug的代码。
解决方案:
1.5.2 指令冲突
问题:提示中包含相互矛盾的指令。
案例:
"简要"和"详细说明每个段落"相互矛盾。
解决方案:
1.5.3 隐含假设未表达
问题:假设模型知道只有你自己知道的背景信息。
案例:
没有说明改进的目标(性能?可读性?安全性?)。
解决方案:
1.5.4 过长或过短的提示
过长提示的问题:
过短提示的问题:
解决方案:
1.5.5 负面约束的失败
问题:告诉模型"不要做某事"往往不如告诉它"要做什么"有效。
案例:
模型可能会先想到"专业词汇"再尝试避免,反而增加了使用概率。
解决方案:
1.5.6 顺序效应
问题:提示中信息的顺序会影响模型的理解和输出。
现象:
解决方案:
1.6 提示工程的理论基础
1.6.1 为什么提示工程有效?
理解提示工程的有效性需要回顾大语言模型的训练过程:
预训练:模型在海量文本上学习预测下一个token。这个过程让模型:
提示作为条件:当我们提供提示时,我们实际上是在设定一个条件,告诉模型"在什么样的上下文中生成文本"。提示引导模型检索相关的知识,激活相应的"能力"。
上下文学习:提示中的示例作为上下文,让模型能够"在推理时学习"新的模式,而无需更新参数。
1.6.2 预训练-提示对齐
模型的能力与预训练数据相关。如果某个任务与预训练数据中的模式高度相似,zero-shot就能工作得很好。如果任务比较新颖,few-shot示例可以帮助模型"桥接"到已有的能力。
实践启示:
1.6.3 注意力机制的影响
Transformer模型的注意力机制意味着,提示中的不同部分对输出的影响不同。模型会"关注"与当前生成最相关的部分。
实践启示:
1.6.4 采样与随机性
模型输出是通过从概率分布中采样生成的。温度(temperature)参数控制随机性:
实践启示:
小结
提示工程是与大语言模型有效交互的艺术和科学。它要求我们理解模型的工作原理,掌握表达意图的技巧,并通过迭代不断优化。
本章介绍了提示工程的基础:从交互范式的演进出发展,我们了解到提示工程是如何随着大语言模型的发展而自然涌现的;核心原则——清晰性、具体性、上下文、示例和迭代——为我们设计有效提示提供了指导;Zero-shot和Few-shot是两种基本的提示策略,各有适用场景;提示模板设计模式——角色设定、任务分解、输出控制、约束设定——是实践中可复用的解决方案;常见陷阱提醒我们避免过度信任、指令冲突等问题;理论基础帮助我们理解为什么提示工程有效,从而更系统地设计提示。
在接下来的章节中,我们将深入探讨更高级的提示技术,从思维链推理到工具调用,从结构化设计到自动化优化。每一章都将建立在这些基础之上,帮助你成为真正的提示工程专家。
关键要点回顾: