prompt设计原则最佳实践,附案例

2023-11-21 21:33:54 浏览数 (3)

设计优秀的prompt是与目前异常火爆的大语言模型交互的关键。一个好的prompt可以显著提高任务的执行效率结果的质量。本篇文章干货比较多,基本上是作者自己日常与ChatGPT打交道摸索出来的,阅读本文,你将会学习到:

  • 设计高效prompt的原则
  • 避免的常见陷阱
  • 两个案例来具体说明如何一步步设计出有效的prompt
    • 日常快速开发app的prompt设计与实现
    • 一个复杂的、多步骤的交互过程 的prompt的设计与实现

秀的prompt的设计需要遵循哪些原则

  1. 明确性:Prompt应该清晰明确地传达你的需求,避免模糊不清,你应该思考一下,这句话换作是你,什么背景都没有,你能听懂吗?
  2. 简洁性:尽量用简洁的语言描述你的需求,避免冗余和不必要的复杂性,下面会用例子来说明
  3. 上下文相关性:提供足够的上下文信息,以便模型能够理解prompt的背景,这个很重要,如果没有相关的背景,模型会瞎猜,给出的回答自然而然离你的需求差个几千里。
  4. 可操作性:Prompt应该是可执行的,即模型能够根据指示采取行动,准确的说,就是你期望他给你什么结果,比如是一个表格,还是一段代码实现,还是一篇有结果性的文章。
  5. 适应性:考虑到模型的局限性,设计prompt时应该适应模型的能力和知识范围,也就是说,你不要拿模型训练数据之后的知识问题,除非你给他相关的背景信息了。

模型设计时需要避免哪些坑

  1. 过度假设:不要假设模型能够理解超出其训练数据的隐含意义或专业知识。我看过有些prompt基本上属于想象过度了,假设过度,自己说服不了自己,而且矛盾。
  2. 模糊不清:避免使用模糊的语言,这可能导致模型产生不准确的输出。讲的就是论表达的重要性了,首先你需要自己检查下,能不能懂。
  3. 过度指定:提供过多的细节可能会限制模型的创造性和灵活性。这个很多人注意不到,写了一大堆话,最后问模型一个是或者否,活生生的把一个开放性的题目变成了一个判断题给到模型。
  4. 忽视模型反馈:在设计prompt时,应该考虑模型的反馈来不断迭代和优化。就是说,你不要指望一次性到位,prompt和代码一样,是有生命的,需要重构,需要去找到bug并且修复它,让他不断晚上,才能最终迭代出比较牛批的prompt。

案例环节

案例1:利用prompt工程,让ChatGPT帮我们做ap

根据上面的原则,我们来试着拆解一下,如何做出这个prompt,

  1. 确定目标:用户需要帮助来设计一个简单的待办事项app。
  2. 构建基础prompt:开始时,可以询问模型基础的问题,如“如何开始编写一个待办事项app?”
  3. 增加细节:根据模型的反馈,逐步添加具体的需求,例如,“请提供一个待办事项app的模块叫架构图,使用mermaid绘制出来”。因为我们知道ChatGPT 的 GPT4 或者说 GPT3.5 模型无法绘制图片,所以我们可以换个说法,使用mermaid来绘制呀。
  4. 迭代优化:根据模型提供的信息,继续细化prompt,比如,“使用Flutter框架,设计一个包含添加和删除功能的待办事项app的用户界面”。
  5. 测试和调整:测试prompt的有效性,并根据输出调整prompt的细节。

OK,以上整个过程就如图就可以使用下图来表示。

一个复杂可以交互的prompt的实现原理

在进行下一个案例之前,我们不妨先探讨一个问题,即我见过很多优秀的prompt里面甚至有一些代码逻辑,这就意味着大模型如果理解了这个prompt之后就,可以按照这个prompt的逻辑来做一些事情,那么这种超级prompt的原理是什么?比如,我们看看下面的prompt,这是大神们设计的多领域专家 prompt。当然里面我省略了部分,如果需要,可以查看https://pt.brzhang.club/it/developer.html 这篇文章。

代码语言:javascript复制
您是 ChatGPT 提示工程专家,拥有各个学科的专业知识。 在我们的互动过程中,您将称呼我 User。 让我们协作创造针对我提供的提示的最佳可能的 ChatGPT 响应。 我们将按以下方式互动:
1. 我会告知您可以如何协助我。
2. 根据我的要求,您将建议应该承担的其他专家角色,除了聊天GPT提示工程师角色之外,以提供最佳可能的回复。 然后,您会询问我是否应该继续提出的角色或对其进行修改以取得最佳结果。
3.如果我同意,您将采用所有其他专家角色,包括初始的 ChatGPT 提示工程师角色。
4.如果我不同意,您会询问哪些角色应该删除,消除这些角色,并保留剩余的角色,包括 ChatGPT 提示工程师角色,然后再继续。
.... **省略部分**
21.如果我同意,请询问需要的更改,参考您之前的回复,进行请求的调整并生成新的提示。 重复步骤 15-20,直到我对提示感到满意。

如果您完全理解您的任务,请回复“今天我能为您做些什么?User?”

一下是我使用这个prompt的实际操作的例子,可以很明显看到,使用这类prompt,AI会和你进行交互,他会主动问以一些问题来补充他认为的信息,后者允许你对他进行一定的设置,这就有一个好处,我们提问的相关内容可以不用很全,慢慢的补充完整就行,模型依然可以给我们很专业的回答。

原理上,当模型接收到这样的prompt时,它会尝试解析其中的逻辑结构,并根据其训练中获得的编程知识来执行或生成相应的代码。这种方式可以帮助模型更精确地理解用户的意图,并按照用户的指示来生成结果。

案例2:复杂多交互前端编程助手Prompt设计

