大模型学习day1:prompt engneering
本文总结了Anthropic提示工程课程的主要内容,重点介绍了如何有效使用Claude模型。课程涵盖基本提示结构、清晰表达技巧、角色提示、数据分离方法、输出格式控制、分步思考策略、少样本学习、避免幻觉以及构建复杂提示等核心内容。
本文学习内容来自Anthropic提示工程课程
文章目录
一、基本提示词结构(Basic Prompt Structure)
1.概述
第一章主要介绍函数CLAUDEMESSAGES()
CLAUDEMESSAGES()函数可以接受几个参数:1.你的指令,2.模型的版本,3.可选的其他参数(比如temperature, system prompt, max tokens)
2.基本提示词结构
调用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)格式错误:提示词前面要加 User:
(2)格式错误:这里是一个多轮对话场景,这里的第一个User相当于是一个历史对话,“User” 和 “Assistant” 消息必须交替出现,且对话必须以 “User:” 开头。
(3)格式错误:开头存在太多空行
3.System Prompt
System 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 () 提示词。
(2)Task context:为 Claude 提供上下文,说明它应扮演的角色,以及你希望它通过该提示词实现的目标和核心任务。(建议这部分内容放在最前面)
(3)Tone context(非必须):告诉Claude回答的口吻
(4)Detailed task description and rules:详细说明你希望 Claude 执行的具体任务,以及它需要遵守的所有规则。你也可以在这里为 Claude 设置一个 “退路”:当它不知道答案或无法回应时,应该如何表述。(需确保这里的描述没有歧义)
(5)Examples:为 Claude 提供至少一个理想回复范例供其模仿。将示例内容放在 XML 标签内。你可以提供多个示例;如果提供多个,请为每个示例说明对应的场景,并将每个示例分别用一组独立的 XML 标签包裹。(一般来说:示例越多,效果越好。)
(6)Input data to process(非必需):如果提示词中包含 Claude 需要处理的数据,请在此处用对应的 XML 标签将其包含进来。你可以添加多条数据,但每条数据都务必用独立的一组 XML 标签包裹
(7)Immediate task description or request:“提醒” Claude,或明确告知它为完成提示词任务当下需要立即执行的操作。你也可以在这里加入额外变量,比如用户的具体问题。(在长提示词的末尾部分这样做效果最好,比放在开头能得到更理想的结果。
同时,把用户的查询内容放在提示词靠近底部的位置,通常也是一个不错的做法。)
(8)Precognition (thinking step by step):对于包含多个步骤的任务,最好让 Claude 在给出答案前分步思考。有时,你甚至可能需要明确说 “在给出答案之前……”,以确保它会先执行这一步。(并非所有提示词都需要这部分内容,但如果要包含,最好放在长提示词的末尾,且紧跟在最终即时任务的要求或说明之后。)
(9)Output formatting:如果你希望 Claude 以特定格式进行回复,请清晰地告诉它具体格式要求。(根据任务的不同,这一要素可能并非必需。如果要添加,放在提示词的末尾会比放在开头效果更好)
(10)Prefilling Claude’s response (if any):这是一段用于引导 Claude 开头回复的预留区域,你可以预先填写一些文字,以此引导 Claude 的行为或回答方向。
如果你想要预先填充 Claude 的回复内容,必须写上 “Assistant:”,并且必须单独起一行,否则它会被算作 “User:” 对话轮次中的一部分(在本练习中,我们会为你自动完成这一步)。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了prompt engneering
更多推荐

所有评论(0)