Prompt Engineering 进阶:从"提问"到"工程"

同样一个问题,好的 Prompt 和差的 Prompt 输出质量差距可以达到 10 倍以上。Prompt 不是"问问而已",而是一门工程学科。

一、为什么 Prompt 重要

LLM 本质是概率预测:给定上文,预测下一个最可能的 token。

  • 模糊的 Prompt = 模糊的上下文 = 模糊的输出
  • 结构化的 Prompt = 清晰的指令 = 稳定高质量的输出

二、Prompt 的五大原则

2.1 明确具体

❌ "写一篇文章" ✅ "写一篇 800 字的技术博客,主题是 Kubernetes 入门,面向后端开发者,包含 3 个代码示例,语气友好"

2.2 结构化组织

\\\`markdown

角色

你是 {role}

任务

{task}

要求

  • 要求 1
  • 要求 2

输出格式

按以下格式:
  1. ...
  1. ...

示例(可选)

输入:xxx 输出:xxx \\\`

2.3 提供上下文

\\\` 你不知道的事情:用户的产品是 XX SaaS 平台,主要客户是中小企业。 \\\`

2.4 给出示例(Few-shot)

\\\` 将以下句子翻译为英文: 示例: 输入:你好 输出:Hello

输入:今天天气真好 输出:

现在请翻译:机器学习很有趣 \\\`

2.5 指定输出格式

\\\` 请以 JSON 格式输出: { "category": "...", "tags": ["...", "..."], "summary": "..." } \\\`

三、核心技巧

3.1 角色扮演

\\\` 你是一位有 20 年经验的资深 PHP 工程师,擅长性能优化。 请帮我分析以下代码的性能瓶颈: ... \\\`

效果:AI 会调用相关"领域知识",输出更专业。

3.2 思维链(Chain of Thought)

\\\` 请一步步思考:
  1. 先分析问题
  1. 再列出每种方案的优缺点
  1. 最后给出推荐
问题:如何设计一个高并发的评论系统? \\\`

效果:AI 不会跳过推理步骤,复杂问题正确率提升 30-50%。

3.3 少样本提示(Few-shot)

\\\` 把评论分类为:好评/差评/中性

示例: 评论:这个东西真棒 → 好评 评论:太差了 → 差评 评论:还行吧 → 中性

现在分类:发货速度挺快 → \\\`

3.4 ReAct 模式

让 AI 推理 + 行动:

\\\` 回答问题时,请按以下格式:

思考:你的推理过程 行动:使用什么工具(如果有) 观察:工具返回的结果 ...

最终答案:xxx \\\`

这是 LangChain Agent 的核心思想。

3.5 自我批评

\\\` 回答后,请审视你的回答:
  1. 是否完整回答了用户问题?
  1. 是否有错误?
  1. 是否有更优的方案?
如果有,请修正。 \\\`

四、常用模板

4.1 内容创作

\\\` 你是 {角色}。

主题:{主题} 读者:{目标读者} 长度:{字数} 风格:{风格} 要求:

  • 论点 1
  • 论点 2
  • 必须包含一个案例
请撰写。 \\\`

4.2 代码生成

\\\` 你是 {语言} 专家。

任务:{任务} 输入:{输入数据} 输出格式:完整的、可运行的代码,包含注释 约束:

  • 使用 {框架}
  • 性能优化
  • 错误处理
\\\`

4.3 数据提取

\\\` 从以下文本中提取 {字段}。

文本:{文本}

输出 JSON: { "field1": "value", "field2": ["v1", "v2"] } \\\`

4.4 翻译

\\\` 将以下文本翻译为 {目标语言}。 要求:
  • 保留原文格式(Markdown、代码等)
  • 专业术语用 {领域} 习惯译法
  • 语气:{正式/随意}
文本:{text} \\\`

五、高级技术

5.1 Meta-Prompting

让 AI 帮你写 Prompt:

\\\` 我想要一个 Prompt,用于 {场景},要求:

  1. 输入是 xxx
  1. 输出是 xxx
  1. 风格要 xxx
请帮我设计这个 Prompt,并解释为什么这样设计。 \\\`

5.2 Prompt 链

复杂任务拆成多步:

\\\`python def pipeline(input): # 步骤 1: 提取关键信息 keywords = llm(f"从以下文本提取关键词:{input}") # 步骤 2: 基于关键词生成大纲 outline = llm(f"基于关键词 {keywords},生成大纲") # 步骤 3: 基于大纲写文章 article = llm(f"基于大纲 {outline},写一篇 1000 字文章") return article \\\`

每步用更小、专门的 Prompt,比一个大 Prompt 效果更好。

5.3 自一致性(Self-Consistency)

同一个问题问多次,取多数答案:

\\\`python answers = [llm(prompt) for in range(5)] final = mostcommon(answers) \\\`

适合需要确定性的场景(数学题、选择题)。

5.4 树形思考(ToT)

让 AI 探索多条思路:

\\\` 对每个方案:

  1. 评估可行性
  1. 列出优缺点
  1. 给出评分
最后选择最优方案。 \\\`

六、避坑指南

❌ 坑 1:Prompt 太长

不是越长越好。模型有注意力衰减,Prompt 超过 2000 tokens 后指令跟随能力下降。

❌ 坑 2:指令冲突

\\\` 请简洁回答,不要超过 100 字,详细说明每个步骤... \\\` 简洁 + 详细互相矛盾,AI 会困惑。

❌ 坑 3:依赖 AI 知识

\\\` 请根据官方文档说明 Laravel 11 的新特性 \\\` 如果 AI 训练数据没包含,它会编造。要提供原文。

❌ 坑 4:忽视版本

\\\` 用 Python 3.5 写代码 # 太老 \\\` 指定当前主流版本(如 Python 3.12)。

七、Prompt 优化工具

  • Promptfoo:A/B 测试 Prompt
  • LangSmith:追踪 Prompt 效果
  • Helicone:LLM 可观测性
  • Vellum:Prompt 实验室

八、实战示例

8.1 文章摘要

\\\`markdown 你是内容编辑。

任务:为以下文章写 3 个不同风格的摘要:

  1. 学术风(严谨)
  1. 营销风(吸引点击)
  1. 简洁风(一句话)
要求:
  • 每条不超过 50 字
  • 保留核心信息
文章:[粘贴文章] \\\`

8.2 代码审查

\\\`markdown 你是资深代码审查员。

请审查以下代码,重点关注:

  1. 安全漏洞(SQL 注入、XSS、CSRF)
  1. 性能问题(N+1 查询、内存泄漏)
  1. 可维护性(命名、结构、注释)
输出格式: 🔴 严重:[问题 + 修复建议] 🟡 警告:[...] 🟢 建议:[...]

代码:[粘贴代码] \\\`

8.3 SQL 生成

\\\`markdown 你是 SQL 专家,擅长 MySQL 8.0。

表结构:

  • users (id, name, email, createdat)
  • orders (id, userid, amount, status, created_at)
需求:找出 2025 年 1 月消费超过 1000 元的 VIP 客户邮箱,按消费总额降序。

要求:

  • 索引友好
  • 处理 NULL
  • LIMIT 100
\\\`

九、Prompt 的未来

  • Auto-Prompt:LLM 自动优化 Prompt(DSPy、TextGrad)
  • Multi-Modal Prompt:图像 + 文本
  • Dynamic Prompt:根据上下文动态调整
Prompt 是 AI 时代的"编程语言"。会写 Prompt,等于会编程。