首页 > 其他分享 >什么是提示工程 Prompt Engineering

什么是提示工程 Prompt Engineering

时间:2023-11-27 18:32:05浏览次数:36  
标签:Prompt 提示 模型 用户 流量 100G 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 文件, client =

(api_key=os.getenv(“_API_KEY”),base_url=os.getenv(“_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产品基础操作到独立构建大型语言模型,我们带你一步步攀升AI技术之巅:

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

标签:Prompt,提示,模型,用户,流量,100G,Engineering,套餐
From: https://blog.51cto.com/u_16386562/8587560

相关文章

  • 软件测试/人工智能|探究 LangChain 核心模块:PromptsModelsParsers
    简介LangChain是一种新兴的语言处理平台,其核心模块之一即PromptsModelsParsers。这一模块扮演着关键的角色,为LangChain的功能和性能提供了坚实的基础。在这篇文章中,我们将深入探讨PromptsModelsParsers模块的工作原理、功能和其对语言处理的重要性。什么是PromptsModels......
  • bat文件关闭打开的图片时弹出提示框
    @echooff&cd\&color0a&clsechosetwindowsdefaultpictureviewregadd"HKLM\SOFTWARE\Microsoft\WindowsPhotoViewer\Capabilities\FileAssociations"/v".jpg"/tREG_SZ/dPhotoViewer.FileAssoc.Tiff/fregadd&qu......
  • VM虚拟机安装系统出现架构不兼容提示
    报错内容:无法打开此虚拟机的电源,因为此虚拟机需要使用Arm计算机架构,而该架构与此X86计算机架构主机不兼容。请参见知识库文章84273。解决方法:这是因为镜像所需的架构和计算机本身的架构不兼容,比如我下载的就是arm64架构的iso镜像,但是我本身的电脑是win11系统,是x86_64系统,......
  • Oracle Hint(提示)之INDEX_COMBINE
    INDEX_COMBINE提示的作用和使用方法INDEX_COMBINE提示是指导优化器,通过联合访问一个表上的多个索引来实现数据的检索。而“联合访问”的实现,是通过在目标索引上施加对应的过滤条件,将过滤后的结果行的ROWID转换为位图,然后做按位AND(对应于相关条件之间是AND的关系),或者按位OR(对应于相......
  • Vue-加入购物车-判断token添加登录提示
    Vue-加入购物车-判断token添加登录提示目标:给未登录的用户,添加登录提示说明:加入购物车,是一个登录后的用户才能进行的操作,所以需要进行鉴权判断,判断用户token是否存在若存在:继续加入购物车操作不存在:提示用户未登录,引导到登录页,登录完回跳addCart(){//判断token......
  • Android Studio XML文件没有提示
    长路漫漫唯剑作伴原因:项目从AS3.5.2转到AS4.2.2后出现xml文件没有提示。解决:1.build:gradle:3.5.2换成最新的build:gradle:4.2.22.gradle-wrapper.properties由gradle-5.4.1-all.zip换成4.2.2最低要求版本gradle-6.7.1-all.zip项目下载构建完成即可......
  • 手动设置提示在此环境中不可导入Django
    手动设置提示在此环境中不可导入Django 环境参数添加manage.py中的代码’DJANGO_SETTINGS_MODULE’,‘codeProject.settings’ ......
  • 【Python】使用vscode编码提示找不到模块
    问题描述已经使用pip安装了模块,但是使用vscode没有代码提示。解决办法这种情况一般是因为pc安装了多个python版本,安装模块的pip不是vscode指定的编译环境。点击右下角,选择环境变量中配置的python版本。解决问题:......
  • bind-utils无法安装,提示" Requires: libisc-export.so.95()(64bit)"
    一、问题现象[root@test~]#yuminstallbind-utilsLoadedplugins:fastestmirrorLoadingmirrorspeedsfromcachedhostfileResolvingDependencies-->Runningtransactioncheck--->Packagebind-utils.x86_6432:9.11.4-26.P2.el7_9.15willbeinstalled--&g......
  • Docker启动失败,提示"iptables: No chain/target/match by that name"
    一、问题现象docker容器报错:docker:Errorresponsefromdaemon:driverfailedprogrammingexternalconnectivityonendpointetlmysql(12ccdbcef942bef6f32dbfc157dd1b49319ee2df4d68bf7b9a9b9ea88b5bd4fa):(iptablesfailed:iptables--wait-tnat-ADOCKER-ptc......