上下文工程:优化大语言模型性能的关键技术
如何显著提升大语言模型(LLMs)的性能?这需要借助上下文工程的力量。本文探讨了上下文工程的科学原理及其应用技巧,旨在帮助开发者优化LLMs的表现。 定义 上下文工程是决定向LLM提供哪些信息的过程。这不仅仅是系统提示词的选择,还包括所有对任务有帮助的数据输入。以往,这种做法被称为“提示词工程”,但这一术语并不能涵盖所有输入信息。为了获得最佳性能,必须综合考虑所有输入数据。 动机 本文作者的灵感来源于Andrej Karpathy的一条推特,强调提示词工程在LLM开发中的重要性。然而,提示词工程不足以全面描述输入数据的作用。除了编写合适的系统提示词,还需要关注其他因素,比如实例数据、工具调用等。 API与控制台使用 作者主要聚焦于通过API使用LLM的情况,因为这种方式提供了更多的动态调整上下文的机会。例如,可以通过RAG技术(检索增强生成)首先进行向量搜索,然后只将最相关的信息提供给模型,而不是整个数据库。这样的动态变化在通过控制台使用LLM时难以实现。 上下文工程技巧 零样本提示 零样本提示是最基础的上下文工程方法。在这种模式下,模型会执行之前从未见过的任务,仅依赖于任务描述。例如,让模型根据某些定义将文本分类为正面或负面情感。这种方法对于大多数简单的文本任务已经足够有效。 少样本提示 少样本提示是在零样本提示基础上的一种改进方法。除了任务描述,还会提供几个任务实例作为参考。例如,在情感分类任务中,可以在提示中加入几个正负面情感的示例文本。这种方法通常可以显著提高模型的性能,就像人接受了几个例子后会做得更好一样。 动态少样本提示 传统的少样本提示采用固定示例列表。而动态少样本提示则根据不同任务从现有数据中选择最相关的示例。假设你需要将文本分类为A和B两类,并且已有200个带有标签的文本示例。你可以通过向量相似度搜索,从这些示例中挑选出与新文本最接近的几个作为上下文。这样做可以提高模型的准确性和相关性。 RAG(检索增强生成) RAG是一种著名的提升LLM知识的技术。假设你有一个包含数千个文档的数据库,用户提出了一个问题,你无法将整个数据库提供给模型。RAG的工作原理如下: 1. 执行向量搜索。 2. 找到与用户问题最相似的文档(假设这些文档最相关)。 3. 根据这些文档的内容让模型回答问题。 通过这种方式,RAG实现了上下文工程,只提供最相关的信息,进一步提升了模型性能。 工具调用(MCP) 为模型提供工具调用能力也是上下文工程的重要组成部分,特别是在AI代理兴起的背景下。工具调用通常使用Model Context Protocol(MCP),这是由Anthropic提出的概念。例如,一个天气代理模型可以通过调用get_weather函数来获取实时天气信息。这种方式显著增强了LLM的功能和实用性。 考虑因素 上下文长度的利用:现代前沿模型的上下文长度通常超过100,000个输入标记,这为上下文的设计提供了广阔的空间。需要权衡的信息量包括系统提示词、实例数据和工具调用。只有通过实验才能找到最佳的平衡点。 上下文腐化:过多的无关信息会降低LLM的性能。即使是简单的任务,提供冗余信息也会导致性能下降。因此,应尽量只提供相关性强的信息。 结论 本文讨论了上下文工程的核心概念和技巧,如零样本提示、少样本提示、RAG和工具调用。这些技巧可以帮助开发者显著提升LLM在各种任务中的表现。然而,需要注意的是,提供过多的上下文信息同样会带来负面影响,例如导致性能下降。因此,如何合理设计上下文是提升LLM性能的关键。 行业评价及公司背景 上下文工程已成为LLM开发中不可或缺的一部分,特别是对于高级开发者和企业来说。技术公司如Anthropic和其推出的Model Context Protocol,正在推动这一领域的进步。业内人士普遍认为,上下文工程不仅能提高模型性能,还能拓展LLM的应用场景,使其更加智能和实用。