Meta Context Engineering via Agentic Skill Evolution

Meta Context Engineering via Agentic Skill Evolution

一句话理解

MCE 不只优化 Context 的内容,还把“如何表示、学习和更新 Context”封装成可进化的 Skill,并用验证集表现选择更好的 Skill。

核心对象

Context function

论文定义:

$$
c(x)=(F_k\circ\cdots\circ F_1)(x;\rho)
$$

其中:

  • $x\in\mathcal X$:当前任务输入。
  • $c$:Context function。
  • $c(x)$:针对输入 $x$ 生成的实际 Context。
  • $\rho={\rho_1,\ldots,\rho_m}$:静态组件,如 prompt、知识库和代码库。
  • $F={F_1,\ldots,F_k}$:动态算子,如检索、选择、过滤、格式化和组合。

任务模型输出为:

$$
\hat y=f_\theta(x,c(x))
$$

其中 $f_\theta$ 是参数固定的任务模型或 Generator。

普通 Context Engineering 目标

$$
c^*=\arg\max_{c\in\mathcal C}J(c)
$$

$\mathcal C$ 是允许搜索的 Context function 空间,$J(c)$ 是采用 $c$ 后的任务性能。

在数据集 $D={(x_i,y_i)}_{i=1}^N$ 上,可以把目标具体写成:

$$
J_D(c)
=
\frac{1}{|D|}
\sum_{(x_i,y_i)\in D}
U\left(f_\theta(x_i,c(x_i)),y_i\right)
$$

计算顺序是:

$$
z_i=c(x_i)
$$

$$
\hat y_i=f_\theta(x_i,z_i)
$$

$$
u_i=U(\hat y_i,y_i)
$$

$$
J_D(c)=\frac{1}{N}\sum_{i=1}^Nu_i
$$

MCE 的双层优化

Skill $s\in\mathcal S$ 是一份可执行规范,决定 Context function 应当如何表示和如何从数据中学习。给定 $s$,Base Agent 产生:

$$
c_s=(\rho_s,F_s)
$$

MCE 的目标是:

$$
s^*
=
\arg\max_{s\in\mathcal S}
J_{\mathrm{val}}(c_s^*)
\quad\text{s.t.}\quad
c_s^*
=
\arg\max_{c_s}
J_{\mathrm{train}}(c_s;s)
$$

内层:固定 Skill $s$,在训练数据上寻找该 Skill 能产生的最佳 Context function:

$$
c_s^*=\arg\max_{c_s}J_{\mathrm{train}}(c_s;s)
$$

外层:比较各个 Skill 的内层最优结果在验证集上的表现:

$$
s^*=\arg\max_{s\in\mathcal S}J_{\mathrm{val}}(c_s^*)
$$

依赖关系是:

$$
s\longrightarrow c_s^\longrightarrow J_{\mathrm{val}}(c_s^)
$$

最终 Context 是:

$$
c^*=c_{s^*}^*
$$

Algorithm 1

初始化:

$$
\mathcal H_0\leftarrow\varnothing,
\qquad
c_0^*\leftarrow\varnothing
$$

第 $k$ 轮执行:

$$
s_k\leftarrow\operatorname{Crossover}(\tau,\mathcal H_{k-1})
$$

$$
\mathcal R_k\leftarrow\operatorname{Rollout}(c_{k-1}^*;D_{\mathrm{train}})
$$

$$
c_k\leftarrow\operatorname{Engineer}(\tau,s_k;c_{k-1}^*,\mathcal R_k)
$$

$$
J_k^{\mathrm{train}}\leftarrow J(c_k;D_{\mathrm{train}}),
\qquad
J_k^{\mathrm{val}}\leftarrow J(c_k;D_{\mathrm{val}})
$$

$$
\mathcal H_k
\leftarrow
\mathcal H_{k-1}
\cup
{(s_k,c_k,J_k^{\mathrm{train}},J_k^{\mathrm{val}})}
$$

$$
c_k^*
\leftarrow
\arg\max_{c\in{c_{k-1}^*,c_k}}
J^{\mathrm{val}}(c)
$$

因此循环体描述一轮迭代,Algorithm 1 描述从初始化开始连续执行 $K$ 轮的完整过程。每一轮的状态转移是:

$$
(\mathcal H_{k-1},c_{k-1}^*)
\longrightarrow
(\mathcal H_k,c_k^*)
$$

阅读问答

Q1:RSI 是什么?

