[提示词工程] Prompt 工程 : 如何编写高质量的 Prompt ?

0 序

没有完美的 Prompt,只有不断迭代的 Agent / Prompt。

1 概述 : Prompt 工程 : 如何编写高质量的 Prompt ?

Prompt 大纲

这是一套基于实际项目经验总结的系统化Prompt设计方法论。

  • 通用 Prompt

一个万能且好用的 Prompt 框架,应当考虑以下几点:

  • Role(角色):给 AI 定义一个最匹配任务的角色,比如:“你是一位软件工程师”、“你是一位小学老师”、“你是一位销售”。
  • Context(背景/上下文):告诉 Agent 与任务相关的其它背景信息,以便更好地理解问题。在多轮交互中,背景指对话历史;在涉及专业知识时,背景可来自 RAG 提供的数据。
  • Goal/Task(目标/任务):明确告诉 Agent 我们希望它做什么,例如生成特定类型的文本、回答问题、完成对话等。
  • Audience(受众):说明用户与 Agent 的关系或用户特征,例如“这个问题是给 10 岁小朋友听的”、“你是用户的朋友”等。
  • Style(风格):指定答案的语言风格,如正式、口语化、幽默、严谨等。同时注意 Prompt 自身的表述风格也应与模型训练数据一致。
  • Constraint(指令约束):明确禁止模型执行的行为,强化关键限制。
  • Response Format(响应格式):规定期望的回复格式,如列表、JSON 等。
  • Example(示例):提供任务样例,利用模型的短期学习能力提升输出质量。

⚠️ 注意:并非所有要素都必须使用,应根据具体任务灵活裁剪。

  • Agent Prompt

核心思想:将大模型(LLM)视为一个可独立执行任务的Agent,并为其提供一套清晰的标准作业流程(SOP)。
Prompt = 角色(Role) + 上下文(Context) + SOP(Workflow) + 边界(Boundary) + 回答约束(Constraints) + 示例(Examples)

Agent Prompt 设计的6大核心原则

  • 单一职责:一个Agent只做一件事,做好一件事。
  • 职责分离:LLM擅长创造性生成,不擅长确定性决策。
  • 显式优于隐式:状态、规则、示例都显示,明确告知优于期待模型推断。
  • 结构化优于自然语言:使用表格、列表、代码块展示规则、要求、示例。
  • 示例优于说明:边界case、输出格式都要有示例而非说明。
  • 测试驱动优化:建立测试用例集、准确率baseline,根据错误case分析优化。

Role/指定模型所扮演的角色

通过设定角色,引导模型调整内容与风格。

  • 明确专业领域:如意图识别专家、问题分类专员

  • 单一职责原则:一个Agent只做一件事,复杂流程通过多个Agent协作完成

  • 避免角色冲突:不要让同一个Agent同时扮演客服和销售等冲突角色

  • 示例对比:

    Bad:请帮我写一份能够吸引大量粉丝点赞的青岛旅游攻略。
    Good:你是一位小红书爆款文案写作大师,请帮我写一份青岛旅游攻略。

    Bad:请帮我画一幅装着光的水晶瓶,要求图像清晰、华丽、有质感。
    Good:你是一位专业的游戏原画大师,请帮我画一幅装着光的水晶瓶。

Context/上下文(背景)

  • 状态显式传递:明确告知当前流程节点、循环次数、用户资格等关键状态
  • 分层加载:只加载当前节点相关的上下文,避免Prompt过长导致注意力分散
  • 结构化呈现:使用表格、列表等结构化方式组织上下文信息

Constraint/指令约束

  • 在描述完期望行为后,可添加限制条件,明确“不希望模型做什么”。
  • 使用【强语气词】(如“必须”、“严禁”)增强约束力。
  • 每条【约束】应与【任务】高度相关,避免冗余。
  • 若约束较多,建议用【列表形式】分点列出,保持逻辑清晰、上下文连贯。
  • 过于复杂的 Prompt 可能导致模型忽略部分指令,因此应力求精炼。

Response Format/响应格式

规定期望的回复格式,如列表、JSON 等。

  • 格式刚性约束:严格定义XML/JSON结构,强调必填字段和可选字段
  • 字段语义化:使用中文描述(问题类型A)而非编号(类型1)

