碎碎念

2023 年,最火的可能就是 openAI 了,其组织代表的产品 chatGTP,相信大家已经有所耳闻。不少同学已经开始着手使用,并截图晒出 ChatGPT 是多么得智能与神奇。而有的同学在使用之后觉得有点差强人意,指出顶多算是一个比较聪明的聊天机器人而已。

其实,ChatGPT 的难点,在于 Prompt(提示词)的编写。从 ChatGPT 发布之后,如何写好 Prompt 已经成为了一个分水岭。熟练掌握 Prompt 编写的人,能够很快让 ChatGPT 理解需求,并很好的执行任务。

只要你的 Prompt 写的足够好,ChatGPT 可以帮你快速完成很多工作,包括写爬虫脚本、金融数据分析、文案润色与翻译等等,并且这些工作还做的比一般人出色。

总结

通过学习,我认为编写 prompt 是一个自我完善、优化的过程。最开始我们可以从简单开始,比如一句简单的指令。当我们得到 AI 的反馈后,我们可以逐步去调教优化迭代 prompt,直到 AI 给到我们满意的反馈为止。

在实际操作中我发现,只要通过一个好的迭代过程来不断改进 Prompt,那么就能够得到一个适合任务的 Prompt,最后 AI 会给到我期望的回答以完成任务。这个成就感是特别强烈的。

最终,一个优秀的 prompt,通常可以从这种通用性比较强的套路模板开始,然后逐步优化迭代:

指令:想要模型执行的特定任务或指令。

上下文:包含外部信息或额外的上下文信息,引导语言模型更好地响应。

输入数据:用户输入的内容或问题。

输出指示:指定输出的类型或格式。

使用

编写 Prompt 的原则

  1. 编写清晰、具体的指令
  • 使用分隔符清晰地表示输入的不同部分,分隔符可以是:```,"",<>,"<tag></tag>"
  • 要求一个结构化的输出,可以是 Json、HTML 等格式
  • 要求模型检查是否满足条件
  • 提供少量示例
  1. 给模型时间去思考
  • 指定完成任务所需的步骤
  • 指导模型在下结论之前找出一个自己的解法

举例

编写清晰、具体的指令

1.使用分隔符清晰地表示输入的不同部分,分隔符可以是:```,"",<>,"<tag></tag>"

把用三个双引号括起来的文本总结成一句话:

"""
你应该提供尽可能清晰、具体的指示,以表达你希望模型执行的任务。这将引导模型朝向所需的输出,并降低收到无关或不正确响应的可能性。不要将写清晰的提示与写简短的提示混淆。在许多情况下,更长的提示可以为模型提供更多的清晰度和上下文信息,从而导致更详细和相关的输出。
"""

2.要求一个结构化的输出,可以是 Json、HTML 等格式

请生成包括书名、作者和类别的三本虚构书籍清单,并以 JSON 格式提供,其中包含以下键:book_id、title、author、genre。

3.要求模型检查是否满足条件

如果任务做出的假设不一定满足,我们可以告诉模型先检查这些假设,如果不满足,指示并停止执行。

您将获得由三个双引号括起来的文本。如果它包含一系列的指令,则需要按照以下格式重新编写这些指令:

第一步 - ...
第二步 - ...
...
第N步 - ... 如果文本中不包含一系列的指令,则直接写"未提供步骤"。
"""
今天阳光明媚,鸟儿在歌唱。这是一个去公园散步的美好日子。鲜花盛开,树枝在微风中轻轻摇曳。人们外出享受着这美好的天气,有些人在野餐,有些人在玩游戏或者在草地上放松。这是一个完美的日子,可以在户外度过并欣赏大自然的美景。
"""

4.要求模型检查是否满足条件

在要求模型执行实际任务之前,提供给它少量成功执行任务的示例,这样 AI 会变得更加聪明

你的任务是以一致的风格回答问题。

<孩子>: 耐心是什么

<祖父母>: 挖出最深峡谷的河流源于一处不起眼的泉眼;最宏伟的交响乐从单一的音符开始;最复杂的挂毯以一根孤独的线开始编织。

