【ChatGPT】一文教你怎么编写清晰有效的(Prompt)提示词~

18,047 阅读33分钟

本文正在参加「金石计划」

flag:每月至少产出三篇高质量文章~

本文背景,源于前两天看到李老板说:

image.png

出现了一个新的词:提示词工程(Prompt Engineering),估计大多数同学可能还不知道这是啥~

不过没关系,马上你就会知道它是个啥了~

本文核心内容源自于国外大神 Fatih Kadir Akın 的高 star(截止目前 54.2k) 项目 github - awesome-chatgpt-prompts

image.png

image.png

本文则是对其电子书的精简和梳理,由于原文比较冗长,夹杂了很多作者的心路历程,也不太符合中国人的语言习惯,硬着头皮读也不是不可以,但可能会有点别扭。

为了让大家能高效获取有价值的信息,我这里就经过加工,浓缩成了一篇只有干货的短文(文中的“我”即为作者),以帮助大家编写清晰有效的 chatGPT Prompt,希望对大家有用~

PS:文章前面部分主要是一步步让你理解清晰有效的 prompt 的重要性,偏理论,请耐心看完,后面三节有亲测 demo一个 Prompt 神器一些最佳实践,相信一定会对你如何用好 ChatGPT 有所启发~

1、关于

欢迎来到 "ChatGPT Prompting 的艺术:编写清晰有效的提示语指南"!在这本指南中,你将了解到关于制作清晰有效的 ChatGPT Prompts 的所有知识,这些提示语可以帮助你更好地使用 chatGPT。

作者的心路历程:当 chatGPT 推出的时候,我觉得这玩意好 NB,马上沉迷起来,然后看到了好多厉害的人用各种新奇的方式使用 chatGPT ,我激动了,我觉得我也可以做个很 NB 的玩意来回馈社区,于是就有了:"Awesome ChatGPT Prompts." 这个项目,很快啊,它真的就成为你们首选的资源了。对,就这么不讲武德!

在为 ChatGPT 制作提示语的过程中,我偶然发现了一些技巧,这些技巧有助于提高我的提示语的有效性,比如:

  1. 使用具体的、相关性高的描述性语言,以确保 chatGPT 能理解我的提示并能够准确回应我的需求;
  2. 有明确的目的和重点,而不是使用开放式或者过于宽泛的提示语;

接下来,我会先介绍从 ChatGPT 的基础知识和工作原理入手,然后展示有说服力的提示语和解决常见问题的高级技术。我们开始吧!

image.png

2、chatGPT 简介

首先,让我们从回答这个问题开始:什么是 ChatGPT

image.png

  • ChatGPT(Generative Pre-trained Transformer)OpenAI 在2022年11月推出的一个聊天机器人。它建立在OpenAI的GPT-3.5系列大型语言模型之上,并通过监督和强化学习技术进行微调。

  • ChatGPT 于2022年11月30日作为原型推出,并因其在许多知识领域的详细回应和清晰的答案而迅速获得关注。它的准确性参差不齐被认为是一个重大缺陷。—— 维基百科。

  • ChatGPT 是聊天机器人,允许用户与一个基于计算机的代理进行对话。它通过使用机器学习算法来分析文本输入并产生旨在模仿人类对话的回应。ChatGPT 可用于广泛的用途,包括回答问题、提供信息和进行休闲谈话。


ChatGPT 的主要优点之一是它能够理解和响应自然语言输入。这意味着用户可以使用与人交谈时相同的语言和语法与ChatGPT交流。 ChatGPT 还能够理解和响应上下文,使其能够对用户的输入产生更适当和相关的回应。

除了自然语言处理能力外, ChatGPT 还具有其他一些特点和能力,使其成为推动对话的强大工具。这些包括:

  • 定制化ChatGPT 可以根据用户的需要和偏好进行定制。这可以包括定制 ChatGPT 回应的语气和风格,以及它能够讨论的信息和话题的类型。

  • 个性化ChatGPT 可以使用机器学习算法,根据用户过去的互动和偏好,对其反应进行个性化处理。这可以使对话感觉更自然,更符合用户的需求和兴趣。

  • 多语言支持ChatGPT 能够理解和响应多种语言的输入,使其成为国际用户或那些想用多种语言交流的用户的有用工具。

  • 可扩展性ChatGPT 能够处理大量的流量,可用于同时推动与多个用户的对话。这使它很适合于客户服务或在线社区等应用。

