本文学习内容来自Anthropic提示工程课程文章目录一、基本提示词结构Basic Prompt Structure1.概述2.基本提示词结构2.Prompt写法示例3.System Prompt二、如何变得更加清晰直白1.概述2.举例三、角色提示词1.概述2.举例四、从指令中分离数据1.概述2.举例3.总结五、输出格式设定 让 Claude 按指定方式回复1.概述2.举例六、让模型一步步思考1.概述2.举例3.总结七、Few-Shot Prompting少样本提示学习1.概述2.举例八、避免产生幻觉1.概述2.举例九、复杂提示词从零搭建 —— 职业教练聊天机器人1.概述2.示例总结一、基本提示词结构Basic Prompt Structure1.概述第一章主要介绍函数CLAUDEMESSAGESCLAUDEMESSAGES函数可以接受几个参数1.你的指令2.模型的版本,3.可选的其他参数比如temperature, system prompt, max tokens2.基本提示词结构调用Claude基本的使用结构如下:CLAUDEMESSAGES({PROMPT}, {MODEL_VERSION}, system, {SYSTEM_PROMPT})调用Claude 3 Haiku模型提示词用A1指代可以这样写:CLAUDEMESSAGES(A1, claude-3-haiku-20240307, system, Respond only in Esperanto)注意system是给 AI 的全局规则比如只说中文、只输出 JSON、只回答技术问题等2.Prompt写法示例接下我们看看A1的内容怎么写左边是提示词内容右边是claude的回答错误写法1格式错误提示词前面要加 User2格式错误这里是一个多轮对话场景这里的第一个User相当于是一个历史对话“User” 和 “Assistant” 消息必须交替出现且对话必须以 “User:” 开头。3格式错误开头存在太多空行3.System PromptSystem Prompt 给 AI 的 “底层规则 身份设定 行为约束”。它不是用户问题它是悄悄告诉 AI 该怎么做人、怎么回答、遵守什么规矩。优先级非常高AI 会优先遵守系统提示下面是一个例子其他1在使用 CLAUDEMESSAGES() 时请务必在每条消息之间插入换行符来分隔消息一条消息指单次 User 或 Assistant 发言。如果你不这样做Claude 不会报错但会把所有没有用换行分隔的内容视为同一条消息。二、如何变得更加清晰直白1.概述本章给出一些要点使得提示词更加清晰直白2.举例这里让Claude写一个关于机器人的诗区别第二个提示词告诉AI不要铺垫直接给出诗句的内容当然也可以用System Prompt来实现三、角色提示词1.概述有时需要引导 Claude 扮演特定角色并附带所有必要的上下文信息这一方式也被称为角色提示。角色相关的上下文信息越详尽效果越好。通过为 Claude 设定角色能够提升其在写作、编程、内容总结等多个领域的表现。这就如同人类在被要求 “以______的视角思考” 时表现往往会得到提升一样。角色提示还能改变 Claude 回复的风格、语气与表达方式。2.举例在下面的示例中可以看到在未使用角色提示的情况下当被要求用一句话表达对滑板运动的看法时Claude 给出了直白、无特殊风格的回答。而当我们引导 Claude 扮演一只猫时它的视角随之改变回复的语气、风格和内容也会适配这一新角色。回答无角色滑板运动是一种令人兴奋且富有创意的自我表达形式它融合了运动能力、艺术表现力以及独特的自由感与群体归属感。回答猫咪角色喵呜滑板看起来是人类用四个轮子晃来晃去、还得费劲保持平衡的好玩法子不过我还是更喜欢追羽毛、在阳光下打盹儿。四、从指令中分离数据1.概述通常情况下我们无需编写完整的提示词而是可以先创建提示词模板在提交给 Claude 之前再填入额外的输入数据进行修改。如果你希望 Claude 每次执行相同的任务但每次使用的数据各不相同这种方式会非常实用。幸运的是实现这一点十分简单只需将提示词中固定不变的框架与可变的用户输入内容分离在发送完整提示词给 Claude 之前将用户输入内容代入模板即可。接下来我们将逐步讲解如何编写可代入变量的提示词模板以及如何将用户输入内容填充到模板中。2.举例3.总结提示词模板能简化重复性任务。五、输出格式设定 让 Claude 按指定方式回复1.概述Claude 可以通过多种方式对输出内容进行格式排版。你只需要明确要求它即可其中一种方式是使用 XML 标签将回复内容与其他多余文本区分开。2.举例1例子1这里要求输出的内容放在XML 标签里面1例子2技巧我们可以在 “Assistant:” 后面添加文本告诉 Claude 它已经说了某些内容这里我们将首个 XML 标签放在 “Assistant:” 之后。六、让模型一步步思考1.概述如果有人把你叫醒立刻抛出好几个复杂问题让你马上作答你会表现如何大概率不如先给你时间梳理思路再回答来得好。你猜怎么着Claude 也是一样。给 Claude 时间逐步思考有时能让它更准确尤其是处理复杂任务时。但关键在于思考必须说出来才算数。你不能让 Claude 思考却只输出答案 —— 这种情况下它实际上并没有真正进行思考。2.举例1例子1这是一个情感分析的场景第一个例子是用户让claude判断“这部电影凭借其新颖性和独创性让我大为震撼。顺带说一句毫不相干的我自 1900 年起就与世隔绝了”这句话是积极还是消极事实上这段话的情感是消极的人类读者能明显看出第二句话与第一句话相互矛盾。但 Claude 却过于字面化地理解了 “无关” 这个词。2例子2例子2对例子1进行了修改加入了角色“你是一名深谙电影评论解读的资深读者。”同时要求Claude在和 XML 标签中分别写出支持两种倾向的最佳论据然后给出结论。3例子3这里用户要求说出一部由 1956 年出生的演员主演的知名电影而claude给出了一个错误答案4例子4对例子3进行了优化要求claude先对一些演员和他们的生日在标签里进行头脑风暴3.总结为了优化 Claude 的回复我们可以先让 Claude 完整思考再给出答案。具体做法是明确写出 Claude 在处理和思考任务时应遵循的步骤。再配合一点角色提示就能让 Claude 更深入地理解这篇评论。七、Few-Shot Prompting少样本提示学习1.概述给样本提供正确的示例会提高模型的答案的正确性同时有利于模型答案的格式是正确的2.举例1例子1假设你是一名开发者正在开发一个能回应孩子问题的 “家长机器人”。Claude 的默认回复过于正式、生硬这会让孩子伤心的。2例子2你可以花时间去描述你想要的语气但更简单的方法是直接给 Claude 几个理想回复的示例。这里让Claude向例子中的A来回复八、避免产生幻觉1.概述Claude 有时会出现 “幻觉”说出不真实或没有依据的内容。好消息是你可以使用一些技巧来减少幻觉的发生。解决方法两种1允许 Claude 说不知道2强制模型先检索 / 提取依据、再推导结论倒逼其基于事实输出从源头减少无依据幻觉。2.举例1例子1询问谁是世界上最大的河马claude给出了错误的答案2例子2这里我们允许模型说不知道九、复杂提示词从零搭建 —— 职业教练聊天机器人1.概述现在是时候把所有知识整合起来学习如何创作独特且复杂的提示词了。接下来你将使用我们推荐的复杂提示词标准化结构进行练习。在本章后续内容中我们会展示一些适用于特定行业的提示词并讲解这些提示词是如何依照相似结构搭建的。注意并非所有提示词都需要包含以下复杂结构中的每一个要素。我们建议你多尝试调整按需增删要素观察这会对 Claude 的回复产生怎样的影响。通常最佳做法是先加入较多要素让提示词正常生效之后再对提示词进行精简优化。2.示例接下来介绍搭建职业教练聊天机器人包含的元素1 “User:” formatting以 User: 开头编写你的 CLAUDEMESSAGES () 提示词。2Task context为 Claude 提供上下文说明它应扮演的角色以及你希望它通过该提示词实现的目标和核心任务。建议这部分内容放在最前面3Tone context非必须告诉Claude回答的口吻4Detailed task description and rules详细说明你希望 Claude 执行的具体任务以及它需要遵守的所有规则。你也可以在这里为 Claude 设置一个 “退路”当它不知道答案或无法回应时应该如何表述。需确保这里的描述没有歧义5Examples为 Claude 提供至少一个理想回复范例供其模仿。将示例内容放在 XML 标签内。你可以提供多个示例如果提供多个请为每个示例说明对应的场景并将每个示例分别用一组独立的 XML 标签包裹。一般来说示例越多效果越好。6Input data to process非必需如果提示词中包含 Claude 需要处理的数据请在此处用对应的 XML 标签将其包含进来。你可以添加多条数据但每条数据都务必用独立的一组 XML 标签包裹7Immediate task description or request“提醒” Claude或明确告知它为完成提示词任务当下需要立即执行的操作。你也可以在这里加入额外变量比如用户的具体问题。在长提示词的末尾部分这样做效果最好比放在开头能得到更理想的结果。同时把用户的查询内容放在提示词靠近底部的位置通常也是一个不错的做法。8Precognition (thinking step by step)对于包含多个步骤的任务最好让 Claude 在给出答案前分步思考。有时你甚至可能需要明确说 “在给出答案之前……”以确保它会先执行这一步。并非所有提示词都需要这部分内容但如果要包含最好放在长提示词的末尾且紧跟在最终即时任务的要求或说明之后。9Output formatting如果你希望 Claude 以特定格式进行回复请清晰地告诉它具体格式要求。根据任务的不同这一要素可能并非必需。如果要添加放在提示词的末尾会比放在开头效果更好10Prefilling Claude’s response (if any这是一段用于引导 Claude 开头回复的预留区域你可以预先填写一些文字以此引导 Claude 的行为或回答方向。如果你想要预先填充 Claude 的回复内容必须写上 “Assistant:”并且必须单独起一行否则它会被算作 “User:” 对话轮次中的一部分在本练习中我们会为你自动完成这一步。总结以上就是今天要讲的内容本文仅仅简单介绍了prompt engneering
大模型学习day1:prompt engneering
本文学习内容来自Anthropic提示工程课程文章目录一、基本提示词结构Basic Prompt Structure1.概述2.基本提示词结构2.Prompt写法示例3.System Prompt二、如何变得更加清晰直白1.概述2.举例三、角色提示词1.概述2.举例四、从指令中分离数据1.概述2.举例3.总结五、输出格式设定 让 Claude 按指定方式回复1.概述2.举例六、让模型一步步思考1.概述2.举例3.总结七、Few-Shot Prompting少样本提示学习1.概述2.举例八、避免产生幻觉1.概述2.举例九、复杂提示词从零搭建 —— 职业教练聊天机器人1.概述2.示例总结一、基本提示词结构Basic Prompt Structure1.概述第一章主要介绍函数CLAUDEMESSAGESCLAUDEMESSAGES函数可以接受几个参数1.你的指令2.模型的版本,3.可选的其他参数比如temperature, system prompt, max tokens2.基本提示词结构调用Claude基本的使用结构如下:CLAUDEMESSAGES({PROMPT}, {MODEL_VERSION}, system, {SYSTEM_PROMPT})调用Claude 3 Haiku模型提示词用A1指代可以这样写:CLAUDEMESSAGES(A1, claude-3-haiku-20240307, system, Respond only in Esperanto)注意system是给 AI 的全局规则比如只说中文、只输出 JSON、只回答技术问题等2.Prompt写法示例接下我们看看A1的内容怎么写左边是提示词内容右边是claude的回答错误写法1格式错误提示词前面要加 User2格式错误这里是一个多轮对话场景这里的第一个User相当于是一个历史对话“User” 和 “Assistant” 消息必须交替出现且对话必须以 “User:” 开头。3格式错误开头存在太多空行3.System PromptSystem Prompt 给 AI 的 “底层规则 身份设定 行为约束”。它不是用户问题它是悄悄告诉 AI 该怎么做人、怎么回答、遵守什么规矩。优先级非常高AI 会优先遵守系统提示下面是一个例子其他1在使用 CLAUDEMESSAGES() 时请务必在每条消息之间插入换行符来分隔消息一条消息指单次 User 或 Assistant 发言。如果你不这样做Claude 不会报错但会把所有没有用换行分隔的内容视为同一条消息。二、如何变得更加清晰直白1.概述本章给出一些要点使得提示词更加清晰直白2.举例这里让Claude写一个关于机器人的诗区别第二个提示词告诉AI不要铺垫直接给出诗句的内容当然也可以用System Prompt来实现三、角色提示词1.概述有时需要引导 Claude 扮演特定角色并附带所有必要的上下文信息这一方式也被称为角色提示。角色相关的上下文信息越详尽效果越好。通过为 Claude 设定角色能够提升其在写作、编程、内容总结等多个领域的表现。这就如同人类在被要求 “以______的视角思考” 时表现往往会得到提升一样。角色提示还能改变 Claude 回复的风格、语气与表达方式。2.举例在下面的示例中可以看到在未使用角色提示的情况下当被要求用一句话表达对滑板运动的看法时Claude 给出了直白、无特殊风格的回答。而当我们引导 Claude 扮演一只猫时它的视角随之改变回复的语气、风格和内容也会适配这一新角色。回答无角色滑板运动是一种令人兴奋且富有创意的自我表达形式它融合了运动能力、艺术表现力以及独特的自由感与群体归属感。回答猫咪角色喵呜滑板看起来是人类用四个轮子晃来晃去、还得费劲保持平衡的好玩法子不过我还是更喜欢追羽毛、在阳光下打盹儿。四、从指令中分离数据1.概述通常情况下我们无需编写完整的提示词而是可以先创建提示词模板在提交给 Claude 之前再填入额外的输入数据进行修改。如果你希望 Claude 每次执行相同的任务但每次使用的数据各不相同这种方式会非常实用。幸运的是实现这一点十分简单只需将提示词中固定不变的框架与可变的用户输入内容分离在发送完整提示词给 Claude 之前将用户输入内容代入模板即可。接下来我们将逐步讲解如何编写可代入变量的提示词模板以及如何将用户输入内容填充到模板中。2.举例3.总结提示词模板能简化重复性任务。五、输出格式设定 让 Claude 按指定方式回复1.概述Claude 可以通过多种方式对输出内容进行格式排版。你只需要明确要求它即可其中一种方式是使用 XML 标签将回复内容与其他多余文本区分开。2.举例1例子1这里要求输出的内容放在XML 标签里面1例子2技巧我们可以在 “Assistant:” 后面添加文本告诉 Claude 它已经说了某些内容这里我们将首个 XML 标签放在 “Assistant:” 之后。六、让模型一步步思考1.概述如果有人把你叫醒立刻抛出好几个复杂问题让你马上作答你会表现如何大概率不如先给你时间梳理思路再回答来得好。你猜怎么着Claude 也是一样。给 Claude 时间逐步思考有时能让它更准确尤其是处理复杂任务时。但关键在于思考必须说出来才算数。你不能让 Claude 思考却只输出答案 —— 这种情况下它实际上并没有真正进行思考。2.举例1例子1这是一个情感分析的场景第一个例子是用户让claude判断“这部电影凭借其新颖性和独创性让我大为震撼。顺带说一句毫不相干的我自 1900 年起就与世隔绝了”这句话是积极还是消极事实上这段话的情感是消极的人类读者能明显看出第二句话与第一句话相互矛盾。但 Claude 却过于字面化地理解了 “无关” 这个词。2例子2例子2对例子1进行了修改加入了角色“你是一名深谙电影评论解读的资深读者。”同时要求Claude在和 XML 标签中分别写出支持两种倾向的最佳论据然后给出结论。3例子3这里用户要求说出一部由 1956 年出生的演员主演的知名电影而claude给出了一个错误答案4例子4对例子3进行了优化要求claude先对一些演员和他们的生日在标签里进行头脑风暴3.总结为了优化 Claude 的回复我们可以先让 Claude 完整思考再给出答案。具体做法是明确写出 Claude 在处理和思考任务时应遵循的步骤。再配合一点角色提示就能让 Claude 更深入地理解这篇评论。七、Few-Shot Prompting少样本提示学习1.概述给样本提供正确的示例会提高模型的答案的正确性同时有利于模型答案的格式是正确的2.举例1例子1假设你是一名开发者正在开发一个能回应孩子问题的 “家长机器人”。Claude 的默认回复过于正式、生硬这会让孩子伤心的。2例子2你可以花时间去描述你想要的语气但更简单的方法是直接给 Claude 几个理想回复的示例。这里让Claude向例子中的A来回复八、避免产生幻觉1.概述Claude 有时会出现 “幻觉”说出不真实或没有依据的内容。好消息是你可以使用一些技巧来减少幻觉的发生。解决方法两种1允许 Claude 说不知道2强制模型先检索 / 提取依据、再推导结论倒逼其基于事实输出从源头减少无依据幻觉。2.举例1例子1询问谁是世界上最大的河马claude给出了错误的答案2例子2这里我们允许模型说不知道九、复杂提示词从零搭建 —— 职业教练聊天机器人1.概述现在是时候把所有知识整合起来学习如何创作独特且复杂的提示词了。接下来你将使用我们推荐的复杂提示词标准化结构进行练习。在本章后续内容中我们会展示一些适用于特定行业的提示词并讲解这些提示词是如何依照相似结构搭建的。注意并非所有提示词都需要包含以下复杂结构中的每一个要素。我们建议你多尝试调整按需增删要素观察这会对 Claude 的回复产生怎样的影响。通常最佳做法是先加入较多要素让提示词正常生效之后再对提示词进行精简优化。2.示例接下来介绍搭建职业教练聊天机器人包含的元素1 “User:” formatting以 User: 开头编写你的 CLAUDEMESSAGES () 提示词。2Task context为 Claude 提供上下文说明它应扮演的角色以及你希望它通过该提示词实现的目标和核心任务。建议这部分内容放在最前面3Tone context非必须告诉Claude回答的口吻4Detailed task description and rules详细说明你希望 Claude 执行的具体任务以及它需要遵守的所有规则。你也可以在这里为 Claude 设置一个 “退路”当它不知道答案或无法回应时应该如何表述。需确保这里的描述没有歧义5Examples为 Claude 提供至少一个理想回复范例供其模仿。将示例内容放在 XML 标签内。你可以提供多个示例如果提供多个请为每个示例说明对应的场景并将每个示例分别用一组独立的 XML 标签包裹。一般来说示例越多效果越好。6Input data to process非必需如果提示词中包含 Claude 需要处理的数据请在此处用对应的 XML 标签将其包含进来。你可以添加多条数据但每条数据都务必用独立的一组 XML 标签包裹7Immediate task description or request“提醒” Claude或明确告知它为完成提示词任务当下需要立即执行的操作。你也可以在这里加入额外变量比如用户的具体问题。在长提示词的末尾部分这样做效果最好比放在开头能得到更理想的结果。同时把用户的查询内容放在提示词靠近底部的位置通常也是一个不错的做法。8Precognition (thinking step by step)对于包含多个步骤的任务最好让 Claude 在给出答案前分步思考。有时你甚至可能需要明确说 “在给出答案之前……”以确保它会先执行这一步。并非所有提示词都需要这部分内容但如果要包含最好放在长提示词的末尾且紧跟在最终即时任务的要求或说明之后。9Output formatting如果你希望 Claude 以特定格式进行回复请清晰地告诉它具体格式要求。根据任务的不同这一要素可能并非必需。如果要添加放在提示词的末尾会比放在开头效果更好10Prefilling Claude’s response (if any这是一段用于引导 Claude 开头回复的预留区域你可以预先填写一些文字以此引导 Claude 的行为或回答方向。如果你想要预先填充 Claude 的回复内容必须写上 “Assistant:”并且必须单独起一行否则它会被算作 “User:” 对话轮次中的一部分在本练习中我们会为你自动完成这一步。总结以上就是今天要讲的内容本文仅仅简单介绍了prompt engneering