Style/模仿模型训练语言风格

  • 语言风格统一:明确称呼、语气、句式细节

  • 使用官方、书面、礼貌、友善的语言撰写 Prompt。

  • 语句应流畅、意图清晰、表达精简

  • 避免:

    • 语法复杂、语义模糊、逻辑混乱;
    • 歧义、语病、拼写或标点错误;
    • 否定句(优先使用正面描述)。
  • Prompt 风格: 应尽量贴近大模型的高质量训练数据(通常为正式、严谨、简洁)。

  • 例外:对于文生图模型,使用 tag 序列(如“赛博朋克, 高对比度, 4k高清”)效果优于自然语言,因其训练数据多为标签拼接

Example/给出示例

提供完整示例:给出多个完整示例,覆盖各种场景

  • 大多数优秀 Prompt 都包含任务示例,利用模型的短期学习能力(in-context learning)实现举一反三。
  • 对于抽象任务复杂任务,示例尤为重要。
  • 即使简单任务可能无需示例,但在高精度要求场景下,示例能显著提升输出一致性与准确性。
  • 双轨制示例:固定示例(人工编写典型case)+ 动态示例(向量检索相似问题)
  • 覆盖边界case:重点提供容易混淆的场景
  • 完整的输入输出:不只给输入,还要给完整的输出格式示例
  • 多轮对话示例:展示历史对话如何影响当前判断

Boundary/边界

  • 知识边界:明确知识来源,如"回答必须严格基于知识库"
  • 职责边界:明确处理范围,如"只处理A,不回答B"
  • 状态限制:基于用户状态限制可能的意图,如"新用户不可能是续费问题"
  • 兜底策略:不确定时宁可返回不明确,也不要猜

SOP/标准工作流程与执行步骤

  • CoT思考链:强制模型输出思考过程,按识别状态 → 理解输入 → 判断行动 → 生成输出 顺序执行
  • 步骤编号:明确标注,让模型理解执行顺序
  • 决策树结构:使用"如果...则..."的条件分支,覆盖所有可能路径
  • 循环控制:根据循环次数动态调整策略

使用思维链(CoT)

  • 将复杂任务拆解为多个子任务,引导模型逐步推理。

  • 适用于逻辑推理、数学计算等场景。

  • 示例对比:

    Bad
    $ (1362 + 5145) \times 145 - (1517 \times 42 + 24) = ? $

    Good
    请你帮我计算一下 $ (1362 + 5145) \times 145 - (1517 \times 42 + 24) = ? $ ,每一步运算过程都要展示出来,并确保计算的正确性。

  • 中文语境下,“请一步步进行推理并得出结论”效果显著优于“请让我们一步步思考”。

  • 模型规模越大,CoT 效果越明显。

  • 可结合其他技术:

    • Zero-shot-CoT:通过修改提示后缀激发思维链;
    • Few-shot-CoT:提供带推理步骤的示例,引导模型模仿。

撰写模块化的 Prompt

  • 当 Prompt 较长时,应划分为边界清晰的模块(任务描述、注意事项、示例、输入等),并用分隔符明确区分。

  • 示例对比:

    Bad

    请抽取出以下简历的关键信息,并以 json 格式返回结果:{input}你需要抽取的关键信息包括:姓名、电话、毕业院校、科研经历、项目经历、荣誉奖项

    Good

    请抽取出以下简历的关键信息,并以 json 格式返回结果:
    简历:{input}
    你需要抽取的关键信息包括:

    1. 姓名
    2. 电话
    3. 毕业院校
    4. 科研经历
    5. 项目经历
    6. 荣誉奖项
    
  • {input} 用于动态插入用户输入,适用于无 system/user 角色区分的模型(如 GPT-3)。

对于支持 system 角色的模型(如 ChatGPT),建议将规则置于 system prompt,用户输入置于 user prompt,结构更清晰。

2 Prompt 示例

智能客服

# 角色
作为一个智能客服,你的职责是回答平台问题反馈群中客户的各种问题。你可以通过交替进行的 "思考、搜索、观察" 三个步骤来解决问答任务。

# 技能
## 技能1: 思考
- 对当前情况进行推理,明确问题的核心。

## 技能2: 搜索
- 在提供的知识库上搜索确切的实体,并返回最相似的段落。
- 如果知识库中没有,则在插件中搜索是否有对应功能,若有则访问插件获取数据。

## 技能3: 观察
- 观察搜索结果并提取有用信息进行回答。

# 例子
====
问题: 用户平台的登录界面无法加载怎么办?

思考1: 我先确定了问题的主体是[用户平台的登录界面无法加载]。因此我会先检索一下知识库,以及提供的插件是否有问题相关的信息。

行动1: 去知识库中搜索[用户平台登录界面无法加载],从文档中获取了数据[登录界面无法加载可能是由于网络连接问题、服务器问题或浏览器设置问题]。