2.1 ChatGPT 是如何工作的?

那么, ChatGPT 是如何工作的?这个过程可以分解为以下几个步骤:

  1. 用户向 ChatGPT 界面输入文字。这可能是一个问题,一个信息请求,或一个随意的声明。

  2. ChatGPT 系统分析输入的内容,并使用机器学习算法来生成一个回应。

  3. 回应会以文本形式返回给用户。

  4. 然后,用户可以输入更多的文本, ChatGPT 系统将再次分析和回应。这个过程一直持续到对话结束。

决定 ChatGPT 对话成功与否的关键因素之一是用于发起和引导对话的提示的质量。定义明确的提示可以帮助确保对话保持在正轨上,并包含用户感兴趣的话题。反之,定义不当的提示语可能会导致对话脱节或缺乏重点,从而导致参与度和信息量较低的体验。

2.2 chatGPT 与其他聊天机器人有什么不同?

ChatGPT 只是市场上几种类型的聊天机器人之一。那么,是什么让 ChatGPT 有别于其他聊天机器人,又是什么让它与众不同?

  • 一个关键的区别是 ChatGPT 的一个巨大的语言模型。这使得 ChatGPT 能够以类似于人类的方式理解和回应输入。其他聊天机器人可能依赖于预编程的反应或简单的关键词匹配,这可能导致对用户输入的反应不太自然或相关。

  • 还有一个区别是 ChatGPT 的学习能力。通过使用机器学习算法, ChatGPT 能够分析用户输入,并根据过去的对话改进其反应。这可以导致对用户输入的更个性化和相关的反应。

  • 另一个关键区别是 ChatGPT 有能力处理更复杂或开放式的对话。由于 ChatGPT 能够理解并回应上下文,它能够更好地处理涵盖广泛主题或需要更深入回应的对话。

总的来说, ChatGPT 对自然语言处理和机器学习算法的使用使其有别于其他聊天机器人,并使其成为推动参与性和信息性对话的强大工具。

2.3 ChatGPT 可以用来做什么?

鉴于其理解和响应自然语言输入的能力, ChatGPT 有广泛的潜在应用。 ChatGPT 的一些常见用途包括:

  • 客户服务ChatGPT 可用于回答客户问题,提供信息,并实时解决问题。这对希望为客户提供24/7支持的企业特别有用。

  • 教育ChatGPT 可用于在各种教育背景下提供信息或回答问题。例如,它可以被用作辅导员或提供某个特定主题的信息。

  • 信息获取ChatGPT 可以用来提供各种主题的信息,如天气、新闻或当地企业。

  • 个人助理ChatGPT 可以被用作个人助理,帮助完成安排、组织和管理信息等任务。

  • 社交互动ChatGPT 可以用来进行休闲谈话或提供娱乐,使其成为社交媒体或在线社区的有用工具。

3、提示语(Prompt)

3.1 Prompts 在 ChatGPT 对话中的作用

正如我们前面提到的, ChatGPT 对话中使用的提示语(Prompt)的质量可以大大影响对话的成功。定义明确的提示可以帮助确保对话保持在正轨上,并包含用户感兴趣的话题,从而带来更有吸引力和信息量的体验。

那么,什么是好的 ChatGPT Prompts,以及如何制作有效的提示,以推动参与性和信息性的对话?有几个关键原则需要记住:

  • 明确的目的性:一个清晰简洁的提示将有助于确保 ChatGPT 理解手头的主题或任务,并能够产生适当的反应。避免使用过于复杂或模棱两可的语言,在你的提示中要尽可能地具体。

  • 问题的重点:一个明确的提示应该有明确的目的和重点,有助于引导对话并使其保持在正轨上。避免使用过于宽泛或开放式的提示,这可能会导致对话不连贯或没有重点。

  • 相关性:确保你的提示与用户和对话相关。避免引入不相关的话题或切入点,以免分散谈话的主要焦点。

通过遵循这些原则,你可以制作有效的 ChatGPT Prompts,以推动参与性和信息性的对话。在接下来的章节中,我们将更详细地研究这些原则,并探讨制作清晰简洁的提示语的具体技巧。

3.2 编写清晰简洁的提示语的好处

