Context Engineering: паттерн Retrieve, Offload, Delegate для агентов

Когда ИИ-агент ищет информацию в вебе, он рискует заполнить все окно контекста результатами поиска еще до начала работы. Паттерн "Retrieve, Offload, Delegate" (ROD) решает эту проблему, вынося тяжелые данные во внешнее хранилище.

Виталий Болгар3 мин чтенияContext EngineeringLangChainDeep AgentsRAG

Context Engineering - это дисциплина управления тем, что и когда попадает в память языковой модели во время выполнения задачи. В современных системах, таких как LangChain Deep Agents, основной проблемой стала не нехватка данных, а их избыток. Если поисковый инструмент возвращает 10 полных статей по 20 000 символов каждая, агент мгновенно исчерпывает лимит в 128k или даже 200k токенов. Контекст забивается шумом, и модель теряет нить рассуждения.

Как работает паттерн Retrieve, Offload, Delegate

В версии Deep Agents v0.9 от 23 октября 2026 года этот процесс стал стандартным для всех тяжелых инструментов. Вместо того чтобы скармливать агенту все содержимое найденных страниц, система проходит три этапа:

  • Retrieve (Поиск): Инструмент (например, срезAI) находит релевантные ссылки и извлекает чистый текст.
  • Offload (Выгрузка): Полные тексты сохраняются во временную файловую систему или векторную базу, а не возвращаются в prompt.
  • Delegate (Делегирование): Агент получает список путей к файлам и 2-3 предложения превью. Если ему нужен конкретный факт, он вызывает субагента или инструмент чтения для конкретного файла.

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

- Команда LangChain, блог компании

Используйте срезAI для поиска - мы отдаем чистый Markdown, готовый для мгновенной выгрузки в контекст или файлы.

Попробовать поиск

Архитектура решения на базе срезAI

Для реализации ROD в связке со срезAI мы рекомендуем использовать инструмент read_url с сохранением результата. Это позволяет избежать повторных вызовов API и экономить бюджет. Один запрос к поиску стоит 0,10 ₽, а полученный Markdown идеально ложится в схему разгрузки контекста. Когда я впервые собирал такую схему, самым сложным было заставить агента не пытаться угадать содержимое файла по названию, а действительно открывать его для чтения.

python
import os
from srezai import SrezAIClient client = SrezAIClient(api_key=os.environ["SREZAI_API_KEY"]) def tool_search_and_offload(query): # Retrieve results = client.web_search(query, num=10) offloaded_paths = [] for i, res in enumerate(results): # Offload: сохраняем во внутренний кеш path = f"context/doc_{i}.md" with open(path, "w") as f: f.write(res['text']) offloaded_paths.append({"path": path, "preview": res['text'][:200]}) # Delegate: возвращаем агенту только карту данных return offloaded_paths

Что не сработает

Паттерн ROD не сработает, если ваша модель плохо следует инструкциям. Если агент забывает, что у него есть доступ к файлам, он начнет галлюцинировать на основе коротких превью. Для стабильной работы подходят модели уровня Claude 3.5 Sonnet или GPT-4o. Более слабые версии часто игнорируют делегирование и пытаются выдумать ответ сразу.

Можно ли использовать ROD без локальной файловой системы?

Данные можно сохранять в Redis или векторную БД, передавая агенту только ID документов. Смысл паттерна в том, чтобы убрать тяжелый текст из основного промпта, а где именно он лежит физически - не так важно.

Сколько стоит такая архитектура?

Запрос к срезAI стоит 0,10 ₽.

Работает ли это с динамическим контентом?

Headless-браузер обрабатывает динамический контент на стороне срезAI, и агент получает финальный текст, даже если сайт был перегружен скриптами.

В чем отличие от обычного RAG?

В ROD агент сам решает, какой документ дочитать, видя структуру данных. В классическом RAG система жестко выдает фрагменты по семантической близости, часто вырывая их из общего смысла страницы.

Свой веб-доступ для агента: поиск, чтение страниц и извлечение данных по одному ключу.

Читайте также