本文通过四个阶段过程来系统地理解和修复LLM应用程序中的错误。
大型语言模型(LLM)为机器学习的应用创造了一个新的范式。一方面,用户有一个机器学习模型,可以根据自己的需求和任务进行定制。另一方面,可能无法访问模型的权重和超参数。用户可以通过调整提示和提供给模型的信息来控制模型的行为。
这对于那些习惯于开发传统机器学习应用程序的人来说带来了难题。如果没有一种系统的方法来分析错误并进行更正,那么可能会陷入混乱的境地——随机更改提示,但又无法衡量每次修改的影响。
本文通过以下四个阶段过程来系统地理解和修复LLM应用程序中的错误。
第一阶段:准备
在修正错误之前,应该能够衡量它们。在这个阶段,将以允许用户跟踪模型性能的方式制定目标任务。
(1)创建数据集: 创建50~100个示例,这些示例代表目标任务以及应用程序用户将发送的请求类型和预期响应。每个示例都应该包括请求和响应。如果希望响应包含推理链等其他信息,需要确保将其包含在示例中。如果响应必须以特定格式(例如JSON或键值对)返回,需要确保所有示例的格式都正确无误。
(2)开发评估方法: 需要找出一种方法来比较模型的响应与数据集中的实际情况。对于数字任务和问答,评估就像创建一个比较回答的函数一样简单。
对于生成性任务(例如生成摘要)需要采用更复杂的方法,如单独的LLM提示。例如,首先人工审查和纠正一些模型响应,并开发一小部分写入和错误的答案。然后,创建了单独的LLM-as-a-Jjudge提示,其中包含对新模型答案进行评分的示例。
(3)指定目标接受标准: 并非所有任务都需要完美的输出。例如,在许多应用中,总是会采用人工参与的循环方式,并且仅将LLM作为执行部分基础工作的辅助工具。在这种情况下,可以指定一个准确度级别,以使LLM应用达到可发布的标准。然后,可以收集更多数据来优化提示,并逐渐提高其准确度。例如,曾经帮助一个团队翻译需要精心设计提示的特殊文本。首先从简单的提示开始,该提示将他们的翻译速度提高了25%。虽然不完美,但这个应用却非常有价值,节省了大量时间。随后,根据反馈和示例逐步完善提示,使其能够完成他们80%的工作。
第二阶段:评估
这个阶段的目标是以一种可以系统地处理的方式来识别和分类模型所产生的错误。
(1)跟踪数据集上的错误: 在数据集上运行提示,将模型的响应与实际情况进行比较,并将模型产生错误的示例分开。对于这一步,将需要使用在上一阶段开发的评估函数。
(2)对错误进行分类: 创建一个电子表格,其中包含模型犯错误的示例、模型的响应以及正确的响应。将错误分为几个常见的原因和类别。一些原因示例可以是“缺乏知识”、 “推理不正确”、“计算错误”和“输出格式不正确”。(提示:可以使用前沿模型来帮助发现错误中的模式。为模型提供正确和错误的答案,并指导它将它们分为几个类别。虽然它可能不会提供完美的结果,但将会提供一个很好的起点。)
第三阶段:纠正
这一阶段的目标是修改提示,以纠正在前一阶段中发现的常见错误。在这一阶段的每个步骤中,对提示符进行一次修改,并重新运行模型出错的示例。如果错误没有解决,可以进入下一阶段,尝试采用更复杂的解决方案。
(1)修正提示: 根据在前一阶段发现的错误类别,对提示进行修正。从非常简单的修改开始,例如添加或更改说明(例如,“只输出答案,不输出额外的细节”,“只输出JSON”,“在回答问题之前,逐步思考并写下推理”)。
(2)在提示中添加知识: 有时,问题是模型没有关于任务的基本知识。在提示中创建一个“知识”部分,可以在其中包含任何有助于模型的事实或额外信息。
这一部分可以包括任何与任务相关的内容,包括文档、代码和文章。 (在这个阶段不要担心提示的长度,只关注错误分析。可以考虑优化提示的成本和规模。)
(3)使用小样本示例: 如果简单的说明和额外的知识不能解决问题,尝试在提示中添加少量示例。在提示中添加一个“示例”部分,其中包括问答对,并演示模型应该如何解决问题。从两到三个例子开始,使提示保持简短。如果错误仍未解决,则逐渐添加更多示例。由于当今的前沿模型支持很长的提示,因此可以添加数百个示例。而尝试使用Claude、Gemini和ChatGPT,使用正确的场景示例格式,可以获得令人印象深刻的结果。
(4)将提示分解成几个步骤: 有时候,在一个提示中要求太多了。如果任务可以分解成单独的步骤,尝试为每个步骤创建一个单独的提示。当被要求完成一项任务时,模型更有可能很好地执行。然后,可以创建一个提示管道,将每个步骤的输出作为下一个提示的输入文本。更高级的管道可能包括使用不同提示序列的额外逻辑。例如,第一步可能是确定请求是否需要外部信息的提示。如果需要,请求将被传送到一个RAG提示符。否则,它将被传递给使用模型的内存知识的另一个提示符。
第四阶段:最终确定
这一阶段的目标是确保修正不会导致其他问题,也不会破坏模型在目标任务上的一般能力。
(1)重新评估整个数据集: 一旦将模型的错误纠正到可接受的水平,通过纠正提示重新运行所有示例,以确保一切正常工作。如果遇到新的错误,重复评估和纠正阶段。
(2)保留一个单独的验证数据集: 为了确保提示不会过拟合到数据集,为最终评估保留一个保留集。这将确保提示超越训练示例。这类似于经典的机器学习,有单独的测试和验证集。如果模型在验证集上表现不佳,则必须重复评估和纠正错误的阶段。之后,需要创建新的验证示例。(提示:可以使用前沿模型生成新的示例,其方法是为它提供一些以前的示例,并要求它生成不同但相似的示例。)
如上所示,机器学习错误分析的基本原则也适用于LLM应用程序。只需要从正确的角度思考问题及其解决方案。
原文标题:HowtoanalyzeandfixerrorsinLLMapplications,作者:Ben Dickson
链接: