Prime Intellect 发布了开源编程 Agent Harness「Prime Agent」。它的重点不是再给大模型套一层聊天界面,而是围绕两个抽象组织 Agent 的工作过程:Recursive Language Model(RLM)与 Continual Harness。根据发布信息,Prime Agent 与 Opus 5 组合在 ARC-AGI 3 上取得 95.5% RHAE Best@1,略高于 ARC 报告的 95.4% 人类专家基线。
这个结果值得关注,但更有工程价值的问题是:一个编程 Agent 如何反复检查自己的产物、保留有效经验,并把一次任务中的反馈带入后续执行?
两个抽象解决两种不同问题
RLM 可以理解为一种递归求解结构:模型不必在一次调用中完成整个任务,而是可以把问题拆开,检查中间状态,再针对尚未解决的部分继续调用模型。对于编程任务,这种结构适合处理“实现、运行、观察、修正”的循环。
Continual Harness 则把重点放在持续执行环境。Harness 不只是转发提示词,还需要管理代码、工具调用、测试结果、历史轨迹和下一轮输入。二者的职责可以这样区分:
- RLM 决定如何继续推理,以及什么时候递归处理子问题。
- Continual Harness 保存执行状态,并把外部反馈送回模型。
- 编译器、测试框架和静态检查器提供可验证的反馈。
- Agent 根据反馈修改代码,而不是仅凭自然语言判断任务是否完成。
这里的“自我改进”需要谨慎理解。它不一定意味着模型权重会自动更新,也不等同于 Agent 获得了无限制的自主学习能力。更稳妥的工程解释是:Agent 能利用连续执行过程中产生的错误、测试结果和历史记录,改善下一轮决策。
95.5% 应该怎样解读
Prime Agent + Opus 5 在 ARC-AGI 3 上取得 95.5% RHAE Best@1,而报告中的人类专家基线是 95.4%。它说明该组合在这一特定评测指标上越过了对应基线,差距为 0.1 个百分点。
这个数字不能直接推导出“Agent 的通用编程能力已经超过人类专家”。评估时至少要区分四件事:
- 成绩属于特定模型、Harness、任务集和评测协议的组合。
- Best@1 需要按照基准定义理解,不能与多次采样后的最佳结果混用。
- 0.1 个百分点的差距很小,应结合样本规模和结果稳定性判断。
- ARC-AGI 3 衡量的能力边界不等于真实代码库中的需求澄清、架构决策和生产事故处理。
因此,基准成绩更适合用来证明 Harness 设计具有潜力,而不是替代真实仓库中的回归测试、成本统计和人工验收。
可以这样实践一个最小持续 Harness
下面不是 Prime Agent 的官方 API,而是一个可运行的最小示例,用来演示同类 Harness 的控制循环。它让 Agent 修改一个 Python 文件,执行测试,再把失败输出送入下一轮。示例默认使用环境变量指定的 OpenAI 兼容接口;运行前需要按实际服务修改 LLM_BASE_URL、LLM_MODEL 和 LLM_API_KEY。
创建 continual_harness.py:
import json
import os
import subprocess
import urllib.request
from pathlib import Path
BASE_URL = os.environ.get("LLM_BASE_URL", "http://localhost:8000/v1")
MODEL = os.environ.get("LLM_MODEL", "your-model")
API_KEY = os.environ.get("LLM_API_KEY", "local")
WORK_FILE = Path("solution.py")
TEST_FILE = Path("test_solution.py")
MAX_ROUNDS = 5
SYSTEM_PROMPT = """You are a coding agent working on one Python file.
Return only the complete contents of solution.py, without Markdown fences.
Use the test output to repair the implementation. Do not modify the tests.
"""
def call_model(task: str, code: str, feedback: str) -> str:
payload = {
"model": MODEL,
"messages": [
{"role": "system", "content": SYSTEM_PROMPT},
{
"role": "user",
"content": f"Task:\n{task}\n\nCurrent code:\n{code}\n\nTest feedback:\n{feedback}",
},
],
"temperature": 0,
}
request = urllib.request.Request(
f"{BASE_URL}/chat/completions",
data=json.dumps(payload).encode(),
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
},
)
with urllib.request.urlopen(request, timeout=120) as response:
body = json.load(response)
return body["choices"][0]["message"]["content"].strip()
def run_tests() -> tuple[bool, str]:
result = subprocess.run(
["python", "-m", "unittest", "-v", str(TEST_FILE)],
text=True,
capture_output=True,
timeout=30,
)
output = (result.stdout + "\n" + result.stderr)[-6000:]
return result.returncode == 0, output
def main() -> None:
task = "Implement fibonacci(n). Reject negative n with ValueError."
feedback = "No tests have been run yet."
WORK_FILE.write_text("def fibonacci(n):\n pass\n", encoding="utf-8")
for round_no in range(1, MAX_ROUNDS + 1):
current = WORK_FILE.read_text(encoding="utf-8")
candidate = call_model(task, current, feedback)
WORK_FILE.write_text(candidate + "\n", encoding="utf-8")
passed, feedback = run_tests()
print(f"round={round_no} passed={passed}")
if passed:
print("Accepted solution:\n" + candidate)
return
raise SystemExit("The agent exhausted its repair budget.\n" + feedback)
if __name__ == "__main__":
main()
再创建不可由 Agent 修改的 test_solution.py:
import unittest
from solution import fibonacci
class FibonacciTests(unittest.TestCase):
def test_values(self):
self.assertEqual([fibonacci(i) for i in range(8)], [0, 1, 1, 2, 3, 5, 8, 13])
def test_negative_value(self):
with self.assertRaises(ValueError):
fibonacci(-1)
if __name__ == "__main__":
unittest.main()
执行 Harness:
export LLM_BASE_URL="http://localhost:8000/v1"
export LLM_MODEL="your-model"
export LLM_API_KEY="your-api-key"
python continual_harness.py
这个例子已经具备持续 Harness 的基本闭环:读取当前代码、请求候选实现、运行验证器、记录反馈并进入下一轮。不过,生产系统还需要隔离执行环境,不能直接在宿主机上运行模型生成的任意代码。
从演示走向真实代码库
采用 Prime Agent 一类系统时,模型名称不是唯一变量。Harness 决定了 Agent 能看到什么、能修改什么,以及如何确认结果。落地时可以重点检查:
- 权限边界:将文件目录、网络访问、凭据和命令白名单放入沙箱策略。
- 停止条件:限制轮数、Token、执行时间和费用,避免无效递归。
- 验证强度:组合单元测试、类型检查、lint、依赖审计和差异审查。
- 状态质量:压缩历史轨迹时保留失败原因、关键决策和未完成事项。
- 可观测性:记录每轮提示、工具调用、代码差异、耗时和模型费用。
- 人工闸门:数据库迁移、权限配置和生产部署仍应要求人工批准。
Prime Agent 的开源发布把讨论从“选哪个模型”推进到了“怎样设计一个能持续验证和修正的执行系统”。ARC-AGI 3 成绩展示了这种组合的上限信号;对开发团队而言,真正决定可用性的仍是沙箱、反馈质量、预算控制和针对自身仓库的评测结果。