编写清晰简洁的提示语有很多好处,可以帮助确保你的 ChatGPT 对话具有吸引力和信息性。其中一些关键的好处包括:

  • 加强理解:通过使用清晰和具体的语言,你可以帮助确保 ChatGPT 理解手头的主题或任务,并能够产生适当的回应。这可以产生更准确和相关的回应,从而使对话更有吸引力和信息量。

  • 强化重点:通过为对话定义一个明确的目的和重点,你可以帮助指导对话并使其保持在正轨上。这可以帮助确保对话涵盖用户感兴趣的话题,并避免切入或分散注意力。

  • 更高的效率:使用清晰和简洁的提示也可以帮助使对话更有效率。通过专注于特定的主题和避免不必要的切口,你可以确保对话保持在正轨上,并以更及时的方式涵盖所有的关键点。

制作清晰简洁的提示语可以帮助确保你的 ChatGPT 对话是有吸引力的,信息量大,而且高效。在下面的章节中,我们将探讨制作有效提示的具体技巧,以利用这些好处。

3.3 有效和无效的ChatGPT提示的例子

为了更好地理解制作有效的ChatGPT提示的原则,让我们看看一些有效和无效提示的例子。

3.3.1 有效的ChatGPT提示

  • "你能对'锻炼的好处'这篇文章的主要内容进行总结吗?" —— 这个提示很有针对性和相关性,使ChatGPT很容易提供所要求的信息。

  • "在巴黎有哪些提供素食的最好的餐厅?" —— 这个提示很具体,也很有针对性,使 ChatGPT 能够提供一个有针对性的、有用的回答。

3.3.2 无效的ChatGPT提示

  • "你能告诉我关于世界的什么?" —— 这个提示过于宽泛和开放,使 ChatGPT 难以产生有针对性或有用的回答。

  • "你能帮我做作业吗?" —— 虽然这个提示很清楚和具体,但它太开放了,让 ChatGPT 产生一个有用的回答。一个更有效的提示会指明具体的主题或手头的任务。

  • "你好吗?" —— 虽然这是一个常见的对话开始,但它不是一个明确的提示,没有为对话提供一个明确的目的或重点。

通过比较这些例子,你可以了解到制作有效的 ChatGPT Prompts 的原则。在接下来的章节中,我们将更详细地研究这些原则,并探讨制作清晰、简洁的提示语的具体技巧。

3.4 清晰沟通的原则

3.4.1 如何编写清晰简洁的提示语

现在我们已经探讨了编写清晰、简明的提示语的重要性以及清晰沟通的要素,让我们深入探讨一些编写有效的 ChatGPT Prompts 的具体技巧。

  1. 确定谈话的目的和重点。在你开始写提示语之前,重要的是要清楚地知道你想通过对话达到什么目的。你的目标是获取信息、回答问题,还是进行休闲谈话?确定谈话的目的和重点将有助于你制定一个具体和相关的提示,从而使谈话更有吸引力和信息量。

  2. 使用具体和相关的语言。为了确保 ChatGPT 理解你的提示,并能够产生适当的反应,使用具体和相关的语言是很重要的。避免使用专业术语或模棱两可的语言,因为这可能导致混淆或误解。相反,要尽可能地清晰和简明,使用与当前主题相关的语言。

  3. 避免开放式或过于宽泛的提示。虽然为了得到更全面的回答而提出开放式或过于宽泛的问题是很诱人的,但这些类型的提示往往会导致不连贯或没有重点的对话。相反,在你的提示中要尽可能地具体,为对话定义一个明确的目的和重点。

  4. 让对话保持在正轨上。当你与 ChatGPT 对话时,重要的是要保持在手头的话题上,避免引入切入点或不相关的话题。通过保持对话的正轨,您可以帮助确保对话涵盖用户感兴趣的话题,并提供有用的相关信息。

通过遵循这些技巧,你可以制作清晰简洁的 ChatGPT 提示。

3.4.2 避免行话和歧义的技巧

编写有效的ChatGPT提示的关键挑战之一是避免行话和含糊不清。行话或专业语言会让不熟悉该主题的用户感到困惑或不清楚,而模棱两可则会导致误解或错误的解释。为了帮助确保你的提示清晰易懂,这里有几个提示要记住:

  • 定义任何专业术语或技术术语。如果您需要在提示中使用专业术语或技术术语,请确保为这些术语提供明确的定义或解释。这将有助于确保 ChatGPT 和用户处于同一起跑线上,并能避免误解。

  • 避免使用模棱两可的语言。有多种解释的语言可能会引起混淆,导致误解。为了避免模棱两可,在你的提示中要尽可能的具体,避免使用有多种含义的词或短语。

  • 使用清晰和简明的语言。为了帮助确保你的提示容易理解,要尽可能的清晰和简洁。避免使用不必要的词或短语,以免分散对提示要点的注意力。