<孩子>: 韧性是什么

给模型时间去思考

1.指定完成任务所需的步骤

当一句话不能准确描述出需求时,我们可以通过列举 1234 的方式来让 AI 逐步进行

步骤:
"""
1. 用一句话概括下面用<>括起来的文本。
2. 将摘要翻译成英语。
3. 在英语摘要中列出每个名称。
4. 输出一个 JSON 对象,其中包含以下键:English_summary,num_names。
"""
请使用以下格式输出:
"""
文本:<要总结的文本>
摘要:<摘要>
翻译:<摘要的翻译>
名称:<英语摘要中的名称列表>
输出 JSON:<带有 English_summary 和 num_names 的 JSON>
"""
文本:
<在一个迷人的村庄里,兄妹杰克和吉尔出发去一个山顶井里打水。他们一边唱着欢乐的歌,一边往上爬,然而不幸降临——杰克绊了一块石头,从山上滚了下来,吉尔紧随其后。虽然略有些摔伤,但他们还是回到温馨的家中。尽管出了这样的意外,他们的冒险精神依然没有减弱,继续充满愉悦地探索。>

2.指导模型在下结论之前找出一个自己的解法

在判断正误时,可以让 AI 自己先思考解决方法,再进行对比,这样我们会得到更好的结果

请判断学生的解决方案是否正确,请通过如下步骤解决这个问题。
步骤:
"""
1. 首先,根据学生的解决方案格式自己先解决问题。
2. 然后将你的解决方案与学生的解决方案进行比较,并评估学生的解决方案是否正确。在自己完成问题之前,请勿决定学生的解决方案是否正确。
"""
使用以下格式输出:
"""
问题:问题文本
学生的解决方案:学生的解决方案文本
你的解决方案和步骤:你的解决方案文本和步骤文本
学生的解决方案和你的解决方案是否相同:是或否
学生的成绩:正确或不正确
"""
问题:
"""
我正在建造一个太阳能发电站,需要帮助计算财务:
- 土地费用为每平方英尺100美元
- 我可以以每平方英尺250美元的价格购买太阳能电池板
- 我已经谈判好了维护合同,每年需要支付固定的10万美元,并额外支付每平方英尺10美元 请计算首年运营的总费用是多少?
"""
学生的解决方案:
"""
设x为发电站的大小,单位为平方英尺。
费用:
1. 土地费用:100x
2. 太阳能电池板费用:250x
3. 维护费用:100,000+100x 总费用:100x+250x+100,000+100x=450x+100,000
"""

参考资料:《ChatGPT Prompt Engineering for Developers》

文章来自 Yongchin'blog yongchin.xyz