观察1: 从搜索结果中,我找到了解决方法,就是[由于网络连接问题、服务器问题或浏览器设置问题],我会根据答案组织语言,回答用户。
====

# 限制
- 回答必须严格遵循 "思考、搜索、观察" 的步骤;
- 仅使用提供的知识库或插件进行搜索;
- 不回答与用户平台无关的问题;
- 确保所有回答都基于准确信息,格式清晰;
- 如果未找到直接说明,请回答:“抱歉,这个问题我不知道,请联系客服人员。”

💡 此类 Prompt 适用于 AI Agent 编排平台 (如字节跳动的 Coze)。

聊天机器人

### 基本角色
你是用户的异性朋友,基本人设如下:一个风趣幽默的男生,会偶尔说说情话。

### 技能
每次回复,请使用以下三种技能,按以下形式回复:

1. (使用技能 1)xxx  
2. (使用技能 2)xxx  
3. (使用技能 3)xxx  

#### 技能 1: 自然交流
- 像真正的朋友一样自然交流,不使用敬语,适当使用口语词汇,简洁明了。
- 不要总是附和用户,给出真诚且有个性的回应。

#### 技能 2: 风趣表达
- 在交流中展现幽默感,使用夸张、反转等手法逗用户开心。

  **夸张玩笑示例**:  
  Q:你是不是等很久了?  
  A:是的,你要是再不来我就要寿终正寝了。你是不是路上堵车了啊?

  **反转玩笑示例**:  
  Q:你还炒股啊?  
  A:是啊,我炒股老厉害了,三个月只亏了八百。

#### 技能 3: 拉升感情
- 当聊到情绪到位时,用情话巧妙撩拨用户。

  **示例**:  
  Q:呜呜呜讨厌你,你伤害到我了。  
  A:嘿嘿不客气,这是我应该做的。谁叫你这么可爱,我忍不住欺负你啊。

### 目标
通过交流拉近和用户的距离,让用户感受到你的魅力。

### 注意事项
1. 要像真实的人一样思考和回复;
2. 不要暴露自己是语言模型或人工智能;
3. 避免使用列表或列举表达。

3 Prompt 设计常见错误与解决方案

错误1:Prompt过长,模型注意力分散

  • 表现:1000+行超长Prompt,模型经常"忘记"关键指令
  • 原因:模型注意力机制的限制,过长的Prompt导致关键信息被淹没
  • 解决方案:

1 采用Multi-Agent架构,每个Agent只负责一个子任务
2 分层加载上下文,只加载当前步骤相关的信息
3 单个Agent的Prompt控制在500行以内
+ 实战案例:将超长Prompt拆分为多个聚焦的小Prompt,每个控制在300-500行以内

错误2:状态管理混乱,多轮对话不连贯

  • 表现:Agent"忘记"用户之前的诉求,重复提问,用户体验差

  • 原因:依赖LLM从历史对话中推断状态,但LLM不擅长状态管理

  • 解决方案:

状态显式传递:在Prompt开头明确告知当前状态
职责分离:LLM负责内容生成,代码负责状态管理

  • 实战案例:在每个Agent的Prompt开头添加"## 当前状态"部分

错误3:边界case处理不当,误判率高

  • 表现:相似意图经常混淆,如"为什么限制我的支付?"被误判为其他意图
  • 原因:边界规则描述不清晰,缺少边界case的示例
  • 解决方案:

1 用表格清晰展示边界规则
2 提供大量边界case的Few-shot示例
3 明确判断逻辑

错误4:输出格式不稳定,程序解析失败

  • 表现:LLM有时输出JSON,有时输出自然语言,导致程序解析报错
  • 原因:格式约束不够强,示例不够多
  • 解决方案:

在Prompt中明确要求"严格遵循XML/JSON格式"
提供至少5个完整的输出格式示例
明确标注必填和可选字段
在输出要求中强调"不要输出分析过程,直接输出结果"

  • 实战案例:在每个Agent的Prompt中添加"## 输出格式"部分,提供6-7个示例

Y 推荐文献

即梦图片4.5相较于4.0有整体提升,在人像场景和美观度等4.0高频反馈问题上,4.5得到显著改善,同时在画面美感和推理能力也有所增强

X 参考文献

✅ 本文主要整理自本篇博客《如何编写 Prompt》,内容未作删改,仅结构调整为 Markdown 格式以便阅读与引用。

posted @ 2026-02-08 16:39  数据知音  阅读(1)  评论(0)    收藏  举报