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 执行框架。Engineer 和 Crossover 本身不会被该算法自我修改。
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$ 轮循环和最终返回。
每轮依次完成:
- Meta Agent 生成候选 Skill $s_k$。
- 用当前最优 Context $c_{k-1}^*$ 在训练集上产生 rollout。
- Base Agent 产生候选 Context $c_k$。
- 计算训练和验证成绩。
- 无论成功还是失败,都把本轮记录加入 $\mathcal H_k$。
- 在旧冠军和新候选之间保留验证成绩更好的 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 的边界:任务模型参数、外层评测目标、Crossover、Engineer 和 $(1+1)$ 选择循环仍然固定。论文提出的是向持续自我改进迈进的路径,而不是已经实现开放式 RSI。
当前结论
MCE 的关键贡献不是某一种更好的 Context 模板,而是把 Context Engineering 的具体学习方法 $s$ 显式提升为外层优化变量。理论上用双层优化表达,工程上用 Meta Agent、Base Agent、历史数据库和验证集选择近似实现。
目前最重要的保留意见是:可进化部分仍位于人工设计的 Crossover、Engineer、工具权限和评测循环之内,因此“自我改进”的边界由最外层 harness 决定。