Skip to content

Prompt工程与优化

一、基础概念

Q1: 什么是Prompt?为什么Prompt对LLM这么重要?

Prompt是给LLM的输入指令/上下文,决定了模型的输出方向和质量。由于LLM是基于统计规律的生成模型,它的行为完全由Prompt驱动——没有良好设计的Prompt,即使是最强的GPT-4也可能产出不满意的结果。

类比:

  • Prompt就像是给人的"指令"
  • 同样的问题,不同的问法得到的答案质量差异很大
  • 对LLM来说,"好问题"比"大模型"更重要

Prompt的组成部分:

┌──────────────────────────────────────────────────────┐
│                   Prompt结构                         │
├──────────────────────────────────────────────────────┤
│  1. 🎭 角色设定 (Role/Persona)                       │
│     "你是一个资深的前端架构师..."                      │
│                                                      │
│  2. 📋 任务描述 (Task)                               │
│     "请帮我优化以下React组件的性能..."                │
│                                                      │
│  3. 📚 上下文 (Context)                              │
│     "这是一个电商网站的商品列表组件,日访问量10万..."  │
│                                                      │
│  4. 📝 示例 (Examples/Few-shot)                      │
│     "输入:XXX → 输出:YYY"                           │
│                                                      │
│  5. 🎯 输出格式 (Format)                             │
│     "请输出JSON格式:{'suggestion': ...}"             │
│                                                      │
│  6. ⚙️ 约束条件 (Constraints)                        │
│     "回答不超过200字,用中文"                         │
└──────────────────────────────────────────────────────┘

Q2: Prompt的核心设计原则

原则说明示例
明确具体避免模糊描述,给出详细要求❌"优化代码" → ✅"指出3个具体性能问题并给出优化后代码"
结构化使用分隔符、列表、标签组织内容<question>...</question><context>...</context>
提供示例Few-shot比Zero-shot效果更好给2-3个输入输出示例
分步思考让模型展示推理过程(CoT)"请先分析问题,再给出方案,最后总结"
指定角色让模型扮演特定专家"你是一位有10年经验的技术面试官"
设定边界防止模型越权或产生不合适内容"如果问题超出范围,请明确说明"

Q3: Zero-shot、One-shot、Few-shot的区别

Zero-shot Learning(零样本):
  Prompt: "请将以下中文翻译成英文:我爱人工智能"
  特点:直接给任务,无示例
  适用:简单任务,模型能力强

  
One-shot Learning(单样本):
  Prompt: "翻译:
           中文:你好 → English: hello
           中文:我爱人工智能 → English: "
  特点:给1个示例
  适用:有明确输入输出格式的任务

  
Few-shot Learning(少样本):
  Prompt: "文本情感分类:
           这部电影很棒 → 正面
           体验太差了 → 负面
           质量还可以 → 中性
           服务态度不错 → "
  特点:给2-5个示例
  适用:分类、提取、格式转换等任务

经验法则:

  • 简单任务用Zero-shot
  • 需要特定格式/风格用Few-shot
  • 复杂推理任务用CoT(给推理示例)

二、Prompt进阶技巧

Q4: CoT(Chain of Thought,思维链)为什么有效?

CoT通过显式的推理步骤引导模型逐步思考,让模型有"思考时间",从而提升复杂问题的解决能力。

标准Prompt vs CoT Prompt:

❌ 标准Prompt(直接问答案):
  问题:小明有23个苹果,吃了5个,又买了12个橘子,
       然后把苹果平分给3个人,每人有几个水果?
  (模型直接输出答案,容易算错)


✅ CoT Prompt(要求分步推理):
  问题:小明有23个苹果,吃了5个,又买了12个橘子,
       然后把苹果平分给3个人,每人有几个水果?
  
  请一步步思考:
  1. 首先确定苹果数量:23 - 5 = 18个苹果
  2. 橘子不参与平分(只平分苹果)
  3. 18个苹果 ÷ 3人 = 每人6个苹果
  4. 所以每人有6个水果
  
  答案:6

CoT适用场景:

  • ⭐ 数学推理(应用题、计算)
  • ⭐ 多步决策(需要逻辑链条)
  • ⭐ 符号推理(字符串操作、代码分析)
  • ⭐ 复杂判断(多条件约束问题)

Q5: ReAct(Reasoning + Acting)模式

ReAct将推理(Reasoning)和行动(Acting)结合,让模型在推理后可以调用工具获取外部信息。

示例:用户问"2024年全球GDP排名前十的国家是哪些?"

ReAct过程:

思考(Thought):用户问的是2024年GDP排名,这是需要
            最新数据的任务,模型训练数据可能不包含
            2024年的信息,我需要调用搜索工具。

