什么是提示工程(Prompt Engineering)

2024-03-22 14:40

本文主要是介绍什么是提示工程(Prompt Engineering),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、什么是提示工程(Prompt Engineering)

提示工程,也称为"Γ指令工程"。在人工智能领域,Prompt指的是用户给大型语言模型发出的指令。例如,“Γ讲个笑话”、“Γ用Python编个贪吃蛇游戏”、“Γ给男/女朋友写封情书"等。虽然看似简单,但实际上,Prompt在人工智能时代扮演着非常重要的角色。它被誉为AGI时代的"编程语言”,而提示工程则被视为AGI时代的"软件工程"。因此,掌握提示工程技能就像学会使用鼠标和键盘一样,是适应AGI时代的基本技能。目前,提示工程呈现出"门槛低,落地难"的特点,因此有人戏称prompt为"Γ咒语"。不过,专门的"提示工程师"这个职业可能不会长久存在,因为随着AI的进化,提示工程会变得越来越简单,每个人都需要掌握提示工程技能。

二、我们的优势

我们理解大模型生成内容的原理是基于概率生成下一个字,因此我们能够判断为什么有些指令有效,有些指令无效,以及同样的指令为何有时有效,有时无效。我们也清楚如何提升指令有效的概率。此外,我们具备编程知识,能够判断哪些问题更适合使用提示工程解决,哪些问题更适合使用传统编程解决。我们能够实现提示工程与业务系统的对接,从而充分发挥其效能。

三、使用Prompt的两种目的

获取针对具体问题的具体结果,例如"我该学Vue还是React?“或者"PHP为什么是最好的语言?”。
将一组Prompt固化到程序中,使其成为系统功能的一部分,例如"每天生成本公司的简报"、“AI客服系统"或"基于公司知识库的问答”。对于前者,主要通过ChatGPT、ChatALL等界面进行操作。对于后者,则需要编写代码。我们专注于后者,因为掌握后者能轻松完成前者,并且后者是我们的独特优势。
四、Prompt调优

寻找好的prompt是一个持续迭代的过程,需要不断调优。如果了解训练数据,那么参考训练数据来构造prompt是最佳方法。例如,如果你知道某人喜欢读红楼梦,就可以和他聊红楼梦;如果你知道某人在阿里工作十年,就可以多说阿里黑话;如果你知道某人是日漫迷,就可以夸赞他卡哇伊。如果不了解训练数据,那么就需要不断尝试。尝试是常用的方法,虽然存在运气因素,但这也是提示工程"门槛低、落地难"的原因之一。高质量的prompt应具备具体、丰富、少歧义的特点。我们的"群聊天"习惯与prompt背道而驰,而欧美的"群发邮件"习惯则更为有利。

五、Prompt的典型构成

角色:为AI定义一个最匹配任务的角色,例如"你是一位软件工程师"或"你是一位小学老师"。
指示:对任务进行描述。
上下文:提供与任务相关的其他背景信息,尤其在多轮交互中。
例子:必要时给出举例,这在学术上称为one-shot learning, few-shot learning或in-context learning。实践证明,举例有助于提高输出的正确性。
输入:任务的输入信息;在提示词中明确标识出输入。
输出:输出的格式描述,以便后续模块自动解析模型的输出结果,例如JSON、XML等。"定义角色"实际上并非必需,这完全是大家"把AI当人看"玩出的一个用法。然而,由于这种用法广为传播,现在的大型模型在训练数据中基本都包含了这一元素。有一个已被论文证实的现象可以解释为什么"你是一个xxx"这样的定义有效:大型模型对prompt开头和结尾的内容更敏感。因此,先定义角色实际上是在开头将问题域收窄,减少歧义性。

使用Prompt进行文本生成的方法可以分为以下几个步骤:

选择一个合适的预训练语言模型,并了解它的使用方法。
确定要生成的文本类型和风格,例如诗歌、小说、新闻、广告语等。
构造Prompt语句,即输入给模型的指令。Prompt语句应该尽可能具体、清晰,并包含足够的上下文信息,以便模型能够生成符合要求的文本。例如,如果要生成一首关于春天的诗歌,Prompt语句可以是“请写一首描述春天的诗歌,要求包含花朵、绿草和阳光等元素”。
将Prompt语句输入到模型中,并等待模型生成文本。这个过程可能需要一定的时间,具体取决于模型的复杂度和生成文本的长度。
对生成的文本进行评估和修改。生成的文本可能不完全符合要求,或者存在语法、语义等方面的错误。因此,需要对生成的文本进行评估和修改,以便得到更好的结果。