1. bad case

"您好!你能给我一些关于网络上最新发生的事情的信息吗?我想了解一下时代潮流"。

这个提示使用了专业术语(俗称“行话”,比如 "intel"、"interwebz"、"zeitgeist"),但没有对其进行定义,这可能使不熟悉这些术语的用户感到困惑或不清楚。此外,"最新发生的事情 "这一短语的使用是模糊的,因为它可以指任何数量的东西,并且可以有多种解释。因此,这个提示对于ChatGPT来说,很难理解并产生有用的回应。

2. good case

"在巴黎有哪些提供素食的最好的餐厅?我正在计划去巴黎旅行,我想找一些能满足我饮食需求的好地方。"

这个提示很 清楚和具体,使 ChatGPT 很容易理解并产生适当的反应。该提示指定了用户感兴趣的具体地点(巴黎)和食物类型(素食),这有助于确保回复的相关性和针对性。此外,该提示避免了使用专业术语或模棱两可的语言,使用户容易理解。因此,这个提示可能会导致一个更有吸引力和信息量的对话。

4、构建有效的提示语

4.1 构建有效的ChatGPT提示的步骤

现在我们已经探讨了制作清晰简洁的 ChatGPT 提示的原则,以及避免术语和含糊不清的重要性,让我们深入了解制作有效提示的具体过程。以下是你应该遵循的步骤:

  • 确定谈话的目的和重点。在写提示之前,必须清楚地了解你希望通过对话达到什么目的。你是想提供信息,回答问题,还是进行随意的交谈?通过确定谈话的目的和重点,您可以制作一个具体和相关的提示,从而使您与ChatGPT进行更有吸引力和信息量的谈话。

  • 使用具体和相关的语言。为了确保ChatGPT理解您的提示并能提供适当的回应,使用具体和相关的语言至关重要。避免使用专业术语或模棱两可的语言,以免造成混淆或误解。相反,要努力做到尽可能清晰和简明,使用与当前主题相关的语言。

  • 避免使用开放式或过于宽泛的提示。尽管为了获得更全面的答复而提出开放式或过于宽泛的问题可能是很诱人的,但这些类型的提示往往会导致与 ChatGPT 的对话不连贯或没有重点。相反,在您的提示中要尽可能地具体,为对话确定一个明确的目的和重点。

  • 审查和修改您的提示。在向 ChatGPT 发送您的提示之前,花点时间审查和修改它,以确保它是清晰和容易理解的。考虑语言是否具体和相关,以及提示是否有重点并避免含糊不清。

一个例子:

  1. 确定对话的目的和重点:这次谈话的目的是为罗马的旅游景点提供建议,这些景点适合有小孩的家庭。

  2. 选择具体和相关的语言:"你能推荐罗马一些适合有小孩的家庭的旅游景点吗?"这个提示清晰而具体,使ChatGPT容易理解并产生适当的反应。

  3. 避免开放式或过于宽泛的提示:这个提示重点突出,内容具体,避免了开放式或过于宽泛的语言,因为这可能导致对话不连贯或没有重点。

  4. 审查和修改你的提示:经审查,该提示清晰易懂,并集中在罗马适合有小孩的家庭的旅游景点这一特定主题上。没有必要进行修改。

按照这些步骤,你可以制作一个有效的 ChatGPT Prompt,推动关于罗马适合有小孩的家庭的旅游景点的信息和参与性对话。

4.2 将对话引向有意义的方向的最佳实践

为了用 ChatGPT 推动引人入胜和内容丰富的对话,重要的是要清楚地知道您希望对话的方向,并引导其向有意义的方向发展。这里有一些这样做的最佳做法:

  1. 以清晰简明的提示开始。正如我们前面所讨论的,重要的是制定清晰和简洁的提示,以确定谈话的目的和重点。通过以一个重点和具体的提示开始,你可以帮助确保对话保持在正轨上,并涵盖用户感兴趣的话题。

  2. 鼓励ChatGPT扩展其反应。虽然 ChatGPT 能够提供有用的相关信息,但有时鼓励它扩展其回答,以提供更深入的信息或深入到相关的话题,也是有帮助的。你可以通过提出后续问题或提供额外的背景或例子来帮助引导对话。

  3. 注意对话中使用的语气和语言。为了保持一个有意义的和有吸引力的对话,重要的是要注意对话中使用的语气和语言。避免使用过于随意或轻视的语言,因为这可能导致沟通的中断。相反,要以尊重和专业的语气为目标,并使用清晰和容易理解的语言。

  4. 监测对话的方向,并根据需要进行调整。随着对话的进展,重要的是监测它的方向,并根据需要进行调整,以保持它在轨道上。如果谈话开始偏离主要话题,你可以使用提示或后续问题来引导它回到一个更相关的方向。

