【AI编程思考:第二篇】正确学习提示词工程:从“提问”到“系统控制”

第一章 引言:重新认识提示词工程

很多人第一次接触提示词工程时,会自然地把它理解为"向 AI 问一个好问题"。这种理解没有错,但远远不够。当你从构建一个简单的聊天机器人,升级到搭建一个复杂的 Agent 系统 时,提示词的角色发生了质变------它不再是用户与模型之间的"对话开场白",而是 嵌入系统内部的行为控制指令

打个比方:如果说普通对话中的提示词是"方向盘上的轻轻一转",那么 Agent 工程中的提示词就是"整辆车的自动驾驶算法"------它不仅要决定方向,还要决定速度、刹车、避障,甚至应对突发状况。理解这个区别,是正确学习提示词工程的起点。


第二章 提示词工程的核心作用:驯服概率,获得确定性

大语言模型(LLM)本质上是概率机器------它根据前文语境预测下一个最可能的词。这种"创造性"在闲聊中很迷人,但在 Agent 系统中却可能成为灾难。试想,如果你的简历分析器偶尔把"工作经验"字段输出成"工作经历",或者代码审查工具在 JSON 里混入一句注释,整个下游逻辑就会崩溃。

因此,提示词工程在 Agent 场景下的核心使命是:让 LLM 的输出变得高度可预测。这里的"可预测"不是指每次回答一模一样,而是指:

  • 输出格式严格符合预期(如有效的 JSON,遵循指定 Schema);
  • 行为边界清晰(不会越权调用工具,不会编造不存在的 API);
  • 内容忠实于给定上下文(不产生与事实冲突的"幻觉");
  • 始终运行在安全护栏内(不偏离角色设定,不回应敏感话题)。

简言之,弱提示词创造不稳定的 Agent,强提示词创造可靠的系统。你的目标不是让 AI 更"聪明",而是让 AI 更"守规矩"。


第三章 让 LLM 输出可预测的五大关键技能

要实现上述可预测性,我们需要在提示词中嵌入明确的"契约"。以下是五项核心技能,它们相互配合,共同构成 Agent 系统的稳定性基石。

3.1 结构化输出提示

这是确保机器可读性的第一道防线。你需要在提示中明确要求模型返回 JSONXMLYAML ,并给出完整的字段定义、类型和示例。例如:"请返回一个 JSON 对象,包含 name(字符串)、years(整数)和 skills(字符串数组),不得添加任何额外字段或解释文字。"

3.2 工具调用提示

当 Agent 需要调用外部工具(如查询数据库、发送邮件、执行代码)时,提示词必须清晰地约定:工具的名称、所需参数、调用条件,以及如何处理工具返回的结果。你甚至可以通过"思维链"引导模型先判断是否需要调用工具,再生成调用指令,从而避免无效或重复调用。

3.3 角色提示

给模型一个明确"人设"不仅能提升用户体验,更重要的是限制知识的来源。例如,"你是一位资深的 Java 代码审查员,只关注代码规范性和潜在 bug,不回答任何关于前端或数据库的问题。" 这样,模型的输出就被牢牢锚定在特定领域,减少了"胡说八道"的空间。

3.4 护栏实现

护栏是 Agent 的"安全气囊"。你需要在提示词中明确禁止的言论、行为和话题,并设定当遇到边界情况时的默认回复。例如:"如果用户询问如何破解软件,请统一回复'我无法提供此类帮助'。" 护栏必须写在系统指令的最前面,优先级高于其他所有指令。

3.5 上下文约束

为了避免幻觉,提示词应强制模型"只基于提供的上下文作答"。例如:"请严格根据以下文档片段回答,如果文档中没有相关信息,请直接说'未找到相关信息',不要自行编造。" 这在检索增强生成(RAG)场景中尤为重要。


第四章 掌握三类经典提示技术