这里的 RSI 是 Recursive Self-Improvement,递归式自我改进。系统改进自己的代码、工具、提示、评测或运行框架;改进后的系统又具备更强的能力,继续进行下一轮改进。

MCE 与 RSI 的关系主要发生在模型参数之外:系统迭代 Skill、Context 文件、检索代码和评测记录,而不是直接训练 $f_\theta$ 的权重。

Q2:Rollout 怎么理解?

AI/Agent 语境中的 rollout 是一次完整运行轨迹:

$$
\text{接收任务}
\rightarrow
\text{推理和行动}
\rightarrow
\text{工具或环境反馈}
\rightarrow
\text{最终结果与评分}
$$

词源来自 roll out,即向前展开。强化学习中可以理解为按照当前策略向前运行一遍,把随时间发生的状态、动作、观察和奖励展开成轨迹。

MCE 中:

$$
\mathcal R_k
=
{(x_i,\hat y_i,\operatorname{eval}_i)}
$$

这些 rollout 是 Base Agent 更新 Context 的训练反馈。

Q3:MCE 的核心是什么?

ACE 等方法能够从 rollout 中更新记忆内容,但 Context 的结构和更新 workflow 通常由人预先规定。MCE 增加一个外层变量 $s$:

  • $s$:怎样表示、学习和更新 Context。
  • $c_s$:按照 $s$ 实际学到的 Context function。

因此 MCE 同时搜索 Context artifact 和产生 artifact 的 Context Engineering Skill。

Q4:$x_i$、$y_i$、$\hat y_i$ 和 $U$ 分别是什么?

设:

$$
D={(x_1,y_1),\ldots,(x_N,y_N)}
$$

  • $i$ 是数据样本编号,不特指训练集或验证集。
  • $x_i$ 是第 $i$ 个输入。
  • $y_i$ 是数据集给出的真实标签或标准答案。
  • $\hat y_i=f_\theta(x_i,c(x_i))$ 是模型预测。
  • $U(\hat y_i,y_i)$ 是单个样本的效用或评分。

$U$ 不一定是文本相似度:分类任务可用 0/1 accuracy,信息抽取可用 F1,开放生成可用 Judge score,强化学习可用 reward。

Q5:$J_D(c)$ 为什么这样写?

$$
J_D(c)
=
\frac{1}{|D|}
\sum_{(x_i,y_i)\in D}
U\left(f_\theta(x_i,c(x_i)),y_i\right)
$$

它表示:使用 Context function $c$ 处理 $D$ 中每个输入,让固定模型回答,逐个评分,然后求平均值。

写成 $J_D(c)$ 是因为当前主要研究变量是 $c$;改变 $c$ 会改变 $c(x_i)$,继而改变模型预测和总体成绩。

Q6:为什么用 $J$ 表示?是 Judge 吗?

不是。$J$ 是优化、控制和强化学习中表示 objective function 或 performance functional 的惯用符号,没有固定的 Judge 含义。

  • $U$:单个样本的效用。
  • $J$:把所有样本效用汇总后的总体目标。
  • $L$:通常表示越小越好的 loss。
  • $R$:通常表示 reward 或 return。

Q7:Crossover 是什么?

$$
s_k=\operatorname{Crossover}(\tau,\mathcal H_{k-1})
$$

它不是闭式数学运算,而是 Meta Agent 执行的新 Skill 提议过程。输入是:

  • $\tau$:任务描述、数据格式和评价标准。
  • $\mathcal H_{k-1}$:历史 Skill、对应 Context、训练成绩和验证成绩。

Meta Agent 检查历史中的成功、失败和过拟合模式,选择、组合、修改或删除历史 Skill 的组成部分,生成新 Skill $s_k$。

它不同于固定的遗传算法交叉:不限制两个父代,不按固定位置交换片段,可以检查全部历史,也可以产生历史中没有的新设计。考虑到 LLM 采样,严格地也可以写成:

$$
s_k\sim P_{\mathrm{meta}}(s\mid\tau,\mathcal H_{k-1})
$$

Q8:Meta Agent 和 Base Agent 是同一个吗?

算法角色不同,但可以使用同一个底层 LLM。

Meta Agent:

$$
s_k=A_{\mathrm{meta}}(\tau,\mathcal H_{k-1})
$$

它只负责生成或修改 Skill。

Base Agent:

$$
c_k=A_{\mathrm{base}}(\tau,s_k;c_{k-1}^*,\mathcal R_k)
$$

它按照 $s_k$ 更新 Context artifact,不修改 $s_k$。

