最新n1n v2.0.1 正式上线!企业级大模型接口聚合平台 (LLM API Gateway),为您接入 500+ AI Models,价格低至 1 折,立即尝试

DeepMind 前员工创立的 Inherent 称其 AI 智能体在复现科学研究方面超越 OpenAI 和 Anthropic

作者
  • avatar
    姓名
    Nino
    职业
    Senior Tech Editor

机器学习领域的“复现危机”是一个长期存在且令人头疼的瓶颈。尽管科研人员每天都会发布具有突破性的论文,但将这些 PDF 格式的学术文献转化为可运行、可复现的代码依然是一项极其耗时的工作。近日,由 DeepMind 前员工创立的英国 AI 初创公司 Inherent 推出了名为 “Faraday” 的 AI 智能体(AI Agent),旨在自动复现复杂的科学论文。根据 Inherent 公布的基准测试数据,Faraday 在复现机器学习研究方面的表现已经超越了 Anthropic 的 Claude 3.5 Sonnet 以及 OpenAI 的 GPT-4o 和 o1 推理系列模型。

对于希望构建或部署此类高性能智能体工作流的开发者和企业而言,以低延迟访问顶级大语言模型是至关重要的。像 n1n.ai 这样的平台提供了统一的 API 基础设施,使开发者能够在大规模应用中对这些先进的 LLM 进行基准测试、编排和部署。

科学复现的痛点:为什么 AI 难以胜任?

在机器学习领域,复现科学论文与编写简单的脚本或生成样板代码有着本质的区别。它要求智能体具备以下能力:

  1. 解析非结构化文本:从 PDF 中精确提取数学公式、伪代码和训练方法。
  2. 推断缺失的超参数:作者在论文中经常省略关键的超参数或环境配置。
  3. 解决依赖冲突:确定论文撰写时所使用的库(如 PyTorch、CUDA、NumPy)的正确版本。
  4. 迭代调试:运行代码,捕获运行时错误,并在无需人类干预的情况下动态修改代码库。
  5. 验证收敛性:不仅要让代码运行起来,还要确保训练出的模型在特定数据集上的指标与论文一致。

传统的 LLM(如 GPT-4o 或 Claude 3.5 Sonnet)在这些任务中经常失败,因为它们运行在“单次生成”模式下。它们只会编写代码,但无法在持续的闭环中执行、测试和调试代码。Faraday 通过将状态化执行环境与专门的推理循环相结合,解决了这一难题。

Faraday 的核心架构:多阶段智能体循环

Faraday 的成功在于其智能体工作流的设计。它没有依赖单一的“提示词-响应”循环,而是采用了多智能体协同架构:

  • 规划器(The Planner):分析 PDF 论文,提取核心架构,并将实现过程分解为模块化的里程碑(例如:数据管道、模型定义、训练循环、评估脚本)。
  • 编码器(The Coder):为每个模块生成 Python 代码。
  • 执行器(The Executor):在沙箱化的 Docker 容器中运行生成的代码,捕获标准输出、错误日志和系统指标。
  • 反馈/调试器(The Critic/Debugger):分析错误日志,将中间输出与论文中的声明进行对比,并向编码器发出修正指令。

这种持续的循环允许智能体进行自我修正,直到目标指标(如准确率、损失收敛度)与研究论文中发表的数值相匹配。

性能基准测试:Faraday 对决行业巨头

Inherent 在由复杂机器学习论文组成的基准测试集上对 Faraday 与行业顶级模型进行了对比测试。评估指标包括代码编译率、超参数推断准确率以及成功复现率。

模型 / 智能体代码编译率超参数推断准确率成功复现率
Inherent Faraday92%85%78%
OpenAI o1-pro81%71%59%
Claude 3.5 Sonnet76%62%48%
GPT-4o64%45%31%

注:成功复现率定义为复现论文的主要指标,且误差范围 < 5%。

尽管 OpenAI 的 o1-pro 展示了强大的逻辑推理能力,但 Faraday 凭借其专门的工具链和迭代反馈循环,在实际的代码执行和科学推理中占据了显著优势。

实战指南:构建你自己的论文代码复现智能体

要构建一个简化版的科研复现智能体,你可以使用类似 n1n.ai 这样的统一 API 服务来编排不同的 LLM。以下是一个 Python 实现示例,展示了如何让智能体解析论文摘要、生成 PyTorch 模型,并使用模拟的执行反馈循环进行自我修正。

import openai
import json
import re

# 配置客户端以使用 n1n.ai 的聚合端点
client = openai.OpenAI(
    api_key="YOUR_N1N_API_KEY",
    base_url="https://api.n1n.ai/v1"
)