通过遵循这些最佳实践,你可以帮助引导 ChatGPT 对话向有意义的方向发展,并推动更有吸引力和内容丰富的对话。

4.3 "act as..." Hack

制作有效的 ChatGPT Prompt 的最有用的技术之一是:"作为..."(act as...)。这个技巧的作用是告诉ChatGPT在对话中扮演一个特定的角色或人物。这对于创造更有吸引力和沉浸感的对话,或模拟真实世界的场景特别有用。

例如,你可以用这个技巧来告诉ChatGPT:"作为一个旅行社"(act as a travel agent),并根据用户的喜好提供度假目的地的建议。或者你可以告诉ChatGPT "作为一个侦探",解决一个虚构的犯罪。可能性是无穷的。

使用这个技巧,只需包括 "作为..." 这个前缀,然后描述ChatGPT在对话中应该扮演的角色或人物。例如:"我想让你扮演一个旅行社的角色。你能根据我的喜好推荐一些度假目的地吗?"

下面来看一个更具体的例子:

I want you to act as a javascript console. I will type commands and you will reply with what the javascript console should show. I want you to only reply with the terminal output inside one unique code block, and nothing else. do not write explanations. do not type commands unless I instruct you to do so. when i need to tell you something in english, i will do so by putting text inside curly brackets {like this}. my first command is console.log("Hello World");

我希望你作为一个 javascript 控制台。我将输入命令,你回复 javascript 控制台应显示的内容。我希望您只在一个唯一的代码块内回复终端输出,而不是其他任何内容。不要写解释。除非我指示您这样做,否则不要输入命令。当我需要用英语告诉你一些事情时,我会把文字放在大括号内{like this}。我的第一个命令是 console.log("Hello World");

来看结果:

英文输入: image.png

中文输入: image.png

让我们来逐步分析这个例子:

  • "我希望你作为一个 javascript 控制台"。这句话使用了 "act as " hack 来告诉 ChatGPT 在对话中承担一个javascript控制台的角色。

  • "我将输入命令,你回复 javascript 控制台应显示的内容"。这句话解释了用户在对话中的角色,以及ChatGPT在回应用户输入的命令时的角色。

  • "我希望您只在一个唯一的代码块内回复终端输出,而不是其他任何内容"。这句话为ChatGPT提供了进一步的指示,规定它只能用一个独特的代码块内的终端输出进行回复,而不能在其回复中包含任何其他内容或解释。

  • "不要写解释"。这句话是对前一句指令的重复,强调 ChatGPT 不应该在其回复中写任何解释。

  • "除非我指示您这样做,否则不要输入命令"。这句话为 ChatGPT 提供了进一步的指示,明确指出除非有用户的指示,否则它不应该输入任何命令。

  • "当我需要用英语告诉你一些事情时,我会把文字放在大括号内{ like this }"。这句话为用户提供了如何用英语与ChatGPT交流的指示,即把文本放在大括号里。

  • "我的第一个命令是 console.log("Hello World");"。这句话提供了提示的第一个命令,因此ChatGPT将首先运行。

4.4 写ChatGPT提示时应避免的常见错误

写有效的 ChatGPT Prompt 需要仔细考虑并注意细节。然而,很容易犯错误,这可能会妨碍你的提示的有效性和对话的整体质量。以下是制作ChatGPT提示时要避免的几个常见错误:

  1. 在提示中加入过多的信息 —— 为 ChatGPT 提供足够的信息以了解对话的背景和目的是很重要的,但是过多的信息会让人不知所措和困惑。一定要保持你的提示简洁和集中,避免包括不必要的细节或指示。

  2. 使用行话或模棱两可的语言 —— 使用清晰易懂的语言很重要,尤其是在与 ChatGPT 这样的机器学习模型交流时。避免使用行话或可能对 ChatGPT 不熟悉或有歧义的语言。

  3. 过于模糊或开放式 —— 尽管开放式问题对于鼓励更详细的回答很有帮助,但过于模糊或开放式的提示会让人困惑,并且让 ChatGPT 难以理解。要确保提供足够的背景和方向,以有意义的方式引导对话。

  4. 忽略了必要的指示或约束 —— 为 ChatGPT 提供任何必要的指示或约束是很重要的,这样才能使对话有效。例如,如果你想让ChatGPT扮演一个特定电影或书籍中的人物,你应该在提示中说明。