即使二者使用同一模型参数,也应当具有独立的 system prompt、输入 Context、工作目录、权限和输出目标。

还要区分任务模型 $f_\theta$:它使用 $c_k(x)$ 执行任务并产生被评测的答案。

Q9:Engineer 是人为设计的吗?

部分是。

$$
\operatorname{Engineer}
=
\text{固定通用 Agent harness}
+
\text{可进化 Skill }s_k
+
\text{Base Agent 的运行时决策}
$$

人为固定的部分包括 Base Agent 的 system prompt、工具、文件权限、输入输出接口、训练/验证划分和外层执行顺序。

没有被固定的是任务相关的 Context 结构、错误分析流程、去重和剪枝规则、检索方法等;这些具体做法由 $s_k$ 指导 Base Agent 产生。

因此 MCE 没有消除人工设计,而是把人工设计从具体 Context 更新规则提升为通用 Agent 执行框架。EngineerCrossover 本身不会被该算法自我修改。

Q10:初始 Skill $s_0$ 如何产生?

Algorithm 1 中没有 $s_0$。初始化的是:

$$
\mathcal H_0=\varnothing,
\qquad
c_0^*=\varnothing
$$

第一版 Skill 是:

$$
s_1=\operatorname{Crossover}(\tau,\mathcal H_0)
=\operatorname{Crossover}(\tau,\varnothing)
$$

因为没有祖先 Skill,第一轮实际是初始生成,不是真正意义上的历史交叉。

论文实现中,$s_1$ 仍受到人工提供的信息约束:Meta Agent system prompt、任务规范、可见训练数据和 prompt 中的 Skill 示例。因此 $s_1$ 既不是随机初始化,也不是完全无先验地自发产生。

$c_0^*=\varnothing$ 表示还没有学习出的 Context artifact,不表示任务模型没有基础 system prompt 或任务说明。

Q11:Algorithm 1 是不是只描述一轮?

第 4 到 11 行描述第 $k$ 轮;完整算法包含初始化、$K$ 轮循环和最终返回。

每轮依次完成:

  1. Meta Agent 生成候选 Skill $s_k$。
  2. 用当前最优 Context $c_{k-1}^*$ 在训练集上产生 rollout。
  3. Base Agent 产生候选 Context $c_k$。
  4. 计算训练和验证成绩。
  5. 无论成功还是失败,都把本轮记录加入 $\mathcal H_k$。
  6. 在旧冠军和新候选之间保留验证成绩更好的 Context。

这是一种 history-informed $(1+1)$ Evolution Strategy。失败候选不会成为 $c_k^*$,但会保留在历史中供 Meta Agent 学习。

Q12:Future Work 中最有价值的方向是什么?

将 Skill evolution 扩展到 CE 之外

当前 $s_k$ 只描述如何学习和管理 Context。未来可以把规划、工具使用、调试、实验、评测和多 Agent 协作也封装成可进化 Skill。优化对象由具体任务解提升到产生和改进任务解的能力模块。

同时进化 Context 的学习和使用

当前主要优化:

$$
s_{\mathrm{learn}}:\text{如何建设 Context}
$$

Generator 仍使用 one-shot inference,被动接收 $c(x)$。未来可以让 Generator 直接与 Context 文件交互,并联合优化:

$$
(s_{\mathrm{learn}},s_{\mathrm{use}},c)
$$

$s_{\mathrm{use}}$ 决定执行任务时如何搜索、按需阅读和组合记忆。这是最直接、可实验的扩展。

Progressive disclosure、Skill transfer 与 composition

先查看 Skill 元数据,只在相关时加载完整内容,可以让 Skill 库规模增长而不把所有内容塞进一次模型 Context。进一步可以研究跨任务迁移和多个 Skill 的组合,以及组合后出现的新行为。

这些方向也暴露了当前 MCE 的边界:任务模型参数、外层评测目标、CrossoverEngineer 和 $(1+1)$ 选择循环仍然固定。论文提出的是向持续自我改进迈进的路径,而不是已经实现开放式 RSI。

当前结论

MCE 的关键贡献不是某一种更好的 Context 模板,而是把 Context Engineering 的具体学习方法 $s$ 显式提升为外层优化变量。理论上用双层优化表达,工程上用 Meta Agent、Base Agent、历史数据库和验证集选择近似实现。

目前最重要的保留意见是:可进化部分仍位于人工设计的 CrossoverEngineer、工具权限和评测循环之内,因此“自我改进”的边界由最外层 harness 决定。