面试知识库
进阶

Prompt工程最佳实践#

一句话答案#

Prompt 设计核心:角色设定 + 清晰指令 + 示例(Few-shot)+ 思维链(CoT)+ 结构化输出约束。

核心要点

Prompt 在 LLM 四阶段中的位置: 预训练(学语言)→ SFT(学指令)→ RLHF/DPO(学对齐)→ Prompt 工程(引导输出,不改权重,零成本迭代)

五大核心技巧:

技巧作用示例
角色设定约束输出风格和知识范围你是一位资深Java架构师...
清晰指令明确 Do/Don’t + 输出格式请用JSON格式返回,包含name和reason字段
Few-shot 示例通过输入输出样本示范模式给 3 组 Q&A 示例
思维链(CoT)分步推理提升复杂任务准确率请分步分析这个问题
结构化输出约束强制返回可解析格式JSON Schema / Markdown 表格

高级推理模式对比:

模式原理适用场景
Zero-shot直接提问,无示例简单明确任务
Few-shot提供 2-5 个示例格式/风格约束
CoT”分步推理”数学、逻辑、多步分析
ReActThought→Action→Observation 循环Agent 工具调用
ToT(Tree-of-Thought)多路径并行推理,自评选优创意探索、规划

常见反模式:

  • 指令冲突:System Prompt 和 User Prompt 要求矛盾
  • 过长 System Prompt:超过 2000 token 时注意力稀释严重
  • 缺少负面约束:只说”要做什么”不说”不要做什么”,模型容易越界
  • Few-shot 顺序敏感:最后一个示例对输出影响最大,要精心排列
面试回答(2分钟版)

Prompt工程要放在LLM整个训练流程中理解。模型先经过预训练在海量语料上学习语言能力,然后通过SFT有监督微调学会遵循指令,再用RLHF强化学习对齐人类价值观,最后到我们使用时的Prompt工程阶段——不修改模型权重,通过设计输入来引导输出。Prompt设计的核心技巧可以总结为五步:第一是角色设定,给模型一个专家身份来约束输出风格和范围;第二是清晰指令,明确告诉模型要做什么、不做什么、输出格式是什么;第三是Few-shot示例,给几个输入输出样本让模型理解期望模式;第四是思维链CoT,让模型分步推理而不是直接给答案,显著提升复杂任务的准确率;第五是结构化输出约束,要求返回JSON或特定格式方便下游解析。在实际项目中,好的Prompt工程能让同一个模型的表现提升非常大,而且迭代成本极低。我们还会用ReAct模式让模型在推理和行动之间交替,实现更复杂的多步骤任务。

追问与易错

追问方向:

  • CoT 和 Few-shot 什么时候组合用?什么时候只用其中一个? → 复杂推理 + 格式约束时组合用(Few-shot 示范格式 + CoT 引导推理)。简单任务只需 Few-shot,纯推理任务只需 CoT
  • 结构化输出不稳定(模型偶尔不按格式返回)怎么办? → 三层防御:Prompt 中给 JSON Schema 示例 + 设 response_format=json_object + 代码层做解析容错(正则提取/重试)
  • Prompt 太长 token 成本高怎么优化? → 精简 System Prompt(去冗余指令)、上下文压缩(摘要替代原文)、渐进式披露(按需加载工具描述)。通常可减 30-50% input token
  • ReAct 和纯 CoT 在 Agent 场景的区别? → CoT 是”想完再说”(一次性输出推理链),ReAct 是”边想边做”(思考→调工具→看结果→再思考),Agent 场景需要 ReAct 因为要和外部交互

易错点:

  • ❌ “Prompt 越长越好” → 过长导致注意力稀释,关键信息被忽略(lost in middle)
  • ❌ “CoT 对所有任务都有效” → 简单任务用 CoT 反而降低效率、增加成本
  • ❌ “Few-shot 示例越多越好” → 通常 3-5 个足够,过多占用 token 且边际收益递减