hello大家好,我是大象,这是我们AI写作提示词的第5篇,前面四篇可以直接搜我之前的文章哦。这一期我们来讲一讲提示词的最佳实践的6个方法,废话不多说,直接开始
询问时包含详尽信息,能获取更相关的答复。
毕竟,大模型可猜不透我们的心思,有限信息里它没法“揣测”我的意图。所以问问题别吝啬字词,多讲点,多给些信息,这样能有效提升大模型回复的质量和丰富度。
我们看个例子:要是想让大模型给我列几个思维模型,本能的问法可能就是:“给我列几个思维模型”。然后常见这样的对话:
要是我愿意多给些信息,比如为啥需要这模型,让 ChatGPT 列三个,还有我已知的模型作参考,那 ChatGPT 就能给出更合我心意的回答:
再看个例子,假设想请 ChatGPT 帮我记住个抽象概念,可能随口就问:
但要是我停一停,多想一步,多给些细节,就能得到更满意的回答了:
最后,想通过 ChatGPT 了解提示词,这是个不好的例子:
我给个特定情景,再深入想想问题:
编写清晰的说明 - 角色扮演
策略一:编写清晰的说明
让模型扮演某个角色能显著提高回答质量
角色设定给模型提供了明确框架或指导。模型知道自己的角色,就能更准地按角色特点生成回答。同时,角色通常跟某种情境或背景有关,这给模型提供了更多上下文,能帮它更好理解问题意图。
当我让模型“请为我改写一篇文章”,它可能从很宽泛的角度执行任务,但要是给它设定角色:
“你是一位教育专家”
模型可能觉得我的文章是给教育行业或学生看的,生成的内容就会倾向这类受众的信息需求。
“你是一位艺术家”
模型可能觉得我需要更开放、有创意的文本。
“你是一位知名文学大师”
模型可能理解我想要更具文学美感的文本。
为了好理解,我先摘一段文本,试试让模型设定不同角色来改写:
现代认知心理思潮产生于 20 世纪 50 年代中期,60 年代后迅速发展,因奈瑟(U.Neisser)出版《认知心理学》一书而得名。
到了 80 年代,它已成为当前西方心理学界盛行的一个新流派,基本上取代了行为主义心理学而在西方心理学领域居主导地位。
认知心理学是以人类心理现象中认识过程为主要研究对象的一门学科。它是广义的认知科学(包括计算机科学、通讯科学、语言学、逻辑学、人类学的)一个重要分支。
“你是一位小学老师”
“你是一位艺术家”
(注:这部分生成文本存在大模型的“幻觉”问题,内容不能当真实信息理解。我在这例子里只关注角色对内容的影响,至于啥是“幻觉”问题,后面文章会细说。)
“你是一位知名文学大师”
从上面例子能明显看出,基于同一段文本,给模型设定不同角色后,它会根据角色背景选择改写文本的方式,来符合角色的学识、表述方式或人格。最后,用一段典型对话来理解不同角色对同一主题的评价:
编写清晰的说明 - 分隔符的重要作用写提示词时,要是想标注一整块独立内容,得用分隔符清楚标明输入内容的不同部分。这样能防止模型误解文本,把它跟我其他提示语句弄混。
分隔符可以这么用:三引号:""" 这里是要分隔的内容文本 """XML 标记:<引文> 这里是引用的文本
章节标题:用不同章节标题划分生成的内容段落,比如:第一章、第二章
Markdown 的代码块分隔符: 这里是要分隔的内容也可以是一些通常不连续出现的符号连续用,比如···+++但为了不跟其他代码语言或格式弄混,尽量用前三种分隔符方式。
不过,通常啥时候用这些分隔符呢?
为了把提示词设定和引用内容隔开,让模型明白它们是不同部分(不是我给的设定)
看个例子:
在这例子里,
第一次用 --- 这样的三连符号(Markdown 里的分隔符),框起一段参考文本。
这是为了不让引用的这段文本,跟我对模型的要求弄混,免得模型理解错。
第二次用 --- 这样的三连符号,框起一段特定格式。
这是为了不让我希望模型采用的生成格式,跟前文的设定还有参考文本弄混,免得生成结果乱套。
再看个简单好懂的例子:
在这例子里,把需要模型单独处理的任务文本用 ```这样的分隔符隔开,好让它清楚区分任务文本和任务设定。
有时候,也能直接用三引号:
上面这例子里,黄色框起的部分展示了这种用法:把需要用户输入的内容简单用分隔符区分开,这样模型会根据这部分信息执行 Prompt,而不是自己生成内容。
要是需要 ChatGPT 理解整段 Prompt 并接着对话和操作,就得同时用两个符号:
橙色框里是把这段 Prompt 单独以代码块形式分隔出来,这样不会跟上下文弄混。
绿色框里是上面段落提到的三引号引文的作用。
编写清晰地说明 - 示例的重要作用
提供示例是约束生成内容的很有效办法,要是能给模型提供跟当前查询相关的可信信息,就能让模型用提供的信息写答案。
比如可以这么做:
我会给一段参考文本和一个问题。
你的任务是:只用提供的文档回答问题,还要引用回答问题用的文档段落。
要是文件里没有回答问题需要的信息,就写“信息不足”。要是提供了问题的答案,必须注明引用文本。用下面格式引用相关段落({"引用":...})。
先看看这么做的效果:
能看到在这例子里,ChatGPT 出色完成了任务,这是因为我提供了准确的参考文本,也把任务需求说得很清楚。要是接着追问参考文本里没提到的内容,大模型会回答:
能看出这么做的好处是能很明确大模型的回答。对参考文本的信任能直接用到大模型给的回答里,这回答也是可信的。
编写清晰地说明 - 指定任务所需的步骤
有些任务用一连串步骤指定更好。把步骤写清楚能让模型更容易照着做。
这么做是指:
比如突然想让 ChatGPT 推理个复杂问题。与其直接让它说推理的最终答案,不如告诉它完成推理要几步,让它按步骤思考并生成内容。这样能大大提高推理的靠谱程度,也方便我自己检查中间的问题。
这么做的好处有:
明确:具体步骤能确保模型或执行者清楚知道要干啥,避免误解或遗漏。
结构化:步骤化的任务更有条理,能帮模型或执行者按逻辑顺序执行,保证任务连贯。
效率:任务分成小步骤,模型能更高效完成每个步骤,不会在不知道咋做时浪费时间。
容易监控:明确的步骤让监控任务进度更简单。能清楚知道哪些步骤完成了,哪些还没开始。
减少错误:具体步骤能减少执行任务时犯错。每步都明确,模型就不容易出错。
方便复查:要是任务结果不如预期,有明确步骤能帮我回溯分析问题出在哪步,好调整。
提高透明度:对用户来说,明确步骤能帮我理解任务执行过程,工作更透明。
看看实际操作的简单例子:
算个稍微复杂的购票方案时,要是直接问最终方案:
能看到上面模型给了错答案。但把计算步骤拆得更详细后,注意到 3.5 还是容易算错,得给更多辅导思路才能答对:
而 4.0 靠简单的步骤提示就能准确完成推理,回答也更简洁清楚。
编写清晰地说明 - 指定所需的格式/长度
可以让模型生成给定目标长度的输出。
可以用字数、句数、段落数、要点数等来指定目标输出长度。
但要注意,让模型生成特定字数,尤其是中文,准确度不高。模型生成特定段落数或要点数的输出更可靠。凭空生成句子:
因为 token 计算的问题,很难让模型生成特定准确字数,比如
这例子里能看到,虽然让模型输出 20 个字(中文字符),但它实际生成了 33 个中文文字,38 个中文字符(含标点)。
我可以进一步做更详细的约束和要求,让它达到想要的效果:
但要注意,不管咋样,这都不太稳定。相对来说,约束句子数量比明确要求字数稳定得多。而且相对来说,ChatGPT 4 在这要求上的表现比 3.5 版本稳定多了:
对既有文本的概括或改写:但要是给一段明确文本,让模型概括,效果会好很多,下面是把三引号里的内容(约 200 字)概括成 50 字的例子,实际生成了 56 个字符,52 个字。
同样,我可以用这样的提示方法:
用两个段落概括用三引号分隔的文本。"""在此处插入文本"""
用 3 个要点概括用三引号分隔的文本。"""在此处插入文本"""
可以明确要求模型按特定数量的字、句子、要点生成内容。
但对中文来说,因为字符和 token 的映射机制还有
中文的上下文生成机制问题,精确符合字数的生成不稳定。
但对引用文本的概括或修改,效果相对会好很多。
END:
最后我想说的是:写作是一件能让你一直受益的事,所以你应该坚持不懈地去做,不要放弃!
我是大象,一个专注于AI写作的自媒体玩家,最近做课很忙,但是我们对AI的学习和教学一直没停过。 很多学员觉得AI变化太快了,跟不上它的步伐,其实不用急,只要我们不断地学习AI,努力地跟上,就不会被时代落下。