AI大模型学习之白话笔记(四)-- Prompt Engineering
大模型开发/技术交流
- LLM
- Prompt
2024.03.043984看过
看过前面文章的朋友们,应该还记得一句话,那就是prompt是应用程序跟大模型交互的唯一通道。作为与AI交流的桥梁,Prompt Engineering(提示工程)正在成为一个非常值得关注的领域。
那么,什么是提示工程呢?它的重要性何在?在业务中又是如何应用的?接下来,我们将用浅显易懂的语言,深入探讨这个概念。
什么是Prompt Engineering?
“Prompt”(提示)这个词在AI领域的含义,简单来说,“Prompt”就是你跟一个AI系统交流时所提出的请求或者指令,比如“讲个笑话”、“写首诗”。就好比你在与一个全能的助手对话时,你所提出的问题或任务是“prompt”。
而Prompt Engineering,则是关于如何设计这些“提示”,以便能够有效地指导AI生成你需要的输出。
Prompt的重要性
Prompt看起来好像很简单,Prompt的设计好坏直接影响到AI生成的结果。
好的prompt能够明确地传达你的意图,并且促使AI提供准确、相关且高质量的答案或解决方案。
可以说,Prompt是AI时代的“编程语言”,Prompt Engineering是AI时代的“软件工程”。
大家应该也听说过现在有一种职业叫“提示词工程师”,还非常吃香,我们可以理解为这就是AI时代的“软件工程师”。
因此,掌握提示的艺术,对于任何使用AI技术的人来说,都是一项非常宝贵的技能。
如何设计Prompt
设计Prompt本质上可以从以下两类来考虑:
答案指示型prompt
根据任务的目标、答案的类型设计prompt,通过prompt引出答案。
任务提示型prompt
提醒模型是要做什么任务,因为同样输入一句话,可以做的任务太多了,通过prompt让模型知道这次是要做什么任务。
优秀prompt的构成
如果您接触过大量提示工程相关的示例和应用,您会注意到提示词通常包含以下一些要素:
-
1、角色。发起一个提示时,先给AI定义一个当前任务的角色,比如“你是一名忧郁的诗人”、“你是一名资深的系统架构师”...
-
2、指示。对当前任务描述,高质量Prompt的核心要素:具体、丰富、少歧义。
-
3、上下文。给出与任务相关的其他背景信息,尤其是在跟AI多轮的交互中。
-
4、例子。可以举一些例子,能起到很大的作用,在学术中称为one-shot learing, few-shot learing或in-context learing。
-
5、输入。在提示词中明确的标识任务输入的信息。
-
6、输出。可以指定要输出的格式,比如Markdown、JSON、XML等。
注意,提示词所需的格式取决于您想要语言模型完成的任务类型,并非所有以上要素都是必须的。
几个建议
-
1、记住:把AI当人看!把AI当人看!把AI当人看!
-
2、强烈建议多看看chatGPT官方文档,中文的提示工程指南:github.com/yunwei37/Pr… , www.promptingguide.ai/zh
-
3、chatGPT对Marhdown格式非常友好。
-
4、多尝试,有时真的需要运气,一字之差,对结果生成的概率也有很大的影响,要多做尝试才能找到更优秀的Prompt。
提示应用
生成数据
LLMs有强大的文本生成能力。使用有效的提示策略可以引导模型产生更好、更一致和更准确的回复。LLMs还可以特别有用于生成有用于运行各种实验数据。
例如,我们可以使用它生成快速样本以用于情感分类器,就像这样:提示:
生成6个情感分析例子。将示例归类为积极或消极。生成4个积极的示例和2个消极的示例。使用以下格式进行示例:问: <句子>答: <情感>
输出:
问: 我今天过得非常愉快,享受了美好的阳光和新鲜空气。答: 积极问: 我非常喜欢这部电影,它让我笑了很久。答: 积极问: 这次旅行让我感到无比放松和平静,我真的感到精神焕发。答: 积极问: 我刚刚得知我通过了考试,我感到非常兴奋和自豪。答: 积极问: 我觉得自己好像一无是处,无论我怎么做都得不到别人的认可。答: 消极问: 我对工作感到厌倦,每天上班都觉得沮丧和无聊。答: 消极
PAL(程序辅助语言模型)
程序辅助语言模型(PAL)是一种使用LLMs阅读自然语言问题并生成程序作为中间推理步骤的方法。

