构建智能体(Agent)时如何有效管理其上下文
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领域的领跑者。点击订阅,与未来同行! 订阅:https://rengongzhineng.io/
构建智能体(Agent)时如何有效管理其上下文,以提升任务执行能力。
智能体在执行任务时需要合适的上下文支持,而“上下文工程(Context Engineering)”正是一门围绕此目标展开的科学与艺术,其核心是:在智能体任务执行的每一个步骤中,为其上下文窗口精确填入最合适的信息。正如Andrej Karpathy 所说,语言模型(LLM)如同新一代操作系统,模型本身如CPU,而其上下文窗口就像RAM,承载着当前任务所需的工作记忆。因此,正如操作系统需合理管理内存,智能体也需要“上下文工程”来管理上下文窗口中的信息。
文章将上下文工程分为四种主要类型:指令(如提示词、示例、工具描述)、知识(事实与记忆)、工具(工具调用的反馈)以及管理方式,并进一步将上下文管理的策略归纳为四大类:写入(Write)、选择(Select)、压缩(Compress)与隔离(Isolate)。
一、写入上下文(Write)
写入策略的核心是将信息保存在上下文窗口之外,以备任务所需。其中包括:
草稿板(Scratchpads):模仿人类在解决复杂任务时的记笔记行为,智能体可以通过草稿板将当前策略、步骤或数据写入外部存储。这些草稿板可能是调用的外部工具、文件,或是运行时状态(runtime state)中的字段。Anthropic的多智能体研究者就展示了如何在超过20万token的上下文上,提前将计划写入Memory以防遗失。
记忆(Memories):为了在多个会话中保持上下文一致性,智能体可生成长时记忆。Reflexion方法在每一步任务执行后进行反思并保存经验;Generative Agents则定期从交互中总结记忆。这些技术已被广泛应用于产品,如ChatGPT、Cursor 与 Windsurf。
二、选择上下文(Select)
选择上下文即是从存储中挑选出与当前任务相关的信息并加载入上下文窗口,常见策略包括:
从草稿板中读取:如果草稿板作为工具存在,智能体可通过调用工具读取;若草稿板为状态的一部分,开发者可以控制何时将其中哪些信息暴露给LLM。
从记忆中选择:智能体可从记忆中选择少量示例(episodic)、指令(procedural)或知识(semantic)以应对当前任务。然而,挑选相关记忆十分具有挑战性。例如,一些代码智能体始终读取固定文件作为指导;而如ChatGPT这类系统,则需处理更大规模的记忆集合,常借助embedding或知识图谱进行检索。但这也可能引发问题,如Simon Willison 在AIEngineer大会上分享了 ChatGPT 意外引用其位置信息的案例,反映出用户可能感到“上下文不再受控”。
工具上下文的选择:当工具描述数量众多或存在重叠时,模型可能无法准确选择工具。使用基于语义相似度的RAG方法,可显著提升工具选择的准确性,已有研究显示准确率可提升至三倍。
知识的选择:RAG在知识型任务中尤为关键。Windsurf 的工程师指出,代码索引并不等同于上下文检索。随着代码库扩大,单一embedding搜索变得不可靠,因此需要结合语法分析、分块、传统搜索与重排序等多种技术。
三、压缩上下文(Compress)
压缩策略旨在保留完成任务所需的最少token量,以应对上下文窗口容量限制。
摘要(Summarization):如Claude Code在上下文达到95%容量时会自动运行“auto-compact”,对整个交互过程进行总结,常采用递归或层次化的方式。此外,也可针对特定工具调用结果进行摘要,或在智能体之间知识传递的节点处进行摘要。Cognition 表示,为了抓住关键决策与事件,该流程可能需微调模型。
修剪(Trimming):相比摘要使用LLM进行语义提炼,修剪则更多依靠硬编码的规则,例如移除旧消息。Drew Breunig 还提到Provence,一种用于问答系统的训练型上下文修剪器。
四、隔离上下文(Isolate)
隔离策略则通过拆分上下文以辅助任务完成。主要方式有:
多智能体系统(Multi-agent):OpenAI推出的Swarm库就体现了“关注点分离”的理念,多个子智能体可分别负责子任务,独立拥有工具、指令和上下文窗口。Anthropic 的研究表明,这种方式下的子智能体通常优于单一智能体,但其挑战也在于更高的token使用量(最多可达15倍)以及复杂的协调与提示设计。
环境隔离(Environments):HuggingFace 的CodeAgent将工具调用封装为代码,由沙盒环境执行,返回结果再传给LLM。此方式有效隔离token密集型对象,并提高状态管理的灵活性。
运行状态对象(State Objects):智能体的状态对象亦可承担隔离作用。开发者可用结构化模型(如Pydantic)定义字段,仅将部分信息暴露给LLM,从而实现上下文的精细管理。
结语
尽管上下文工程的模式仍在不断演进,但当前业界的策略大致可归纳为四类:
写入(Write):将信息存储在上下文之外。
选择(Select):从外部存储中提取信息。
压缩(Compress):保留任务所需最小token。
隔离(Isolate):拆分上下文,精细分工。
理解并掌握这些策略,已成为当代构建高效智能体系统的关键所在。