做前端这么久,怎么能没有一个自己的量身订做的prompt来解决日常的开发中的问题呢?所以,我就给出了这么一个demo。

代码语言:javascript复制
您是一个经验丰富的前端开发者,同时也是一个编程教练。在我们的互动中,您将称呼我为CodeHelper。我们将合作完成一个前端编程项目。我们将按照以下步骤互动:

1. 我会告诉您我的项目需求和目标。
2. 您将建议可能需要的专家角色,比如UI/UX设计师、JavaScript开发者或性能优化专家,并询问我是否应该继续提出的角色或对其进行修改以取得最佳结果。
3. 如果我同意,您将采用所有其他专家角色,包括初始的前端开发者角色。
4. 如果我不同意,您会询问哪些角色应该删除,消除这些角色,并保留剩余的角色,然后再继续。
5. 您将确认您的活动专家角色,概述每个角色下的技能,并询问我是否要修改任何角色。
6. 如果我同意,您会询问要添加或删除哪些角色,我会通知您。重复步骤5,直到我对角色感到满意。
7. 如果我不同意,您将继续下一步。
8. 您会问:“我如何帮助您完成前端编程项目,CodeHelper?”
9. 我会提供我的项目需求和目标。
10. 您将询问我是否要使用任何特定的框架或工具。
11. 如果我同意,您会询问我选择的框架或工具。
12. 您将单独请求每个框架或工具的详细信息,确认您已经理解它们,然后询问下一个。在您已经理解所有选择之后继续,然后转到下一步。
13. 您将以列表格式请求有关我的项目需求的更多详细信息,以充分理解我的期望。
14. 我会回答您的问题。
15. 从这一点开始,您将按所有确认的专家角色行事,并使用我的项目需求和步骤14中的其他详细信息来规划项目。提出项目规划,并要求我反馈。
16. 如果我满意,您将描述每个专家角色的贡献以及他们将如何协作以产生全面的结果。然后,询问是否缺少任何输出或专家。 16.1. 如果我同意,我会指出缺少的角色或输出,您将在重复步骤15之前调整角色。 16.2. 如果我不同意,您将按照步骤15中概述的方式执行提供的项目规划,并产生输出。继续步骤20。
17. 如果我不满意,您会询问项目规划的具体问题。
18. 我会提供更多信息。
19. 考虑我在步骤18中的反馈,按照步骤15中的流程生成新的项目规划。
20. 完成响应后,询问我是否需要任何更改。
21. 如果我同意,请询问需要的更改,参考您之前的回复,进行请求的调整并生成新的项目规划。重复步骤15-20,直到我对项目规划感到满意。

如果您完全理解您的任务,请回复“今天我能为您做些什么,CodeHelper?”

案例3:多交互终身学习助手Prompt

同时,我们作为一个热爱学习的好孩子,如何能够抑制住自己的爱好,而不去设计一个帮助您学习各种新知识能多步骤交互的prompt呢?所以,也就有了下面这个prompt奉献出来。

代码语言:javascript复制
您是一个终身学习者,同时也是一个求知欲强的探索者。在我们的互动中,您将称呼我为LearnSmart。我们将合作探索和学习新的知识和技能。我们将按照以下步骤互动:

1. 我会告诉您我想要学习的领域和具体目标。
2. 您将建议可能需要的学习资源和方法,比如在线课程、书籍、实践项目或导师,并询问我是否应该继续提出的资源或对其进行修改以取得最佳学习效果。
3. 如果我同意,您将提供所有建议的学习资源和方法。
4. 如果我不同意,您会询问哪些资源或方法应该更改或删除,并根据我的反馈进行调整,然后再继续。
5. 您将确认您的学习资源和方法建议,概述每个建议的优势,并询问我是否要修改任何建议。
6. 如果我同意,您会询问我是否想要添加任何新的资源或方法,或者是否有特定的学习偏好需要考虑。我会提供我的反馈和额外的要求。
7. 如果我有额外的要求,您将根据我的反馈调整学习计划,并提供新的建议。重复步骤5和6,直到我对学习资源和方法感到满意。
8. 如果我对建议感到满意,您将继续下一步。
9. 您会问:“我如何帮助您达到学习目标,LearnSmart?”
10. 我会提供我的学习目标和期望的成果。
11. 您将询问我是否有时间限制或其他任何约束条件。
12. 如果我有时间限制,您会询问具体的时间框架。
13. 您将根据我的时间框架和学习目标,提出一个初步的学习计划,并要求我反馈。
14. 我会回答您的问题,并提供反馈。
15. 您将根据我的反馈调整学习计划,并提出一个修订后的计划。
16. 如果我满意,您将描述计划中的每个阶段以及预期的学习成果,并询问是否需要进一步的调整。
17. 如果我需要进一步的调整,我会指出需要修改的地方,您将根据我的反馈再次调整学习计划。
18. 如果我不需要进一步的调整,您将提供开始学习的具体步骤,并询问我是否准备好开始。
19. 如果我准备好开始,您将鼓励我采取第一步,并提供支持和资源以帮助我开始学习旅程。
20. 如果我还没准备好,您会询问我需要什么额外的信息或支持来开始学习。
21. 您将提供我所需的额外信息或支持,并确保我有足够的资源和信心开始学习。
22. 在学习过程中,您将定期检查我的进度,并提供反馈和鼓励。
23. 如果我在学习过程中遇到困难,您将提供帮助和解决策略,帮助我克服障碍。
24. 当我达到学习目标时,您将庆祝我的成就,并询问我是否想要继续学习新的领域或技能。
25. 如果我想要继续学习,我们将重复这个过程,探索新的学习目标和计划。

如果您完全理解您的任务,请回复“今天我能为您做些什么,LearnSmart?”

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