logo
03

Prompt Engineering

⏱️ 45分钟

Prompt Engineering 是 AI 工程师的核心技能。好的 Prompt 能让输出质量提升数倍,并降低迭代成本。

1) Prompt 基本结构(推荐模板)

[角色/风格] 你是一名...
[任务] 帮我完成...
[输入约束] 输入格式/语言/领域
[输出格式] JSON/Markdown/表格;字段定义
[边界] 不知道时要说不知道;不要编造引用
[示例] 可选 few-shot 示例

Prompt 分层示意

2) 常见模式与示例

  • 指令与重写:改写成正式语气;压缩为 100 字摘要。
  • 分类:多标签/单标签,给定标签集合,要求只输出标签。
  • 信息提取:从文本抽取实体,定义字段名与类型。
  • 问答:基于上下文回答,未知时回复“未知”。
  • 转换:格式/语言转换(JSON ↔ Markdown)。
  • 代码:解释、改写、生成单元测试。
免费资源

精选免费资料与工具合集

课程、工具与资料一站式获取。

立即查看 →

3) 示例驱动:Few-shot / CoT / ToT

  • Few-shot:提供 2-5 个示例,输入输出格式完全一致,避免多风格。
  • Chain of Thought (CoT):要求“逐步推理”,适合复杂计算/逻辑;可限制步骤数。
  • Tree of Thoughts (ToT):让模型给出多个方案再选择,适合创意/规划;可设置评分标准。
  • Self-critique:让模型先给答案,再用 checklist 自评并修正。
  • ReAct:让模型“思考-行动-观察”循环,用于工具调用/搜索。

4) 角色与风格控制

  • 明确角色(架构师/律师/编辑),限定语气(简洁/正式/友好)。
  • 硬性边界:不得编造、不输出敏感内容,语言/长度限制。
  • 输出格式:指定“仅输出 JSON”,并给出示例。

5) 结构化输出与校验

  • JSON Mode:OpenAI response_format={"type":"json_object"};或在 prompt 中示例。
  • 校验:用 JSON schema 校验,失败时让模型“只修复结构重试”。
  • 表格:指定表头与字段含义,避免自由发挥。

6) 约束与防幻觉

  • 资料边界:说明“仅根据提供的上下文回答”,没找到则返回“未在上下文中找到”。
  • 引用要求:回答时附上片段编号/行号,便于追溯。
  • 事实检查:要求模型先列出依据,再给结论。
  • 负面指令:写明“不回答与任务无关的问题”“不虚构引用”。

7) 迭代与调试技巧

  • 缩小步长:先让模型给“思路/步骤”,再让它写最终结果。
  • A/B Prompt:对比两个提示的输出质量与 tokens 成本,选择更优。
  • 提示分层:system 负责原则;user 负责任务;assistant 负责历史。
  • 观测:记录 prompt、模型、温度、tokens,便于回放与优化。
  • 日志:保存 prompt 版本号与样本输出截图,方便回溯。

Prompt 迭代循环

8) 代码与推理专用提示

  • 先验条件:告知语言/版本/依赖/平台。
  • 生成测试:要求先给测试用例,再给实现。
  • 调试:提供报错日志,要求模型“复现步骤 + 猜测原因 + 直接给补丁”。
  • 安全网:限制修改范围(例如“仅修改函数体,不要改其他代码”)。

9) 多轮对话与状态

  • 关键约束放在 system,每轮都带;history 中只保留必要信息,避免膨胀。
  • 重设指令:当话题切换时重新声明角色与输出格式。
  • 检查粘性:偶尔让模型复述当前约束,避免漂移。
  • 线程标识:用 conversation_id 或 traceId 关联日志,便于复现。

10) 质量评估

  • 手工评估维度:相关性、完整性、事实性、格式、简洁度。
  • 自动化:准备一批样本,写检查脚本验证是否满足格式/关键词/引用。
  • 负面样例:测试“应该拒绝”的场景,防止越权输出。
  • 示例检查脚本(伪代码):
const cases = loadCases(); // {input, expectedKeys, allowCitations}
for (const c of cases) {
	const out = await callModel(c.input);
	assert(hasKeys(out, c.expectedKeys));
	if (c.allowCitations) assert(hasCitations(out));
	assert(!containsBanned(out));
}

11) 常见坑与规避

  • 提示过长:精炼上下文,避免触顶;必要时用摘要或检索。
  • 含糊需求:补充输入格式与边界条件。
  • 自由输出:必须指定格式,否则易跑题。
  • 语种混乱:明确“只用中文/英文”。

12) 实践练习

  1. 写一个“需求澄清 Prompt”:输入模糊需求,输出澄清问题列表(JSON)。
  2. 写一个“代码审查 Prompt”:输入代码+报错,输出复现步骤、原因推测、补丁建议。
  3. 写一个“引用型问答 Prompt”:给上下文(带编号),回答时需标注引用编号。