什么是Prompt Engineering-提示工程

高耸入云
• 阅读 338

一、什么是提示工程(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职场导航服务:

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

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
JVM 字节码指令表
字节码助记符指令含义0x00nop什么都不做0x01aconst\_null将null推送至栈顶0x02iconst\_m1将int型1推送至栈顶0x03iconst\_0将int型0推送至栈顶0x04iconst\_1将int型1推送至栈顶0x05ic
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
京东云开发者 京东云开发者
5个月前
大模型应用之路:从提示词到通用人工智能(AGI)
大模型在人工智能领域的应用正迅速扩展,从最初的提示词(Prompt)工程到追求通用人工智能(AGI)的宏伟目标,这一旅程充满了挑战与创新。本文将探索大模型在实际应用中的进展,以及它们如何为实现AGI铺平道路。基于AI大模型的推理功能,结合了RAG(检索增强