def call_llm(model_name, system_prompt, user_prompt, response_format=None):
    arguments = {
        "model": model_name,
        "messages": [
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": user_prompt}
        ],
        "temperature": 0.2
    }
    if response_format:
        arguments["response_format"] = response_format

    response = client.chat.completions.create(**arguments)
    return response.choices[0].message.content

def parse_paper_spec(abstract):
    system_prompt = "你是一位资深的机器学习架构师。请以 JSON 格式提取模型架构的详细信息。"
    user_prompt = f"从以下摘要中提取架构:{abstract}"
    schema = {
        "type": "json_object"
    }
    raw_json = call_llm("openai/gpt-4o", system_prompt, user_prompt, response_format=schema)
    return json.loads(raw_json)

def generate_code(spec):
    system_prompt = "你是一位资深的 PyTorch 开发者。根据 JSON 规范生成干净、可运行的模型代码。仅输出可执行的 Python 代码,不要包含 Markdown 格式。"
    user_prompt = f"为以下规范生成模型代码:{json.dumps(spec)}"
    raw_code = call_llm("anthropic/claude-3.5-sonnet", system_prompt, user_prompt)
    clean_code = re.sub(r"```python|```", "", raw_code).strip()
    return clean_code

def mock_execute_and_debug(code, iteration=1):
    if iteration > 3:
        print("已达到最大调试迭代次数。")
        return code, False

    print(f"正在执行并测试代码(第 {iteration} 次迭代)...")
    # 在实际环境中,你应该使用沙箱化的 exec() 或子进程运行器
    # 这里我们模拟一个常见的运行时错误用于演示
    if "nn.Linear(512, 10)" in code and "x.view(-1, 512)" not in code:
        mock_error = "RuntimeError: mat1 and mat2 shapes cannot be multiplied (32x1024 and 512x10)"
        print(f"执行失败:{mock_error}")

        system_prompt = "你是一个运行时调试器。根据错误信息修复提供的 Python 代码。仅输出修复后的代码。"
        user_prompt = f"代码:\n{code}\n\n错误:\n{mock_error}"
        fixed_code = call_llm("openai/o1-mini", system_prompt, user_prompt)
        fixed_code = re.sub(r"```python|```", "", fixed_code).strip()
        return mock_execute_and_debug(fixed_code, iteration + 1)
    else:
        print("执行成功!")
        return code, True

# 示例摘要
paper_abstract = "我们提出了一个简单的 CNN 模型,包含 3 个卷积层,随后是一个全连接层。输入大小为 3x32x32。通道数为 32、64 和 128。卷积核大小为 3x3。最后一层输出 10 个类别。"

spec = parse_paper_spec(paper_abstract)
print("提取的规范:", spec)
initial_code = generate_code(spec)
final_code, success = mock_execute_and_debug(initial_code)

开发者专业建议(Pro Tips)

在构建生产级别的智能体(如 Faraday)时,请牢记以下策略:

  1. 动态模型路由:并非所有步骤都需要最昂贵的推理模型。对于初始解析等任务,可以使用快速且性价比高的模型;而对于复杂的调试任务,则路由到推理能力更强的模型。通过集成 n1n.ai,你可以通过单个 API 密钥在 OpenAI、Anthropic 和开源模型之间进行程序化切换,从而优化运营成本。
  2. 状态化内存(Stateful Memory):智能体需要记住在之前的迭代中什么失败了。维护一个结构化的状态历史记录,其中包含生成的代码、执行日志以及在每个步骤中所做的具体修改。
  3. 强制沙箱化(Sandboxing):切勿在宿主机上直接执行 LLM 生成的代码。务必在资源受限(CPU、内存和网络访问)的隔离 Docker 容器中运行代码,以防止安全风险和失控的死循环。
  4. 结构化 JSON 验证:强制你的 LLM 返回符合 JSON Schema 的数据。这可以防止在管道中不同智能体之间传递数据时出现解析错误。

企业级应用与未来展望

自动复现科学研究的能力对企业研发(R&D)具有巨大的推动作用。企业不再需要花费数周的工程时间来验证新发表的学术论文是否可以集成到其专有系统中。智能体可以在几分钟内分析论文、验证其声明并生成原型。

此外,这项技术加速了竞争性基准测试。企业可以持续监控 arXiv 等学术仓库,自动下载新论文,运行复现管道,并向产品团队发出真正有效的突破性方法的警报。

为了支持这些资源密集型、多步骤的智能体工作流,开发者需要一个稳定、快速且具备冗余路由的 API 基础设施。通过 n1n.ai 访问多个模型提供商,可以确保你的 AI 智能体即使在某些提供商发生局部故障时也能保持运行,同时提供随着工作负载增加而扩展的灵活性。

Get a free API key at n1n.ai