大模型应用开发-2 上下文工程

参考论文:《A Survey of Context Engineering for Large Language Models》

大模型应用开发理论基础可以看:大模型应用开发-1 基础理论

这篇文章介绍大模型应用开发中上下文工程相关的内容。

一 什么是上下文

大模型应用或者现在常说的智能体系统,所展现出来的理解、生成和推理能力,依赖于大模型的基模能力和其接收到的上下文信息(context)。上下文会包含明确的指令信息或者和当前任务相关的外部知识,我们将如何获取、处理、管理大模型的上下文称为上下文工程,是大模型应用开发中重要的环节。

目前我们常说的大模型可以建模为在给定输入下的条件概率输出:

其中C是给定的输入,y<t是时间或者迭代次数t之前大模型的输出,在给定C和y<t的条件下,大模型的任务是预测出t对应的输出,这种预测在数学表现上为条件概率,其中θ是大模型的参数,我们平时说的参数量大小为32B、128B等指的就是这个参数的量级。以往的提示词工程(prompt engineering)将C看做静态、固定的字符串,预先编辑好,不同任务中不再改变,而上下文工程将C看做是不同信息的动态组合,和当前任务强相关,数学定义为:

其中A是上下文信息组合函数,ci是具体的上下文信息,包括:

1.cinstr:系统提示词,对应提示词工程中的System prompt,赋予模型"身份"和"行为准则",如"你是一个乐于助人的个人助手",告诉模型"你是谁"、"你能做什么"、"你不能做什么"等总体信息

2.cknow:模型训练之外获取到的知识,是通过检索、查询等手段获取到的实时、任务相关的知识,一般通过RAG技术进行获取,解决大模型幻觉和知识滞后的问题

3.ctools:工具定义,描述大模型可以使用的外部工具,让大模型具备执行外部工具的能力。大模型本身并不会真正执行这些外部工具,而只是作为一个调用发起者,具体执行过程由外部执行端点进行处理,执行完成后将结果反馈给大模型,大模型根据反馈结果再进行接下来的操作

4.cmem:来自过往交互产生的记忆信息,一般由向量数据库、长短期记忆工具存储,记忆让模型具有"语义连贯性",可以准确知道用户的偏好、要求和历史对话记录等信息,

5.cstate:状态信息,执行过程中的具体信息,如工具调用是否成功等

6.cquery:用户当前的输入

上下文工程可以数学建模为一个优化问题:

上下文工程就是求解在给定评价打分函数下,不同上下文的最大评价得分值期望,而最优的上下文就是得到了最大评价得分期望所对应的上下文,也就是在此上下文的条件下,大模型的输出会更接近真实或者理论上当前任务的最优输出。

从理论的角度来讲,上下文越长、提供给大模型的信息越多,那么大模型的输出应该更准,但是实际情况不是这样的,首先,上下文的长度受限于大模型的上下文窗口大小,比如某个大模型的最大上下文窗口大小是128K,那么如果你提供给大模型的上下文长度大于此大小限制,就会无法得到正确输出,其次,目前大模型的底层一般都是基于注意力机制架构的,输入的上下文过长,会产生注意力稀释的问题,模型不知道在这么长的上下文中应该重点关注哪些信息,导致输出结果不准,不是越长的上下文越好,而是对当前任务越"有用"的信息越多越好,这种"有用性"在数学表达上是最大化互信息,也叫最大化信息增益

二 上下文获取

上下文获取要解决的问题是如何生成当前任务下,大模型所需的上下文,是上下文工程的输入端,负责把大模型需要的信息找出来,组装好,输入给大模型,具体方法包括:

1.提示工程:通过精心设计输入到大模型的prompt,引导大模型完成指定的任务

2.外部知识检索:通过在外部数据库、网络中获取和当前用户输入最相关的知识,传递给大模型

3.动态上下文组装:根据当前用户的需求,动态组装prompt和外部获取到的知识

2.1 提示工程

提示工程是指通过设计和优化输入给大型语言模型(LLM)的提示词(prompt),以引导模型生成期望输出结果的技术,它是一种不修改模型参数,仅通过自然语言指令来激发模型潜力的方法。

常用的提示词方法有:

1.Few shot:在提示词中提供一个或多个示例,示例能帮助模型理解当前的任务模式、输出格式和回答风格。

2.Zero shot:仅在提示词中提供任务描述,不提供具体示例。例如:"将电影评论分类为正面、中性或负面",适用于简单任务,但在复杂任务中可能表现不佳。

3.CoT:思维链,通过触发语引导模型生成解决具体任务问题的中间推理步骤,而不是直接给出答案,在不重新训练大模型的条件下,提升模型的推理能力。常用思维链触发语如"让我们一步步思考"、"请详细给出具体推理步骤"等,思维链能够提高复杂推理任务,如数学、常识推理等的准确性,可以结合Few shot使用,在提示词中提供包含推理步骤的示例。

4.ToT:思维树,扩展了CoT,允许大模型同时探索多个不同的推理路径,形成树状思维结构,模型可以从不同节点进行分支和回溯,对应思维延展和回退,适用于需要探索和战略前瞻的复杂任务,如创意写作、数学证明等。

