AI大模型学习之白话笔记(四)-- Prompt Engineering

看过前面文章的朋友们,应该还记得一句话,那就是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还可以特别有用于生成有用于运行各种实验数据。

例如,我们可以使用它生成快速样本以用于情感分类器,就像这样: 提示:

makefile 复制代码
生成6个情感分析例子。将示例归类为积极或消极。生成4个积极的示例和2个消极的示例。使用以下格式进行示例:
问: <句子>
答: <情感>

输出:

makefile 复制代码
问: 我今天过得非常愉快,享受了美好的阳光和新鲜空气。
答: 积极

问: 我非常喜欢这部电影,它让我笑了很久。
答: 积极

问: 这次旅行让我感到无比放松和平静,我真的感到精神焕发。
答: 积极

问: 我刚刚得知我通过了考试,我感到非常兴奋和自豪。
答: 积极

问: 我觉得自己好像一无是处,无论我怎么做都得不到别人的认可。
答: 消极

问: 我对工作感到厌倦,每天上班都觉得沮丧和无聊。
答: 消极

PAL(程序辅助语言模型)

程序辅助语言模型(PAL)是一种使用LLMs阅读自然语言问题并生成程序作为中间推理步骤的方法。

例如,我们需要AI理解日历,下面是使用LangChain和OpenAI GPT-3的示例:

python 复制代码
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")

# 设置实例模型
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回复如下:

python 复制代码
# 询问用户的名字并向他们打招呼
name = input("你叫什么名字? ")
print("你好," + name + "!")

将注释转换成代码

举例,提示:

python 复制代码
请将下面注释转成python代码
"""
创建一个电影名称列表
创建这些电影的评分列表
组合他们并创建一个包含10部电影及其评级的json对象
"""

输出:

ini 复制代码
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进行交流了。就像学习一门新语言一样,越多的练习和实践,你的技能就会越精湛。


欢迎关注我的公众号"小门小道",原创文章第一时间推送。

相关推荐
DevinLGT14 分钟前
6Pin Type-C Pin脚定义:【图文讲解】
人工智能·单片机·嵌入式硬件
宋一诺3318 分钟前
机器学习—高级优化方法
人工智能·机器学习
龙的爹233331 分钟前
论文 | The Capacity for Moral Self-Correction in LargeLanguage Models
人工智能·深度学习·机器学习·语言模型·自然语言处理·prompt
Mr.简锋34 分钟前
opencv视频读写
人工智能·opencv·音视频
Baihai_IDP34 分钟前
「混合专家模型」可视化指南:A Visual Guide to MoE
人工智能·llm·aigc
寰宇视讯1 小时前
“津彩嘉年,洽通天下” 2024中国天津投资贸易洽谈会火热启动 首届津彩生活嘉年华重磅来袭!
大数据·人工智能·生活
Light601 小时前
低代码牵手 AI 接口:开启智能化开发新征程
人工智能·python·深度学习·低代码·链表·线性回归
墨绿色的摆渡人1 小时前
用 Python 从零开始创建神经网络(六):优化(Optimization)介绍
人工智能·python·深度学习·神经网络
春末的南方城市2 小时前
开源音乐分离器Audio Decomposition:可实现盲源音频分离,无需外部乐器分离库,从头开始制作。将音乐转换为五线谱的程序
人工智能·计算机视觉·aigc·音视频
矢量赛奇2 小时前
比ChatGPT更酷的AI工具
人工智能·ai·ai写作·视频