例如,我们需要AI理解日历,下面是使用LangChain和OpenAI GPT-3的示例:
import openaifrom datetime import datetimefrom dateutil.relativedelta import relativedeltaimport osfrom langchain.llms import OpenAIfrom dotenv import load_dotenvload_dotenv()# API configurationopenai.api_key = os.getenv("OPENAI_API_KEY")# for LangChainos.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")# 设置实例模型llm = OpenAI(model_name='text-davinci-003', temperature=0)# 设置提示question = "2024年的第一天是星期一,今天是2024年的第9个星期二,请问今天的日期是什么?格式为YYYY/MM/DD。“DATE_UNDERSTANDING_PROMPT = """# Q:2015还有36小时就要到了。从今天算起一周后的日期是什么(以MM/DD/YYYY的格式呈现)?# 如果2015年还有36小时就要到了,那么今天就是36小时前。today = datetime(2015, 1, 1) - relativedelta(hours=36)# 从今天算起一周后,one_week_from_today = today + relativedelta(weeks=1)# 用%m/%d/%Y格式呈现的答案是one_week_from_today.strftime('%m /% d /%Y')。"""
代码生成
chatGPT是很擅长写代码的。
简单例子
与OpenAI的所有聊天模型一样,如:
请用python写一度啊代码,询问用户他们的名字并向他们说“你好”。
那么chatGPT回复如下:
# 询问用户的名字并向他们打招呼name = input("你叫什么名字? ")print("你好," + name + "!")
将注释转换成代码
举例,提示:
请将下面注释转成python代码"""创建一个电影名称列表创建这些电影的评分列表组合他们并创建一个包含10部电影及其评级的json对象"""
输出:
import json# 创建电影名称列表movies = ["阿凡达","泰坦尼克号","复仇者联盟","星球大战","盗梦空间","少年派的奇幻漂流","哈利波特与魔法石","指环王","美丽心灵","当幸福来敲门"]# 创建电影评分列表ratings = [9.2,8.8,9.0,8.7,8.9,8.5,8.6,9.1,8.4,8.7]# 组合电影名称和评分并创建JSON对象movie_data = []for i in range(len(movies)):movie = {"电影名称": movies[i],"评分": ratings[i]}movie_data.append(movie)json_data = json.dumps(movie_data, ensure_ascii=False, indent=4)print(json_data)
Function calling
前面的文章讲过,通过Function calling可以让用户能够高效的使用外部工具、外部API进行交互,来实现一些基础大模型无法完成的推理。
后面我们将专门写一篇文章来介绍如何使用Function calling,这里就不做多的说明了。
如何进行Prompt调优
Prompt调优是一种艺术与科学的结合。一开始,你的prompt可能不够完美。但通过不断实践和调整,你可以提高其效能。
以下是一些调优的基本步骤:
-
明确目标: 确定你想要AI完成什么任务,你期待的输出是什么样的。
-
逐步迭代: 开始时用一个基本的prompt,然后根据AI的反馈逐步调整。
-
简化清晰: 确保你的prompt简单明了,避免使用复杂或含糊的语言。
-
测试不同的变体: 实验不同的措辞和结构,看看哪种效果最好。
-
分析结果: 检查AI的输出,决定哪些部分已经满足需求,哪些需要改进。
-
使用数据: 如果可能的话,收集数据分析哪些类型的prompt产生了最好的结果。
-
获取反馈: 让用户或其他团队成员对AI的响应给出反馈,进一步完善你的prompt。
Prompts精选
最后,推荐一个中文prompts精选:github.com/yzfly/wonde…
这是一个《ChatGPT 中文指南》的作者优化、精选的系列中文ChatGPT Prompts,有上百个高质量prompt,并提供图文使用示例,让大家能够更好的学习使用 ChatGPT。
其实,Prompt Engineering并不神秘,在你掌握了基本的原则和技巧后,你就可以开始有效地与AI进行交流了。就像学习一门新语言一样,越多的练习和实践,你的技能就会越精湛。
————————————————
版权声明:本文为稀土掘金博主「小门小道」的原创文章
原文链接:https://juejin.cn/post/7339731268148101158
如有侵权,请联系千帆社区进行删除
评论
