DeepDigest
LangChain Blog · · ~3 мин

RubricMiddleware: агенты оценивают и исправляют свою работу

RubricMiddleware позволяет агентам самостоятельно оценивать и исправлять свою работу. Механизм задаёт критерии завершённости задачи, и агент повторяет попытки, пока не выполнит их или не достигнет лимита итераций. Это особенно полезно для задач с чёткими критериями успеха — например, прохождения тестов или включения всех разделов в отчёт.

RubricMiddleware: агенты оценивают и исправляют свою работу

Агенты часто выдают результат, который движется в правильном направлении, но не достигает цели с первой попытки. Для решения этой проблемы представили RubricMiddleware — механизм, который задаёт агенту критерии завершённости задачи и заставляет его повторять попытки, пока критерии не будут выполнены или не будет достигнут заданный лимит итераций.

Механизм работает так: перед завершением работы агента отдельный субагент-оценщик (grader) проверяет результат по заданному рубрикатору (rubric). Если все критерии соблюдены — работа завершается. Если есть недочёты — оценщик возвращает агенту обратную связь по каждому критерию, и агент выполняет задачу заново. Цикл завершается, когда все критерии рубрикатора удовлетворены, либо достигнут лимит итераций, либо произошла ошибка.

Чтобы настроить механизм, нужно выполнить три шага:
1. Определить RubricMiddleware — он добавит цикл оценщика поверх базового агента. При настройке оценщика указывают:
- модель LLM, которая будет использоваться для оценки (часто менее ресурсоёмкая, чем основная модель агента);
- systemprompt — инструкции, которые определяют роль оценщика и критерии «хорошего» результата;
- инструменты, которые оценщик может использовать для сбора доказательств (например, запуск тестов, проверка кода, валидация результатов);
- максимальное число циклов исправления и повторной оценки.
2. Передать RubricMiddleware агенту. У агента тоже должны быть свои инструкции (system
prompt) — они определяют, как выполнять задачу, а рубрикатор задаёт критерии оценки результата.
3. Вызвать механизм с сообщением от пользователя и рубрикатором. При вызове нужно предоставить сообщения (запрос пользователя и, при необходимости, предыдущие шаги диалога) и рубрикатор — список критериев, которые оценщик должен проверить.

Например, при генерации кода первая попытка агента могла выглядеть корректно, но не пройти один тест. Оценщик вернул сообщение: «Один тест не пройден: test_unhashable. Функция выдаёт ошибку TypeError при встрече с нехешируемыми типами, например, со списками внутри входного списка». Агент исправил реализацию и прошёл все тесты со второй попытки. Обратная связь не сводится к общему «попробуйте ещё раз»: по каждому критерию даётся отдельный вердикт, поэтому агент точно понимает, что нужно исправить.

Механизм особенно полезен для задач с чёткими, проверяемыми критериями успеха: например, когда нужно пройти набор тестов, избежать запрещённых шаблонов кода или включить в отчёт все обязательные разделы.

RubricMiddleware пока в бета‑версии, API может измениться. Подробнее о настройке, отслеживании работы и сохранении рубрикаторов можно узнать в документации.

Go back to blog

Create agents

RubricMiddleware

Deep Agents

Claude Code

sub-agent

middleware

tools

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,
)

deep agent

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],
)
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".text)

this trace

the documentation

// оригинал
LangChain Blog ↗ Читать оригинал
5 просмотров
// поделиться Telegram VK