Anthropic 公开宣称 AI 自我改进进入临界区间——内部代码自动化率突破 80%

2026-06-05 12 预计阅读时间:1 分钟
来源:oschina.net AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:12 分钟

Anthropic 在官网发布了一篇关于"递归自我改进"的研究文章,这是他们首次系统性地向公众阐述 AI 自我编写、自我优化代码的趋势规模与速度。核心判断很直接:AI 能力的提升速度正在加快,而非趋缓。公开基准测试上的任务完成率在缩短时间窗口内持续攀升,而 Anthropic 内部数据更具冲击力——代码自动化率已经超过 80%。这意味着什么?不是"AI 能写代码"这种老新闻,而是"AI 在写让 AI 更强的代码",且循环正在收紧。

递归自我改进:不是线性增长,是复利曲线

传统理解中,模型能力的提升依赖人力:研究员设计架构、工程师写训练框架、数据团队构建评测集。每一步都需要大量人工,提升速度受限于团队规模和工程周期。

递归自我改进改变了这个结构。当模型能参与自身代码的编写与优化时,提升过程的一部分就从"人驱动"变成了"模型驱动"。关键区别在于:

  • 线性增长:每投入一个单位的人力,获得一个单位的能力提升。
  • 复利增长:模型改进自身 → 能力提升 → 更强的模型改进自身 → 更快的能力提升。

Anthropic 的文章指出,公开基准上的任务完成率曲线正在呈现这种加速特征。这不是预测,是已经发生的测量结果。

80% 代码自动化率的实际含义

"内部代码自动化率突破 80%"这个数字需要拆解。它不是说 Anthropic 80% 的员工被替代了,而是说在内部代码生产流程中,从起草到提交的环节里,AI 参与完成的比例超过了 80%。具体可能包含:

  • 代码起草与补全
  • 测试用例生成
  • Bug 修复补丁编写
  • 性能优化建议与实现
  • 文档和注释生成

剩下的 20% 是什么?大概率是:架构决策、安全边界设定、跨系统协调、以及对 AI 输出的审核与筛选。这 20% 恰恰是当前人类不可替代的部分——不是写代码本身,而是决定写什么代码、为什么写、以及写出来的东西是否安全可靠。

加速曲线的安全隐含

Anthropic 选择在此时公开这篇文章,时间点值得注意。AI 能力加速提升的同时,安全对齐的窗口在压缩。如果模型每三个月能力翻一档,而安全验证流程仍然需要六个月,缺口就会持续扩大。

文章中隐含的逻辑是:正因为加速已经发生,所以安全研究必须同步加速,甚至前置。递归自我改进不只是效率问题,它直接改变了"我们还有多少时间来确保这些东西是安全的"这个计算。

实践:搭建一个最小化的 AI 代码自改进循环

理解概念不如动手跑一遍。下面用一个 Python 脚本演示"递归自改进"的最小原型——让 Claude 审阅自己生成的代码,提出改进建议,然后自动应用改进并重新评测。

你需要一个 Anthropic API Key,且已安装 anthropic Python 包。

"""
最小递归自改进循环演示
让 AI 生成代码 → 自审 → 改进 → 重新评测,循环 N 轮
"""

import anthropic
import subprocess
import sys
import time

client = anthropic.Anthropic(api_key="your-api-key-here")  # ← 替换为你的 Key

TASK_DESCRIPTION = """
写一个 Python 函数 merge_sorted_lists(a, b),合并两个已排序列表并返回新的排序列表。
要求:时间复杂度 O(n),不要用 sort(),不要引入第三方库。
"""

EVALUATION_SCRIPT = """
import time, random

def evaluate():
    # 正确性测试
    from solution import merge_sorted_lists
    assert merge_sorted_lists([1,3,5], [2,4,6]) == [1,2,3,4,5,6]
    assert merge_sorted_lists([], [1,2]) == [1,2]
    assert merge_sorted_lists([1,2], []) == [1,2]
    assert merge_sorted_lists([1,1,2], [1,3]) == [1,1,1,2,3]

    # 性能测试
    a = sorted(random.randint(0, 1000000) for _ in range(100000))
    b = sorted(random.randint(0, 1000000) for _ in range(100000))
    start = time.perf_counter()
    result = merge_sorted_lists(a, b)
    elapsed = time.perf_counter() - start
    assert len(result) == 200000
    assert result == sorted(a + b)
    print(f"PASS | 耗时 {elapsed:.4f}s")
    return elapsed

evaluate()
"""

MAX_ROUNDS = 3

