Prompt Engineering会成为2024年超级热门编程语言!

Prompt Engineering会成为2024年超级热门编程语言!

OpenAI的创始成员之一Andrej Karpathy说:“我认为,将大型语言模型视为聊天机器人或某种单词生成器是不准确的。将其视为新兴操作系统的内核进程要正确得多。”如果你想了解更多关于编程的相关内容,可以阅读以下这些文章:
Meta正在做上帝的工作:向世界发布令人震惊的优秀编程模型!
畅销编程书籍中的10个编码秘密
Mojo:比Python快35000倍的AI编程语言
作为一个数据科学家/分析师,不要重复这5个编程错误

这是什么意思?

大型语言模型(LLM)将逐渐成为你与计算机系统之间的接口。

现在,你手中的设备拥有一定的计算能力,但你无法直接访问。操作系统(如Windows、Mac OS和Android)将芯片和电路的集合转化为用户友好的界面,从而实现与你的交互。

操作系统(OS)允许你通过在其上运行的各种应用程序执行各种活动(比如阅读某个光头老兄的文章)。每个应用程序都有自己的用户界面(UI)和可以完成的一系列任务。你可以根据需要从一个应用程序跳转到另一个应用程序,从一个用户界面跳转到另一个用户界面。

图片来自作者

明天,从撰写年度业务报告到从头开始构建一个新的应用程序,你将拥有一个单一的用户界面。上述用户界面将是一个聊天框或“上下文窗口”,你可以在其中用自然语言提交指令,这就是Prompt Engineering发挥作用的地方。

Prompt Engineering是一种花哨的说法:“为你的人工智能模型编写越来越好的指令,直到它完全按照你的要求去做。”不过,这不仅仅是文字游戏,而是未来编程的蓝图。

编程是一种(廉价)商品

Coursera在其网站上写道:“编程指的是告诉计算机执行哪些任务以解决问题的技术过程。”你可以把编程看作是人类与计算机之间的合作,人类用计算机能够理解的语言为计算机创建指令(代码)

换句话说,编程将计算能力变成了一种商品:变成一种你可以用来实现目标的资源。Prompt Engineering是一种将编程本身转化为商品的工具。你向LLM提交指令,它就会为你编写代码。

假设你想为一个工作项目分析一个微小的数据集。通常情况下,你会先收集散落在公司云端的数百个CSV文件。然后双击Jupyter Notebook,输入几行Python语句,将输入数据编译成一个数据框架。

在此基础上,你再施展数据科学的能力,运行十几次迭代,然后恭喜你:你得到了一系列精美的表格、花哨的图表和数据驱动的预测。最后一步是将六周的工作压缩成42张精美的幻灯片,在另一款名为Microsoft PowerPoint的应用程序上显示出来。

你只需将现成的应用程序与自己编写的代码相结合,就能构建一个运行特定数据分析的程序。但如果你要做的只是用简单的英语写几条指令呢?

“嘿,AI朋友,”你会这样说。“这里有一个混乱的数据集,请清理这些混乱数据并运行聚类算法。显示热图并放大高密度点。再加上一个两年预测,并利用预测结果优化我们送货车队的每日行程。完成计算后,生成一份报告,并附上清晰的图表和简洁的注释。慢慢来!我至少要离开六个小时。”

每当你写下这样的提示时,你实际上就是在编写一个能解决特定问题的应用程序。

这几乎就像Coursera所描述的那样—你与计算机合作来实现一个目标。唯一不同的是,你使用的不是代码,而是普通英语。好吧,这个提示可能离终点还差几码,但原则上,这就是你与未来LLMs的互动。

Prompts就是你所需要的一切

我们还需要一段时间,才能用一堆巧妙的提示语取代数据科学家、网络开发人员和软件工程师。在此期间,我们将用人工智能助手来提高他们的工作效率,而且每一个AI助手都将用简单的英语编程。

你将使用一个名为“StatSniffer:你的个人数据科学专家”的助手,而不是使用谷歌Workspace、Jupyter Notebook和微软PowerPoint等配套应用程序。

与当前的ChatGPT PLUS相似,你的个性化StatSniffer将是一个LLM,与一系列工具挂钩,使其具备浏览文件、运行代码和生成图表等额外功能。你还可以通过让StatSniffer访问研究论文、案例研究和学术教科书,为它注入顶尖的方法论。

OpenAI已经在通过GPT商店尝试个性化AI助手,在该商店中,你可以创建名为GPT的助手。不过,目前的GPT还很笨拙,GPT还容易在与用户交流几次后恢复到默认模式(GPT-4)

