Agent效果优化——上下文工程
生产级Agent评估考量的指标
KVCache缓存命中率
效果优化
效果的稳定性
工具调用
在迭代过程中,动态添加或删除工具,容易导致模型选择错误行动或低效路径的概率升高。
- 在大多数LLM中,工具定义在序列化后位于上下文的前部,通常在系统提示之前或之后。因此任何更改都会使后续所有动作和观察的KV缓存失效。
当先前的动作和观察仍然引用当前上下文中不再定义的工具时,模型会感到困惑。如果没有约束解码,这通常会导致模式违规或幻觉动作。
使用状态机管理工具可用性
在解码过程中掩蔽token的logits,以基于当前上下文阻止(或强制)选择某些动作
上下文
128K上下文窗口通常不够用,主要痛点:
观察结果可能非常庞大,尤其是当代理与网页或PDF等非结构化数据交互时。很容易超出上下文限制。
模型性能往往会下降,超过一定的上下文长度后,即使技术上支持该窗口大小。
长输入成本高昂,即使使用前缀缓存。你仍然需要为传输和预填充每个token付费。
常用的解决方案:上下文截断或压缩。不可逆的压缩容易导致信息丢失,在多步之后的推理可能使用压缩前的信息效果更好,所以保留更多信息很重要。
使用文件系统作为上下文
大小不受限制,天然持久化,并且代理可以直接操作。
将文件系统作为存储和结构化的外部记忆。
另外,压缩策略始终设计为可恢复的。
复述目标到上下文末尾
Manus中的一个典型任务平均需要大约50次工具调用。这是一个很长的循环——由于Manus依赖LLM进行决策,它很容易偏离主题或忘记早期目标,尤其是在长上下文或复杂任务中。
通过不断重写待办事项列表,Manus将其目标复述到上下文的末尾。这将全局计划推入模型的近期注意力范围内,避免了”丢失在中间”的问题,并减少了目标不一致。实际上,它使用自然语言来使自己的注意力偏向任务目标——而不需要特殊的架构变更。
将错误的尝试保留在上下文中
将错误的尝试保留在上下文中。
少样本提示中通过受控的随机性增加多样性
在行动和观察中引入少量的结构化变化——不同的序列化模板、替代性措辞、顺序或格式上的微小噪音。
成本控制
推理成本按token计费,命中缓存的输入token比未命中缓存的token成本低很多,设计注意的两个点:
- 提高命中缓存的概率
1.1 保持提示前缀稳定
1.1.1 大模型推理框架
使用vLLM 这样的框架自托管模型,确保启用了前缀/提示缓存,并且你正在使用会话 ID 等技术在分布式工作节点之间一致地路由请求。
1.2 上下文只追加内容,避免修改之前的内容
1.3 在需要时明确标记缓存断点
参考
AI代理的上下文工程:构建Manus的经验教训
A Survey of Context Engineering for Large Language Models
Context-Engineering