Valuable insights
1.提示工程的迭代性: 提示工程是一个不断完善的过程,通过迭代优化提示内容和结构,能够有效提升大型语言模型在特定任务上的表现和准确性。
2.明确的提示结构至关重要: 采用清晰、结构化的提示(如任务描述、内容、指令、示例、重复重要信息)有助于模型更好地理解任务并一次性给出期望的响应,尤其适用于API交互。
3.提供任务和语气背景: 为模型提供明确的任务角色、上下文信息以及所需的输出语气(如事实性、自信),能够显著减少模型猜测,提高其输出的精确性和可靠性。
4.利用背景细节和上下文: 将不变的背景信息(如固定表格结构)作为系统提示的一部分,能够提高模型对动态内容的理解效率和准确性,并可利用XML标签进行有效组织。
5.应用小样本示例与对话历史: 通过提供具体的输入-输出示例(小样本学习)和保留对话历史,可以为模型提供丰富的上下文,有效引导其在处理复杂或模糊场景时做出正确判断。
6.制定详细指令与分析顺序: 通过分步指导模型分析信息,并明确分析顺序(如先阅读表格再分析草图),能够显著提高模型推理的逻辑性和最终判断的准确性。
7.防止幻觉与不确定性: 通过在提示中强调模型只在高度自信时才给出结论,并要求其引用事实依据,可以有效防止模型产生幻觉,确保输出的真实性和可靠性。
8.输出格式化与应用集成: 指定模型输出的格式(如XML标签、JSON)对于下游应用的数据处理和集成至关重要,确保模型输出的数据易于机器解析和利用。
9.利用预填充响应与扩展思考: 利用预填充响应强制特定输出格式,以及通过扩展思考功能(scratchpad)观察模型推理过程,是调试和优化提示工程的强大工具。
引言
提示工程是与语言模型沟通并引导其执行特定任务的关键实践。它涉及为模型编写清晰的指令,提供完成任务所需的上下文,并精心组织信息以获得最佳结果。这是一个详细且多方面的工作,但最佳的学习方式是亲自动手实践。本次会议将通过一个受真实客户案例启发的场景进行演示,该案例旨在分析图像并从中提取事实信息,同时让Claude对所发现的内容进行判断。
- 为模型编写清晰的指令
- 提供模型完成任务所需的上下文
- 思考如何组织信息以获得最佳结果
场景设定
设想在一个瑞典汽车保险公司工作,日常处理汽车保险索赔。手头有两份关键信息:一份详细描述事故发生经过的汽车事故报告表,以及一份手绘的事故现场草图。目标是将这两份信息传递给Claude,并评估其初步处理能力。
初始尝试与模型响应
在初次尝试中,将报告表和草图直接输入到Anthropic的Claude控制台,并使用了一个非常简单的提示,要求Claude审查事故报告并确定事故发生的原因以及责任方。然而,Claude的初步回应却误将此场景解释为一场发生在瑞典Chappangan街上的滑雪事故。这个无心之失暴露出提示中缺乏足够的上下文来明确任务场景,因此模型依赖于通用知识库进行了猜测。
Claude认为这与发生在瑞典一条名为Chappangan的街道上的滑雪事故有关。
提示结构
为了让语言模型能准确有效地完成复杂任务,Anthropic推荐采用一套标准化的提示结构。这种结构旨在最大化模型在一次性交互中成功执行任务的能力,而非依赖多轮对话。这种方法尤其适用于通过API与模型进行交互的场景。
- **任务描述:** upfront告诉模型其角色和目标。
- **动态内容:** 提供模型需要分析的具体数据,例如本案例中的图像。
- **详细指令:** 提供分步指南,指导模型如何处理任务和进行推理。
- **示例:** 提供输入-输出对的例子,以演示期望的响应格式和内容。
- **重要信息重复:** 在提示末尾再次强调关键指令和指导原则。
这种结构化的方法不仅有助于模型更好地理解任务边界和期望输出,还能通过提供清晰的引导,显著提高其在复杂场景下的表现,减少不确定性和猜测。
任务上下文
针对初次尝试中Claude对任务场景理解的不足,关键在于提供更清晰的任务上下文和语气指导。通过明确指出Claude将作为一个AI助手,协助人类理赔员审查瑞典语的汽车事故报告表和手绘草图,我们能有效缩小模型的理解范围。
定义模型行为和信息处理
在优化后的提示版本(V2)中,我们强调了Claude应保持事实性和自信。这意味着如果模型无法完全理解所查看的内容,它不应进行猜测或提供误导性信息,而是应明确指出其不确定性。这对于确定事故责任方至关重要,因为任何判断都必须尽可能清晰和自信。
- 指定AI助手应协助人类理赔员审查瑞典语汽车事故报告。
- 明确内容包括手绘的事故草图。
- 指示模型在不完全自信时不得做出评估。
- 要求模型保持事实性、自信,避免猜测。
通过运行V2版本,Claude现在能够识别出其任务与汽车事故相关,而非滑雪事故,并能识别出车辆A和车辆B在报告表中的标记。然而,它仍然表示信息不足以完全自信地确定责任方。这符合了我们对模型“不确定时不猜测”的指示,但也提示我们需要提供更多关于表格内容的细节,以便模型能做出更深入的分析。
背景细节
由于汽车事故报告表的内容结构是固定不变的,我们可以将其详细信息作为背景细节加入到系统提示中。这种做法能够帮助Claude预先了解表格的布局和每项内容的含义,从而减少模型每次处理新查询时重新理解表格的时间,并提高其读取和分析表格的准确性。这类似于为模型提供一份“参考手册”,让它在处理动态数据时能够快速查阅。
结构化信息与XML标签
为了更好地组织提示中的信息,Anthropic推荐使用XML标签或Markdown等分隔符。XML标签尤其有用,因为它们允许我们明确标记不同类型的内容,例如
- 将不变的静态信息(如表格结构)置于系统提示中。
- 使用XML标签或Markdown来结构化信息。
- 在XML标签内明确指定内容类型,例如
。 - 提供关于表格填写方式的额外信息(如人类填写可能不完美,可能出现涂鸦或非X标记)。
- 解释表格的目的或意义,作为模型的额外上下文。
在V3版本的提示中,我们详细描述了瑞典汽车事故报告表的每一行及其含义,并告知Claude关于人类填写表格时可能出现的非标准标记。此外,我们还提供了关于表格目的的上下文信息。通过这些详细的背景信息,Claude在分析报告时表现出更高的自信。它不再需要叙述对表格的理解过程,而是直接列出其发现和对草图的分析,最终明确指出车辆B应负责。这一改进表明,预先提供充足且结构化的背景知识对提升模型的分析能力至关重要。
示例
示例(或称为“小样本学习”)是引导大型语言模型行为的强大机制。通过在系统提示中嵌入具体的输入-输出示例,模型能够学习如何处理那些对它而言可能棘手,但人类凭直觉或标注数据可以得出正确结论的场景。这就像为模型提供了一本“案例研究”合集,让它在遇到类似情况时有参考依据。
这再次体现了提示工程的实证科学性,你总是希望突破应用程序的极限,并获取反馈循环,找出问题所在,然后将其添加到系统提示中,以便下次出现类似情况时,它能够参考其示例集。
丰富上下文与模型表现
即使在像本演示这样简单的场景中,示例的作用也十分显著。在更复杂的保险理赔场景中,可能需要提供几十甚至上百个具有挑战性或模棱两可的案例,以确保Claude能够根据人类的判断标准做出准确裁决。此外,对话历史也是一种重要的上下文丰富手段,尤其适用于用户交互频繁的LLM应用。通过将先前的对话内容纳入系统提示,可以为Claude提供更全面的语境,使其在后续交互中保持连贯性和相关性。
提醒
提示的最后部分应包含对核心任务的最终提醒以及所有重要指导方针,这对于防止模型“幻觉”至关重要。例如,我们希望Claude不要编造数据中不存在的细节,也不要对不确定的信息进行猜测。如果草图难以辨认,即使人类也无法理解,我们希望Claude能够明确指出这一点,而不是尝试“猜测”内容。
优化推理顺序与输出细节
为了确保Claude的推理过程严谨,我们可以要求它仅在高度自信时才给出答案,并引用其在报告中看到的具体信息来支持任何事实性声明(例如,“根据第二项清楚勾选的事实,车辆B右转”)。一个重要的发现是,Claude分析信息的顺序至关重要,这与人类处理信息的方式类似。我们指示Claude首先仔细检查报告表,列出所有勾选的方框,然后才根据对事故的理解,结合报告表的信息来分析草图,从而得出最终评估。
- 只在高度自信时才给出答案。
- 引用报告中的具体信息来支持事实性声明。
- 首先仔细检查报告表并列出所见内容。
- 然后根据报告信息分析草图,进行匹配。
在V4版本的提示中,我们加入了这一详细的任务列表。运行后,Claude展现了一种“展示工作”的行为,逐一检查并报告每个方框的勾选情况,这表明它确实按照我们的指示进行了细致的分析。尽管这种详细的输出可能不是最终所需的格式,但它证明了提示能够有效地指导模型的思考过程。在简单示例中,Claude能够清晰地判断车辆B是责任方,而在更复杂、不清晰的场景中,这种分步思考模式对于模型做出正确评估至关重要。
输出格式化
对于下游应用和数据工程师而言,除了模型推理过程,最终输出的格式化至关重要。我们希望模型能够生成简洁、准确的摘要,并以特定结构(如XML标签或JSON)呈现最终判断,以便数据能够被轻松地存储到数据库或用于进一步的分析工具。这意味着,除了模型为得出结论而生成的所有“前言”或中间思考过程,应用程序可能只需要其最终的、结构化的裁决信息。
预填充响应与扩展思考
除了明确的输出格式指令,我们还可以使用“预填充响应”来强制Claude以特定格式开始其输出。例如,要求其输出以一个开放的方括号或特定的XML标签开始,以确保其可序列化。这种技术尤其适用于需要JSON输出的场景,因为它能保证输出的起始格式符合预期。此外,Claude 3.7及更高版本,特别是Claude 4,支持“扩展思考”功能,允许模型通过生成中间思考标签(scratchpad)来展示其推理过程。这对于调试提示工程至关重要,因为它能让你分析模型是如何处理数据的,并据此优化系统提示,提高效率和准确性。
- 确保输出摘要清晰、简洁、准确。
- 指定最终裁决的输出格式,例如使用XML标签或JSON。
- 使用“预填充响应”强制模型以特定格式开始输出。
- 利用“扩展思考”功能分析模型的推理过程,以优化提示。
通过逐步迭代,从最初的“滑雪事故”误判到不自信的输出,再到最终格式严格、自信的裁决,我们展示了如何通过精细的提示工程构建一个能够服务于真实世界应用的LLM系统,例如为汽车保险公司提供自动化理赔辅助。这种方法论不仅提升了模型输出的质量,也使其更易于集成到现有的业务流程中。
Useful links
These links were generated based on the content of the video to help you deepen your knowledge about the topics discussed.