不写代码、年薪百万,带你玩赚ChatGPT提示工程-提示应用程序

news2025/1/31 8:11:44

文章目录

  • 前言
  • 一、数据生成
  • 二、PAL (Program-Aided Language Models): Code as Reasoning
  • 总结


前言

随着ChatGPT的大火,提示工程在大模型中的重要性不言而喻,本文参考国外Prompt Engineering Guide完成国内中文版本的《提示工程指南》,希望能够和大家一起交流,分享及发现提示工程的美妙之处。文章所有内容可以在ChatGPT_Prompt_Chinese中找到。

在之前的指南中,我们介绍并给出了Prompt的高级示例。

在本指南中,我们将介绍一些高级和有趣的方式,我们可以使用提示工程来执行有用和更高级的任务。

需要注意的是,在本章节我们将会引入ChatGPT的API,进行一定量的工程实践。


一、数据生成

LLM 具有生成文本的强大能力。使用有效的提示策略可以引导模型产生更好、更一致、更真实的响应。 LLM 还可以特别用于生成数据,这对于运行各种实验非常有用。例如,我们可以使用它来为情感分类器生成快速样本,如下所示:

Prompt:

为情感分析生成 10 个样本。样本分为正面和负面两类。生成 2 个负面样本和 8 个正面样本。使用以下格式为样本编写问题和答案:
问题:<句子>
答案:<情感>

Output:

问题:这家餐厅的服务员态度很恶劣,让人感到非常不舒服。
答案:负面

问题:我最喜欢的歌手今晚开演唱会了,我太兴奋了!
答案:正面

问题:我刚刚丢了钱包,里面有我所有的信用卡和现金,我感到非常沮丧。
答案:负面

问题:今天天气真是太好了,阳光明媚,心情愉悦。
答案:正面

问题:这本小说真是太好看了,我一口气读完了整本书。
答案:正面

问题:我的手机掉进水里了,无法正常工作了,我感到非常烦恼。
答案:负面

问题:我的朋友们今天都来我家玩,我们一起吃了美食,玩了好几个小时,我感到非常愉快。
答案:正面

问题:我被一辆出租车撞了,虽然没有受伤,但是我的车被撞坏了,我感到很不开心。
答案:负面

问题:我终于找到了一份满意的工作,薪水还不错,我感到非常开心。
答案:正面

问题:我的狗狗生了一窝可爱的小狗,它们都很健康,我感到非常高兴。
答案:正面

这非常有用。实际上,我们在指南的另一个部分中使用此示例进行了不同的测试。

二、PAL (Program-Aided Language Models): Code as Reasoning

Gao et al., (2022) 该方法使用LLMs读取自然语言问题并生成程序作为中间推理步骤。称为程序辅助语言模型(PAL),它与链式思维(COT)提示不同,因为它不是使用自由形式的文本来获取解决方案,而是将解决方案步骤卸载到程序运行时,如 Python 解释器。
在这里插入图片描述
让我们使用 LangChain 和 OpenAI GPT-3 来看一个示例。我们有兴趣开发一个简单的应用程序,该应用程序能够解释所提出的问题并通过利用 Python 解释器提供答案。

具体而言,我们有兴趣创建一个功能,允许使用 LLM 来回答需要日期理解的问题。我们将向 LLM 提供一个提示,其中包含一些示例,这些示例是从以下内容采用的:

import openai
from datetime import datetime
from dateutil.relativedelta import relativedelta
import os
from langchain.llms import OpenAI
from dotenv import load_dotenv

让我们首先配置一些东西:

load_dotenv()

# API configuration
openai.api_key = os.getenv("OPENAI_API_KEY")

# for LangChain
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")

设置模型实例:

question = "Today is 27 February 2023. I was born exactly 25 years ago. What is the date I was born in MM/DD/YYYY?"