除了上述系统级技能,你还需要熟练掌握三种基础的提示范式。它们不是互相排斥的,而是在不同复杂度场景下的"工具箱"。
#mermaid-svg-bpowBHCYKlSZIyXt{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-bpowBHCYKlSZIyXt .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-bpowBHCYKlSZIyXt .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-bpowBHCYKlSZIyXt .error-icon{fill:#552222;}#mermaid-svg-bpowBHCYKlSZIyXt .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-bpowBHCYKlSZIyXt .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-bpowBHCYKlSZIyXt .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-bpowBHCYKlSZIyXt .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-bpowBHCYKlSZIyXt .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-bpowBHCYKlSZIyXt .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-bpowBHCYKlSZIyXt .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-bpowBHCYKlSZIyXt .marker{fill:#333333;stroke:#333333;}#mermaid-svg-bpowBHCYKlSZIyXt .marker.cross{stroke:#333333;}#mermaid-svg-bpowBHCYKlSZIyXt svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-bpowBHCYKlSZIyXt p{margin:0;}#mermaid-svg-bpowBHCYKlSZIyXt .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-bpowBHCYKlSZIyXt .cluster-label text{fill:#333;}#mermaid-svg-bpowBHCYKlSZIyXt .cluster-label span{color:#333;}#mermaid-svg-bpowBHCYKlSZIyXt .cluster-label span p{background-color:transparent;}#mermaid-svg-bpowBHCYKlSZIyXt .label text,#mermaid-svg-bpowBHCYKlSZIyXt span{fill:#333;color:#333;}#mermaid-svg-bpowBHCYKlSZIyXt .node rect,#mermaid-svg-bpowBHCYKlSZIyXt .node circle,#mermaid-svg-bpowBHCYKlSZIyXt .node ellipse,#mermaid-svg-bpowBHCYKlSZIyXt .node polygon,#mermaid-svg-bpowBHCYKlSZIyXt .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-bpowBHCYKlSZIyXt .rough-node .label text,#mermaid-svg-bpowBHCYKlSZIyXt .node .label text,#mermaid-svg-bpowBHCYKlSZIyXt .image-shape .label,#mermaid-svg-bpowBHCYKlSZIyXt .icon-shape .label{text-anchor:middle;}#mermaid-svg-bpowBHCYKlSZIyXt .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-bpowBHCYKlSZIyXt .rough-node .label,#mermaid-svg-bpowBHCYKlSZIyXt .node .label,#mermaid-svg-bpowBHCYKlSZIyXt .image-shape .label,#mermaid-svg-bpowBHCYKlSZIyXt .icon-shape .label{text-align:center;}#mermaid-svg-bpowBHCYKlSZIyXt .node.clickable{cursor:pointer;}#mermaid-svg-bpowBHCYKlSZIyXt .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-bpowBHCYKlSZIyXt .arrowheadPath{fill:#333333;}#mermaid-svg-bpowBHCYKlSZIyXt .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-bpowBHCYKlSZIyXt .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-bpowBHCYKlSZIyXt .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-bpowBHCYKlSZIyXt .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-bpowBHCYKlSZIyXt .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-bpowBHCYKlSZIyXt .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-bpowBHCYKlSZIyXt .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-bpowBHCYKlSZIyXt .cluster text{fill:#333;}#mermaid-svg-bpowBHCYKlSZIyXt .cluster span{color:#333;}#mermaid-svg-bpowBHCYKlSZIyXt div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-bpowBHCYKlSZIyXt .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-bpowBHCYKlSZIyXt rect.text{fill:none;stroke-width:0;}#mermaid-svg-bpowBHCYKlSZIyXt .icon-shape,#mermaid-svg-bpowBHCYKlSZIyXt .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-bpowBHCYKlSZIyXt .icon-shape p,#mermaid-svg-bpowBHCYKlSZIyXt .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-bpowBHCYKlSZIyXt .icon-shape .label rect,#mermaid-svg-bpowBHCYKlSZIyXt .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-bpowBHCYKlSZIyXt .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-bpowBHCYKlSZIyXt .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-bpowBHCYKlSZIyXt :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 直接指令
提供示例
引导逐步推理
零样本

Zero-shot
模型直接推理
少样本

Few-shot
思维链

Chain-of-Thought
更准确、更可控的输出

4.1 零样本提示(Zero-shot)

这是最基础的用法------不给任何示例,只给清晰的任务描述。适用于模型已经熟悉的任务(如翻译、摘要、情感分类)。关键在于指令要"具体而明确",避免歧义。

4.2 少样本提示(Few-shot)

在提示中提供 2~5 个输入-输出示例,让模型"照葫芦画瓢"。这对于格式要求严格、输出风格固定的任务非常有效(如生成结构化简历摘要、分类客户反馈)。示例的选择要覆盖边缘情况,且标签必须准确无误。

4.3 思维链提示(Chain-of-Thought)

当任务需要多步推理(如数学应用题、逻辑推理、代码调试)时,引导模型在最终答案前输出推理步骤。你可以用"请逐步思考"或给出带推理过程的示例来触发。思维链能显著提高复杂任务的准确率,并且让错误可追溯。在 Agent 场景中,它还能帮助我们理解模型"为何"调用某个工具,增强可解释性。


第五章 在实战项目中打磨技能