这并不令人意外,因为这项技术仍处于起步阶段。随着人工智能研究的不断进步,以及开源模式的日渐完善,人工智能助手的生态系统将不断发展,覆盖更多的功能,并提高可靠性。说到这一点,还有很长的路要走。

规划和多步推理等问题仍未得到解决,部分原因在于LLM在理解物理现实方面仍落后于人类(甚至是猫)

这并不意味着人们会屏住呼吸,等待精通量子引力的全自动助手利用现有的AI模型。即使是所谓的“笨”LLM,也能将效率提高两倍。以下是McKinsey一项研究的节选,内容涉及开发人员如何利用LLMs加快工作进度。

“我们最新的实证研究发现,基于生成式人工智能的工具为许多常见的开发人员任务带来了令人印象深刻的速度提升。记录代码功能的可维护性(考虑代码改进的难易程度)只需一半时间即可完成,编写新代码只需将近一半的时间,优化现有代码(称为代码重构)只需将近三分之二的时间。”(作者强调)

图片来自作者

McKinsey研究团队解释说:“开发人员要想有效地利用这项技术来辅助日常工作,很可能需要培训和指导相结合。初始培训应包括将自然语言提示输入工具的最佳实践和实践练习,通常称为prompt engineering。”

这不仅适用于与软件相关的任务。同样的模式也适用于更广泛的企业活动。例如,哈佛商学院(HBS)的研究人员进行了一项研究,以评估为波士顿咨询公司(BCG)员工配备生成式人工智能工具的影响。

哈佛商学院的研究人员写道:“对于人工智能能力前沿的18项现实咨询任务中的每一项,使用人工智能的咨询师的工作效率都显著提高(他们平均多完成了12.2%的任务,完成任务的速度提高了25.1%),所产生的结果质量也显著提高(与对照组相比,质量提高了40%以上)。”

这些研究助长了“人工智能不会取代你,但使用人工智能的人会取代你”的新陈词滥调。或许更夸张的说法是:“人工智能不会取代你,但一个即时工程师会取代你。”

随着“人工智能前沿”的扩大(意味着人工智能模型可以高精度执行的任务),我们能够使用提示解决的问题就越多。这给我们带来了一个普遍的谬论,即更强大的AI模型需要较少的Prompt工程技巧。

“Prompt工程是否已经过时了?” 不,它是最先进的技术。

看待大型语言模型和提示工程之间关系的一种方法是将前者想象成一个多元宇宙,而后者则是一个指针——就像激光指针一样。

当你向一个大型语言模型提问时,它会考虑相关文档的多元宇宙。在每个文档中,存在一系列可能的答案,并且每个可能的答案都是一系列概率的链条。

你的提示指向最有可能包含所需答案的宇宙,然后模型试图逐字地导航到该所需答案。

每次模型预测一个标记时,它就会排除数百种替代路径,并继续缩小选择范围,直到最后只剩下一系列构成“目的地”的单词。

创建大型语言模型(LLM)和提示工程之间关系的想象性表示。把LLM想象成一个巨大而复杂的多元宇宙,充满了无数相互连接的星系,每个星系都象征着一份文件。在这些星系中,星团代表了可能的答案,由发光的概率路径连接起来。在中间,一个人(被描绘成一名亚洲女科学家)正在使用代表Prompt Engineering的未来主义激光笔。

你的LLM在可能的答案中导航多重宇宙(这里更像是“导航糊状的行星”,但你懂的)。

然而,这个目的地从来都不一样。即使你使用完全相同的提示,你也几乎不会到达完全相同的地址。相反,你会落在最相关答案的“附近”。

以下是目前在谷歌工作的软件工程师和人工智能研究员franois Chollet的更技术性的描述:

如果LLM像一个包含数百万个矢量程序的数据库,那么提示符就像数据库中的搜索查询[…]这个“程序数据库”是连续的和插值的——它不是一个离散的程序集。

这意味着稍微不同的提示,比如“以x的风格抒情地重新表达这段文本”,仍然会指向程序空间中非常相似的位置,从而导致程序的行为非常接近,但不完全相同。[…]

Prompt工程是在程序空间中搜索的过程,以找到经验上似乎在目标任务上表现最好的程序。

正如Chollet所指出的,你的提示符的目标是为你想要完成的任务调用正确的程序。许多人落入的推理陷阱是,相信未来的LLM应该能够预测我们希望他们运行哪个程序,即使我们给他们分配了模糊的任务。