DATE_UNDERSTANDING_PROMPT = """
# Q: 2015 is coming in 36 hours. What is the date one week from today in MM/DD/YYYY?
# If 2015 is coming in 36 hours, then today is 36 hours before.
today = datetime(2015, 1, 1) - relativedelta(hours=36)
# One week from today,
one_week_from_today = today + relativedelta(weeks=1)
# The answer formatted with %m/%d/%Y is
one_week_from_today.strftime('%m/%d/%Y')
# Q: The first day of 2019 is a Tuesday, and today is the first Monday of 2019. What is the date today in MM/DD/YYYY?
# If the first day of 2019 is a Tuesday, and today is the first Monday of 2019, then today is 6 days later.
today = datetime(2019, 1, 1) + relativedelta(days=6)
# The answer formatted with %m/%d/%Y is
today.strftime('%m/%d/%Y')
# Q: The concert was scheduled to be on 06/01/1943, but was delayed by one day to today. What is the date 10 days ago in MM/DD/YYYY?
# If the concert was scheduled to be on 06/01/1943, but was delayed by one day to today, then today is one day later.
today = datetime(1943, 6, 1) + relativedelta(days=1)
# 10 days ago,
ten_days_ago = today - relativedelta(days=10)
# The answer formatted with %m/%d/%Y is
ten_days_ago.strftime('%m/%d/%Y')
# Q: It is 4/19/1969 today. What is the date 24 hours later in MM/DD/YYYY?
# It is 4/19/1969 today.
today = datetime(1969, 4, 19)
# 24 hours later,
later = today + relativedelta(hours=24)
# The answer formatted with %m/%d/%Y is
today.strftime('%m/%d/%Y')
# Q: Jane thought today is 3/11/2002, but today is in fact Mar 12, which is 1 day later. What is the date 24 hours later in MM/DD/YYYY?
# If Jane thought today is 3/11/2002, but today is in fact Mar 12, then today is 3/1/2002.
today = datetime(2002, 3, 12)
# 24 hours later,
later = today + relativedelta(hours=24)
# The answer formatted with %m/%d/%Y is
later.strftime('%m/%d/%Y')
# Q: Jane was born on the last day of Feburary in 2001. Today is her 16-year-old birthday. What is the date yesterday in MM/DD/YYYY?
# If Jane was born on the last day of Feburary in 2001 and today is her 16-year-old birthday, then today is 16 years later.
today = datetime(2001, 2, 28) + relativedelta(years=16)
# Yesterday,
yesterday = today - relativedelta(days=1)
# The answer formatted with %m/%d/%Y is
yesterday.strftime('%m/%d/%Y')
# Q: {question}
""".strip() + '\n'
llm_out = llm(DATE_UNDERSTANDING_PROMPT.format(question=question))
print(llm_out)
exec(llm_out)
print(born)

这将输出以下内容: 02/27/1998


总结

在本指南中,我们主要介绍了一些高级和有趣的方法,我们可以使用提示工程来执行有用和更高级的任务例如:生成数据、作为推理的代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/396561.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文读懂倒排序索引涉及的核心概念

基础概念相信对于第一次接触Elasticsearch的同学来说&#xff0c;最难理解的概念就是倒排序索引&#xff08;也叫反向索引&#xff09;&#xff0c;因为这个概念跟我们之前在传统关系型数据库中的索引概念是完全不同的&#xff01;在这里我就重点给大家介绍一下倒排序索引&…

DOTA双功能螯合剂127985-74-4,p-SCN-Bn-DOTA,实验室科研试剂

p-SCN-Bn-DOTA产品描述&#xff1a;p-SCN-Bn-DOTA用于标记多肽的双功能螯合剂&#xff0c;同时螯合放射性核素和连接单克隆抗体。DOTA 的全名是 1,4,7,10-Tetraazacyclododecane-1,4,7,10-tetraacetic acid&#xff0c;中文名称为 1,4,7,10-四氮杂环十二烷-四乙酸&#xff0c;其…

Linux中断操作

一、thread_irq在内核中&#xff0c; 除了可以通过request_irq() 、 devm_request_irq()申请中断以外&#xff0c; 还可以通过以下二个函数申请( 它们比request_irq和devm_request_irq多了一个参数thread_fn)。 用这两个API申请中断的时候&#xff0c; 内核会为相应的中断号分配…

steam海外道具搬运,2个月变现1.6万,真的假的?

这几年的环境&#xff0c;让我这个身负房贷的房奴&#xff0c;实在是喘不过来气&#xff01; 也是无意间在朋友圈看到&#xff0c;之前突然裸辞的同事&#xff0c;不知道干什么发了财&#xff0c;竟然自己开了公司&#xff01; 几经询问才知道&#xff0c;他就是利用steam海外…

微内核架构的理解

什么是微内核架构 相信大家都听说过微内核架构&#xff0c;也或多或少做过一些类似于微内核架构的设计&#xff0c;为了可以更好的设计出微内核的架构&#xff0c;我们了解下什么是微内核架构。 说到微内核架构&#xff0c;大家首先会想到的是Eclips、IDEA、OSGI、Spring Plugi…

CAD连续标注怎么操作?CAD连续标注尺寸命令使用技巧

CAD标注工具可以在图形中创建多种标注&#xff0c;并可对标注样式进行修改或编辑。但是有些新手设计师在绘图过程中&#xff0c;不知道CAD连续标注怎么操作&#xff0c;其实很简单&#xff0c;本节内容就给大家分享一下浩辰CAD软件中CAD连续标注尺寸命令的使用技巧吧&#xff0…

005+limou+HTML——(5)HTML图片和HTML超链接

1、图片标签<img> &#xff08;1&#xff09;图片标签属性 [src]&#xff1a;用于指定这个图片所在的路径&#xff0c;常使用相对路径&#xff0c;比较少使用绝对路劲。如果图片路径有错误的话&#xff0c;就会发生图片显示错误[alt]&#xff1a;用于指定图片的提示文字…

三天吃透mybatis面试八股文

本文已经收录到Github仓库&#xff0c;该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点&#xff0c;欢迎star~ Github地址&#xff1a;https://github.com/…