理论知识只有通过项目才能内化为能力。我建议你按难度递进,构建以下四个典型 Agent 应用,每个项目侧重点不同,共同覆盖所有核心技能。
#mermaid-svg-UWJjaxNlW20KgXW3{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-UWJjaxNlW20KgXW3 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-UWJjaxNlW20KgXW3 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-UWJjaxNlW20KgXW3 .error-icon{fill:#552222;}#mermaid-svg-UWJjaxNlW20KgXW3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-UWJjaxNlW20KgXW3 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-UWJjaxNlW20KgXW3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-UWJjaxNlW20KgXW3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-UWJjaxNlW20KgXW3 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-UWJjaxNlW20KgXW3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-UWJjaxNlW20KgXW3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-UWJjaxNlW20KgXW3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-UWJjaxNlW20KgXW3 .marker.cross{stroke:#333333;}#mermaid-svg-UWJjaxNlW20KgXW3 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-UWJjaxNlW20KgXW3 p{margin:0;}#mermaid-svg-UWJjaxNlW20KgXW3 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-UWJjaxNlW20KgXW3 .cluster-label text{fill:#333;}#mermaid-svg-UWJjaxNlW20KgXW3 .cluster-label span{color:#333;}#mermaid-svg-UWJjaxNlW20KgXW3 .cluster-label span p{background-color:transparent;}#mermaid-svg-UWJjaxNlW20KgXW3 .label text,#mermaid-svg-UWJjaxNlW20KgXW3 span{fill:#333;color:#333;}#mermaid-svg-UWJjaxNlW20KgXW3 .node rect,#mermaid-svg-UWJjaxNlW20KgXW3 .node circle,#mermaid-svg-UWJjaxNlW20KgXW3 .node ellipse,#mermaid-svg-UWJjaxNlW20KgXW3 .node polygon,#mermaid-svg-UWJjaxNlW20KgXW3 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-UWJjaxNlW20KgXW3 .rough-node .label text,#mermaid-svg-UWJjaxNlW20KgXW3 .node .label text,#mermaid-svg-UWJjaxNlW20KgXW3 .image-shape .label,#mermaid-svg-UWJjaxNlW20KgXW3 .icon-shape .label{text-anchor:middle;}#mermaid-svg-UWJjaxNlW20KgXW3 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-UWJjaxNlW20KgXW3 .rough-node .label,#mermaid-svg-UWJjaxNlW20KgXW3 .node .label,#mermaid-svg-UWJjaxNlW20KgXW3 .image-shape .label,#mermaid-svg-UWJjaxNlW20KgXW3 .icon-shape .label{text-align:center;}#mermaid-svg-UWJjaxNlW20KgXW3 .node.clickable{cursor:pointer;}#mermaid-svg-UWJjaxNlW20KgXW3 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-UWJjaxNlW20KgXW3 .arrowheadPath{fill:#333333;}#mermaid-svg-UWJjaxNlW20KgXW3 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-UWJjaxNlW20KgXW3 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-UWJjaxNlW20KgXW3 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UWJjaxNlW20KgXW3 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-UWJjaxNlW20KgXW3 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UWJjaxNlW20KgXW3 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-UWJjaxNlW20KgXW3 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-UWJjaxNlW20KgXW3 .cluster text{fill:#333;}#mermaid-svg-UWJjaxNlW20KgXW3 .cluster span{color:#333;}#mermaid-svg-UWJjaxNlW20KgXW3 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-UWJjaxNlW20KgXW3 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-UWJjaxNlW20KgXW3 rect.text{fill:none;stroke-width:0;}#mermaid-svg-UWJjaxNlW20KgXW3 .icon-shape,#mermaid-svg-UWJjaxNlW20KgXW3 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UWJjaxNlW20KgXW3 .icon-shape p,#mermaid-svg-UWJjaxNlW20KgXW3 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-UWJjaxNlW20KgXW3 .icon-shape .label rect,#mermaid-svg-UWJjaxNlW20KgXW3 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UWJjaxNlW20KgXW3 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-UWJjaxNlW20KgXW3 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-UWJjaxNlW20KgXW3 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 练习
练习
练习
练习
聊天机器人
角色提示 + 护栏
简历分析器
结构化输出 + 上下文约束
代码审查工具
工具调用 + 思维链
研究助手
少样本 + 防幻觉 + 多步推理
综合掌握所有提示技能

  • 聊天机器人 :重点练习角色提示护栏实现。设置一个具有特定人格、知识范围和边界的客服或陪伴机器人,测试它在各种越狱问题下的稳定性。
  • 简历分析器 :输入一份纯文本简历,要求模型输出固定 JSON Schema(包含姓名、教育经历、工作经历、技能标签等)。重点打磨结构化输出提示,并强制模型只基于简历内容提取,杜绝幻觉。
  • 代码审查工具 :给定一段代码,让模型先分析潜在问题(思维链),然后决定是否需要调用"静态分析工具"(模拟工具调用),最后返回格式化报告。这里你同时锻炼了工具调用提示思维链
  • 研究助手 :给定一批文档,让模型根据用户问题生成摘要、关键点对比,甚至推论。需要大量使用少样本示例 来规范回答风格,并用上下文约束确保所有结论都有出处。

每完成一个项目,回头检查你的提示词是否足够"鲁棒"------即改动提问方式或增加干扰信息后,模型仍能稳定输出预期结果。


第六章 总结:从"工程师"到"系统架构师"

提示词工程不是一门"玄学",而是一套可学、可练、可度量的工程实践。它的进阶之路,本质上是从"如何让 AI 回答得好"转向"如何让 AI 在系统中安全、准确、服从地运行"。

回顾一下你的学习路径:

  1. 观念转变------提示词是系统指令,不是对话开场白;
  2. 掌握五个技能------结构化输出、工具调用、角色设定、护栏、上下文约束;
  3. 灵活运用三种范式------零样本、少样本、思维链,因任务制宜;
  4. 投身四个实战项目------在真实场景中检验和迭代。

当你能够为任何一个 Agent 任务编写出清晰、完备、防失误的系统提示词时,你就已经不再仅仅是"提示词工程师",而是具备了 Agent 系统架构师 的思维。而这一切的起点,就是此刻------带着对"可预测性"的执着。