跳到正文
LangChain:Blog·· 2026-06-03精选AI 评分63

LangChain 为 Deep Agents 推出 RubricMiddleware,让智能体按评分标准自评并纠错

Introducing Rubrics: Build Agents that Evaluate and Correct Their Work

AI 导读

LangChain 为 Deep Agents 新增 RubricMiddleware(beta):开发者在 invoke 时传入 rubric 检查清单,一个独立的 grader 子智能体在 agent 运行结束前逐项评审,可调用工具收集证据并返回按条目的反馈,未通过则将反馈注入对话让 agent 重跑,直到满足 rubric 或达到 max_iterations。

推荐理由

原文给出 grader 子智能体、循环终止条件和配置示例,读者可以照此在 Deep Agents 中接入自评纠错流程。

正文 · AI 翻译

智能体正在承担比以往更复杂的任务。但很多时候,它们都难以抵达终点。我们在 Deep Agents 中加入了 RubricMiddleware 来解决这个问题:你定义一套评分标准,智能体会自我评估并反复迭代,直到满足每一条标准,或达到配置的上限。

如果你熟悉 Claude Code 或 Codex 中的 /goal,这是一种类似的模式。这个实现更灵活一些,因为评估由一个专门的评分器 sub-agent 处理,它可以调用工具、对完整对话记录进行推理,并返回逐条标准的反馈。

问题所在

有些智能体任务对“完成”有清晰的定义。代码重构在测试套件通过时就完成了。报告在涵盖所有必需章节时就完成了。

但智能体并不总能一次就做到。随着上下文越来越大,模糊的指令、工具误用以及非确定性错误都会叠加——输出质量下降,开发者只能手动诊断并重新运行任务。

工作原理

在智能体运行结束前,一个独立的评分器子智能体会根据评分标准对其进行审查。如果全部通过,运行就结束。如果有任何不达标之处,评分器逐条标准的反馈会被注入回对话中,智能体再次运行。当评分标准得到满足,或达到配置的迭代上限时,循环终止。

循环在 satisfied、max_iterations_reached、failed 或 grader_error. 时终止

接入方式

下面是最小化的设置,分为几个步骤。关键思路是:定义一次 RubricMiddleware,将其附加到深度智能体上,然后在调用时传入一个 rubric 字符串。(如果缺少 rubric,该中间件不会做任何事。)

1) 定义 RubricMiddleware

这个 middleware 在基础智能体之上添加了一个评分器循环。评分器的配置包括:

  • model:用于评分的 LLM(通常比你的主智能体模型更小、更便宜)
  • system_prompt:定义评分器角色以及“好”的标准的指令
  • tools:评分器可以调用的可选工具,用于收集证据(例如运行测试、lint、验证输出)
  • max_iterations:运行停止前“修复 → 重新评分”循环的最大次数
from deepagents import RubricMiddleware

rubric_middleware = RubricMiddleware(
    model="anthropic:claude-haiku-4-5",
    system_prompt="You are a code reviewer grading generated code against a rubric.",
    tools=[run_test_suite],
    max_iterations=5,
)

2) 将其传给深度智能体

你的 deep agent 也应该有自己的“操作指令”。智能体的 system_prompt 告诉它如何完成工作,而评分标准则告诉评分器如何评判工作。

在下面的代码片段中:

  • model:用于生成解决方案的 LLM
  • system_prompt:智能体的编码约定 + 约束
  • middleware:附加 rubric_middleware,以便智能体可以被迭代纠正
from deepagents import create_deep_agent

agent = create_deep_agent(
    model="anthropic:claude-sonnet-4-6",
    system_prompt=(
        "You are a careful Python engineer. Write correct, readable code. "
        "Follow the user’s instructions exactly."
    ),
    middleware=[rubric_middleware],
)

3) 使用人类消息 + 评分标准进行调用

在调用时,你提供:

  • messages:人类请求(以及可选的先前轮次)
  • rubric:一个以换行分隔的检查清单,评分器必须将其标记为已满足
from langchain.messages import HumanMessage

result = agent.invoke(
    {
        "messages": [
            HumanMessage(
                content=(
                    "Write a Python function `find_duplicates(lst)` that returns a list of "
                    "all elements that appear more than once in the input list, in the order "
                    "they first appear."
                )
            )
        ],
        "rubric": (
            "- All tests pass in run_test_suite\n"
            "- The function is named `find_duplicates` and accepts a single list argument\n"
        ),
    },
    config={"configurable": {"thread_id": "code-generation-session"}},
)
print(result["messages"][-1].text)

我们不是让评分器抽象地推理正确性,而是给它一个 run_test_suite 工具来直接验证行为。评分器可以在给出结论前调用工具收集硬证据——当没有提供工具时,则回退到根据对话记录进行推理。

在实践中观察

在上面的代码生成示例中,智能体的第一次尝试看起来正确,但有一个测试失败了。评分器返回:

“一个测试失败:test_unhashable。当遇到输入列表中的列表等不可哈希类型时,该函数会因 TypeError 崩溃。”

该 agent 修改了其实现,并在第二次迭代时通过了所有测试。反馈不是笼统的“再试一次”——每条标准都会得到各自的判定,因此 agent 能确切知道需要修复什么。

完整示例见此 trace。

为什么重要

Agent 的输出具有概率性:同一个提示词可能一次运行成功,下一次却达不到要求。RubricMiddleware 将捕捉这种波动的负担从开发者转移到了系统上。

无需手动检查输出并重新运行失败的任务,你只需定义一次“完成”的标准,循环会处理其余部分。每次重试都是有依据的——评分器会准确指出问题所在,并生成针对每条标准的有针对性反馈。

结果是:在正确性至关重要的任务上,agent 更加可靠。

了解更多

RubricMiddleware 处于 beta 阶段,API 可能会发生变化。如需包含配置、可观测性和评分标准持久化的完整演练,请参阅文档。

来源:LangChain:Blog · langchain.com