不过,和人类一样,即使你聘请了技术能力最强的工程师,她也无法读懂你的想法。你必须确切地解释你想要什么,否则,你就是在浪费时间和精力。

假设你指示你的强大工程师开发一个产品,但你不喜欢这个产品的结果。你要么换工程师,要么改指令。既然你知道你的工程师技能很高,常识建议你选择第二种选择。

同样的,如果你的语言模型没有得到你想要的答案,你也不要把它扔掉。你不能坐着希望下一个模型能够读懂你的想法。最合理、性价比最高的方法是提高你的提示率。

这就是微软的一个研究小组对GPT-4所做的。他们没有针对特定用例对模型进行微调,而是使用即时工程技术来改进其性能。

GPT-4在9个不同的医学基准测试中的得分提高了9%。结果,该模型的准确率超过了90%,超过了专门针对医疗应用进行微调的模型。

Riley Goodside可以说是第一个即时工程师,链接:https://bit.ly/3vrIjlk

注意,微调需要额外的资源,比如雇佣专家来生成高质量的训练数据,以及一些计算资源来重新训练模型。当然,与预训练相比,微调需要一小部分计算能力,但它仍然是一个额外的成本。

另外,每次你想要为新的专业领域调整你的模型时,都需要投入相同的资源。相比之下,微软开发了一种提示技术,可以提高不同领域的性能:电子工程、机器学习、哲学、会计、法律、护理和临床心理学。

另一个突出提示工程力量的例子来自Anthropic。他们的团队将克劳德2.1模型在信息检索评估中的表现提高了98%,他们通过在提示词中添加一句话实现了这一壮举,只有一句话。

要弄清楚LLM能做什么,唯一的方法就是用不同的方式按下它的按钮。当这个陌生工具的新版本出来时,你会期望它有更多的功能,也有更多的按钮。

天真的做法是认为“更有能力的模型需要更少的提示”。实际上,你的模型功能越强大,你可以使用正确的提示解锁的功能就越多。

是时候展现自己了,人类代理!

从长远来看,我们将使用LLM作为操作系统来运用计算能力并解决各种问题。在期中考试中,我们会让人工智能代理执行我们以前编写代码的任务。在这两个阶段,我们都将使用英语作为主要的编程语言。

好吧,那现在怎么办?

在人工智能赶上来之前,是你大放异彩的时候了。把自己想象成一个结合人工智能模型、代码和传统应用程序来解决复杂挑战的技术工匠。可以这么说,你将玩乐高积木,特别是感谢开源社区,你将拥有无穷无尽的部件,可以组合起来创建创新项目。

LLM是这个假设的乐高的特殊部分,因为你经常会在你的创作的中心有一个。这给我们带来了提示工程的两种互补风格。

提示工程有两个含义:

  1. 为LLM编写高质量的自然语言指令
  2. 在LLM之上编写代码,使用条件提示和其他技术来提高其输出。

第二个定义包含了第一个定义,因为即使你将代码封装在LLM周围,你仍然使用英语与它交互。以下是这两个定义与LLM使用如何交织在一起的方式。

LLM作为独立程序:在这里,你可以用自然语言编写高质量的提示符,以解锁最佳可能的输出。例子包括创意生成、文档总结和编写代码。

LLM作为你设计的程序的一部分:在这里,你编写软件(用Python、Java、c++或其他编程语言),围绕LLM来完成特定的任务。例子包括社交媒体评论的情感分析、专门的聊天机器人和自主代理。

现在,让我们来探索提示工程对于每个用例是什么样子的。

1️#“LLM作为独立程序”的提示工程

LLM最常见的用例是通过像ChatGPT和Bard这样的web界面与他们进行交互。

根据你的具体需求,你可以构建一个个人提示库。你希望你的提示是模板化的,并且易于更新。这样,你就不必从头开始重写提示,也不必在每次想要运行其中一个提示时在聊天历史记录中搜索提示。

下面是三个不同的灵活提示的例子,可能会对你有所启发:

[PROMPT TEMPLATE #1 DOCUMENT SUMMARY]

Act like a research assistant in the field of <field_name>.
I will give you a report titled <title_of_the_report> as input.
Please access the report through the following link <URL_of_the_report> using the online browsing feature.
Summarize the report in less than <summary_wordcount> and add <number_of_quotes> from the authors.
Make sure to pick precise quotes and list them as bullet points.

##

Desired format:

Title: <title_of_the_report> 
Link: <URL_of_the_report>

Summary of the report based on the previous instructions.

- Quote #1
- Quote #2
- Quote #3
- etc.

##

Inputs:

<field_name> = Placeholder for the field of expertise of your document.
<title_of_the_report> = Placeholder for the title of the report you want summarize.
<URL_of_the_report> = Placeholder for web address where the report can be found.
<summary_wordcount> = Placeholder for the maximum word count for the summary. 
<number_of_quotes> =  Placeholder for the number of quotes to be extracted from the report.
[PROMPT TEMPLATE #2 PRODUCT DESCRIPTION]

Act like an expert copywriter.

##
Role:
Write a product description for an e-commerce shop.
Use the following structure and fill in the details based on the placeholders provided:

Product Name: <product_name>

Introduction: Start with a captivating opening sentence about <product_name>, suitable for <target_audience>.

Key Features: List the main features of <product_name>. Include <product_features>.

Benefits: Explain how <product_name> benefits the user, addressing <target_audience> needs.

Call to Action: Encourage the reader to make a purchase decision with a compelling call-to-action.

SEO Keywords: Integrate <seo_keywords> naturally within the text for SEO purposes.

Tone: Maintain a <brand_tone> throughout the description to align with the brand's voice.

##

Inputs:

<product_name> = Placeholder for the name of the product.
<product_features> = Placeholder for listing the specific features of the product.
<target_audience> = Placeholder to specify the target audience or demographic for the product.
<seo_keywords> = Placeholder for SEO-optimized keywords relevant to the product.
<brand_tone> = Placeholder to define the brand's tone of voice to be reflected in the product description.
[PROMPT TEMPLATE #3 PROGRAMMING ASSISTANT]
Act like a software engineer.##Role:Your role is to write a program in <programming_language>.Your program must follow these instructions: <user_instructions>.Reason step by step to make sure you understand the user's instructions before you generate the code.Ensure the code is clear, well-commented, and adheres to best practices in <programming_language>.##Format:Give a clear title to each code snippet you generate.For example you can title the first snippet "Snippet #1 version 1," the second snippet "Snippet #2 version 1," and an updated version of the second snippet can be "Snippet #2 version 2."##Inputs:<programming_language> = Placeholder for the programming language in which you want the code to be written (e.g., Python, JavaScript).<user_instructions> = Placeholder for the specific instructions or description of the task you want to be turned into code.

2# 提示工程“LLM作为你设计的程序的一部分”

在这种情况下,你将使用LLM作为可以调用的函数来处理、分析和生成自然语言。

例如,你的代码可以调用LLM来分析与给定产品相关的一系列评论中的情绪。处理完这些注释后,可以使用另一个依赖LLM的函数根据前面的结果生成响应。

现在,让我们看看如何在代码中嵌入LLM。主要有三种方式:

  • 通过另一家公司提供的API连接
  • 使用公司网络中的本地服务器
  • 直接在你的计算机上安装开源LLM

下面是一个如何在程序中使用LLM的基本示例:

# Objective: Carry out a sentiment analysis on a series of comments stored in an Excel file
# LLM choice: We'll use OpenAI API to call the gpt-4 model

import pandas as pd         # version used 2.1.3
from openai import OpenAI   # version used 1.2.0

# Define the path to your API key file
API_key_path = "C:/Users/.....API_Key.txt"  # Replace with your actual API key file path

# Read the API key from the file
with open(API_key_path, 'r') as file:
    API_key = file.read().strip()  # .strip() removes any leading/trailing whitespace

# Create the OpenAI client object with the API key
client = OpenAI(api_key=API_key)


# Define a function that analyzes sentiment in a series of comments stored in an Excel file

def analyze_sentiments(input_file):
    # Read the input Excel file
    inputs_df = pd.read_excel(input_file)
    
    # Select the column by its name 'comments'
    if 'comments' in inputs_df.columns:
        comments = inputs_df['comments']
    else:
        raise ValueError("Column 'comments' not found in the input file")

    sentiments = []

    for comment in comments:
        # Prepare API call
        messages = [
            {
                "role": "system",
                "content": "Analyze the sentiment of the following comment. Use a single word to describe the sentiment. Either `Positive` or `Negative`. Refrain from writing any extra text. Thanks!",            },
            {
                "role": "user",
                "content": comment,
            }
        ]
        model = "gpt-4"
        temperature = 1.0
        max_tokens= 100 # Adjust based on expected response length

        # Make the API call
        chat_completion = client.chat.completions.create(
            model=model,
            temperature=temperature,
            max_tokens= max_tokens,  
            messages=messages
        )

        # Extract response
        if chat_completion.choices:
            sentiment_result = chat_completion.choices[0].message.content.strip()
        else:
            sentiment_result = "No response"

        sentiments.append(sentiment_result)

    # Combine comments with their sentiments
    result_df = pd.DataFrame({
        'Comment': comments,
        'Sentiment': sentiments
    })

    # Write to a new Excel file
    output_file = "path_to_your_output_file.xlsx"  # Replace with your desired output file path
    result_df.to_excel(output_file, index=False)
    print("Sentiment analysis complete. Results saved to", output_file)

# Example usage
input_file = "path_to_your_input_file.xlsx"  # Replace with your input file path
analyze_sentiments(input_file)

# Homework exercice: Write a function that uses a dynamic prompt to write a different response based on the result of sentiment analysis.

如何提高你的提示工程技能

简短的回答是我从Stephen King那里知道的一句优雅的话。“你必须首先做两件事,”他说。“多读,多写。”

就像写作一样,在你坐下来敲击键盘之前,提示工程看起来很简单。因为我们使用自然语言来写提示,我们对此有一种错误的简单感。

不好意思这里重复了一下,但是AI模型还不能读懂你的思维(至少目前还不能)

如果你想要高质量的回答,你必须学会尽可能清楚地表达你的意图。跟上文献来学习新技术,并尽可能多地把它们整合起来。

你可能会厌倦在闪烁的上下文窗口中输入随机指令。解决办法是找到一些困难的问题来解决。如何随机化输出的部分内容?如何动态更改提示符的内容?

发现难以解决的问题,提示工程将从“你必须学习的技能”变成每天一点“快乐(但有时令人沮丧)的智力刺激”。

此外,还有另外两个主题值得你关注:机器学习和深度学习。你想要探索它们的优点和缺点,因为一旦你理解了生成人工智能背后的技术是如何工作的,你就会对你的模型以某种方式运行的原因产生直觉。

这里有一些资源可以帮助你开始:

  1. Cassie Kozyrkov的《结交机器学习的朋友》(YouTube系列视频)https://www.youtube.com/watch?v=lKXv19eRLZg&list=PLRKtJ4IpxJpDxl0NTvNYQWKCYzHNuy2xG&ab_channel=CassieKozyrkov
  2. Andrej Karpathy的《大型语言模型导论》。YouTube(视频)https://www.youtube.com/watch?v=zjkBMFhNj_g&ab_channel=AndrejKarpathy
  3. Isa Fulford和Andrew Ng为开发者编写的Prompt Engineering(免费在线课程)https://www.deeplearning.ai/short-courses/chatgpt-prompt-engineering-for-developers/
  4. 如何为LLM编写专家提示(完整的16,000字指南,包括25+提示技巧,示例和评论)https://towardsdatascience.com/how-to-write-expert-prompts-for-chatgpt-gpt-4-and-other-language-models-23133dc85550?sk=49c4528973c462c1c6d3d28cc29855fe

TL;DR版本

LLM正逐渐成为我们与计算能力的接口。提示工程是编写指令的艺术,它可以从你的LLM(和其他AI模型)中带来最好的结果。

  • 我们将使用自然语言与未来的操作系统进行交互。
  • 在此之前,我们将使用自然语言来编程人工智能助手。
  • 提示工程主要是用自然语言完成的,但这并不意味着人工智能模型可以读懂你的想法。你还是要清楚地表达你的指示。
  • 如果你能写出高质量的提示,你就能写出代码。
  • 编写更好指令的人将构建更好的程序并获得更好的结果。
  • 提示工程是解锁语言模型(以及一般的人工智能模型)潜在能力的关键。
  • 提示工程是一门实证科学。你可以从别人的经历中学到东西,但你从自己身上学到的最多。

感谢阅读!你还可以订阅我们的YouTube频道,观看大量大数据行业相关公开课:https://www.youtube.com/channel/UCa8NLpvi70mHVsW4J_x9OeQ;在LinkedIn上关注我们,扩展你的人际网络!https://www.linkedin.com/company/dataapplab/

原文作者:Nabil Alouani
翻译作者:魏晴
美工编辑:过儿
校对审稿:Jason
原文链接:https://towardsdatascience.com/prompt-engineering-could-be-the-hottest-programming-language-of-2024-heres-why-a9ccf4ba8d49