RubricMiddleware 需要 deepagents>=0.6.5。它处于 测试版;API 未来可能会变更。
某些智能体任务对于“完成”有明确的定义,但工作模型本身在首次尝试时通常无法可靠地达成:一首符合正确音节模式的俳句、一次所有测试都通过的重构,或一份涵盖所有必填部分的报告。RubricMiddleware 让您可以将完成的样子声明为评分标准,并让智能体 自我评估和迭代,直到满足评分标准,或达到配置的最大迭代次数上限。 LLM-as-a-judge 是一种模式,其中一个语言模型根据定义的标准评估另一个模型的输出。在 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。 要将评分标准传递给后续调用,请附加一个检查点器,并在调用时传递相同的 thread_id。在这些情况下,相同的 rubric 会在未来的 invoke() 或 stream_events() 调用中保持,直到您传递一个新的。 中断(KeyboardInterrupt、asyncio.CancelledError)会从 agent.invoke() 和 agent.stream_events() 中未捕获地传播出来。在已设置检查点的线程上,使用相同评分标准的下一次调用将恢复进行中的评分运行。

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

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

定义 RubricMiddleware

此中间件在基础智能体之上添加了一个 LLM-as-a-judge 评分器循环。配置评分器模型、可选的自定义提示、用于证据收集的工具以及最大迭代次数上限。
2

将其传递给深度智能体

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

使用用户消息和评分标准进行调用

在调用时,在 messages 中提供用户请求,并在 rubric 中提供一个换行符分隔的清单,评分器必须将其标记为已满足。如果在输入状态中未提供 rubric,中间件将不会运行。
智能体生成输出后,评分器接管并检查输出是否满足每个标准:例如,当输入包含不可哈希类型时,test_unhashable 是否抛出 TypeError 失败。如果有任何问题,评分器会提供此反馈,然后智能体修改其实现并返回给评分器。