Open AI ChatGPT Prompt 学习之基础篇的更多相关文章

  1. 一步步学习javascript基础篇(0):开篇索引

    索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...

  2. 一步步学习javascript基础篇(3):Object、Function等引用类型

    我们在<一步步学习javascript基础篇(1):基本概念>中简单的介绍了五种基本数据类型Undefined.Null.Boolean.Number和String.今天我们主要介绍下复杂 ...

  3. Python3学习(1)-基础篇

    Python3学习(1)-基础篇 Python3学习(2)-中级篇 Python3学习(3)-高级篇 安装(MAC) 直接运行: brew install python3 输入:python3 --v ...

  4. Python学习笔记基础篇——总览

    Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

  5. Python学习笔记——基础篇【第一周】——变量与赋值、用户交互、条件判断、循环控制、数据类型、文本操作

    目录 Python第一周笔记 1.学习Python目的 2.Python简史介绍 3.Python3特性 4.Hello World程序 5.变量与赋值 6.用户交互 7.条件判断与缩进 8.循环控制 ...

  6. java学习笔记-基础篇

    Java基础篇 1—12 常识 13 this关键字 14参数传递 16 继承 17 访问权限 28—31异常 1—12 常识 1.文件夹以列表展示,显示扩展名,在地址栏显示全路径 2.javac编译 ...

  7. Java学习路线-基础篇!

    下面以黑马程序员Java学院的学习路线为例,进行一次史无前例的剖析,我会采取连载的形式,细致的讲解零基础的人怎么学习Java.先看下Java在基础阶段的知识点路线图. 内容多吗?不要被吓到了,知识点剖 ...

  8. 一步步学习javascript基础篇(8):细说事件

    终于学到事件了,不知道为何听到“事件”就有一种莫名的兴奋.可能是之前的那些知识点过于枯燥无味吧,说起事件感觉顿时高大上了.今天我们就来好好分析下这个高大上的东西. 可以说,如果没有事件我们的页面就只能 ...

  9. 一步步学习javascript基础篇(5):面向对象设计之对象继承(原型链继承)

    上一篇介绍了对象创建的几种基本方式,今天我们看分析下对象的继承. 一.原型链继承 1.通过设置prototype指向“父类”的实例来实现继承. function Obj1() { this.name1 ...

  10. 一步步学习javascript基础篇(4):面向对象设计之创建对象(工厂、原型和构造函数等模式)

    前面我们介绍了可以通过Object构造函数或对象字面量都可以用来创建单个对象,但是如果需要创建多个对象的话,显然很多冗余代码. 接下来介绍几种模式来创建对象.不过在此之前,我们还是先来了解下 type ...

随机推荐

  1. 机器学习(三):朴素贝叶斯+贝叶斯估计+BP人工神经网络习题手算|手工推导与习题计算

    1.有 1000 个水果样例. 它们可能是香蕉,橙子或其它水果,已知每个水果的 3 种特性:是否偏长.是否甜.颜色是否是黄色 类型 长 不长 甜 不甜 黄色 非黄 Total 香蕉 400 100 3 ...

  2. 关于Java中的异常处理(详细)

    Error:Java虚拟机无法解决的严重问题.如:JVM系统内部错误.资源耗尽等严重情况.比如:StackOverflowError和OOM.一般不编写针对性的代码进行处理 Exception:其它因 ...

  3. Plot函数用法详解——R语言

    plot是R中的基本画图工具,直接plot(x),x为一个数据集,就能画出图,soeasy!但是细节往往制胜的关键,所以就详细来看看plot的所有可设置参数及参数设置方法.R语言的基础绘图系统主要由基 ...

  4. [Linux]常用命令之【nl/sed/awk/wc/xargs/perl】

    nl nl : 在linux系统中用来计算文件中行号. nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补 ...

  5. 浏览器层面优化前端性能(1):Chrom组件与进程/线程模型分析

    现阶段的浏览器运行在一个单用户,多合作,多任务的操作系统中.一个糟糕的网页同样可以让一个现代的浏览器崩溃.其原因可能是一个插件出现bug,最终的结果是整个浏览器以及其他正在运行的标签被销毁. 现代操作 ...

  6. MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图

    MQTT(EMQX) - Linux CentOS Docker 安装 MQTT 概述 MQTT (Message Queue Telemetry Transport) 是一个轻量级传输协议,它被设计 ...

  7. day107:MoFang:Python操作MongoDB数据库:PyMongo

    目录 PyMongo 1.PyMongo安装 2.数据库连接 3.数据库管理 4.集合管理 5.文档管理 PyMongo 1.PyMongo安装 pip install pymongo 2.数据库连接 ...

  8. hadoop伪分布式集群的安装(不是单机版)

    准备工作 三台虚拟机,关闭防火墙,关闭selinux 查看防火状态 systemctl status firewalld 暂时关闭防火墙 systemctl stop firewalld 永久关闭防火 ...

  9. STM32启动分析之main函数是怎样跑起来的

    1.MDK目标文件 1)MDK中C程序编译后的结果,即可执行文件数据分类: RAM ZI bss 存储未初始化的或初始化为0的全局变量和静态变量 heap 堆,系统malloc和free操作的内存 s ...

  10. Dokcer应用部署(搭建Wordpress网站)

    实现多个容器之间的协同,搭建Wordpress网站,要用到3个容器,Wordpress.MariaDB和Nginx 拉取镜像 使用docker pull拉取3个镜像: $ sudo docker pu ...