跳到主要内容

Prompt Engineering(提示工程)

Prompt Engineering 是设计和优化输入提示(Prompt)以引导 LLM 产生期望输出的技术。这是使用 LLM 最基础也最重要的技能。

基本结构

一个好的 Prompt 通常包含以下要素:

角色(Role):你是一个资深前端工程师
上下文(Context):我们正在开发一个 React 电商项目
任务(Task):请帮我实现购物车组件
格式(Format):使用 TypeScript,包含完整的类型定义
约束(Constraints):不要使用第三方状态管理库
示例(Examples):类似于以下结构...

核心技术

1. Zero-Shot Prompting

直接描述任务,不给示例:

将以下文本翻译成英文:
今天天气很好。

适用于简单、明确的任务。

2. Few-Shot Prompting

通过给出几个示例来引导模型理解任务模式:

将中文翻译成文言文:
输入:今天天气很好 → 输出:今日天朗气清
输入:我想回家 → 输出:吾欲归家
输入:这个东西太贵了 → 输出:

要点

  • 示例数量通常 2-5 个即可
  • 示例要有代表性,覆盖不同情况
  • 示例格式要一致

3. Chain-of-Thought(CoT,思维链)

引导模型逐步推理,而不是直接给出答案:

Q: 一个班有32个学生,男生比女生多8人,问男生女生各多少人?

A: 让我一步步思考:
1. 设女生有 x 人,则男生有 x + 8 人
2. x + (x + 8) = 32
3. 2x + 8 = 32
4. 2x = 24
5. x = 12
所以女生12人,男生20人。

变体:

  • Zero-Shot CoT:只需加"Let's think step by step"
  • Auto-CoT:自动生成推理链
  • Tree of Thought:探索多个推理路径

4. ReAct(Reasoning + Acting)

结合推理和行动,用于 Agent 场景:

Question: 梅西在哪个俱乐部?

Thought: 我需要查找梅西目前效力的俱乐部
Action: Search("梅西 当前俱乐部 2024")
Observation: 梅西目前效力于迈阿密国际
Thought: 我找到了答案
Answer: 梅西目前效力于迈阿密国际足球俱乐部。

5. Self-Consistency(自我一致性)

对同一问题多次采样,取最一致的答案:

同一问题 → LLM 生成 5 次回答 → 取出现最多的答案

适用于数学、逻辑等有确定答案的任务。

高级技巧

System Prompt 设计

你是一个专业的代码审查助手。

## 职责
- 检查代码质量、安全性和性能
- 给出具体的修改建议

## 规则
- 只关注代码问题,不要修改业务逻辑
- 按严重程度分级:🔴 严重 🟡 警告 🟢 建议
- 每个问题给出修复示例

## 输出格式
按文件分组,每个问题包含:行号、问题描述、修复建议

输出格式控制

  • JSON 模式:要求输出严格 JSON
  • Markdown 格式:表格、列表等结构化输出
  • XML 标签:用标签区分不同部分
  • 分隔符:用 ---### 分隔内容

角色扮演(Persona)

你是一个有10年经验的 Kubernetes 运维专家,
说话风格直接简洁,喜欢用类比解释复杂概念。

限制与约束

规则:
1. 只使用提供的上下文回答,不要编造信息
2. 如果不确定,明确说"我不确定"
3. 回答控制在200字以内
4. 不要使用专业术语,用通俗的语言解释

常见反模式

反模式问题改进
模糊指令"帮我优化代码""找出性能瓶颈,减少不必要的重渲染"
过度约束规则太多互相矛盾精简到核心约束
缺少示例模型不理解期望格式给 1-2 个输出示例
一次做太多质量下降拆分为多个步骤
否定指令"不要做X" 效果差改为"要做Y"

评估 Prompt 质量

  1. 一致性:相同输入多次运行,输出是否稳定
  2. 准确性:输出是否符合预期
  3. 鲁棒性:不同表述的输入是否都能正确处理
  4. 边界情况:异常输入是否能优雅处理