上下文工程
上下文工程框架
引言
大语言模型的性能和效果从根本上取决与他们所接收的上下文,从简单的提示词到复杂的外部知识库,是引导其行为、扩充其知识并释放其能力的主要机制,随着大预言模型从基本的指令跟随发展成为复杂应用的核心推理引擎,设计和管理其信息负载也相应的成为一门正式的学科–上下文工程。
上下文工程包含三个关键阶段:上下文检索与生成,包含基于提示词的生成和外部知识获取,上下文处理,设计长序列处理、自我优化机制和结构化信息整合。以及上下文管理,涵盖内存层次、压缩技术和优化策略。
通过以上组件将大语言模型和外部现实联系起来,实现包含RAG以及利用函数调用和工具调用并依靠复杂的智能体通信协议与上下文编排,实现更复杂的目标。
为什么要进行上下文工程学习?
-
随着大预言模型从基本的指令跟随发展成为复杂应用的核心推理引擎,与之交互的方法必须与时俱进。“提示工程”这一术语虽然是术语,但已不足以涵盖设计、管理、优化现代人工智能系统所需信息有效载荷的全部范畴,为了解决这一问题提出了“上下文工程”这一概念。
-
随着序列长度的增加,自注意力机制会带来二次方的计算和内存开销,给长文本序列处理造成了巨大障碍,并显著影响了聊天机器人和代码理解模型等实际应用。除了计算限制,大语言模型还会出现一些可靠性问题,包括频繁出现幻觉、对输入上下文不忠实。尽管存在这些挑战,提示工程对于有效利用大语言模型仍然至关重要,因为精确且上下文丰富的提示可以减少歧义和错误,并提高模型的性能。
-
上下文工程通过检索增强技术、叠加提示(将任务拆分成子任务,链式提示)、结构化提示技术(思维链、少样本学习)等技术,大幅提升了性能。
未来潜力
-
上下文工程通过上下文学习实现了灵活的适应机制,使得模型无需重新训练的情况下适应新任务。例如零样本方法、少样本示例和角色上下文等各种提示工程技术
-
复杂的上下文工程技术,包括上下文学习、思维链条、思维树和规划方法,为细致入微的语言理解和生成奠定了基础。
-
未来研究方向表明,结合逻辑对比机制的思维链增强,在推进上下文敏感应用方面具有巨大潜力。
基础组件
-
上下文工程基于三个组成部分构建
-
上下文检索:该组件通过三种主要机制应对获取合适上下文信息这一关键挑战:基于提示的生成,即精心设计有效的指令和推理框架;外部知识检索,
-
提示工程与上下文学习:
-
零样本和少样本学习范式 零样本提示能够在没有先验示例的情况下完成任务,完全依赖于指令的清晰度和预训练知识。少样本提示通过纳入有限的示例来指导模型响应,从而扩展了这一能力,通过策略性的示例选择来展示任务执行过程。上下文学习通过利用提示中的演示示例,在不更新参数的情况下适应新任务,其性能受到示例选择和排序策略的显著影响。
-
思维链(CoT)提示将复杂问题分解为中间推理步骤,反映了人类的认知过程。零样本思维链使用诸如 “让我们逐步思考” 这样的触发短语,将MultiArith任务的准确率从17.7% 提高到78.7% ,自动提示工程的优化进一步提升了性能。
-
思维树(Tree-of-Thoughts, ToT)将推理组织为具有探索、前瞻和回溯能力的层次结构,将24点游戏的成功率从4% 提高到74%。思维图(Graph-of-Thoughts, GoT)将推理建模为任意图形,其中思维为顶点,依赖关系为边,与ToT相比,质量提高62%,成本降低31%。
-
-
外部知识检索:它通过动态访问包括数据库、知识图库和文档集合在内的外部信息源,解决了参数化知识的基本局限性。
-
FlashRAG为RAG系统提供了全面的评估和模块化实现,
-
KRAGEN使用GOT将复杂任务分解成一个个小任务实现复杂检索。
-
self-RAG 引入了自适应检索机制,模型可动态决定何时检索信息,并生成特殊标记以控制检索时机和质量评估。
-
知识图谱集成与结构化检索 知识图谱集成通过KAPING等框架来解决结构化信息检索问题,该框架基于语义相似性检索相关事实,并将其添加到提示词之前,无需进行模型训练。通过预规划、语义匹配和关系路径推理,实现了无需训练的知识图谱适配,在知识图谱问答任务上取得了最先进的性能。
-
-
动态上下文组装:是指将获取到的信息组件进行复杂编排,形成连贯且针对任务优化的上下文,在遵守计算限制的情况下,最大限度提升模型效果。
-
组装函数与编排机制
-
自动化组装优化通过多轮的自我批判和修正实现迭代式输出改进,GPT-4 通过这种方法实现了20%的绝对性能提升 。
-
-
上下文长序列处理:高效处理分组查询注意力(GQA)的优化技术将查询头划分为共享键头和值头的组,在多查询注意力和多头注意力之间取得平衡,同时减少解码过程中的内存需求。FlashAttention利用非对称GPU内存层次结构,实现线性内存扩展,而非二次方内存需求,FlashAttention - 2通过减少非矩阵乘法运算和优化工作分配,速度提升约两倍。KV-Cache
-
多模态上下文: 通过将视觉、音频和3D环境等多种数据模态整合到统一的上下文表示中。模态偏差和推理缺陷是多模态大语言模型发展的一个主要障碍,即模型倾向与文本输入,通过依赖学习到的语言模式而非整合视觉或听觉信息,生成看似合理但在多模态上缺乏依据的回答。训练方法加剧了这一问题:在简单图像字幕任务上训练的mllms仅学会用于生成字幕的显著特征。忽略了其他视觉细节,这从根本上限制了深度多模态理解。
-
关系与结构化上下文:由于基于文本的输入要求和序列架构限制,大语言模型在处理关系型和结构化数据(表格、数据库和知识图谱)时面临根本性制约。
-
GraphFormer 这样专门的架构来实现知识图谱,将图神经网络和Transformer架构结合,以解决关系型和结构化数据处理问题。
-
GraphToken 通过显式表示结构信息展示出显著改进,借助参数高效的编码函数,在图推理任务上实现了高达73个百分点的提升。Heterformer及其他混合GNN-LM架构在统一模型中执行情境化文本编码和异构结构编码,解决了扩展这些集成系统的计算难题[502, 471, 757]。
-
-
-
上下文管理:大型语言模型(LLMs)在上下文管理方面面临着一些基本限制,这源于大多数架构中固有的有限上下文窗口大小。这一限制显著降低了模型在需要深入理解长篇文档的任务上的效能,同时带来了巨大的计算需求,阻碍了那些需要快速响应和高吞吐量的应用。另外证据显示会出现“中间迷失”现象,即大语言模型在获取长文本中间部分信息存在困难,而当关键信息出现在开头或结尾时,其表现更好。如果不进行上下文管理会出现两个现象:上下文窗口溢出,模型因超出窗口限制而忘记先前上下文。上下文崩溃,扩大的上下文窗口或对话记忆导致模型无法区分不同的对话上下文。有效的上下文管理将大语言模型能力从简单的问答扩展到利用对多个领域的全面上下文理解来实现复杂的应用。
-
解决方案一:主要围绕内存层次结构和存储架构,例如PageAttention、MemoryBank、ReadAgent等技术
-
解决方案二 上下文压缩
-
-
系统实现:在上面的基础之上,探讨实现复杂的系统实现思路。
-