HDFS读数据流程

1&#xff09;客户端通过Distributed FileSystem向NameNode请求下载文件&#xff0c;NameNode通过查询元数据&#xff0c;找到文件块所在的DataNode地址。 2&#xff09;挑选一台DataNode&#xff08;就近原则&#xff0c;然后随机&#xff09;服务器&#xff0c;请求读取数据…

蚂蚁感冒(简单数论)

长 100 厘米的细长直杆子上有 n 只蚂蚁。它们的头有的朝左&#xff0c;有的朝右。每只蚂蚁都只能沿着杆子向前爬&#xff0c;速度是 1 厘米/秒。当两只蚂蚁碰面时&#xff0c;它们会同时掉头往相反的方向爬行。这些蚂蚁中&#xff0c;有 1 只蚂蚁感冒了。并且在和其它蚂蚁碰面时…

编译错误:rpcndr.h(192,14): error C2872: “byte”: 不明确的符号

Windows上使用C11 编译出现错误1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared\rpcndr.h(192,14): error C2872: “byte”: 不明确的符号1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared\rpcndr.h(191,23): message : 可…

第十章 opengl之光照(投光物)

OpenGL投光物平行光点光源衰减聚光平滑/软化边缘投光物 当前光线都是来自空间的一个点。但实际&#xff0c;我们有很多种类的光照&#xff0c;将光投射到物体的光源叫做投光物。需要讨论几种不同类型的投光物。大致为&#xff1a;定向光&#xff0c;点光源&#xff0c;聚光等 …

Shell编程:轻松掌握入门级Shell脚本,成为Shell高手

文章目录前言一. 实验环境二. shell基础入门精讲2.1 什么是shell脚本&#xff1f;2.2 shell的种类2.3 脚本案例2.3.1 打印 hello-word案例2.3.2 统计指定目录下的文件数和目录数2.4 shell脚本编写规范总结前言 &#x1f3e0;个人主页&#xff1a;我是沐风晓月 &#x1f9d1;个人…

微服务架构(小白教学1)

相信大家吃饭的时候肯定是很苦恼打饭之慢&#xff0c;在自己饥肠辘辘的时候&#xff0c;面对自己喜欢吃的食物窗口却如同有百万大军虎视眈眈&#xff0c;自己内心的煎熬可想而知有时候在想这么美味的食物&#xff0c;为什么窗口就只开一个呢&#xff1f;于是你告诉了你的爸爸&a…

浅谈运维工程师的开发能力的培养

写在前面 本文已获得作者授权&#xff0c;作者的博客地址&#xff1a;https://www.cuiliangblog.cn/ 原文链接&#xff1a;浅谈运维工程师的开发能力的培养 一、运维工程师发展路线 1. 传统运维 侧重点是解决具体的问题。要求具备扎实的底层的知识储备&#xff0c;如网络、l…

安卓 Frament + ViewPager使用示例

1. 组成架构 整个架构被包在一个外部Fragment之中&#xff0c;也可以放在一个Activity之中&#xff0c;随意。外部的fragment包含了两个组件&#xff0c;即途中的ViewPager和TabLayoutViewPager要套上一个FragmentStatePagerAdapter &#xff0c;适配器负责new出一个个fragment…

基于Jetson NX的模型部署

系统安装 系统安装过程分为3步&#xff1a; 下载必要的软件及镜像 Jetson Nano Developer Kit SD卡映像 https://developer.nvidia.com/jetson-nano-sd-card-image Windows版SD存储卡格式化程序 https://www.sdcard.org/downloads/formatter_4/eula_windows/ 镜像烧录工具…

嵌入式C语言九大数据结构操作方式详解

在C语言的开发过程中&#xff0c;灵活使用数据结构&#xff0c;对提高编程效率有极大的帮助。 目录 1 数组 2 链表 3 跳表 4 栈 5 队列 6 树 7 堆 8 散列表 9 图 10 总结 数据结构想必大家都不会陌生&#xff0c;对于一个成熟的程序员而言&#xff0c;熟悉和掌握数据…

【C++、C++11】列表初始化、右值引用

文章目录&#x1f4d6; 前言1. 统一的列表初始化1.1 { } 花括号初始化&#xff1a;1.2 std::initializer_list&#xff1a;2. 右值引用2.1 什么是左值和右值&#xff1a;2.2 右值的分类&#xff1a;2.3 左值引用和右值引用的比较2.3 右值的使用场景&#xff1a;2.4 新的类功能&…

SpringBoot整合Quartz以及异步调用

文章目录前言一、异步方法调用1、导入依赖2、创建异步执行任务线程池3、创建业务层接口和实现类4、创建业务层接口和实现类二、测试定时任务1.导入依赖2.编写测试类&#xff0c;开启扫描定时任务3.测试三、实现定时发送邮件案例1.邮箱开启IMAP服务2.导入依赖3.导入EmailUtil4.编…