不同方法的详细介绍可以看:大模型应用开发-1 基础理论

2.2 外部知识检索

外部知识检索是上下文获取的关键组成部分,通过动态访问外部信息源(如数据库、知识图谱和文档集合等),解决大模型参数化知识存在的局限性,一般就是我们常说的RAG (Retrieval-Augmented Generation,检索增强生成),RAG 是一种将信息检索与内容生成相结合的技术,它通过在模型生成回答之前,先从外部知识库中检索相关的信息,并将这些信息作为上下文提供给大模型,从而使大模型能够生成更准确、可溯源、事实性强的答案。

2.3 动态上下文组装

动态上下文组装是编排已获取上下文信息的组件,将这些已获取到的上下文信息整合为连贯且任务相关的上下文结构,在满足计算资源限制的前提下,最大限度提升大模型的性能表现,主要包含以下几方面:

三 上下文处理

上下文处理对大模型当前输入的上下文进行转换,剔除冗余内容,保留任务最相关的信息,是上下文工程的加工端,上下文获取的要求是"全",而上下文处理的要求是"精"。上下文处理会对获取的上下文信息进行转化与优化,以最大化其在大模型中的应用价值,该组件能够有效应对超长序列上下文处理问题,支持迭代式自我优化与适应机制,并可将多模态、关系型及结构化信息整合为连贯的上下文表征,目前学术领域提出的一些上下文处理方法如下:

3.1 超长上下文处理

语言大模型核心架构一般为注意力机制,注意力机制的计算复杂度和输入序列长度的平方成正比,为了让大模型能够处理更长的上下文,业界提出了很多方法,这些方法一般是直接集成在语言大模型中,应用开发人员不会直接涉及。这些方法可以分为模型结构层面、注意力机制算法层面、工程实现层面的优化,让大模型能够处理更长的上下文

模型结构层面:

注意力机制算法层面:

工程实现层面:

3.2 多模态上下文处理

多模态大语言模型通过将视觉、音频及三维环境等多种数据模态整合为统一的上下文表征,将上下文工程的应用范围从纯文本拓展至多种输入格式和来源,多模态模型的相关方法介绍可以看:

多模态-1 基础理论

多模态-2 CLIP

多模态-3 BLIP

多模态-4 CoCa

多模态-5 BLIP2

多模态-6 LLaVA

多模态-7 Grounding DINO

多模态-8 YOLO World

多模态-9 SAM

多模态-10 Qwen-VL

多模态-11 Qwen2-VL

3.3 结构化上下文处理

大模型在处理关系型数据(如表格、数据库)及结构化数据时存在根本性的局限,这源于大模型本身基于序列架构的固有缺陷,这种线性化处理方式往往无法完整保留复杂的关系与结构特征,当信息分散于不同上下文时,模型性能会显著下降,比如数据库查询中的多表查询,目前的结构化上下文处理方法一般需要借助外部工具,如知识图谱,先从结构化上下文中提取出关键知识,然后将这些知识以文本的形式反馈给大模型,让大模型再进行下一步处理。

四 上下文管理

上下文工程存在以下几个固有约束和问题:

上下文管理是上下文工程的控制端,负责在有限的token下,高效组织当前大模型的上下文,实现上下文信息的高效组织、存储与利用。该组件通过构建大模型上下文窗口的内存层次结构与存储架构,并采用压缩等技术,在保持上下文信息可访问性与连贯性的同时,实现信息价值密度最大化。

4.1 记忆

记忆机制通过精心设计大模型上下文窗口(内存)到外部存储之间的映射架构,借鉴计算机操作系统中的相关方法,突破大模型的固定上下文窗口大小限制,是目前智能体方向重点研究领域,后续会单独再写这方面的相关内容。

4.2 压缩

记忆机制是对过长的上下文或者关键信息进行提取和存储,而压缩机制是直接剔除上下文中的冗余内容

相关推荐
weixin_5091383415 小时前
从 Move 37 到语义测地线:智能体认知动力学,重写 AGI 的几何底层
agi·智能体·智能体认知
大写-凌祁19 小时前
从 Chain-of-Thought 到 Self-Consistency:大模型推理能力是如何被“解锁”的?
人工智能·语言模型·自然语言处理·agent·智能体
CV-deeplearning1 天前
Claw Code:Better Harness Tools,让 AI 真正干实事
人工智能·agent·智能体·openclaw·claw code
deepdata_cn1 天前
智能体+AIoT:未来家居的终极形态,离我们还有多远?
aiot·智能体
MicrosoftReactor2 天前
技术速递|使用 Copilot CLI 中的 /fleet 一次运行多个智能体
人工智能·copilot·cli·智能体
真心喜欢你吖2 天前
CentOS 安装部署OpenClaw实战教程(SELinux+防火墙配置)
linux·运维·centos·大模型·智能体·openclaw·小龙虾
墨10242 天前
待办清单驱动执行:为什么 Agent 做复杂任务时需要持续更新计划
ai·agent·智能体·harness
布吉岛没有岛_2 天前
小程序接入智能体
小程序·智能体
易标AI3 天前
标书智能体(四)——提示词顺序优化,让缓存命中,输入成本直降10倍
人工智能·python·提示词·智能体·招投标