def generate_code(task: str, previous_code: str = "", previous_feedback: str = "") -> str:
    """调用 Claude 生成或改进代码"""
    if previous_code and previous_feedback:
        prompt = (
            f"你之前为以下任务写了代码,但评测发现问题:\n"
            f"任务:{task}\n"
            f"之前的代码:\n```python\n{previous_code}\n```\n"
            f"评测反馈:{previous_feedback}\n\n"
            f"请根据反馈改进代码,只输出最终函数代码,不要解释。"
        )
    else:
        prompt = (
            f"为以下任务写 Python 代码,只输出最终函数代码,不要解释:\n{task}"
        )

    resp = client.messages.create(
        model="claude-sonnet-4-20250514",
        max_tokens=1024,
        messages=[{"role": "user", "content": prompt}],
    )
    # 提取代码块
    text = resp.content[0].text
    if "```python" in text:
        code = text.split("```python")[1].split("```")[0].strip()
    elif "```" in text:
        code = text.split("```")[1].split("```")[0].strip()
    else:
        code = text.strip()
    return code

def evaluate_code(code: str) -> tuple[bool, str]:
    """将代码写入文件并运行评测脚本"""
    with open("solution.py", "w") as f:
        f.write(code)
    result = subprocess.run(
        [sys.executable, "-c", EVALUATION_SCRIPT],
        capture_output=True, text=True, timeout=30,
    )
    output = result.stdout + result.stderr
    success = "PASS" in result.stdout
    return success, output

def self_review(code: str, eval_output: str) -> str:
    """让 Claude 自己审阅代码和评测结果,给出改进建议"""
    prompt = (
        f"以下是你的代码和评测结果:\n"
        f"代码:\n```python\n{code}\n```\n"
        f"评测输出:\n{eval_output}\n\n"
        f"请分析问题原因,给出具体的改进建议(不要直接写代码,只给建议)。"
    )
    resp = client.messages.create(
        model="claude-sonnet-4-20250514",
        max_tokens=512,
        messages=[{"role": "user", "content": prompt}],
    )
    return resp.content[0].text

# ---- 主循环 ----
code = ""
feedback = ""
best_time = float("inf")
best_code = ""

for round_num in range(1, MAX_ROUNDS + 1):
    print(f"\n===== 第 {round_num} 轮 =====")
    code = generate_code(TASK_DESCRIPTION, code, feedback)
    print(f"生成代码(前 200 字符):\n{code[:200]}...")

    success, eval_output = evaluate_code(code)
    print(f"评测结果:{'通过' if success else '失败'}")
    print(eval_output.strip())

    if success:
        # 提取耗时
        for line in eval_output.splitlines():
            if "耗时" in line:
                try:
                    t = float(line.split("耗时")[1].split("s")[0].strip())
                    if t < best_time:
                        best_time = t
                        best_code = code
                except ValueError:
                    pass

    # 自审并生成下一轮反馈
    feedback = self_review(code, eval_output)
    print(f"自审建议(前 150 字符):{feedback[:150]}...")

    time.sleep(1)  # 避免 rate limit

print(f"\n===== 最终结果 =====")
print(f"最佳耗时:{best_time:.4f}s")
print(f"最佳代码:\n{best_code}")

运行方式:

pip install anthropic
# 设置环境变量
export ANTHROPIC_API_KEY="sk-ant-xxxxx"
python recursive_self_improve.py

这个脚本做了三件事:生成 → 评测 → 自审,然后把自审建议喂回下一轮生成。三轮下来,你大概率会看到耗时从第一轮的较高值逐步下降——这就是递归自改进的最小可观测实例。当然,真实场景中 Anthropic 的循环远比这复杂:涉及训练管线、基础设施、安全约束等,但核心机制是同一个。

冷静看待:加速不等于失控

几个需要区分的边界:

  1. 80% 自动化是代码生产环节,不是全栈替代。架构决策、安全审计、产品方向仍然在人手里。AI 写的是"如何实现",不是"为什么要实现"。
  2. 递归改进有天花板。当前模型的自我改进集中在"写更好的代码"这个窄域,并不能直接跳到"设计更好的架构"或"发现新的训练范式"。每一层递归都需要人类设定目标和约束。
  3. 加速曲线的斜率取决于基准选择。公开基准上的提升速度和实际生产环境中的提升速度不是同一件事。基准测试是受控的、可优化的;真实工程问题是不确定的、有长尾的。

给工程团队的行动清单

如果你是一个正在用 AI 辅助编码的团队负责人,这篇文章带来的不是恐慌,而是操作指引:

  • 立刻测量你团队的代码自动化率。不是感觉,是数字。统计 AI 参与起草、补全、修复的代码行占比,按月追踪。
  • 把 AI 审阅纳入 CI 流程。在 PR 合入前,让模型先跑一轮自审,输出结构化的风险标注。人再基于标注做最终决策。
  • 区分"可自动化的"和"必须人审的"。前者放手让 AI 循环改进,后者建立明确的审批卡点。80/20 的分界线会随时间移动,但卡点本身不能撤。
  • 关注安全验证的周期。如果你的安全审计流程比模型迭代周期还长,你需要缩短审计流程或前置安全约束,否则缺口只会越来越大。

递归自我改进已经从理论走进了 Anthropic 的内部生产数据。对工程团队来说,现在的问题不是"会不会发生",而是"我们怎么在加速中保持方向盘"。


相关推荐