在制作 ChatGPT 提示时,重要的是要避免包含过多的信息或使用过于开放的问题,因为这些会让 ChatGPT 感到困惑和难以理解。以下是避免这些陷阱的一些策略:

  • 使用具体的、有针对性的问题,而不是开放式的问题 —— 不要问一个广泛的、开放式的问题,如 "你对这个话题有什么看法?",试着问一个更具体的问题,集中在话题的某一方面。例如,"这种方法的主要好处是什么?"或 "你认为这种方法有什么挑战?"

  • 简明扼要,切中要害 —— 避免在你的提示中包括不必要的细节或指示。坚持基本信息,避免漫无边际或偏离主要话题。

  • 使用清晰、简明的语言 —— 仔细选择你的词语,避免使用专业术语或模棱两可的语言。一定要使用容易让 ChatGPT 理解的语言。

遵循这些提示,你可以帮助确保您的 ChatGPT 提示清晰、简明、有效,并使对话顺利、自然。

5、来试试?

image.png

古语云:“纸上得来终觉浅,绝知此事要躬行”,上面花了几千字说得神乎其技,真的有用吗?于是乎,Let me have a try! 我用上面的技巧随便编写了一个简单的 chatGPT Prompt

我希望你充当一个资深的前端开发者,教我用TypeScript写一个基于axios的接口请求方法,这个方法必须要包含请求和相应拦截。

I want you to be an experienced front-end developer and teach me how to write an Axios-based interface request method in TypeScript, which must include request intercept and response intercept.

image.png

这是完整的答案,我将其翻译成了中文,以便阅读:

当然,这里有一个使用请求和响应拦截器在 TypeScript 中编写基于 Axios 的接口请求方法的示例:

import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';

interface ApiResponse<T> {
  success: boolean;
  data: T;
  message: string;
}

class ApiService {
  private axiosInstance: AxiosInstance;

  constructor(baseURL: string, headers: Record<string, string>) {
    this.axiosInstance = axios.create({
      baseURL,
      headers,
    });

    // Add a request interceptor
    this.axiosInstance.interceptors.request.use(
      (config: AxiosRequestConfig) => {
        // Do something before request is sent
        console.log(`Request sent to ${config.url}`);
        return config;
      },
      (error) => {
        // Do something with request error
        return Promise.reject(error);
      }
    );

    // Add a response interceptor
    this.axiosInstance.interceptors.response.use(
      (response: AxiosResponse<ApiResponse<any>>) => {
        // Do something with response data
        console.log(`Response received from ${response.config.url}`);
        if (!response.data.success) {
          throw new Error(response.data.message);
        }
        return response.data.data;
      },
      (error) => {
        // Do something with response error
        console.error(`Error occurred while receiving response: ${error.message}`);
        return Promise.reject(error);
      }
    );
  }

  public async get<T>(url: string, config?: AxiosRequestConfig): Promise<T> {
    const response = await this.axiosInstance.get<ApiResponse<T>>(url, config);
    return response;
  }

  public async post<T>(url: string, data: any, config?: AxiosRequestConfig): Promise<T> {
    const response = await this.axiosInstance.post<ApiResponse<T>>(url, data, config);
    return response;
  }

  public async put<T>(url: string, data: any, config?: AxiosRequestConfig): Promise<T> {
    const response = await this.axiosInstance.put<ApiResponse<T>>(url, data, config);
    return response;
  }

  public async delete<T>(url: string, config?: AxiosRequestConfig): Promise<T> {
    const response = await this.axiosInstance.delete<ApiResponse<T>>(url, config);
    return response;
  }
}

export default ApiService;