业务场景:办理流量包的智能客服

流量包产品:

经济套餐:10GB/月,50元/月,无限制
畅游套餐:100GB/月,180元/月,无限制
无限套餐:1000GB/月,300元/月,无限制
校园套餐:200GB/月,150元/月,在校生

2.2、对话系统的基本模块

对话系统通常由以下几个模块组成:自然语言理解(NLU),对话状态跟踪(DST),对话策略学习(DPL)和自然语言生成(NLG)。

NLU负责识别用户的输入,DST负责跟踪对话的上下文和状态,DPL负责根据当前状态选择下一步的动作,NLG负责将系统的动作转换成自然语言输出。

对话流程举例:

用户:我想办理一个流量包。
NLU识别用户的意图为办理流量包。
DST更新对话状态为办理流量包。
DPL根据当前状态选择推荐流量包的动作。
NLG生成推荐流量包的自然语言输出。
系统:好的,您更倾向于畅游套餐,每月100GB流量,180元。
2.3、用Prompt实现上述模块功能

在Prompt中,我们可以使用自然语言来描述任务,模型会自动生成相应的代码或文本。下面是一个用Prompt实现对话系统的例子。

环境搭建:
调试Prompt的过程通常在图形界面里开始会更方便,但为了方便演示和大家上手体验,我们直接在代码里调试。首先,需要加载环境变量和OpenAI的API密钥。然后,定义一个基于Prompt生成文本的函数get_completion()。该函数接受一个Prompt作为输入,调用OpenAI的API生成文本输出。为了简化调试过程,我们可以在代码中直接定义Prompt,并调用get_completion()函数生成输出。下面是一个用Prompt实现NLU和DST的例子。

2.3.1、实现一个NLU

任务描述+输入:
你的任务是识别用户对手机流量套餐产品的选择条件。每种流量套餐产品包含三个属性:名称,月费价格,月流量。根据用户输入,识别用户在上述三种属性上的倾向。例如,用户输入“办个100G的套餐”,则表明用户对月流量的选择条件是100GB或更高。请编写一个函数parse_user_input(),接受用户输入作为参数,返回一个包含用户对流量、价格和适用人群的选择条件的字典。为了方便调试和输出,请使用print()函数打印输出结果。下面是一个用Prompt实现该函数的例子。

In [7]:

任务描述
instruction = “”"
你的任务是识别用户对手机流量套餐产品的选择条件。每种流量套餐产品包含三个属性:名称,月费价格,月流量。根据用户输入,识别用户在上述三种属性上的倾向。例如,用户输入“办个100G的套餐”,则表明用户对月流量的选择条件是100GB或更高。请编写一个函数parse_user_input(),接受用户输入作为参数,返回一个包含用户对流量、价格和适用人群的选择条件的字典。为了方便调试和输出,请使用print()函数打印输出结果。"""

用户输入
input_text = “”"
办个100G的套餐。
“”"

Prompt模版
prompt = f"""
{instruction}
用户输入:
{input_text}
“”"
response = get_completion(prompt)
print(response)
根据用户输入, 可以得出以下结论:
名称:用户倾向于选择100G的套餐, 因此名称可能包含"100G"或类似的关键词。
月费价格:用户没有提及对月费价格的倾向, 因此无法确定用户对月费价格的选择条件。
月流量:用户明确表示希望办理100G的套餐, 因此用户对月流量的选择条件是100G或更高的流量。
综上所述 ,用户对手机流量套餐产品的选择条件是名称中包含"100G"或类似的关键词, 以及月流量为100G或更高。下面是一个用Prompt实现该函数的完整代码示例:

