文字修改

This commit is contained in:
xuhu0115
2023-07-22 02:28:31 +08:00
committed by GitHub
parent 1ab4c115f1
commit 6475598437

View File

@ -6,13 +6,15 @@
"source": [
"# 第三章 迭代优化\n",
"\n",
"当使用 LLM 构建应用程序时,实践层面上很难*第一次尝试*就成功获得适合最终应用的 Prompt。但这并不重要,只要您有一个好的迭代过程来不断改进您的 Prompt那么您就能够得到一个适合任务的 Prompt。虽然相比训练机器学习模型,Prompt 方面一次成功的几率可能会高一些,但正如上所说, Prompt 是否一次完善并不重要。最重要的是**层层迭代**为您的应用程序找到有效 Prompt 的过程。\n",
"在开发大语言模型应用时,很难通过第一次尝试就得到完美适用的Prompt。但关键是要有一个**良好的迭代优化过程**,以不断改进Prompt。相比训练机器学习模型Prompt一次成功率可能更高,但仍需要通过多次迭代找到最适合应用的形式。\n",
"\n",
"因此在本章中,我们将以产品说明书生成营销文案为例,展示一些流程框架,并提示您思考如何层层迭代地分析和完善您的 Prompt。\n",
"本章以产品说明书生成营销文案为例,展示Prompt迭代优化的思路。这与吴恩达在机器学习课程中演示的机器学习模型开发流程相似有了想法后编写代码、获取数据、训练模型、查看结果。通过分析错误找出适用领域调整方案后再次训练。Prompt开发也采用类似循环迭代的方式逐步逼近最优。\n",
"\n",
"在吴恩达Andrew Ng原教程作者的机器学习课程中展示过一张图表说明了机器学习开发的流程。通常是先有一个想法然后再用以下流程实现编写代码获取数据训练模型获得实验结果。然后您可以查看结果分析误差与错误找出适用领域甚至可以更改您对具体问题的具体思路或解决方法。此后再次更改实现并运行另一个实验等反复迭代最终获得有效的机器学习模型。在编写基于 LLM 的应用程序的 Prompt 时,流程可能非常相似。您产生了关于要完成的任务想法后,可以尝试编写第一个 Prompt ,注意要满足上一章说过的两个原则:**清晰明确,并且给系统足够的时间思考**。然后您可以运行并查看结果如果第一次效果不好,那么迭代的过程就是找出为什么指令不够清晰或为什么没有给算法足够的时间思考,以便改进想法、改进 Prompt 等等,循环多次,直到找到适合您的应用程序的 Prompt。\n",
"\n",
"很难有适用于世间万物的所谓“最佳 Prompt ”,更好的方法是找到有效的迭代过程,以便您可以快速地找到一个适合您的应用程序的 Prompt 。\n"
"具体来说,有了任务想法后,可以先编写初版Prompt注意清晰明确并给模型充足思考时间。运行后检查结果如果不理想则分析Prompt不够清楚或思考时间不够等原因做出改进再次运行。如此循环多次,终将找到适合应用的Prompt。\n",
" \n",
"![1](../../../figures/docs/C1/Iterative%20Prompt%20Develelopment.png)\n",
" \n",
"总之,很难有适用于世间万物的所谓“最佳 Prompt ”开发高效Prompt的关键在于找到一个好的迭代优化过程而非一开始就要求完美。通过快速试错迭代可有效确定符合特定应用的最佳Prompt形式。\n"
]
},
{
@ -131,9 +133,9 @@
"source": [
"### 1.2 提示优化1: 解决生成文本太长\n",
"\n",
"它似乎很好地完成了要求,即从技术说明书开始编写产品描述,介绍了一个精致的中世纪风格办公椅。但是当我看到这个时,我会觉得这个太长了。\n",
"它似乎很好地完成了要求,即从技术说明书开始编写产品描述,介绍了一个精致的中世纪风格办公椅。但是当我看到这个生成的内容时,我会觉得它**太长了**。\n",
"\n",
"所以在上述过程中,我产生想法后写了一个 Prompt ,并得到了结果,但是我对它不是很满意,因为它太长了。所以我澄清我的 Prompt 要求它限制生成文本长度要求最多使用50个字。\n"
"在看到语言模型根据产品说明生成的第一个版本营销文案后我们注意到文本长度过长不太适合用作简明的电商广告语。所以这时候就需要对Prompt进行优化改进。具体来说第一版结果满足了从技术说明转换为营销文案的要求描写了中世纪风格办公椅的细节。但是过于冗长的文本不太适合电商场景。这时我们就可以**在Prompt中添加长度限制**,要求生成更简洁的文案。\n"
]
},
{
@ -196,7 +198,12 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"LLM在能堪堪胜任严格的字数限制但实现得并不精确。此例中英文输出要求控制在50个词但有时会输出60或65个单词的内容但这也还算合理。原因是 LLM 使用分词器tokenizer解释文本但它们往往在计算字符方面表现一般般。有很多不同的方法来尝试控制您得到的输出的长度如若干句话/词/个汉字/个字母 (characters) 等)。"
"\n",
"当在Prompt中设置长度限制要求时语言模型生成的输出长度不总能精确符合要求但基本能控制在可接受的误差范围内。比如要求生成50词的文本语言模型有时会生成60词左右的输出但总体接近预定长度。\n",
"\n",
"这是因为**语言模型在计算和判断文本长度时依赖于分词器**,而分词器在字符统计方面不具备完美精度。目前存在多种方法可以尝试控制语言模型生成输出的长度,比如指定语句数、词数、汉字数等。\n",
"\n",
"虽然语言模型对长度约束的遵循不是百分之百精确,但通过迭代测试可以找到最佳的长度提示表达式,使生成文本基本符合长度要求。这需要开发者对语言模型的长度判断机制有一定理解,并且愿意进行多次试验来确定最靠谱的长度设置方法。"
]
},
{
@ -205,9 +212,13 @@
"source": [
"### 1.3 提示优化2: 处理抓错文本细节\n",
"\n",
"我们继续完善这段推广词,会发现的第二个问题是,这个网站并不是直接向消费者销售,它实际上面向的是家具零售商,他们会更关心椅子的技术细节和材料。在这种情况下,您可以继续修改这个 Prompt ,让它更精确地描述椅子的技术细节。\n",
"在迭代优化Prompt的过程中我们还需要注意语言模型生成文本的细节是否符合预期。\n",
"\n",
"解决方法:要求它专注于与目标受众相关的方面。"
"比如在这个案例中,进一步分析会发现,该椅子面向的其实是家具零售商而不是终端消费者。所以生成的文案中过多强调风格、氛围等方面而较少涉及产品技术细节与目标受众的关注点不太吻合。这时候我们就可以继续调整Prompt明确要求语言模型生成面向家具零售商的描述更多关注材质、工艺、结构等技术方面的表述。\n",
"\n",
"通过迭代地分析结果,检查是否捕捉到正确的细节,我们可以逐步优化Prompt,使语言模型生成的文本更加符合预期的样式和内容要求。\n",
"\n",
"细节的精准控制是语言生成任务中非常重要的一点。我们需要训练语言模型**根据不同目标受众关注不同的方面,输出风格和内容上都适合的文本**。"
]
},
{
@ -285,7 +296,13 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"以上是许多开发人员通常会经历的 Prompt 开发的迭代过程简短示例。我的建议是像上一章中所演示的那样Prompt 应该保持清晰和明确,并在必要时给模型一些思考时间。在这些要求的基础上,常见流程是首先尝试编写一版 Prompt ,看看会发生什么,然后继续迭代完善 Prompt以逐渐接近所需的结果。许多成功的 Prompt 都是通过这种迭代过程得出的。我将向您展示一个更复杂的 Prompt 示例,可能会让您对 ChatGPT 的能力有更深入的了解。"
"通过上面的示例我们可以看到Prompt迭代优化的一般过程。与训练机器学习模型类似设计高效Prompt也需要多个版本的试错调整。\n",
"\n",
"具体来说第一版Prompt应该满足明确和给模型思考时间两个原则。在此基础上一般的迭代流程是首先尝试一个初版分析结果然后继续改进Prompt逐步逼近最优。许多成功的Prompt都是通过这种多轮调整得出的。\n",
"\n",
"后面我会展示一个更复杂的Prompt案例让大家更深入地了解语言模型的强大能力。但在此之前我想强调Prompt设计是一个循序渐进的过程。开发者需要做好多次尝试和错误的心理准备通过不断调整和优化才能找到最符合具体场景需求的Prompt形式。这需要智慧和毅力但结果往往是值得的。\n",
"\n",
"让我们继续探索提示工程的奥秘,开发出令人惊叹的大语言模型应用吧!"
]
},
{
@ -427,11 +444,16 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"本章的主要内容是 LLM 在开发应用程序中的迭代式 Prompt 开发过程。开发者需要先尝试编写 Prompt 然后通过迭代逐步完善它直至得到需要的结果。作为一名高效的提示词工程师Prompt Engineer关键在于掌握有效的开发Prompt的过程而不是去寻求得到“完美的”Prompt。对于一些更复杂的应用程序可以对多个样本如数百张说明书进行 Prompt 的迭代开发,并在样本集上进行评估。\n",
"\n",
"最后在更成熟的应用程序中可以观察多个Prompt在多个样本集上的表现测试平均或最差性能。但通常**仅当**应用较成型之后,才推荐您通过这种评估方式,来精益求精。\n",
"本章重点讲解了在开发大语言模型应用时采用迭代方式不断优化Prompt的过程。作为Prompt工程师关键不是一开始就要求完美的Prompt而是掌握有效的Prompt开发流程。\n",
"\n",
"请使用 Jupyter Notebook动手实践本节给出的示例并尝试不同的变化查看结果。"
"具体来说首先编写初版Prompt然后通过多轮调整逐步改进直到生成了满意的结果。对于更复杂的应用可以在多个样本上进行迭代训练评估Prompt的平均表现。\n",
"\n",
"在应用较为成熟后才需要采用在多个样本集上评估Prompt性能的方式来进行细致优化。因为这需要较高的计算资源。\n",
"\n",
"总之Prompt工程师的核心是掌握Prompt的迭代开发和优化技巧而非一开始就要求100%完美。通过不断调整试错最终找到可靠适用的Prompt形式才是设计Prompt的正确方法。\n",
"\n",
"读者可以在Jupyter Notebook上对本章给出的示例进行实践修改Prompt并观察不同输出以深入理解Prompt迭代优化的过程。这会对进一步开发复杂语言模型应用提供很好的实践准备。\n"
]
},
{