{T}

提示词工程

提示词工程(Prompt Engineering)是设计清晰、结构化的指令以引导大模型生成高质量输出的系统性方法。核心原则是"说人话"——用自然语言精确描述期望,辅以结构化框架约束输出格式。

核心原则

提示词设计三要素

要素说明示例
角色(Role)定义模型的身份和专业背景"你是一位资深前端架构师"
任务(Task)明确要完成的具体工作"根据需求设计组件架构"
约束(Constraint)限定输出格式、范围、风格"以 JSON 格式输出,包含组件名、props、事件"

基本书写原则

  1. 说人话:大参数模型具备理解复杂自然语言的能力,清晰表达比花哨技巧更重要
  2. 具体化:避免模糊指令,用具体描述替代抽象要求
  3. 分步骤:复杂任务拆解为有序步骤,逐步引导
  4. 给示例:通过 Few-shot 示例明确期望的输出格式和质量

结构化提示词框架

Role-Task-Result(RTR)

最基础的结构化框架,适用于大多数场景:

markdown
你是一位曾经就职于互联网头部企业的资深软件工程师和IT教育专家,
擅长用通俗易懂的语言来给初学者讲解技术概念。

根据用户的输入,整理一门入门级技术课程的大纲,要求:

1. 注重基本概念和原理,为学员打下扎实基础
2. 具有实操性,注重实用性
3. 内容不要求大而全,要循序渐进,适合初级学员掌握
4. 准备的案例简单而兼具趣味与挑战
5. 展望未来,适当介绍一些新技术和技术趋势

CRISPE 框架

适用于需要精细控制的复杂场景:

字母含义说明
CCapacity/Role模型扮演的角色和能力
RRequest具体请求内容
IInput输入数据和上下文
SStyle输出风格和语气
PPattern输出格式和结构
EException异常处理和边界条件

Chain-of-Thought(CoT)

引导模型逐步推理,显著提升复杂逻辑任务的准确率:

markdown
请一步步分析以下问题:

1. 首先,识别问题的核心约束条件
2. 然后,列出所有可能的解决方案
3. 接着,逐一评估每个方案的优缺点
4. 最后,给出最优方案及理由

问题:如何设计一个支持百万并发的实时消息推送系统?

JSON 结构化输出

通过示例约束输出格式

利用语义化的 JSON 模板引导模型输出结构化数据:

markdown
根据用户{input}要求,解释科学内容,用中文以 JSON 格式回复。

输出格式:
{
  "topic": "主题",
  "sections": [
    {
      "section": 1,
      "subtopic": "子主题",
      "explanation": "详细解释",
      "key_points": ["要点1", "要点2"]
    }
  ],
  "summary": "总结",
  "next_question": "引导下一个问题"
}

工程中的 JSON 输出配置

OpenAI 兼容 API 支持通过 response_format 参数强制 JSON 输出:

typescript
const response = await fetch(`${endpoint}/chat/completions`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    Authorization: `Bearer ${apiKey}`,
  },
  body: JSON.stringify({
    model: 'gpt-4o',
    messages: [
      {
        role: 'system',
        content: '你是一个数据提取助手,始终以 JSON 格式回复。',
      },
      { role: 'user', content: '提取这段文本中的人名和职位' },
    ],
    response_format: { type: 'json_object' },
  }),
});

强化推理的隐藏字段技巧

在 JSON 输出中增加"对后续无直接用途但能强化推理"的字段:

typescript
// 让 AI 输出 intent 字段,虽然后续模块不直接使用,
// 但强制 AI 先分析意图再生成内容,显著提升输出质量
const outputSchema = {
  intent: '用户意图分析(强化推理用)',
  querys: ['搜索关键词1', '搜索关键词2'],
  result: '最终生成内容',
};

高级技巧

Few-shot 示例

通过 2-3 个输入输出示例明确期望:

markdown
将用户评论分类为正面/负面/中性。

示例1:
输入:"这个产品太好用了,强烈推荐!"
输出:{"sentiment": "正面", "confidence": 0.95}

示例2:
输入:"一般般吧,没什么特别的。"
输出:{"sentiment": "中性", "confidence": 0.80}

现在请分类:
输入:"{{user_input}}"
输出:

系统提示词 vs 用户提示词

类型用途特点
System Prompt定义角色、规则、全局约束整个对话生效,优先级最高
User Prompt传递具体任务和数据每轮变化,携带动态信息
Assistant Prompt模型历史回复维护对话连贯性

温度与采样参数

参数范围效果适用场景
temperature0-2越高越随机/创造性创意写作(1.0+)、代码生成(0-0.3)
top_p0-1核采样概率阈值与 temperature 二选一调整
max_tokens1-N最大输出长度控制成本和响应时间
frequency_penalty-2~2降低重复长文本生成
presence_penalty-2~2鼓励新话题对话多样性

工作流中的提示词编排

在复杂 AI 工作流中,通常存在多级提示词链:

图表渲染中…

多级 Prompt 设计原则

  1. 单一职责:每个 Prompt 只完成一个明确任务
  2. 上下文传递:前一级输出作为后一级输入,通过模板变量 {{input}} 注入
  3. 角色递进:从分析师→写作者→编辑,逐步精炼
  4. 质量门控:关键节点增加自检 Prompt("检查以上内容是否满足...")

常见问题与陷阱

问题原因解决方案
输出格式不稳定提示词约束不够明确使用 response_format + 严格 JSON Schema
幻觉/编造事实模型缺乏相关知识结合 RAG 提供上下文、要求标注不确定内容
忽略部分指令提示词过长/结构混乱使用编号列表、重要指令加粗或重复
过度冗长未限定输出长度明确字数要求或段落数
角色偏移多轮对话中角色淡化在 system prompt 中强化角色,定期重申

最佳实践

  1. 版本管理:将 Prompt 作为代码管理,使用 Git 追踪变更
  2. A/B 测试:对关键 Prompt 进行对比实验,量化效果
  3. 模板化:抽取通用 Prompt 模板,通过变量注入适配不同场景
  4. 防御性设计:增加"如果无法回答,请说明原因"等兜底指令
  5. 持续迭代:根据实际输出质量持续优化 Prompt

参考资源