纯用 OpenAI API 实现完整功能
In [6]: # 加载环境变量
import os
from openai import OpenAI
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # 读取本地 .env 文件,里面定义了 OPENAI_API_KEY
client = OpenAI(
api_key=os.getenv(“OPENAI_API_KEY”),
base_url=os.getenv(“OPENAI_API_BASE”)
)
session = [
{
“role”: “system”,
“content”: “”"
你是一个手机流量套餐的客服代表 ,你叫小瓜 。可以帮助用户选择最合适的流量套餐产品 。可以选择的套餐包括: 经济套餐, 月费50元, 10G流量;
畅游套餐, 月费180元, 100G流量;
无限套餐, 月费300元, 1000G流量;
校园套餐, 月费150元, 200G流量 ,仅限在校生。
“”"
}
]

def get_completion(prompt, model=“gpt-3.5-turbo”):
session.append({“role”: “user”, “content”: prompt})
response = client.chat.completions.create(
model=model,
messages=session,
temperature=0, # 模型输出的随机性,0 表示随机性最小
)
msg = response.choices [0].message.content
session.append({“role”: “assistant”, “content”: msg})
return msg

get_completion("有没有土豪套餐? ")
get_completion("多少钱? ")

[
{
“role”: “system”,
“content”: “\n你是⼀ 个⼿机流量套餐的客服代表 ,你叫⼩⽠ 。可以帮助⽤户选择最合适的流量套餐产 品 。可以选择的套餐包括:\n经济套餐, ⽉费50元, 10G流量;\n畅游套餐, ⽉费180元, 100G流量;\n无限套餐, ⽉费300元, 1000G流量;\n校园套餐, ⽉费150元, 200G流量 ,仅限在校⽣ 。\n”
},
{
“role”: “user”,
“content”: "有没有土豪套餐? "
},
{
“role”: “assistant”,
“content”: “很抱歉, 我们暂时没有土豪套餐 。但是我们有无限套餐, 它提供1000G的流量, 适合⼤流 量⽤户 。如果您有其他需求, 我可以帮您选择其他适合的套餐 。”
},
{
“role”: “user”,
“content”: "多少钱? "
},
{
“role”: “assistant”,
“content”: “无限套餐的⽉费是300元 。它提供1000G的流量, 适合⼤流量⽤户 。如果您有其他需求, 我 可以帮您选择其他适合的套餐 。”
},
{
“role”: “user”,
“content”: “给我办⼀ 个”
},
{
“role”: “assistant”,
“content”: “好的 ,请问您的⼿机号码是多少?我将为您办理无限套餐 。”
}
]

想要站在AI科技的前沿,掌握大模型的核心技术吗?是否觉得无从下手,渴望有一个系统化的学习路径?那么,你的等待结束了!我们精心打造的AIGC星辰大海-大模型工程师和产品专家深度训练营即将开课!

12月15日,第五期训练营全新开启,我们带你零基础起步,逐层深入,直至掌握大模型的核心技术。课程内容丰富,覆盖自然语言处理、计算机视觉、推荐系统等多个热门领域。

五大学习层次,从AIGC产品基础操作到独立构建大型语言模型,我们带你一步步攀升AI技术之巅:

入门:熟悉AIGC产品,掌握基本操作,感受AI魅力。
进阶:学习微调大模型,让通用模型适应特定需求。
深化:构建垂直领域大模型,为特定行业定制AI解决方案。
精进:增量预训练大模型,结合复杂知识库、Agent和API,开发AI原生产品。
巅峰:从零开始训练大型语言模型基座,掌握多领域通用能力。
强大的讲师团队,由经验丰富的Aiden博士领衔,资深工程师共同研发。他们来自世界一流学府,拥有深厚的实战经验和前沿技术洞察力,愿意与你分享他们的知识与智慧。

  1. 重修无极限:

学籍有效期内,自由参与新直播课程,无限次数重修,确保深入理解,技术掌握无死角。
2. 真实项目实战:

亲身实践,打造行业内认可的AI Agent,三大实战项目供你选择,沉淀经验,实现能力飞跃。
3. 顶尖大模型博士导师1V1指导:

优秀方案/项目有机会获得导师独家指导,直接与投资机构对话,为你的AI之路铺设坚实基石。
4. 顶级社群交流:

融入班主任与OJAC club社区,与一流投资人、教授、博士、杰出程序员近距离交流,共同碰撞思维火花。
5. AI学习助手免费赠:

获赠【AI学习助手】一年使用权,智能助力,学习效率加倍提升。
6. 无限次Open AI API调用:

在线操作环境,Open AI API随用随调,汇聚海量学习资源,助力技术进阶。
7. 免费的GPU实操环境:

提供真正的A100或A800 GPU计算资源,非消费级体验,直击AI技术核心。
8. 未来景观AI讲座:

每月更新,汇聚行业领袖,共同探讨最新技术动态与实践,确保你站在AI前沿。
9. AI职场导航服务:

顶尖猎头团队全程支持,包括工作推荐、简历优化、面试策略及职业规划建议,助你职场更上层楼,走向辉煌。
感兴趣的可以扫码报名哦!

扫码立即领取以下福利:

这篇关于什么是提示工程(Prompt Engineering)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/835496

相关文章

Mybatis提示Tag name expected的问题及解决

《Mybatis提示Tagnameexpected的问题及解决》MyBatis是一个开源的Java持久层框架,用于将Java对象与数据库表进行映射,它提供了一种简单、灵活的方式来访问数据库,同时也... 目录概念说明MyBATis特点发现问题解决问题第一种方式第二种方式问题总结概念说明MyBatis(原名

Ubuntu 24.04 LTS怎么关闭 Ubuntu Pro 更新提示弹窗?

《Ubuntu24.04LTS怎么关闭UbuntuPro更新提示弹窗?》Ubuntu每次开机都会弹窗提示安全更新,设置里最多只能取消自动下载,自动更新,但无法做到直接让自动更新的弹窗不出现,... 如果你正在使用 Ubuntu 24.04 LTS,可能会注意到——在使用「软件更新器」或运行 APT 命令时,

提示:Decompiled.class file,bytecode version如何解决

《提示:Decompiled.classfile,bytecodeversion如何解决》在处理Decompiled.classfile和bytecodeversion问题时,通过修改Maven配... 目录问题原因总结问题1、提示:Decompiled .class file,China编程 bytecode

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

Prompt - 将图片的表格转换成Markdown

Prompt - 将图片的表格转换成Markdown 0. 引言1. 提示词2. 原始版本 0. 引言 最近尝试将图片中的表格转换成Markdown格式,需要不断条件和优化提示词。记录一下调整好的提示词,以后在继续优化迭代。 1. 提示词 英文版本: You are an AI assistant tasked with extracting the content of

Jenkins构建Maven聚合工程,指定构建子模块

一、设置单独编译构建子模块 配置: 1、Root POM指向父pom.xml 2、Goals and options指定构建模块的参数: mvn -pl project1/project1-son -am clean package 单独构建project1-son项目以及它所依赖的其它项目。 说明: mvn clean package -pl 父级模块名/子模块名 -am参数

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

二、Maven工程的创建--JavaSEJavaEE

1、idea创建Maven JavaSE工程:  2、idea创建Maven JavaEE工程:   (1)手动创建 (2)插件方式创建 在idea里安装插件JBLJavaToWeb; 选择需要生成的项目文件后,右击: 项目的webapp文件夹出现小蓝点,代表成功。

三、Maven工程的构建

首先,创建和构建是两个概念。 构建是指将源代码、依赖库和资源文件等转换为可执行或可部署的应用程序的过程。 在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。 项目构建是软件开发过程中至关重要的一部分,它能够大大提高软件开发效率,使得开发人员更加专注于应用程序的开发和维护,而不必关心应用程序的构建细节。 同时,项目构建还能将多人写的代码聚合,并能够自动化项目的构建和部署,

我在高职教STM32——准备HAL库工程模板(1)

新学期开学在即,又要给学生上 STM32 嵌入式课程了。这课上了多年了,一直用的都是标准库来开发,已经驾轻就熟了。人就是这样,有了自己熟悉的舒适圈,就很难做出改变,老师上课也是如此,排斥新课和不熟悉的内容。显然,STM32 的开发,HAL 库已是主流,自己其实也在使用,只不过更换库就意味着教学内容有很大变化,自己也就迟迟没有迈出调整这一步。现在,是时候做出变化了,笔者计划保持教学项