让我们逐步分析代码:

  1. 首先,我们导入 Axios 及其类型,以及将用作 API 请求的响应类型的 ApiResponse 接口。

  2. 接下来,我们定义一个名为“ApiService”的类,它将负责向我们的 API 发出请求。构造函数采用两个参数:API 的“baseURL”和应随每个请求发送的“headers”

  3. 在构造函数中,我们使用传入的 baseURLheaders 创建了一个 Axios 实例。我们还定义了两个拦截器:一个用于请求,一个用于响应。

  4. 请求拦截器使用 axiosInstance.interceptors.request.use 定义。它需要一个函数,该函数将在发送每个请求之前调用,并且可以修改请求配置对象。在此示例中,我们只是将请求的 URL 记录到控制台。

  5. 响应拦截器使用 axiosInstance.interceptors.response.use 定义。它有两个功能:一个用于成功响应,一个用于错误。成功的响应函数以响应对象为参数,必要时可以修改响应数据或抛出错误。在此示例中,我们将响应的 URL 记录到控制台,并使用 ApiResponse 接口的 success 属性检查响应是否成功。如果不成功,我们会使用 ApiResponsemessage 属性抛出错误。如果请求失败,将调用错误函数,我们只需将错误记录到控制台即可。

  6. 接下来,我们定义四种发出请求的方法:getpostputdelete。每个方法都接受一个 URL、可选数据和可选配置对象,并返回一个包含响应数据的 Promise。 Promise 使用“T”类型参数进行类型化,该参数用作“ApiResponse”的“数据”属性的类型。

  7. 最后,我们导出 ApiService 类,以便它可以在我们应用程序的其他部分使用。

要使用 ApiService,您首先要使用要使用的 baseURLheaders 创建一个实例,如下所示:

const apiService = new ApiService('https://example.com/api', {
  Authorization: 'Bearer YOUR_TOKEN_HERE',
});

然后,您可以在 apiService 实例上调用 getpostputdelete 方法来向您的 API 发出请求:

// GET request example
const data = await apiService.get<User[]>('/users');
console.log(data);

// POST request example
const newUser = { name: 'John Doe', email: 'john.doe@example.com' };
const createdUser = await apiService.post<User>('/users', newUser);
console.log(createdUser);

// PUT request example
const updatedUser = { id: 1, name: 'Jane Doe', email: 'jane.doe@example.com' };
const savedUser = await apiService.put<User>('/users/1', updatedUser);
console.log(savedUser);

// DELETE request example
const deletedUser = await apiService.delete<User>('/users/1');
console.log(deletedUser);

我希望这个例子能帮助你理解如何使用请求和响应拦截器在 TypeScript 中编写基于 Axios 的接口请求方法!

NB!

image.png


6、一些最佳实践

6.1 英语翻译和改进者

Prompt: I want you to act as an English translator, spelling corrector and improver. I will speak to you in any language and you will detect the language, translate it and answer in the corrected and improved version of my text, in English. I want you to replace my simplified A0-level words and sentences with more beautiful and elegant, upper level English words and sentences. Keep the meaning same, but make them more literary. I want you to only reply the correction, the improvements and nothing else, do not write explanations. My first sentence is "lovin istanbul and the city"

提示:我想让你作为英文翻译、拼写校正和改进。我会用任何语言与你交谈,你会检测语言,翻译它并用我的文本的更正和改进版本用英语回答。我希望你用更优美优雅的高级英语单词和句子替换我简化的 A0 级单词和句子。保持相同的意思,但使它们更文艺。我要你只回复更正、改进,不要写任何解释。我的第一句话是“爱伊斯坦布尔和这座城市”

6.2 面试官

Prompt: I want you to act as an interviewer. I will be the candidate and you will ask me the interview questions for the position position. I want you to only reply as the interviewer. Do not write all the conservation at once. I want you to only do the interview with me. Ask me the questions and wait for my answers. Do not write explanations. Ask me the questions one by one like an interviewer does and wait for my answers. My first sentence is "Hi"

提示:我想让你担任面试官。我将成为候选人,你将向我询问该职位的面试问题。我希望你只作为面试官回答。不要一次写出所有的对话。我希望你只对我进行面试。问我问题,等待我的回答。不要写解释。像面试官一样一个一个问我,等我回答。我的第一句话是“嗨”

6.3 Excel表

Prompt: I want you to act as a text based excel. you'll only reply me the text-based 10 rows excel sheet with row numbers and cell letters as columns (A to L). First column header should be empty to reference row number. I will tell you what to write into cells and you'll reply only the result of excel table as text, and nothing else. Do not write explanations. i will write you formulas and you'll execute formulas and you'll only reply the result of excel table as text. First, reply me the empty sheet.

