03
Prompt Engineering
Prompt Engineering 是 AI 工程师的核心技能。好的 Prompt 能让输出质量提升数倍,并降低迭代成本。
1) Prompt 基本结构(推荐模板)
[角色/风格] 你是一名...
[任务] 帮我完成...
[输入约束] 输入格式/语言/领域
[输出格式] JSON/Markdown/表格;字段定义
[边界] 不知道时要说不知道;不要编造引用
[示例] 可选 few-shot 示例
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 版本号与样本输出截图,方便回溯。
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) 实践练习
- 写一个“需求澄清 Prompt”:输入模糊需求,输出澄清问题列表(JSON)。
- 写一个“代码审查 Prompt”:输入代码+报错,输出复现步骤、原因推测、补丁建议。
- 写一个“引用型问答 Prompt”:给上下文(带编号),回答时需标注引用编号。