行动(Action):Search["2024 GDP ranking top 10 countries"]

观察(Observation):搜索返回2024年GDP排名数据:
  1. 美国 - $28.7万亿
  2. 中国 - $18.5万亿
  ...

思考(Thought):现在我有了最新数据,可以组织答案。

答案(Answer):根据2024年最新数据,GDP排名前十的国家是...

**ReAct是Agent的核心模式:**推理→行动→观察→循环,直到得到答案。

Q6: 提示词优化的系统性方法

方法1:角色扮演 + 结构化输出

你是一个资深的Python代码审查专家。请审查以下代码,

要求输出JSON格式:
{
  "bug_count": "<发现的bug数量>",
  "issues": [
    {
      "type": "<问题类型:bug/性能/风格>",
      "line": "<行号>",
      "description": "<问题描述>",
      "fix_suggestion": "<修复建议>"
    }
  ],
  "overall_score": "<1-10分>"
}

代码:
[这里放代码]

方法2:分步思考 + 自我审查

请分析这个系统设计方案:

步骤1:先理解需求要点(用3句话总结)
步骤2:分析架构的核心挑战(列出3个关键问题)
步骤3:提出改进建议(每个建议说明理由)
步骤4:自我审查(检查是否有遗漏,如有补充)

方案描述:
[需求描述]

方法3:对比式输出

对比 A方案 和 B方案 的优劣:

要求:
- 至少从5个维度对比
- 每个维度给出评分(1-5)
- 最后给出推荐和适用场景

A方案描述:...
B方案描述:...

Q7: 如何让模型输出格式稳定(JSON/XML)?

技巧1:提供完整JSON Schema示例

请严格按以下JSON格式输出,不要添加任何解释文字:

{
  "name": "string",
  "age": number,
  "skills": ["string", "string"],
  "is_active": boolean
}

输入:[用户描述]

技巧2:使用特殊标记分隔

# 角色
你是数据分析师

# 任务
分析以下数据并输出报告

# 数据
[数据内容]

# 输出要求(严格遵守)
- 只输出Markdown格式
- 包含:概述、关键发现、建议三部分
- 每部分不超过100字

# 开始输出

技巧3:末尾引导

...(你的Prompt)

