面向开发人员的快速工程:11 个概念和示例🎯🧙♂️⚡
及时工程是人工智能时代最好的起点之一。
理解核心概念将帮助您充分利用 ChatGPT、Google Bard 和 Claude 等生成式 AI 模型来完成调试、代码翻译和生成测试等任务,包括任何一般任务。
今天,我们将通过非常详细的 Prompt Engineering 示例介绍所有核心概念和原则。
让我们开始吧。
顺便说一句,我是 Latitude 的一员,我们正在构建一个开源的 LLM 开发平台。你可以加入ai.latitude.so的候补名单。
你将能够做很多很酷的事情,例如:
⚡ 将提示部署为 api 端点。
⚡ 使用 LLM 进行自动评估。
⚡ 合作进行快速工程。
我非常有信心,它发布后您一定会喜欢它!
这个叫做“快速工程”的新术语是什么?
每当我们尝试与 ChatGPT 或任何其他对话式 AI 工具进行通信以获得响应时,作为输入给出的文本、问题或信息的形式称为提示
。
每当我们谈论生成式人工智能时,“快速工程”是最常提到的词之一。
提示工程基本上是编写和改进这些输入的过程,以优化您从这些语言模型中获得的响应。
✅ 让我们想象一下咖啡。
想象一下在咖啡馆点咖啡。如果你只是说“咖啡”,你得到的只是一杯标准的咖啡。但如果你特别指定想要一杯加了一点焦糖的单品意式浓缩咖啡,你得到的将会是一杯更精致的咖啡,更符合你的需求。
这与快捷工程的原理相同,正如详细的咖啡订单可以带来更优质的咖啡一样,具体的优质快捷指令可以产生更相关、更精准的AI响应。由于每个人都希望利用AI来改进工作流程,因此用例的不断增加催生了一个全新的领域。
这将有助于模型更好地执行其任务,例如编写营销电子邮件、生成代码、分析和合成文本,或其他数百个(甚至数千个)当前应用程序。
它们不是人类,所以没有直觉。就像任何机器一样,它们只是擅长…… garbage in, garbage out
。一切都取决于我们,以便提供更好的简报。
提示工程师不仅负责为 AI 语言模型提供指导和方向,还负责开发、测试和完善已经提交给 AI 模型的特定提示。
用一句话概括,快速工程就是“如果你想获得更好的结果,那就试着问更好的问题”
。读完这篇文章后,我相信你会更好地理解它的含义,以及如何更好地提出这些问题。
我们使用哪种类型的 LLM?
在我们继续之前,重要的是要了解 LLM 主要有两种类型,但最常用的是:
⚡ 指导调整后的法学硕士。
根据指令进行微调,并尽力遵循这些指令。通常,我们在使用任何生成式 AI 模型时都会用到这些。
带有人类反馈的强化学习是其中一种常见的情况。
-→示例:
如果我们问:Asking What is the capital of India?
大多数任务都推荐使用指导型法学硕士,它很有帮助、诚实(尽其所能)且无害。
在解释概念或进一步讨论时我将参考这种类型。
1. 好的提示非常具体并且遵循特定的结构。
通常情况下,只需向模型打招呼并提问就可以了,例如这样说:很高兴见到你,你能告诉我输入 console.log("Hello World") 后会收到什么控制台消息吗
?
但它通常会产生不好的结果,并且会自行假设事情,而这正是我们不想要的。
如果您需要非常准确的结果(例如在编程任务中),那么拥有良好的提示结构非常重要。
让我们看看如何清晰地构建任何提示:
⚡ Intro
:设置你所指的场景。这有助于让AI拥有清晰的role
自我认知。
-→ 比如,我想让你担任面试官。我扮演候选人,你
……
⚡ Context
:任何好的参考总是取决于工作。
-→ 例如,你会问我前端开发人员初级职位的面试问题
。
⚡ Instructions
:在了解背景之后,给出适当的指示非常重要。
-→ 例如,不要一次性写完所有陈述。我希望你只接受我的采访。问我问题,然后等我回答。不要写解释
。
⚡ Ending
:您可以恰当地描述要做什么。
-→ 比如,像面试官那样一个一个地问我问题,然后等我回答。我第一句话就是“嗨”
。
因此,将以上所有内容放在一起,我们的示例提示将如下所示:
✅我希望你扮演一个面试官的角色。我会扮演候选人,然后你问我前端初级开发人员职位的面试问题。我希望你只以面试官的身份回答。不要一次性写完所有解释。我希望你只和我一起面试。问我问题,然后等我回答。不要写解释。像面试官一样一个一个地问我问题,然后等我回答。我的第一句话是
Hi
-→ 另一个很好的提示示例是:
✅我希望你充当一个 JavaScript 控制台。我会输入命令,你回复 JavaScript 控制台应该显示的内容。我希望你只回复一个唯一代码块内的终端输出,别无其他。不要写解释。除非我指示你这样做,否则不要输入命令。当我需要用英语告诉你一些事情时,我会将文本放在花括号内(像这样)。我的第一个命令是 console.log("Hello World");
。
您应该尽量避免任何闲聊并使用严格的提示以获得更好的结果!
现在,构建你的提示很重要,但你不需要遵循任何特定的结构(即使是上面提到的结构)。你可以根据获得的初步结果进行测试,并进一步改进。有时,少即是多!
2.✅主动语态❌被动语态。
主动语态是指句子的主语执行动词所表达的动作。(主语+动词+宾语)
被动语态是指句子的主语受到动词的作用。(宾语+动词+主语)
-→示例:
主动语态:厨师做了这顿饭
。
被动语态:这顿饭是由厨师做的
。
如果你想知道为什么这很重要?主动语态能给AI模型带来行动感和更清晰的理解。这能带来更好的响应。
此外,在提示中使用反问句可以刺激人工智能模型的“思考过程”,并引导其产生更有意义的输出。
3. 给模型思考的时间。
如果您计划提高快速工程能力,这是您需要了解的最重要的概念之一。
假设有人让你把 21 乘以 34
,你可能不会立刻知道答案,但随着时间的推移,你仍然可以算出来。除非你是个计算器高手 :)
同样,模型在尝试立即回答时会犯更多推理错误,而不是花时间去寻找答案。chain of thought
在回答之前询问可以帮助模型更可靠地推理出正确答案。
其中一种策略是指示模型在匆忙得出结论之前自己找到解决方案
。
有时,当我们明确指示模型执行相同操作时,我们会获得更好的结果。
假设我们想要一个模型来评估一个数学问题的解。最显而易见的方法就是直接询问模型这个解是否正确。
Problem Statement:
I'm planning to build a solar power installation and need help calculating the financials.
- Land costs $100 per square foot.
- Solar panels cost $250 per square foot.
- The maintenance contract costs a flat $100,000 per year, plus an additional $10 per square foot.
Calculate the total cost for the first year of operation based on the number of square feet.
Student's Solution:
Let x represent the size of the installation in square feet.
1. Land cost: 100x
2. Solar panel cost: 250x
3. Maintenance cost: 100,000 + 10x
Total cost: 100x + 250x + 100,000 + 10x = 360x + 100,000
SYSTEM:
Evaluate whether the student’s solution is correct.
USER:
Determine if the student’s solution to the problem is accurate.
ASSISTANT:
First, let’s break down the solution:
1. Land Cost: 100x
2. Solar Panel Cost: 250x
3. Maintenance Cost: 100,000 + 10x
Combining these:
- Total cost = Land cost + Solar panel cost + Maintenance cost
- Total cost = 100x + 250x + 100,000 + 10x
- Total cost = 360x + 100,000
The student's solution is indeed correct.
在得出结论之前先找到自己的解决方案是最被低估的技术之一,它非常强大且简单!
其他策略可以是:
你知道吗,还有“自动思维链”的概念?你应该在提示指南中阅读它,包括所涉及的各个阶段。
4.避免快速注射。
提示注入是指用特殊的用户输入覆盖提示中原始指令的过程。这种情况通常发生在后续使用不受信任的输入作为提示的一部分时。
-→ 我们再举一个例子:
生成的响应为:提示注入是一种用户操纵语言模型输入的技术,旨在改变其行为或输出。这可能会导致意外或恶意的响应,凸显了强大的输入验证的重要性
。
现在,您可以要求它忽略它并执行完全其他的操作。
区分原始开发者指令和用户输入指令确实非常困难。但在某些情况下,如果输入清晰,则有可能区分。我们来看一个例子。
假设,给出相同的输入并明确要求不要让它在接下来的两个提示中覆盖。
从下面的响应快照中可以看出它并没有被覆盖。
按照指示,只有尝试两次后才可以注射。
没有万无一失的解决方案,但您可以根据提示进行调整。
5. 少量提示。
少量样本提示是一种提示工程技术,它涉及向 AI 展示一些期望结果的示例(或镜头)。利用这些示例,模型可以学习特定的行为,并在执行类似任务时变得更好。
更像是给出完成任务的成功例子,然后要求模型执行该任务。
-→ 例如,我们来看一个例子。
Your job is to create content for our client, {{client_name}}. Here is some information about the client {{client_description}}.
Here are a few examples of content we've created in the past from briefs:
"""
Example 1:
Brief: {{brief_1}}
Content: {{content_1}}
Example 2:
Brief: {{brief_2}}
Content: {{content_2}}
"""
Here is the latest brief to create content about:
"""
Brief:{{brief_description}}
Content:
通过传递之前的简报和从这些简报中生成的内容,模型将了解我们所期望的特定客户的风格。
我将示例括在分隔符(三个引号)中,以格式化提示并帮助模型更好地理解提示的哪部分是示例而不是说明。
或者你可以用一些例子让模型了解基本任务,例如:
Few shot prompting example.
The movie was good // positive
The movie was quite bad // negative
I really like the movie, but the ending was lacking // neutral
I LOVED the movie //
模型将理解并以小写显示输出。
虽然法学硕士(LLM)课程很棒,但在使用零样本(zero-shot)进行更复杂的任务时,它们仍然略显不足(第 7 点已讨论)。在这种情况下,可以使用少样本提示作为一种技巧,来实现情境学习并进一步提升。
虽然它有一定的局限性,但在大多数情况下都能正常工作。您可以阅读更多关于该技术的信息,包括其局限性。
6. 约束。
基于约束的提示涉及在提示中添加约束或条件,帮助语言模型在生成响应时关注特定方面或要求。
强烈建议在大多数与 ChatGPT 的交互中使用它。明确的约束条件会为生成的响应设置边界或限制。
您可以通过不同的方式来实现,例如:
⚡ 指定响应的长度不应超过一定的字数或字符限制。
-→让我们看一个例子。
正如您所见,当我们允许它输入 50 个字时,它只是假设并放弃了 38 个字的回答。
让我们通过说来给出一个更好的提示close to 50 words
。
答复非常接近 50 个字,这是一个更好的限制。
⚡ 指定响应结构。
-→ 我们正在指定具有更严格约束的结构。
这是 JSON 响应。务必澄清,否则模型将分别假设并给出文本 + JSON 响应。
{
"summary": [
"Prompt engineering involves developing prompts to get clear and useful responses from AI tools.",
"It helps guide large language models to perform tasks based on various inputs.",
"Generative AI tools like ChatGPT offer solutions for conversations, programming help, and automated tasks."
]
}
⚡ 提供明确的指示。
-→ 定义响应的目标受众,例如针对软件工程师
或针对倡导者
。
-→ 指示 ChatGPT 避免某些类型的内容,以确保其安全并符合道德准则。
您可以在 Andrew Maynard 的博客上阅读有关基于约束的提示的更多信息,并进行一些练习。
7.零次射击提示。
零样本提示是指用于与模型交互的提示不包含示例或演示。零样本提示直接指示模型执行任务,无需任何额外的示例。
一种表达“以提示形式给出简单指令”的奇特方式。
-→让我们看一个例子。
在下面的提示中,我们没有向模型提供任何文本示例及其分类,LLM 已经理解了我们所说的“情感”的含义。
Classify the text into neutral, negative, or positive.
Text: I think the vacation is okay.
Sentiment:
强化学习人类反馈也是改进零样本提示的一种方法。
当零样本不起作用时,建议在提示中提供演示或示例,以引导小样本提示。
你可以通过 labelbox 了解Zero-Shot、Few-Shot 和 Fine-Tuning之间的区别。文末有基准测试结果,有点出乎意料。
🎯 一次性提示。
还有一次性提示的概念,涉及提供单个示例或参考输出片段作为提示的一部分。
这对于生成符合你写作风格的内容,或需要遵循特定参考资料的情况非常有用。你可以通过在线资源了解更多信息。
8. 思路链(CoT)。
思路链 (CoT) 提示鼓励模型将复杂的推理分解为一系列中间步骤,从而得到结构良好的最终输出。
您应该知道,您可以通过要求模型执行推理步骤将思路提示与零样本提示结合起来,这通常会产生更好的输出。
这是最小形式的 CoT 提示,即零样本 CoT
,它实际上是要求模型一步一步地思考。这种方法对于那些 LLM 经常无法解决的数学任务,取得了令人印象深刻的结果。
-→让我们看一个例子,你可以将它与少量提示相结合,以便在需要在响应之前进行推理的更复杂的任务中获得更好的结果。
The odd numbers in this group add up to an even number: 4, 8, 9, 15, 12, 2, 1.
A: Adding all the odd numbers (9, 15, 1) gives 25. The answer is False.
The odd numbers in this group add up to an even number: 17, 10, 19, 4, 8, 12, 24.
A: Adding all the odd numbers (17, 19) gives 36. The answer is True.
The odd numbers in this group add up to an even number: 16, 11, 14, 4, 8, 13, 24.
A: Adding all the odd numbers (11, 13) gives 24. The answer is True.
The odd numbers in this group add up to an even number: 17, 9, 10, 12, 13, 4, 2.
A: Adding all the odd numbers (17, 9, 13) gives 39. The answer is False.
The odd numbers in this group add up to an even number: 15, 32, 5, 13, 82, 7, 1.
A:
这是我们提供推理步骤时对完美结果的响应。
由于模型的改进,即使是单个示例也足以
获得相同的结果。
9.减少幻觉并使用分隔符。
🎯 减少幻觉。
当任何大型语言模型 (LLM) 生成的响应在事实上不正确、毫无意义或与输入提示脱节时,幻觉或“编造事物”是一种常见的失败。
可能是因为:
⚡ 该模型没有适当的背景和常识来确定这些是不准确的答案。
⚡ 尝试假设一些事情,并在不确定正确答案的情况下提供额外的帮助。
-→ 例如,一个旨在生成文章摘要的人工智能模型最终生成的摘要包含原始文章中不存在的细节,甚至完全是捏造的信息。
-→ 其他例子可能是假阴性(可能无法将某事物识别为威胁)或假阳性(将某事物识别为威胁,但事实并非如此)。
有很多技术可以用来防止这些问题:
⚡ 检索增强生成 (RAG)
⚡ 验证链 (CoVe) 提示
⚡ 知识链 (CoK) 提示
⚡ ReAct 提示
⚡ 注释链 (CoN) 提示
⚡ 其他高级提示技术
我不会去探究这个问题,因为幻觉并不是提高快速工程水平的内在因素。
虽然频繁人工审查 LLM 答复和反复试验提示工程可以帮助您检测和解决应用程序中的幻觉,但这种方法非常耗时,并且随着应用程序的增长难以扩展。
🎯 使用分隔符。
三重引号、XML 标签、章节标题等分隔符可以帮助识别需要区别处理的某些文本部分。
一些分隔符可以是:
-
三重引号:
"""
-
三个反引号/破折号:
---
-
尖括号:
< >
-
XML标签:
<tag> </tag>
Summarize the text delimited by triple quotes in 3 bullet points.
"""insert text here"""
示例响应如下。
您可以通过真实的 Python 指南阅读有关分隔符的更多实际示例。
10. 完善你的提示,因为没有“完美的提示”。
任何题目都很少能在第一次尝试时就获得好结果。为了缩小预期结果与实际输出之间的差距,题目需要尽可能地进行改进。
一个简单的方法可以是:
⚡ 尝试一下。⚡
分析结果不符合你预期的地方。⚡
明确指示,并留出更多时间思考。⚡
用一批例子来完善提示。
-→让我们看一个例子。
将此作为输入响应。
✅将括号中的文本概括为大约三个要点,并以 JSON 格式提供该摘要。
提示工程是一种开发提示的实践,旨在让AI工具生成清晰实用的响应。AI提示可以帮助引导大型语言模型根据不同的输入执行任务。
其目标是教会AI模型为查询提供最佳输出。如果您关注科技领域的最新动态,您可能已经熟悉“生成式AI”或名为ChatGPT的平台——这是一个公开可用的AI工具,用于提供对话、提示、编程帮助,甚至自动化解决方案。
它假设了一些事情并给出了 JSON 和文本,这是错误的,因为我们只需要 JSON 输出。
我们需要通过指定我们需要 JSON 而不是文本描述来进一步细化提示。
✅将括号中的内容概括为接近 3 个要点,并将最终响应以 json 形式给出,而不是文本描述。
提示工程是一种开发提示的实践,旨在让AI工具生成清晰实用的响应。AI提示可以帮助引导大型语言模型根据不同的输入执行任务。其目标是教会AI模型为查询提供最佳输出。如果您关注科技领域的最新动态,您可能已经熟悉“生成式AI”或名为ChatGPT的平台——这是一个公开可用的AI工具,用于提供对话、提示、编程帮助,甚至自动化解决方案。
这次,我们得到了更好的回应,没有任何不良结果。
这就是包括错误分析在内的迭代开发过程!!
🎯 系统地测试变化。
如果您要进一步完善您的提示,您应该了解这个概念。
在可以衡量的情况下,提升性能会更容易。在某些情况下,修改提示会在几个孤立的示例上取得更好的结果,但可能会导致其他示例集的整体结果更差。
为了确保更改对性能产生净积极影响,可能需要定义一个综合测试套件,也称为eval
。
好的评估示例如下:
-→ 代表现实世界的使用情况(或至少是多样化的)。
-→ 包含许多测试用例来评估性能变化。
-→ 易于自动化或重复。
就像你给出两个提示来比较它们的结果看看哪个更好一样。
计算机可以根据客观标准(例如只有一个正确答案的问题)以及任何模糊标准自动进行评估。
我知道如果您不了解这个概念的话会很难理解,您可以参考在线资源或者注册下面的候补名单。
Latitude 正在构建一个开源的 LLM 开发平台。您可以访问ai.latitude.so加入等候名单。
您将能够做很多很酷的事情,例如使用 LLM 进行自动化评估以及协作进行快速工程。
11. 要求模特采用角色。
你听过这句话吗?“假装成功,直到成功”。我知道这句话很有争议,但大量心理学研究表明,即使这句话看起来不对,它也能提高整体效率。
与心理学概念非常相似,指导法学硕士承担特定的角色或角色可以大大提高绩效。
这种被称为角色扮演的技术可以让法学硕士生成更准确、更符合情境、更符合角色的回应。
例如,您可以使用如下提示:(参考)
我希望你充当一个 Linux 终端。我会输入命令,你回复终端应该显示的内容。我希望你只回复一个唯一的代码块内的终端输出,别无其他。不要写解释。除非我指示你这样做,否则不要输入命令。当我需要用英语告诉你一些事情时,我会将文本放在花括号内(像这样)。我的第一个命令是 pwd。
可以看到,它根据输入提示给出了简单有力的响应。
角色扮演提示除了分配角色外,还可以分配具体的要求。例如,两名记者从事相同的职业,但他们在性格和专业知识等方面的差异很大。
我建议阅读有关大型语言模型(如 ChatGPT)中的角色扮演的文章,以便更好地理解它。
结论
唯一的限制(也是一个巨大的限制)是,无论你的快速工程技能多么出色,你仍然会受到模型本身的限制。模型训练数据的质量和整体实用性至关重要。
另外,这比以往任何时候都更加困难,因为我们可以使用人工智能工具生成音频、视频或许多不同类型的格式,所以现在它变得非常复杂。
我推荐阅读的有关 Prompt Engineering 的最佳文章之一来自Google Cloud和circleci。
Merve Noyan 创建了一款出色的ChatGPT 提示生成器应用程序,允许用户生成根据他们想要的角色定制的提示。
您可以在“Awesome ChatGPT Prompts”上找到大量经过测试的提示列表。我使用的一些示例就来自这个 repo。
这是一门艺术,需要反复尝试,但绝对值得!
不断尝试和测试,直到获得最佳效果。
我希望你喜欢这个,如果你有任何问题请告诉我。
祝您拥有美好的一天!下次再见。
你可以在anmolbaranwal.com 查看 我的作品。 感谢阅读!🥰 |
![]() ![]() ![]() |
---|
关注 Latitude 以获取更多类似内容。
文章来源:https://dev.to/latitude/prompt-engineering-for-developers-11-concepts-and-examples-in0