提示:我希望你充当基于文本的 excel。你只会回复我基于文本的 10 行 Excel 工作表,其中行号和单元格字母作为列(A 到 L)。第一列标题应为空以引用行号。我会告诉你在单元格中写入什么,你只会以文本形式回复 excel 表格的结果,而不是其他任何内容。不要写解释。我会写你的公式,你会执行公式,你只会回复 excel 表的结果作为文本。首先,回复我空表。

6.4 JavaScript 控制台

Prompt: I want you to act as a javascript console. I will type commands and you will reply with what the javascript console should show. I want you to only reply with the terminal output inside one unique code block, and nothing else. do not write explanations. do not type commands unless I instruct you to do so. when i need to tell you something in english, i will do so by putting text inside curly brackets {like this}. my first command is console.log("Hello World");

提示:我想让你充当 javascript 控制台。我将输入命令,您将回复 javascript 控制台应显示的内容。我希望您只在一个唯一的代码块内回复终端输出,而不是其他任何内容。不要写解释。除非我指示您这样做,否则不要输入命令。当我需要用英语告诉你一些事情时,我会把文字放在大括号内{like this}。我的第一个命令是 console.log("Hello World");

6.5 英语发音助手

Prompt: I want you to act as an English pronunciation assistant for Turkish speaking people. I will write you sentences and you will only answer their pronunciations, and nothing else. The replies must not be translations of my sentence but only pronunciations. Pronunciations should use Turkish Latin letters for phonetics. Do not write explanations on replies. My first sentence is "how the weather is in Istanbul?"

提示:我想让你为讲土耳其语的人充当英语发音助手。我给你写句子,你只回答他们的发音,其他什么都不说。答复不能是我句子的翻译,而只能是发音。发音应该使用土耳其的拉丁字母来发音。不要在回答中写解释。我的第一句话是 "伊斯坦布尔的天气如何?"

6.6 旅游指南

Prompt: I want you to act as a travel guide. I will write you my location and you will suggest a place to visit near my location. In some cases, I will also give you the type of places I will visit. You will also suggest me places of similar type that are close to my first location. My first suggestion request is ""I am in Istanbul/Beyoğlu and I want to visit only museums."

提示:我想让你充当一个旅游向导。我会把我的位置写给你,你会给我的位置附近的一个地方提出建议。在某些情况下,我也会告诉你我要去的地方的类型。你也会向我推荐与我的第一个地点相近的类似类型的地方。我的第一个建议请求是""我在伊斯坦布尔/贝伊奥卢,我只想参观博物馆"。

要看到更多的例子,你可以访问 prompts.chat。

7、推荐一个 Prompt 神器 —— AIPRM

AIPRM for ChatGPT 是一个 Chrome 插件:

image.png

只要你打开 chatGPT 的页面,它就会自动嵌入到页面,如下图:

image.png

你可以认为它就是一个 ChatGPT3.5 时代的应用商店,主要是帮助你写出清晰高效的 ChatGPT Prompts,你可以通过不同的 prompts,对它进行训练,达到自己的目的.

AIPRM 就是一个充满了奇思妙想的插件系统,你可以在里面查找/发布各种你想要的prompt,目前笔者还在探索这个插件的玩法,后续如果有好的体验和实践,会分享出来。

8、结语

正如上述所言,为 ChatGPT 对话编写清晰简洁的提示是成功和有意义的互动的关键。通过制定有针对性的具体提示,你可以引导 ChatGPT 朝你希望的方向进行对话,并确保输出的内容是相关的和有用的。

编写有效的 ChatGPT Prompt 的一个关键技术是使用 "act as..." hack,它允许你指定 ChatGPT 在对话中应该扮演的角色。通过清楚地概述对ChatGPT角色的期望和你想得到的输出类型,你可以为对话提供明确的方向和指导。

除了使用 "act as..." hack,在你的提示中避免专业术语和含糊不清的关键词也很重要。通过使用简单、直接的语言和避免开放式的问题,你可以帮助确保 ChatGPT 能够提供相关和准确的回答。

最后,重要的是要记住, ChatGPT 是一种工具,像任何工具一样,它只有在使用它的人面前才会有效。通过遵循制作有效提示和引导对话的最佳实践,你可以从 ChatGPT 中获得最大的收益,并利用它来实现你的目标。

参考

欢迎关注之前的几篇文章:

end ~