现在,请输出JSON:
{

技巧4:使用Function Calling(推荐)

如果使用OpenAI等支持Function Calling的API,直接定义函数参数的JSON Schema,由API保证格式输出。


三、常见任务的Prompt模板

Q8: 文本摘要(Summarization)

# 角色
你是专业的内容编辑

# 任务
将以下长文本摘要为100字以内的要点

# 要求
- 保留核心信息:时间、地点、关键事件
- 语言简洁,不用修饰词
- 按重要性排序输出要点

# 原文
[长文本内容]

# 摘要输出:

Q9: 代码助手(Code Assistant)

# 角色
你是一个全栈开发工程师,精通Python和JavaScript

# 任务
审查并优化以下代码

# 检查清单
1. 语法错误
2. 性能问题(循环、IO、算法复杂度)
3. 安全漏洞(SQL注入、XSS、敏感信息)
4. 代码风格(命名、注释、结构)
5. 边界条件处理

# 代码
[代码片段]

# 输出格式
问题:[问题描述]
位置:[行号/函数名]
修复代码:[修复后的代码]

Q10: 数据提取(Information Extraction)

从以下文本中提取信息,输出JSON:

{
  "people": [{"name": "", "title": ""}],
  "organizations": [{"name": "", "type": ""}],
  "dates": [{"event": "", "date": ""}],
  "key_points": ["", ""]
}

文本:
阿里巴巴集团于2024年3月15日宣布,集团CEO张勇将...

Q11: 推理/分析任务

请分析以下问题,按步骤回答:

步骤1:理解问题核心(1句话总结)
步骤2:列出相关的关键因素
步骤3:分析每个因素的影响(正向/负向)
步骤4:给出最终结论

问题:
[复杂问题描述]

Q12: 翻译任务(中↔英)

# 角色
你是专业的中英文翻译

# 要求
- 保持原文的语气和风格
- 专业术语准确(如技术术语用行业标准)
- 长句子适当拆分,但不改变原意

# 输入
[待翻译文本]

# 翻译输出:

四、Prompt失败案例与修复

Q13: 常见Prompt错误及修复

❌ 错误示例问题✅ 修复方案
"写一篇好文章"太模糊,不知道写什么主题、多少字、什么风格"用新闻报道风格写一篇关于AI医疗应用的300字文章,包含:1个真实案例、2个技术突破、3个未来展望"
"优化代码"没有说明优化方向和输出格式"从性能、可读性、安全性三个维度优化以下Python代码,输出:1.问题分析 2.优化代码 3.优化前后对比"
"给我讲Transformer"不知道深度和重点"用200字向非技术人员解释Transformer核心原理,用日常生活类比"
"总结这篇文章"没有说明摘要长度、要点数量"总结以下文章,输出:1个核心观点 + 3个支持论据 + 2个实际应用,总字数不超过150字"

Q14: 模型产生幻觉(Hallucination)怎么办?

策略1:提供权威上下文(RAG模式)

根据以下参考资料回答问题,如果资料中没有答案,
请明确说明"参考资料中未包含该信息"。

参考资料:
[维基百科/官方文档等内容]

问题:
[用户问题]

策略2:要求引用来源

回答时请标注每个关键信息的来源编号,如[1][2]。
参考资料:
[1] 文档A第3段
[2] 文档B第5段

策略3:加入置信度评估

回答后请附带置信度评分(0-100%),
并说明不确定的部分。

策略4:"不知道"安全出口

如果你不确定答案,请直接输出"暂无明确信息",不要编造。

Q15: Prompt过长时怎么办?

策略1:摘要关键信息

  • 将长文档先让模型做100字摘要,再用摘要做推理

策略2:分块处理

  • 超长文档分成多个chunk分别处理,最后汇总结果

策略3:使用支持长上下文的模型

  • GPT-4 Turbo: 128K
  • Claude: 200K
  • Kimi: 200K

策略4:只保留核心信息

  • 分析原Prompt,删除重复、冗余信息
  • 合并同类信息,使用结构化格式

五、Prompt工程最佳实践

Q16: Prompt工程的系统方法论

┌──────────────────────────────────────────────────────┐
│              Prompt开发迭代流程                       │
│                                                      │
│  Step 1: 定义问题                                     │
│    └─ 明确输入是什么?期望输出是什么?                 │
│                                                      │
│  Step 2: 草拟初版Prompt                              │
│    └─ 按"角色+任务+上下文+输出格式"组织              │
│                                                      │
│  Step 3: 测试10+个典型案例                            │
│    └─ 简单/复杂/边界情况各测试至少3个                │
│                                                      │
│  Step 4: 收集失败案例,分析原因                        │
│    └─ 格式错误?内容错误?遗漏信息?                 │
│                                                      │
│  Step 5: 迭代优化Prompt                              │
│    └─ 补充约束/增加示例/调整指令顺序                 │
│                                                      │
│  Step 6: 固化为模板,监控生产表现                     │
│    └─ 记录Prompt版本,收集用户反馈                   │
│                                                      │
└──────────────────────────────────────────────────────┘

Q17: 测试Prompt的评估维度

评估维度检查方法指标/示例
正确性人工抽查关键案例错误率 < 5%
完整性是否包含所有期望信息要点覆盖率 > 95%
格式稳定性10次测试是否保持一致格式JSON可解析率 100%
鲁棒性对输入变化的敏感度轻微变化不应影响输出质量
性能平均响应时间Token消耗/延迟
安全性是否会泄露敏感信息、产生不当内容违规率 < 1%

Q18: Prompt版本管理

实际项目中Prompt是需要版本管理的"代码":

/prompts
  /summarization
    v1.0_basic.md
    v1.1_added_constraints.md
    v2.0_cot_prompt.md   ← 当前生产版本
    
/prompt_tests
  test_cases_summarization.json
  expected_outputs.json
  
  每次修改Prompt:
  1. 创建新版本文件,保留历史
  2. 更新测试用例
  3. 在测试集上评估,指标下降不允许上线
  4. 记录变更日志

六、实战技巧速查

Prompt工具箱

场景推荐技巧模板关键词
代码生成Few-shot + 角色设定"你是一个XX语言的专家..."
文本摘要角色+格式约束"按以下要点输出摘要..."
数据提取JSON Schema + 示例"输出格式严格为:{...}"
复杂推理CoT思维链"请一步步推理..."
Agent工具ReAct模式"思考:... 行动:... 观察:..."
风格迁移示例+约束"参考以下风格重写..."
创意生成角色+多方案"请提供3种不同方案..."
翻译角色+专业领域"你是XX领域的翻译..."

常见约束词速查

约束类型示例用词
长度约束"不超过X字/词/句"、"控制在X-Y字"
格式约束"输出JSON"、"Markdown格式"、"用列表"
风格约束"正式/口语化/技术风格"、"新闻报道风格"
受众约束"面向初学者"、"给资深工程师看"
内容约束"不要输出代码"、"只输出数据"、"不要解释"
角色约束"你是一个XX"、"以XX的口吻"

Released under the MIT License.