Skip to main content
RubricMiddleware 需要 deepagents>=0.6.5。它处于 测试版 状态;未来 API 可能会发生变化。
某些智能体任务有明确的 “完成” 定义,而工作模型单独无法在第一次尝试中可靠地达成:符合正确音节模式的俳句、所有测试通过的代码重构,或涵盖所有必要部分的报告。RubricMiddleware 允许您将 完成的样貌 声明为标准,并让智能体 自我评估和迭代,直到标准得到满足,或达到配置的最大迭代次数限制。 将语言模型作为裁判 是一种模式,其中一个语言模型根据定义的标准评估另一个模型的输出。在 LangSmith 评估 中,LLM-as-a-judge 评估器离线批量评分应用程序输出。RubricMiddleware 在运行时应用相同模式:深度智能体生成输出后,一个专用的评分模型根据您的标准审查会话记录,并驱动修订,直到所有标准通过(或达到配置的迭代次数限制)。 当深度智能体完成推理时,LLM-as-a-judge 评分子智能体审查输出并返回裁决。如果它返回 needs_revision,则针对每个标准的反馈会注入对话中,智能体再次运行。循环在 satisfied、max_iterations_reached、failed 或 grader_error 时终止。

配置中间件

在调用 create_deep_agent 时,将 RubricMiddleware 添加到 middleware 列表中:

调用时传递标准

在调用状态中传递 rubric 字符串以启动自我评估循环。使用 invoke() 进行单个阻塞调用,或使用 stream_events(..., version="v3") 与 CustomTransformer 接收在 stream.custom 中发生的评分事件:

标准裁决

当深度智能体完成推理并具有输出时,LLM-as-a-judge 评分子智能体根据标准审查输出,并生成以下裁决之一:

观察迭代进度

on_evaluation 是一个回调,在每次评分迭代后(无论您调用 invoke() 还是 stream_events())触发,并传递评分器的裁决。如果您未从 stream.custom(使用 CustomTransformer)读取标准事件或使用 LangSmith 追踪运行,这是检查评分过程中发生情况的主要方式。
中间件在每次 评分器遍历 后调用您的函数,传递一个 RubricEvaluation 字典。该 RubricEvaluation 字典包含:

评分器遍历事件

跨调用持久化评估标准

一个 agent.invoke() 或 agent.stream_events() 调用会运行评分循环直至完成,并以终端判定结果 satisfied、failed 或 max_iterations_reached 结束。 若需将评分标准延续至后续调用,请附加 checkpointer 并在调用时传递相同的 thread_id。在这种情况下,相同的 rubric 将在未来的 invoke() 或 stream_events() 调用中持续存在,直到您传递新的 rubric 为止。 中断(KeyboardInterrupt,asyncio.CancelledError)从agent.invoke()和agent.stream_events()传播出去且未被捕获。在一个检查点线程上,具有相同规则的下一个调用会继续进行中的评分运行。

示例:生成经过审核的 Python 代码

以下示例构建了一个深度智能体,该智能体编写一个find_duplicates函数。它定义RubricMiddleware一次,将其附加到智能体上,然后在调用时传递一个rubric字符串。 与其让评分器抽象地推理正确性,该示例给它提供了一个run_test_suite工具来直接验证行为。评分器在生成裁决之前会调用此工具以获取额外信息,并且在未提供工具时会回退到从转录文本中推理。
1

Define RubricMiddleware

这个中间件在基础智能体之上添加了一个 LLM 作为裁判的评分循环。配置裁判模型、可选的自定义提示词、证据收集工具以及最大迭代次数。
2

Pass it to a deep agent

智能体的 system_prompt 告诉它如何执行工作,而评分标准则告诉裁判如何评判工作。
3

Invoke with a human message and rubric

在调用时,在 messages 中提供用户请求,并在 rubric 中提供一个换行符分隔的检查清单,裁判必须标记为满足。当输入状态中未提供 rubric 时,中间件不会运行。
在智能体生成输出后,裁判接管并检查输出中的每个标准:例如,当输入包含不可哈希类型时 test_unhashable 会以 TypeError 失败。如果裁判发现任何问题,会提供反馈,然后智能体会修改其实现并返回给裁判。
官方原文:src/oss/deepagents/rubric.mdx · 非官方翻译,译文由 AI 生成,以英文原文为准。
Last modified on November 3, 2026