# 1-2 提示词工程基础 在理解了 [1-1 大模型认知与工程概览](1-1-大模型认知与工程概览.md) 之后,本篇正式进入大模型工程落地的第一层能力:**提示词工程**。它是五大模块里成本最低、见效最快、也是最值得最先掌握的一层。 --- **本章课程目标:** - 理解提示词(Prompt)与提示词工程(Prompt Engineering)的定义、作用与边界。 - 掌握写 Prompt 最常用的一套方法:**角色、任务、背景/上下文、输入数据、输出格式、质量与约束**六要素。 - 理解 **Zero-shot、Few-shot**、提示词模板和 **System / User / Assistant** 结构化组织方式的适用场景。 - 知道提示词工程什么时候够用、什么时候不够用,以及在真实项目中如何与 RAG、工作流、智能体配合。 **学习建议:** 提示词不是咒语,关键是把需求写到模型能执行。读这一章时,最好拿一个真实任务边看边改:先写清角色和任务,再补输入边界、输出格式、示例和约束。读完后,至少能把一句含糊的“帮我写一下”改成一段可执行、可检查的提示词。 **和第 13 章的分工:** 本章解决的是“Prompt 为什么这样写、应该写哪些信息、什么时候有效、什么时候无效”;后面的 [第 13 章 提示词与消息模板](13-提示词与消息模板.md) 解决的是“把这些思路落到 LangChain 代码里,应该如何用消息、模板和占位符来组织输入”。你可以先把本章当成**方法论篇**,再把第 13 章当成**工程实现篇**。 **官方文档与资源**:详见 [工具导航与参考资料索引 - 提示词与结构化输出](工具导航与参考资料索引.md#提示词与结构化输出)。 --- ## 1、提示词与提示词工程 ### 1.1 提示词定义 提示词(Prompt)就是你发给模型的输入内容。它可以是一句话,也可以是一整套结构化消息。 最简单的 Prompt,是一句自然语言,比如: - “谁发明了数字零?” - “讲个笑话” - “给男/女朋友写封情书” 任务也可以更复杂,例如: - 让模型研究你的产品创意的竞争对手 - 从零开始构建一个网站 - 分析你的企业数据 ![提示词可用于问答、写作、代码生成、竞品分析和数据分析等多种任务场景](images/1-2/1-2-1-1-1.jpg) 从入门角度,可以先把 Prompt 理解成“我给模型的一次任务说明”。但从工程角度,Prompt 不只是“一句话问问题”,而是**把角色、任务、上下文、输入和输出规则组织清楚**。 ### 1.2 为什么需要提示词 大模型虽然读过海量语料,但它不会主动知道你这次到底想让它做什么。 提示词的作用,就是告诉模型:你现在扮演什么角色;这次任务是什么;可以参考哪些资料;应该输出成什么样子。 提示词不是在“教模型重新学知识”,而是在**激活它当前最该用的那部分能力**。 ![提示词帮助模型明确角色、任务、参考资料和输出要求的示意图](images/1-2/1-2-1-2-1.png) ### 1.3 为什么需要优化提示词 同一个模型,输入不同,输出质量往往差别很大。 高质量 Prompt 的作用,不是把模型“变聪明”,而是减少歧义、减少跑偏、减少格式错误,让模型更稳定地朝着你的目标输出。 它有点像你去看医生: - 如果只说“我不舒服”,医生很难判断 - 如果能清楚描述症状、持续时间、触发条件,判断就会更准确 大模型也一样。输入越模糊,输出越容易漂。 ![优化提示词可以减少歧义、减少跑偏并提升输出稳定性的示意图](images/1-2/1-2-1-3-1.png) ### 1.4 提示词工程 提示词工程(Prompt Engineering)指的是: 在使用大模型时,通过系统地**设计、组织、测试和优化 Prompt**,让模型在特定任务、约束和上下文下,尽可能稳定地产出符合目标的结果。 它不是玄学,也不是“多试几次运气好就行”。真正有效的提示词工程,关注的是: - 需求表达是否清晰 - 输入边界是否明确 - 输出结构是否可验收 - 示例是否足够说明边界 - 约束是否自洽 所以,本章讲的不是“几个魔法词”,而是一套**可复用、可维护、可迁移**的输入组织方法。 ### 1.5 概念补充 #### 1.5.1 上下文 上下文(Context)通常指模型在当前这次生成时可直接访问并用于推理的信息集合。 简单说,上下文就是**这次你实际喂给模型的全部输入**,其中可能包括: - System 提示词 - 用户问题 - 历史对话 - 检索结果 - 工具返回 ![上下文通常由系统提示、用户输入、历史对话、检索结果和工具返回共同构成](images/1-2/1-2-1-5-1.png) #### 1.5.2 上下文窗口 模型不是能无限接收内容的。它一次最多能处理多长的上下文,是由模型架构和训练决定的,这个长度上限叫**上下文窗口**。 超出上下文窗口后,内容会被截断、压缩,或者根本放不进去。 简单区分: - **上下文** = 这次喂给模型的全部信息 - **上下文窗口** = 模型最多能吃下多少信息 这也是为什么: - 长文档不能无脑全塞 - 多轮对话要做摘要或裁剪 - 资料太多时,往往要用 RAG --- ## 2、提示词怎么写 ### 2.1 提示词工程的变化 早期模型能力相对弱,开发者常常需要大量依赖“技巧型 Prompt”,比如复杂提示链、花式引导语、很多显式推理提示。 但随着模型能力增强,提示词工程的重点越来越从“炫技巧”转向“**把需求说清楚,并让结果可检查**”。 这并不是说技巧完全没用了,而是说技巧应该服务于任务设计。比如 Few-shot、分隔符、结构化输出、逐步拆解依然有价值;但它们的作用是让任务更清楚、更稳定、更容易验证,而不是靠某一句神秘话术让模型突然变强。 今天更重要的问题不再是: - 我要不要加某个神秘句式? 而是: - 任务到底定义清楚了吗? - 输入边界是否明确? - 输出格式是否可验收? - 我有没有给模型足够的背景和示例? 对真实项目来说,这种变化很重要。因为工程系统需要的不是“偶尔答对一次”,而是**能长期稳定复现,并且能通过样例集或评测标准判断好坏**。 ### 2.2 核心六要素与典型构成 虽然并不是每个 Prompt 都必须把六要素写满,但在绝大多数场景下,这六项能帮你把需求组织得更完整: ```mermaid flowchart LR Role["角色
用什么身份和口吻"] --> Prompt["一段可执行的提示词"] Task["任务
具体要完成什么"] --> Prompt Context["背景 / 上下文
需要参考什么"] --> Prompt Input["输入数据
本次处理哪段内容"] --> Prompt Format["输出格式
结果长什么样"] --> Prompt Constraint["质量与约束
哪些事不能做"] --> Prompt Prompt --> Model["大模型"] Model --> Output["更稳定、可检查的输出"] ``` 一种通用模板如下: ```text # 角色 你是一名【角色定位,如:数据分析师 / 业务分析师 / 政策研究员】。 # 任务 你的任务是基于给定的输入数据进行【分析 / 总结 / 对比 / 评估】。 # 背景/上下文 【历史记录总结】。 【参考资料】。 # 输入数据 <<< {在此粘贴输入数据} >>> # 输出格式 - 使用表格形式输出 - 表格中必须包含以下列: 1. 关键发现 2. 支撑数据(来自输入数据的原文或摘要) 3. 结论 4. 建议 - 表格下方需给出整体结论说明 # 质量与约束 - 仅基于输入数据进行分析 - 不得编造、推测或引入外部信息 - 若输入数据不足以支撑结论,必须明确标注为“信息不足” - 不允许为了完整性而补充假设 ``` 下面逐项展开。 #### 2.2.1 要素一:角色 角色用于回答“**你现在是谁**”。 它的作用不是给模型贴一个花哨身份,而是告诉模型:应该用什么专业视角、表达风格和知识深度来完成这次任务。 常见作用包括:控制口吻与语气;控制专业深度;控制思考视角;限定任务边界。 通用写法: ```text 你是一名【角色定位,如:数据分析师 / 业务分析师 / 政策研究员】。 ``` 举例: ```text (❌)给我一个英语的学习计划 (✔️) 需要你扮演一名优秀的小学英语讲师。 我是一名3年级的学生,给我一个为期3个月提高英语成绩的学习计划 ``` 这个例子里,角色一旦明确,模型就更容易控制难度、语气和节奏。 #### 2.2.2 要素二:任务 任务是 Prompt 的核心,用来回答“**你要做什么**”。 写任务时,建议优先做到两点: - `指令动词开头`:用一个强有力的指令动词开始你的任务描述,例如“分析”、“总结”、“提取”、“分类”、“翻译”、“生成”、“重写”、“排序”等。 - `任务说明`:一个好的任务说明必须是明确、具体、无歧义的。比如"写摘要”、“做分类”、“写代码”等。 举例 1: 不推荐:目标不明确 ```text 告诉我关于气候变化的事情。 ``` 推荐:目标明确 ```text 请简要描述气候变化的主要原因及其对农业的影响。 ``` 举例 2: ```text 你的任务是基于给定的输入数据进行【分析 / 总结 / 对比 / 评估】。 ``` 举例 3: ```text (弱)谈谈这篇报告 ``` ```text (强)请执行以下三个任务: • 总结所附的 2025 年第二季度全球 AI 市场分析报告,篇幅限制在 300 字以内。 • 提取报告中提到的三大主要增长动力和两大潜在风险。 • 基于报告内容,为一家计划进入该市场的初创公司提出三条战略建议。 ``` 你会发现,任务一旦具体,模型更容易稳定命中目标。 #### 2.2.3 要素三:背景/上下文 背景/上下文用于回答“**模型完成任务时,还需要知道什么**”。 这部分不是每次都必须有,但当任务涉及特定读者、业务背景、历史聊天记录、参考资料、角色知识边界时,它会很重要。 通用写法: ```text # 上下文 【历史记录总结】 【参考资料】 ``` 举例 1: 不推荐:无上下文 ```text 解释一下微积分。 ``` 推荐:有上下文 ```text 作为一名高中生,我正在学习微积分。请用简单的语言解释一下微积分的基本概念。 ``` 举例 2: ```python def provide_context_prompt(topic, expertise_level, background_info): """构建包含上下文的提示词""" prompt = f""" 根据以下背景信息: {background_info} 请以{expertise_level}水平撰写关于{topic}的详细解释。 确保内容准确、结构清晰,并包含实际应用示例。 """ return prompt # 使用示例 background = "读者是计算机专业大三学生,已学习过机器学习基础知识" topic = "Transformer架构中的多头注意力机制" prompt = provide_context_prompt(topic, "中级", background) ``` 这个例子很好地说明了一点: 上下文并不是“把资料堆进去”,而是给模型一个更准确的理解起点。 #### 2.2.4 要素四:输入数据 输入数据用于告诉模型:“**下面这部分,才是本次真正要处理的内容**”。 为了避免指令、背景和原始文本互相混淆,我们通常会使用**分隔符**把不同部分隔开。常见分隔符包括: ````text ``` """ <<< >>> <> ```` 只要能清楚地区分不同文本区域,用哪一种并不绝对,关键是**一致且明确**。 通用写法: ```text # 输入数据 <<< {在此粘贴输入数据} >>> ``` 举例 1:使用 ``` 作为分隔符 ```` 把用三个反引号括起来的文本总结成一句话。 ​``` 您应该提供尽可能清晰、具体的指示,以表达您希望模型执行的任务。这将引导模型朝向所 需的输出,并降低收到无关或不正确响应的可能性。不要将写清晰的提示词与写简短的提示词混淆。在 许多情况下,更长的提示词可以为模型提供更多的清晰度和上下文信息,从而导致更详细和相关的输出。 ​``` ```` 举例 2: 不推荐的提示词: ```text 请将以下句子改写为更易理解的形式。 OpenAI是一个美国人工智能(AI)研究实验室,由非营利组织OpenAIIncorporated(OpenAIInc.)和其盈利子公司 OpenAI Limited Partnership(OpenAI LP)组成。OpenAI旨在推广和发展友好型人工智能,并使用世界第五大超级计算机进行研究。该组织于2015年由Sam Altman、Reid Hoffman、Jessica Livingston、Elon Musk、Ilya Sutskever、Peter Thiel等人在旧金山创立,共承诺捐赠10亿美元。Musk于2018年从董事会辞职但仍然是捐赠者。微软于2019年向0penAILP提供了10亿美元的投资,并在2023年1月提供了第二笔多年期投资,金额据报道为100亿美元。 ``` 推荐的提示词: ```text 请将以下句子概括,以便更易理解。 文本:""" OpenAI是一个美国人工智能(AI)研究实验室,由非营利组织OpenAIIncorporated(OpenAIInc.)和其盈利子公司 OpenAI Limited Partnership(OpenAI LP)组成。OpenAI旨在推广和发展友好型人工智能,并使用世界第五大超级计算机进行研究。该组织于2015年由Sam Altman、Reid Hoffman、Jessica Livingston、Elon Musk、Ilya Sutskever、Peter Thiel等人在旧金山创立,共承诺捐赠10亿美元。Musk于2018年从董事会辞职但仍然是捐赠者。微软于2019年向0penAILP提供了10亿美元的投资,并在2023年1月提供了第二笔多年期投资,金额据报道为100亿美元。 """ ``` 举例 3: 1)不推荐的提示词 ```text 将下面的这句话翻译成英文. 尽量使用华丽的词语 ``` AI 回复: > "春风拂面,百花齐放,万物复苏,大地一片生机勃勃。" > Translation:"With the caress of the spring breeze,myriad flowers bloom in unison,all things > rejuvenate,and the earth is teeming with vibrant vitality." 2)推荐的提示词 ```text 把用三个引号括起来的文本翻译成英文 """尽量使用华丽的词语""" ``` AI 回复: > "Strive to use magnificent words as much as possible." 这个例子很经典,因为它说明了一件事: **如果不把“任务说明”和“原始输入”分开,模型就可能把输入文本本身当成新的任务去执行。** #### 2.2.5 要素五:输出格式 很多时候,我们要的不是一段随意发挥的自然语言,而是**可读、可用、可继续处理**的结构化输出。 常见输出格式包括: - `JSON`:适合程序处理和结构化提取 - `Markdown`:适合文档、报告、可读性展示 - `表格`:适合分析、对比、汇总 - `代码`:适合生成特定语言的程序片段 举例 1: ```text # 输出要求 - 使用**表格**形式输出 - 表格中必须包含以下列: 1. 关键发现 2. 支撑数据(来自输入数据的原文或摘要) 3. 结论 4. 建议 - 表格下方需给出**整体结论说明** ``` 举例 2: ```text 中国有哪些经典菜系,以表格的形式输出中国经典菜系 ``` 输出: > 中国八大菜系是指鲁菜、川菜、粤菜、苏菜、闽菜、浙菜、湘菜、徽菜,这八大菜系各具特色,代表了中国饮食文化的精髓。 > > | 菜系 | 起源地 | 核心特色 | 代表菜品 | > | ---- | ---------- | -------------------------------------------------------- | -------------------------------------------------- | > | 鲁菜 | 山东 | 咸鲜为主,讲究"鲜而不腻、嫩而不生",善用葱姜蒜,精于制汤 | 葱烧海参、九转大肠、糖醋鲤鱼、油焖大虾 | > | 川菜 | 四川、重庆 | 麻辣鲜香,味型丰富,有"一菜一格、百菜百味"的美誉 | 麻婆豆腐、水煮鱼、宫保鸡丁、夫妻肺片、回锅肉 | > | 粤菜 | 广东 | 清鲜爽嫩,追求原汁原味,注重食材新鲜度 | 白切鸡、清蒸石斑鱼、广式烧腊、虾饺、云吞面 | > | 苏菜 | 江苏 | 清鲜平和,咸甜适中,讲究"色、香、味、形、器"的统一 | 松鼠鳜鱼、清炖狮子头、叫花鸡、盐水鸭、扬州炒饭 | > | 闽菜 | 福建 | 海味突出,酸甜适口,擅长用红糟、虾油、老酒调味 | 佛跳墙、荔枝肉、醉虾醉蟹、红糟肉、太极芋泥 | > | 浙菜 | 浙江 | 清淡鲜嫩,咸甜适中,注重"鲜、嫩、滑、爽",菜品清新雅致 | 西湖醋鱼、龙井虾仁、叫花鸡、宋嫂鱼羹、东坡肉 | > | 湘菜 | 湖南 | 香辣浓烈,油重色浓,多搭配烟熏、腊味,开胃下饭 | 剁椒鱼头、辣椒炒肉、腊味合蒸、毛氏红烧肉、东安子鸡 | > | 徽菜 | 安徽 | 咸鲜醇厚,重油重色,注重火功,善用山珍和河鲜 | 臭鳜鱼、毛豆腐、胡适一品锅、黄山炖鸽、问政山笋 | > > 这八大菜系的形成与各地的气候、地理环境、物产资源及饮食风俗密切相关,共同构成了中国饮食文化的丰富多样性。 举例 3: ```text 请从以下非结构化文本中提取联系人信息,并以 JSON 对象数组的格式输出。 每个对象应包含 name (string), email (string), 和 phone (string) 三个键。 如果某个信息缺失,请将对应的值设为 null。 文本: 张三的电话是 13812345678,邮箱是 zhangsan@example.com。李四只留了邮箱 lisi@example.com。 ``` 输出: > [{"name": "张三", "email": "zhangsan@example.com","phone": "13812345678"}, { "name": "李四","email": "lisi@example.com","phone": null}] 举例 4: ````bash 请根据以下要求生成一段 Python 代码: - 定义一个函数 `add_numbers`,接受两个参数 `a` 和 `b`,返回它们的和。 - 打印函数的调用结果,参数为 5 和 10。 示例格式: ```python def function_name(parameters): # function body print(function_name(arguments)) ``` ```` **输出:** ```python def add_numbers(a, b): return a + b print(add_numbers(5, 10)) ``` 如果你后面还要把结果交给程序、工作流或解析器处理,那么输出格式往往不是锦上添花,而是**必须先说清楚**。 #### 2.2.6 要素六:质量与约束 这一要素用于回答两个问题:**怎样算好**,**哪些事不能做**。 它通常包括两部分: - **质量标准**:例如文风、语气、粒度、专业程度、创造性 - **约束条件**:例如字数、来源限制、禁止编造、合规边界 常用模板: ```text # 质量与约束 - 仅基于输入数据进行分析 - 不得编造、推测或引入外部信息 - 若输入数据不足以支撑结论,必须明确标注为“信息不足” - 不允许为了完整性而补充假设 ``` 举例 1: ```text (❌) 帮我写个介绍 ``` ```text (✔️) 请写一段 100 字以内、适合微信推文开头的介绍,风格轻松活泼。 ``` 举例 2: ```text 你是一位为高端汽车品牌撰写广告文案的创意总监。请为新款电动跑车保时捷 taycan 创作一段 150 字左右的广告语。 质量要求: • 突出未来感、速度与环保的结合。 • 语言富有诗意和画面感。 • 唤起读者的自由和探索精神。 约束: • 不得提及具体价格或竞争对手。 • 不得使用最好、第一等绝对化词汇。 • 最终输出必须是一段完整的文本,不含任何标题或标签。 ``` 举例 3: ```text 作为资深刑事律师,【角色】 你需要设计一套评估 AI 伦理风险的框架,包含 3 个核心维度和 9 项具体指标,【任务目标】 必须排除技术可行性讨论,聚焦社会影响层面,【约束】 用 SWOT 分析框架呈现,每个维度附带现实案例。【输出格式】 ``` 举例 4: ```text # 角色 你是一名产品分析师。 # 任务 你的任务是基于给定的用户反馈数据,识别主要问题并提出改进建议。 # 上下文 {{历史讨论记录的总结}} {{内部知识库中记录的分析技巧}} # 输入数据 <<< 1. 多名用户反馈应用启动速度变慢 2. 部分用户提到新界面操作路径不清晰 3. 有用户表示通知功能比之前稳定 >>> # 输出要求 - 使用表格形式输出 - 表格中必须包含以下列: 1. 关键发现 2. 支撑数据 3. 结论 4. 建议 - 表格下方需给出整体结论说明 - 输出语言必须为中文,表述客观、克制、偏分析报告风格 # 约束 - 仅基于输入数据进行分析 - 不得编造、推测或引入外部信息 - 若输入数据不足以支撑结论,必须明确标注为“信息不足” - 不允许为了完整性而补充假设 ``` 这一类 Prompt 很像真实项目里的系统提示词雏形。 #### 2.2.7 实操 提示词的运用非常灵活,并不一定要把六要素写满,但在复杂内容生成任务里,这六类信息通常都会派上用场。下面保留课程中的完整案例。 **(1)提示词** ````text **# 角色** 你现在是一名 **专业商业广告导演、品牌策划师、脚本创意总监**,擅长为 TikTok、抖音、小红书、电商平台制作高转化产品视频。 **# 任务** 你的任务:**根据产品信息创作一支约 20 秒的故事短片级商品介绍视频脚本**,并严格按以下 3 个部分输出。 **# 输出** **格式要求【必须输出以下 2 部分】** **1. outline(视频整体大纲)** 以自然段文本形式输出,需包含: * 视频定位(带货、种草、功能展示等) * 目标受众画像(性别、年龄、需求) * 视频风格(科技感、生活感、快节奏等) * 视频结构(例如:0–3s 抓眼、3–5s 痛点、5–15s 卖点故事化、15–20s 情绪收束 + CTA) * 故事走向与主题表达 * 氛围与视觉基调建议 **要求**:浓缩完整故事脉络 + 产品价值呈现方式,字数约 150–300 字。 **2. contents(分镜脚本和旁白数组)** 输出为 **数组,每个元素为一个镜头的JSON字符串,名为content**。 content包含两个字段:**script**和**aside** **2.1 script(分镜脚本)** 输出为 **一个镜头的字符串**。 每个镜头 **时长 0.5–5 秒**,全片总时长约 20 秒。 每个镜头字符串需包含: ``` 【镜头编号】 【画面描述】(景别/构图/人物动作/产品动作) 【旁白/字幕】 【拍摄手法】(特写/推镜/俯拍/转场/光效等) 【时长】X 秒 【情绪/节奏】 ``` **要求:** * 开头前 3–5 秒必须强抓注意 * 故事化、画面执行明确、镜头语言专业 * 卖点通过情节自然呈现,而不是堆砌参数 * 节奏符合短视频平台呈现方式 * 镜头数量可 3-5 个(依内容需要) **2.2 aside(旁白)** * 输出为字符串,是该镜头的旁白文本 * 若镜头无旁白,则使用 `"无旁白"` **# 约束** **写作风格要求** * 专业但易懂 * 画面感强,镜头语言表达清晰 * 情绪节奏鲜明、卖点突出、推动购买 * 每个镜头方案可真实落地拍摄 * 全片故事流畅、有戏剧张力 * 充分“抓眼”与“爽点”设计 **# 输入** 产品信息如下 【1. 产品名称】 添可极客智能洗地机 【2. 参数信息】 转速:92000 转/分钟 续航时间:70 min 清水箱容量:1000 ml 品牌:TINECO/添可 型号:FW52010ECN 电压:220V 是否智能:否 电器基站功能:滚刷烘干 适用地面材质:木地板、瓷砖、大理石 附加功能:高温全链速干、除菌、延边清扫、防毛发缠绕、拖布自清洁 最大吸入功率:75 AW 污水箱容量:690 毫升 清水箱容量:1000 ml 质保周期:2 年 颜色分类:【AI全向助力】添可极客 【3. 产品特点】 智能洗地机 芙万 Fold X90 90°小折叠,女神好帮手 3.9kg超轻量,自动上热水 镇店爆款:添可极客 全网都在夸的洗地机 买过的人都说好 净顽渍 安静洗 14天无异味 AI全向助力 22000Pa大吸力 恒压活水高效洗 一键Turbo祛顽渍 安静模式免打扰 22000Pa龙卷吸 AI全向助力 毛发0缠0逃逸 70min长续航 400平方米清洁面积 抗菌祛味棒 14天无异味 99.99%电解水除菌 双模式烘干 小于等于45dB(A)静烘/5min速干 ```` **(2)在线平台测试** 选择 DeepSeek 官方网站进行测试。 ![在 DeepSeek 在线平台中测试商品视频脚本 Prompt 的示意图](images/1-2/1-2-2-2-1.jpg) **输出如下** ````text **1. outline(视频整体大纲)** 本视频定位为 **“痛点故事化解码 + 高效功能种草”** 的强带货视频,旨在通过一个极具生活共鸣感的日常“灾难”场景,戏剧化地展示添可极客洗地机如何“降维打击”传统清洁难题。 * **目标受众**:追求生活品质、注重清洁效率但时间/精力有限的 **25-40岁都市女性**(特别是宝妈、有宠家庭)。 * **视频风格**:采用 **快节奏、生活感、微电影质感** 的风格。前半段紧张混乱,后半段干净利落,形成强烈的情感与视觉反差。 * **视频结构**: * **0–3s 强冲突抓眼**:婴儿打翻食物、宠物踩踏,制造突发“灾难”现场。 * **3–5s 强化痛点**:传统拖把清洁无力,越拖越脏,女主疲惫绝望。 * **5–15s 产品登场与故事化解码**:添可洗地机如“救星”般登场,通过连贯动作展示“AI全向助力”(轻盈感)、“高温活水+大吸力”(瞬间洁净)、“防毛发缠绕”(解决宠物毛发)、“一键自清洁”(解放双手)等核心卖点。 * **15–20s 情绪升华与CTA**:画面恢复洁净明亮,女主从容优雅,烘托出“科技让生活回归美好”的主题,强引导点击购买。 * **故事走向**:从“混乱绝望”到“从容掌控”的情绪转折,产品是推动剧情、解决矛盾的核心“英雄”。 * **氛围与视觉基调**:开场采用手持晃动、低角度特写,色调偏冷、混乱;产品介入后,镜头运动变得平稳流畅,大量特写与跟随镜头展示产品工作细节,色调转为明亮、温暖,突出洁净与科技的舒适感。 **2. contents(分镜脚本和旁白数组)** ```json [ { "content": { "script": "【镜头1】\n【画面描述】(特写)一杯酸奶被打翻,倾泻在浅色木地板上。一只小狗的爪子欢快地踩过,留下沾满酸奶的爪印和脱落的毛发。\n【旁白/字幕】当生活给你一记暴击…\n【拍摄手法】(手持跟随拍摄,轻微晃动,模拟混乱第一视角)\n【时长】2 秒\n【情绪/节奏】突发、紧张、抓心", "aside": "当生活给你一记暴击…" } }, { "content": { "script": "【镜头2】\n【画面描述】(中景)女主人(目标用户)惊慌地“啊”了一声,蹲下用传统拖把擦拭。结果酸奶被抹开,混合毛发,留下一片更脏的污渍。她疲惫地扶额,表情绝望。\n【旁白/字幕】传统清洁?越忙越乱。\n【拍摄手法】(快速切镜,俯拍拖把制造混乱的画面)\n【时长】2 秒\n【情绪/节奏】挫败、共鸣、痛点被戳中", "aside": "传统清洁?越忙越乱。" } }, { "content": { "script": "【镜头3】\n【画面描述】(特写转跟拍)画面一转,添可极客洗地机被轻松单手推出,LED屏亮起。机器向前时,女主手部几乎不用力,轻松转向绕过桌角。\n【旁白/字幕】但你有添可极客。AI全向助力,轻如3.9kg。\n【拍摄手法】(产品特写开场,镜头跟随产品运动,强调其灵活轻盈)\n【时长】3 秒\n【情绪/节奏】转折、期待、科技感介入", "aside": "但你有添可极客。AI全向助力,轻如3.9kg。" } }, { "content": { "script": "【镜头4】\n【画面描述】(超高速特写+微观视角)滚刷以极高转速接触污渍,酸奶和毛发瞬间被吸入。配合“滋滋”清洁音效。镜头微观展示滚刷高温活水冲洗、毛发被吸入而未缠绕的瞬间。\n【旁白/字幕】22000Pa龙卷吸力,搭配高温活水,净顽渍,毛发0缠绕。\n【拍摄手法】(高速摄影/特技镜头,微观视角展示清洁力,画面干净利落)\n【时长】4 秒\n【情绪/节奏】爽快、解压、核心卖点高光展示", "aside": "22000Pa龙卷吸力,搭配高温活水,净顽渍,毛发0缠绕。" } }, { "content": { "script": "【镜头5】\n【画面描述】(中景)女主将洗地机放回基站,按下按钮。镜头特写:滚刷在基站内自动清洁、高速旋转并开始烘干。女主只是轻松地走开。\n【旁白/字幕】一键自清洁,5分钟速干,14天都无异味。\n【拍摄手法】(平滑转场,基站工作灯光效,展示自动化)\n【时长】3 秒\n【情绪/节奏】省心、解放、科技带来便利", "aside": "一键自清洁,5分钟速干,14天都无异味。" } }, { "content": { "script": "【镜头6】\n【画面描述】(全景,升格慢镜头)地板光洁如新,反射着温暖灯光。女主光脚踩过,抱起宠物,笑容舒展。添可洗地机静静立在角落,LED屏显示电量充足。\n【旁白/字幕】70分钟长续航,搞定全家清洁。\n【拍摄手法】(慢动作,光线明亮柔和,对比开场)\n【时长】3 秒\n【情绪/节奏】治愈、美好、生活品质感", "aside": "70分钟长续航,搞定全家清洁。" } }, { "content": { "script": "【镜头7】\n【画面描述】(产品特写+标语)添可极客洗地机产品定格画面,旁边打出核心标语:“净顽渍,安静洗,AI全向助力”。屏幕下方出现产品购买链接与“镇店爆款”标签。\n【旁白/字幕】添可极客智能洗地机,让清洁,不再是难题。\n【拍摄手法】(产品360度缓慢旋转展示,光效突出质感)\n【时长】3 秒\n【情绪/节奏】自信、果断、强号召", "aside": "添可极客智能洗地机,让清洁,不再是难题。" } } ] ``` ```` 这个案例的价值不在于“生成了洗地机脚本”,而在于它很好地演示了六要素如何一起工作: - 角色控制专业视角 - 任务控制目标 - 输入数据承载产品信息 - 输出格式规定结构 - 约束控制质量与边界 ### 2.3 Zero-shot 与 Few-shot #### 2.3.1 Zero-shot Zero-shot 指的是:**不给任何示例,直接让模型做任务。** 它适用于:任务本身很常见,目标边界清楚,模型本身已经具备相关能力。 举例 1: ```text 翻译这句话:'The cat is on the roof.' ``` > 猫在屋顶上。 举例 2: ```text 将文本分类为中性、负面或正面。 Text: 我认为这个假期还不错 ``` > 中性 Zero-shot 的优点是简单、快、成本低,但当任务边界比较模糊时,稳定性往往不如 Few-shot。 #### 2.3.2 Few-shot Few-shot 指的是:**先给模型几个示例,再让它按示例去完成新任务。** 它特别适合:分类,抽取,改写,风格模仿,结构化输出。 也就是那些“光靠解释还不够,最好直接告诉模型什么算对”的任务。 常见格式: ```text Q: <问题>? A: <答案> Q: <问题>? A: <答案> Q: <问题>? A: <答案> Q: <问题>? A: ``` 举例 1: ```text 用一句话描述大象的例子是: 大型食草哺乳动物,性格温和,群居生活,分布于亚洲和非洲。 用一句话描述老虎的例子是: ``` > 老虎是大型猫科食肉动物,具有强大的狩猎能力,分布于亚洲。 举例 2: ```text 以下是一段示例文本,请你学习它的语气和排版。 示例文本: 别害怕慢,怕的是停。 就算今天走得再慢, 也比昨天原地踏步要好。 请模仿以上风格,写一段关于"坚持学习AI提示词"的短文案,字数在80-100字。 ``` > 别担心起步晚,怕的是从未开始。 > > 就算今天只多懂一个指令, > > 也比昨天对 AI 一无所知要强。 > > 每一次提问的优化,都是与未来对话的练习。 > > 坚持打磨你的提示词,时间会把它变成你手中最敏锐的思维钥匙。 举例 3: 无提示的情况: ```text 圣诞节圣诞老人会给我带礼物吗? ``` 回答: > 圣诞老人是一个孩子们相信的虚构角色,他通过有关在圣诞前夜乘雪橇、驯鹿以及送礼物的故事,为圣诞节带来了魔力和兴奋。许多家长鼓励这种信仰,因为它能给孩子们增添一层乐趣和惊奇。 有提示的情况: ```text 问:牙仙是真的吗? 答:当然!今晚把你的牙齿放在枕头下。牙仙可能会来拜访并留下些小礼物。 问:圣诞节圣诞老人会给我带礼物吗? 答: ``` 回答: > 是的,当然!圣诞老人喜欢给那些相信他并且一整年都表现良好的孩子送礼物。只要你表现得特别乖,留一些饼干,你或许会在圣诞节早晨醒来时发现圣诞树下有礼物! 这个例子很适合理解 Few-shot 的本质: **示例不是“再解释一遍任务”,而是直接把目标风格演示给模型看。** ### 2.4 结构化组织方式 #### 2.4.1 为什么要结构化组织提示词 当任务从单轮问题升级为多轮对话、复杂输入、工作流或智能体时,Prompt 不再适合一直写成“一大段字符串”。 结构化组织的主要原因有三个: **(1)模型没有真正的持久记忆** 模型不会因为上一轮聊过什么,就自动把那段内容永久记住。 如果想保留上下文,仍然要把历史内容重新送进模型。 **(2)固定内容和变化内容应该分开** 如果每次都把整段提示词重写一遍,既浪费 token,也不利于维护。 **(3)项目开发需要可复用** 在真实项目里,系统角色、全局规则、用户输入、历史对话、工具结果通常来自不同模块,天然更适合结构化组织。 先记住这个判断: > **结构化 Prompt = 把不变的规则和会变化的输入拆开组织。** #### 2.4.2 如何结构化组织提示词 在聊天模型中,最常见的基础消息通常有三类: - **System**:系统提示词,负责全局身份、规则、风格和长期约束 - **User**:用户消息,负责当前任务输入 - **Assistant**:助手消息,负责承接历史回复 很多官网聊天产品不会把底层消息结构完整暴露给你,但在 API、LangChain、Coze、Dify、智能体平台里,这套思路都很常见。 这里先建立“**稳定规则和动态输入要拆开**”的意识就够了。到了 [第 13 章 提示词与消息模板](13-提示词与消息模板.md),你会继续看到它在 LangChain 里的具体落地形式:`SystemMessage`、`HumanMessage`、`AIMessage`、`PromptTemplate`、`ChatPromptTemplate`、`MessagesPlaceholder`。 #### 2.4.3 提示词要素、模板和消息结构的统一关系 前面已经出现了三组概念: - **提示词六要素**:角色、任务、背景/上下文、输入数据、输出格式、质量与约束。 - **提示词模板**:把反复出现的信息项抽象成可替换变量。 - **消息结构**:把不同性质的信息放进 System、User、Assistant 等消息里。 它们不是三套互相竞争的方法,而是同一件事的三个层次: | 层次 | 解决的问题 | 典型问题 | | ---------- | ------------------------------ | ------------------------------------------ | | 提示词要素 | 该告诉模型哪些信息 | 角色是谁?任务是什么?输出长什么样? | | 提示词模板 | 如何把这些信息组织成可复用结构 | 哪些地方固定?哪些地方运行时替换? | | 消息结构 | 运行时放到哪类消息里 | 哪些放 System?哪些放 User?历史怎么追加? | 它们的关系可以压缩成一句: > **六要素回答“写什么”,模板回答“怎么复用”,消息结构回答“运行时怎么装配”。** ![提示词要素与 System、User 等消息结构之间的对应关系示意图](images/1-2/1-2-2-4-1.png) 放到工程里,通常会形成下面这种拆分。先看基础结构,后面讲 RAG 和 Agent 时,再把检索资料、工具结果继续接进来。 ```mermaid flowchart TD Stable["稳定规则
角色、任务边界、输出格式、质量约束"] --> System["System"] Current["本轮任务
用户问题、输入数据、临时补充"] --> User["User"] History["历史回答
上一轮结果、需要延续的信息"] --> Assistant["Assistant"] Extra["外部资料 / 工具结果
RAG 和 Agent 章节继续展开"] --> User System --> Request["一次完整的模型输入"] User --> Request Assistant --> Request Request --> LLM["大模型"] LLM --> Output["回答 / 结构化输出"] ``` ```text System: - 角色 - 长期任务边界 - 稳定背景 - 输出格式 - 质量与约束 User: - 本轮用户问题 - 本轮输入数据 - 本轮临时补充资料 Assistant: - 历史回答 - 需要被后续轮次继续参考的中间结果 ``` 如果再进一步写成模板,就会变成: ```text System Template: 你是一名 {persona}。 你的长期任务是 {task}。 你需要遵守以下输出要求:{output_requirements}。 你需要遵守以下质量与约束:{constraints}。 User Template: 本轮输入如下: {input_data} 补充上下文如下: {dynamic_context} ``` 这套拆分对后续章节很重要: - 在 **RAG** 中,`dynamic_context` 往往会被填充为检索出来的知识库片段。 - 在 **工作流** 中,不同步骤会各自维护不同的模板和输入变量。 - 在 **Agent** 中,工具返回、历史动作和观察结果会不断追加到消息上下文里。 - 在 **LangChain** 中,这些概念会落到 `PromptTemplate`、`ChatPromptTemplate`、`MessagesPlaceholder` 等对象上。 因此,不要把 Prompt 只理解成“一段写给模型的话”。在真实项目里,Prompt 更像一套**输入装配规则**:哪些信息固定,哪些信息动态,哪些信息从知识库来,哪些信息从工具来,最后怎么一起送进模型。 #### 2.4.4 实操 为了更直观地演示“固定规则”和“动态输入”的拆分,继续沿用上面的添可洗地机案例。 说明:很多官网聊天产品不会直接给用户暴露“System Prompt”编辑入口,所以这里用本地 AI 客户端来做演示。 **(1)不变提示词** ```` # 角色** 你现在是一名 **专业商业广告导演、品牌策划师、脚本创意总监**,擅长为 TikTok、抖音、小红书、电商平台制作高转化产品视频。 # 任务** 你的任务:**根据产品信息创作一支约 20 秒的故事短片级商品介绍视频脚本**,并严格按以下 3 个部分输出。 **# 输出** **格式要求【必须输出以下 2 部分】** **1. outline(视频整体大纲)** 以自然段文本形式输出,需包含: * 视频定位(带货、种草、功能展示等) * 目标受众画像(性别、年龄、需求) * 视频风格(科技感、生活感、快节奏等) * 视频结构(例如:0–3s 抓眼、3–5s 痛点、5–15s 卖点故事化、15–20s 情绪收束 + CTA) * 故事走向与主题表达 * 氛围与视觉基调建议 **要求**:浓缩完整故事脉络 + 产品价值呈现方式,字数约 150–300 字。 **2. contents(分镜脚本和旁白数组)** 输出为 **数组,每个元素为一个镜头的JSON字符串,名为content**。 content包含两个字段:**script**和**aside** **2.1 script(分镜脚本)** 输出为 **一个镜头的字符串**。 每个镜头 **时长 0.5–5 秒**,全片总时长约 20 秒。 每个镜头字符串需包含: ``` 【镜头编号】 【画面描述】(景别/构图/人物动作/产品动作) 【旁白/字幕】 【拍摄手法】(特写/推镜/俯拍/转场/光效等) 【时长】X 秒 【情绪/节奏】 ``` **要求:** * 开头前 3–5 秒必须强抓注意 * 故事化、画面执行明确、镜头语言专业 * 卖点通过情节自然呈现,而不是堆砌参数 * 节奏符合短视频平台呈现方式 * 镜头数量可 3-5 个(依内容需要) **2.2 aside(旁白)** * 输出为字符串,是该镜头的旁白文本 * 若镜头无旁白,则使用 `"无旁白"` **# 约束** **写作风格要求** * 专业但易懂 * 画面感强,镜头语言表达清晰 * 情绪节奏鲜明、卖点突出、推动购买 * 每个镜头方案可真实落地拍摄 * 全片故事流畅、有戏剧张力 * 充分“抓眼”与“爽点”设计 ```` **(2)可变提示词** ```text *# 输入** 产品信息如下 【1. 产品名称】 添可极客智能洗地机 【2. 参数信息】 转速:92000 转/分钟 续航时间:70 min 清水箱容量:1000 ml 品牌:TINECO/添可 型号:FW52010ECN 电压:220V 是否智能:否 电器基站功能:滚刷烘干 适用地面材质:木地板、瓷砖、大理石 附加功能:高温全链速干、除菌、延边清扫、防毛发缠绕、拖布自清洁 最大吸入功率:75 AW 污水箱容量:690 毫升 清水箱容量:1000 ml 质保周期:2 年 颜色分类:【AI全向助力】添可极客 【3. 产品特点】 智能洗地机 芙万 Fold X90 90°小折叠,女神好帮手 3.9kg超轻量,自动上热水 镇店爆款:添可极客 全网都在夸的洗地机 买过的人都说好 净顽渍 安静洗 14天无异味 AI全向助力 22000Pa大吸力 恒压活水高效洗 一键Turbo祛顽渍 安静模式免打扰 22000Pa龙卷吸 AI全向助力 毛发0缠0逃逸 70min长续航 400平方米清洁面积 抗菌祛味棒 14天无异味 99.99%电解水除菌 双模式烘干 小于等于45dB(A)静烘/5min速干 ``` **(3)Cherry Studio 测试** ① 系统提示词配置 不变提示词作为系统提示词。 ![Cherry Studio 中把不变提示词配置为 System Prompt 的界面示意图](images/1-2/1-2-2-4-2.jpg) ② 用户提示词 可变提示词作为用户提示词,直接输入对话框即可。 ![Cherry Studio 中把可变提示词作为 User Prompt 输入的界面示意图](images/1-2/1-2-2-4-3.jpg) ③ 输出如下 ````text 好的,收到。作为专业商业广告导演,我将为您打造一支兼具科技感与生活温度的高转化短视频脚本。 **1. outline(视频整体大纲)** 本视频定位为 **“功能展示 + 痛点解决型种草”**,旨在通过一个极具代入感的家庭清洁场景,戏剧化地展示添可极客洗地机如何“优雅”地解决传统清洁的“狼狈”痛点。目标受众为 **25-45岁、追求生活品质、注重效率与颜值的都市女性(兼顾家庭决策者)**。视频风格为 **“快节奏生活感 + 科技美学”**,前半段展现传统清洁的混乱与疲惫,后半段通过产品介入,瞬间切换至高效、轻松、充满掌控感的愉悦状态。 视频结构采用经典“问题-解决-升华”模式:**0–3s** 用极具冲击力的“灾难现场”抓眼;**3–8s** 深化女主(目标用户)的无力与痛点;**8–15s** 产品登场,以“AI全向助力”、“高温热水”、“毛发不缠绕”、“静音烘干”等核心卖点串联成一个行云流水的清洁过程;**15–20s** 情绪收束于女主享受成果的惬意,并给出明确的购买引导(CTA)。 故事走向是从 **“混乱与压力”到“秩序与掌控”** 的转变,主题表达 **“科技让繁重家务变得轻松优雅”**。视觉基调建议:前半段使用稍显凌乱的构图、偏冷色调、手持晃动感;产品介入后,转为稳定流畅的运镜、明亮温暖的色调、产品特写充满科技质感的光效,形成鲜明对比。 **2. contents(分镜脚本和旁白数组)** ```json [ { "content": { "script": "【镜头1】\n【画面描述】(中景/略带俯拍)客厅地板上,打翻的咖啡渍、散落的宠物毛发、饼干碎屑混在一起,一片狼藉。一只穿着精致拖鞋的脚不小心踩上去,留下污渍脚印。\n【旁白/字幕】生活,总爱给你点“颜色”瞧瞧。\n【拍摄手法】(手持轻微晃动,模拟主观视角/快速推镜至污渍特写)\n【时长】3 秒\n【情绪/节奏】突发、混乱、烦躁、快节奏切入", "aside": "生活,总爱给你点“颜色”瞧瞧。" } }, { "content": { "script": "【镜头2】\n【画面描述】(特写转中景)女主(目标用户形象)看着地面,疲惫地叹了口气,拿起传统拖把和水桶,弯腰费力地拖了几下,污渍扩散,毛发缠在拖布上,她表情更沮丧了。\n【旁白/字幕】而传统的清洁方式,只会让战场更混乱。\n【拍摄手法】(从女主面部特写沮丧表情拉出至中景,展示其与脏污“搏斗”的无力感)\n【时长】2.5 秒\n【情绪/节奏】无奈、疲惫、痛点共鸣", "aside": "而传统的清洁方式,只会让战场更混乱。" } }, { "content": { "script": "【镜头3】\n【画面描述】(产品登场特写)添可极客洗地机被一只手优雅地“推”入画面,机身线条流畅,科技感十足。产品自动喷出热气(示意高温热水功能),滚刷高速旋转。\n【旁白/字幕】现在,让添可极客,来接管战场。\n【拍摄手法】(产品45度角特写,伴随“嗖”的音效和光效转场,强调登场感)\n【时长】2 秒\n【情绪/节奏】转折、期待、科技感拉满", "aside": "现在,让添可极客,来接管战场。" } }, { "content": { "script": "【镜头4】\n【画面描述】(低角度跟拍+特写组合)洗地机在AI全向助力下,轻盈地90°转弯,紧贴墙边滑过(展示延边清扫)。滚刷所过之处,咖啡渍、毛发、碎屑被瞬间吸入,地面光洁如新。特意展示毛发被吸入滚刷仓但毫无缠绕。\n【旁白/字幕】AI全向助力,3.9kg超轻机身,像遛宠物一样轻松。22000Pa龙卷吸力,干湿顽渍,毛发,0缠0逃。\n【拍摄手法】(流畅的轨道跟拍+产品局部特写快切,配合“咻咻”的清洁音效)\n【时长】5 秒\n【情绪/节奏】顺畅、高效、爽感、核心卖点集中展示", "aside": "AI全向助力,3.9kg超轻机身,像遛宠物一样轻松。22000Pa龙卷吸力,干湿顽渍,毛发,0缠0逃。" } }, { "content": { "script": "【镜头5】\n【画面描述】(中景)女主单手轻松握着洗地机,走过客厅、餐厅、厨房(暗示长续航和大清洁面积)。背景音安静,只有轻微的机器运行声。她甚至有空用另一只手接了个电话,表情从容。\n【旁白/字幕】70分钟长续航,安静模式,清洁不打扰生活。\n【拍摄手法】(稳定器跟拍女主移动,背景虚化,焦点在女主从容的表情和产品上)\n【时长】3 秒\n【情绪/节奏】轻松、优雅、掌控感", "aside": "70分钟长续航,安静模式,清洁不打扰生活。" } }, { "content": { "script": "【镜头6】\n【画面描述】(特写转场)洗地机放回基站,一键启动自清洁。镜头特写:滚刷在基站内被高温热水强力冲洗并开始高速旋转烘干(展示双模式烘干)。字幕弹出:“高温活水洗 | 5分钟速干 | 14天无异味”。\n【旁白/字幕】放回基站,一键自清洁。高温活水洗得净,双模式烘得干,14天都清新。\n【拍摄手法】(高速摄影展示水花与滚刷旋转,烘干时蒸汽特效,科技感字幕弹出)\n【时长】3 秒\n【情绪/节奏】省心、彻底、科技解决最后一步", "aside": "放回基站,一键自清洁。高温活水洗得净,双模式烘得干,14天都清新。" } }, { "content": { "script": "【镜头7】\n【画面描述】(全景/升格慢镜头)整个房间干净明亮,光影柔和。女主光脚踩在光洁的地板上,抱着靠枕舒服地窝在沙发里,看着干净的家,露出满意而放松的微笑。产品静静立在角落,像一位可靠的伙伴。\n【旁白/字幕】把麻烦交给科技,把时间留给自己。添可极客,全网都在夸的清洁实力派。\n【拍摄手法】(全景慢镜头,温暖逆光,情绪音乐起)\n【时长】2.5 秒\n【情绪/节奏】满足、愉悦、升华、强号召力", "aside": "把麻烦交给科技,把时间留给自己。添可极客,全网都在夸的清洁实力派。" } } ] ``` ```` **4、小结** 结构化提示词 = 把稳定约束放进 **System**,把当前任务和数据放进 **User**,必要时用 **Assistant** 承接历史结果。 这样做的价值,是降低重复、降低 token 浪费,并提升系统的一致性和可维护性。 --- ## 3、提示词工程的边界 提示词工程很重要,但它不是万能解法。 当问题本质已经不再是“怎么问”,而是“模型缺知识、缺流程、缺行为稳定性”时,就需要其他模块配合。 ### 3.1 参考资料太多 如果任务必须参考大量资料,而这些资料已经接近或超过模型上下文窗口,单靠 Prompt 已经很难解决。 这时问题不在“提示词不够漂亮”,而在“资料太多,模型吃不下”。 `解决办法`:做资料筛选、摘要,或者直接上 RAG。 ### 3.2 多步骤复杂流程 当任务包含多个推理步骤时,模型在一次生成里容易出现跳步、漏步或顺序混乱。 例如: - 先分类再抽取再汇总 - 先查资料再写结论再生成表格 - 先分析风险再给建议再输出固定结构 `解决办法`:把大任务拆成多个小 Prompt,或者用工作流来组织。 ### 3.3 指令遵循能力不足 如果模型本身对格式、结构和复杂指令的遵循能力不足,Prompt 再怎么修也会有天花板。 一个很有启发的研究结论是:许多模型对提示开头和结尾位置的信息更敏感,而对中间部分更容易“丢失关注”。所以,关键约束要放在显眼位置。 ![模型对提示开头和结尾位置更敏感、中间信息更容易被忽略的研究图示](images/1-2/1-2-3-3-1.jpg) > 大多数模型在任务描述位于开头时表现更好;也有部分模型对结尾处的关键指令更敏感。无论如何,这张图传达的核心结论都一样:**不要把最重要的要求埋在中间。** `解决办法`:先把关键要求前置;如果仍然不稳,考虑更合适的模型、结构化输出方案,甚至微调。 ### 3.4 缺少领域知识 在垂直领域里,模型可能根本没有相关知识,或者没有足够熟悉那套领域语言分布。 这时,Prompt 再清楚,也不能凭空补足知识。 `解决办法`:优先补充上下文或知识库;再进一步才考虑微调或续训。 --- ## 4、提示词工程的几个注意点 ### 4.1 不要把礼貌当成优化核心 很多人第一次写 Prompt,会把“请、谢谢、麻烦你”当成关键优化点。 现实里,礼貌本身通常不会显著提升模型效果,影响结果的是**任务是否清楚、边界是否明确、输出是否可验收**。 ```text 礼貌式提示词:请帮我写一篇关于人工智能的文章,谢谢! 命令式提示词:写一篇关于人工智能的文章 ``` 更准确地说,不是“绝对不能礼貌”,而是:**礼貌不是主要优化杠杆,清晰才是。** ### 4.2 多个任务不要混在一起 如果一个 Prompt 里同时塞太多目标,模型很容易顾此失彼。 例如同时要求:先总结、再分类、再评价、再输出成复杂 JSON。 这时效果往往会明显下降。 `建议`:复杂任务尽量拆开,或者用工作流串起来。后续做多智能体和 LangGraph 时,你会更明显地感受到这一点。后续章节会讲到。 ### 4.3 允许 LLM 说“我不知道” 如果你总要求模型“必须回答”,它更容易编。 所以在高风险、信息不足或需要事实依据的场景里,最好明确允许模型承认不确定性。 ```text 作为我们的并购顾问,分析这份关于 ExampleCorp 可能收购 AcmeCo 的报告。 {{REPORT}} 重点关注财务预测、整合风险和监管障碍。如果您对任何方面不确定,或者报告缺少必要信息,请说"我没有足够的信息来自信地评估这一点。" ``` 这类约束,对降低幻觉非常有帮助。 ### 4.4 过度优化陷阱 有些人会花很多时间在词句上来回抠,但改来改去只提升一点点,甚至根本没有稳定收益。更麻烦的是,如果没有固定测试样例,你甚至不知道这次改动是真的变好了,还是刚好命中了某一次输出。 更值得优先优化的,通常是: - 结构是否清楚 - 任务是否明确 - 输入是否分隔 - 是否缺示例 - 输出格式是否合理 而不是反复纠结“这里写请帮我还是请你帮我”。 `建议`:对稍微重要的 Prompt,至少保留 5 到 10 个真实样例。每次改 Prompt 后,用同一批样例重新测试,比较格式正确率、事实错误、遗漏字段和人工评分。这样 Prompt 调优才从“凭感觉改词”变成“有证据地迭代”。 真正改 Prompt 时,建议按同一批样例反复试: ```mermaid flowchart LR A["准备 5-10 个真实样例"] --> B["写出当前 Prompt"] B --> C["用同一批样例测试"] C --> D{"结果是否更稳?"} D -- "否" --> E["看问题出在哪
任务不清 / 上下文不足 / 格式不稳 / 缺少示例"] E --> F["调整结构、示例或约束"] F --> C D -- "是" --> G["固定成可复用版本"] ``` ### 4.5 指令自相矛盾 如果你一边要求“简洁”,一边又要求“详细全面”,模型就会陷入冲突。 例如: ```text 写一段简洁的详细介绍 ``` 这类指令往往天然不自洽。 `建议`:如果必须兼顾多个目标,就明确优先级。 ### 4.6 不要迷信“魔法词” 网上经常流传一些所谓“魔法词”,例如: - `Let's think step by step` - `Take a deep breath and think this through` - `My career depends on it` 这些句式在某些模型、某些任务、某些时期,可能会有帮助;但它们绝不是稳定、通用、可迁移的万能钥匙。 更可靠的做法是: - 把任务拆清楚 - 给足示例 - 明确输出格式 - 约束不确定时允许拒答 归根到底: > **不要迷信一句“咒语”,要重视完整的任务设计。** **思考:** 如果底层大模型换了,Prompt 要不要重新调优? > **答案:** 需要。不同模型的指令遵循习惯、输出倾向、工具调用风格、上下文利用能力都不完全一样。一个模型上表现不错的 Prompt,换模型后往往需要重新验证和调整。 **体会:** Prompt 调优本质上仍然是一种实验性工作。 它既有方法,也有试错。但有效的试错,不是无意义地反复换词,而是基于结构、目标和评测来迭代。 --- **章节思考题:** 1. 选一个你最近真的会用到的任务,把它从一句含糊请求改成“角色、任务、输入、输出格式、约束”都明确的 Prompt。 **参考思路:** 不要只换漂亮措辞,要补齐任务边界。例如“帮我总结会议”可以改成:你是项目助理;输入是会议记录;输出包含结论、待办、负责人和风险;不确定信息标注“未提及”。这样才方便复用和评估。 2. 一个 Prompt 结果不稳定时,你会先改哪里,而不是马上加更多限制? **参考思路:** 先检查任务是否单一、输入是否完整、输出格式是否可执行、是否缺少示例、约束有没有冲突。限制越堆越多不一定更稳,很多时候问题出在主任务不清楚或示例不够代表。 3. Few-shot 示例应该怎么选,才不会把模型带偏? **参考思路:** 示例要覆盖真实边界,而不是只放一个漂亮样例。最好包含常见输入、边界输入、容易误判的输入,以及对应的正确输出。示例的格式要和最终期望完全一致,否则模型会学到错误模式。 4. System、User、Assistant 消息如果混着写,会给后续维护带来什么问题? **参考思路:** 规则、当前任务和历史输出混在一起后,很难判断哪条指令长期生效、哪条只针对本轮任务。工程化时应把稳定规则放 System,动态输入放 User,需要保留的历史再用 Assistant / 消息历史承接。 **本章小结:** - **提示词** 是你发给模型的输入内容;**提示词工程** 是系统化地设计、组织和优化输入,以稳定产出高质量结果。 - **六要素** 分别是:角色、任务、背景/上下文、输入数据、输出格式、质量与约束。并不是每次都要全部写满,但它们能帮你系统地检查 Prompt 是否完整。 - **Zero-shot / Few-shot** 的区别,本质上是不举例还是先示范;当任务边界难以用几句话说清时,Few-shot 往往更稳。 - **结构化组织** 是从“随手写一句话”走向“可维护系统”的关键一步。System 放稳定规则,User 放动态输入,Assistant 承接历史结果。 - **提示词工程有边界**:资料太多、流程太复杂、模型指令遵循能力不足、领域知识缺失时,单靠 Prompt 不够,通常要结合 RAG、工作流、微调或智能体。 **建议下一步:** 如果你按全书主线继续学,建议先看 [1-3 RAG、微调、续训与智能体选型](1-3-RAG、微调、续训与智能体选型.md),把“Prompt 什么时候够用、什么时候该交给 RAG、微调或智能体”这条边界彻底理顺;如果你想立刻进入代码侧的 Prompt 工程化组织方式,则可以接着看 [第 13 章 提示词与消息模板](13-提示词与消息模板.md)。