Контекст-инжиниринг для агентов

Лэнс Мартин, LangChain

Транскрипт подготовил Дмитрий Жечков

Подробный транскрипт беседы с Лэнсом Мартином (LangChain) о контекст-инжиниринге для AI агентов, пяти основных категориях управления контекстом и практических подходах к построению эффективных агентных систем.

Введение

Алессио: Привет всем! Добро пожаловать в новый выпуск Space Podcast. Я — Алессио, основатель Kernel Labs. Со мной в студии Свикс, основатель Small AI.

Свикс: Всем привет!

Алессио: Сегодня у нас в гостях Лэнс Мартин — LangChain, LangGraph и многое другое. Лэнс, добро пожаловать!

Лэнс: Рад быть здесь! Я давно слушаю ваш подкаст — здорово наконец присоединиться.

Как появился контекст-инжиниринг

Алессио: Мы давно пересекаемся — ты выступал у нас на AIES, много работал с LangChain. Ты делал и туториалы, и проекты — помню R1 Deep Researcher, «асинхронные/амбентные» агенты. Но настоящим поводом позвать тебя стало твоё недавнее «контекст-инжиниринг» — сейчас об этом говорят все. Как ты к этому пришёл?

Лэнс: Забавно: «баззворды» рождаются, когда у многих появляется общий опыт. В начале — середине этого года все начали «строить агентов» — «год агентов». Кажется просто: «цикл вызова инструментов», но на практике сделать работающего агента сложно. Особенно — управлять контекстом.

Лэнс: Карпати твитнул и фактически закрепил термин «контекст-инжиниринг» — «искусство давать LLM ровно тот контекст, который нужен для следующего шага». Это идеально ложится на тему агентов. Меня это очень зацепило — я год возился с агентами и описал опыт в посте про open deep research. Термин попал в тренд, потому что отражает реальную боль.

Промпт-инжиниринг vs Контекст-инжиниринг

Алессио: Где граница между «промпт-инжинирингом» и «контекст-инжинирингом»? Это одно и то же?

Лэнс: Я бы сказал, «промпт-инжиниринг» — подмножество контекст-инжиниринга. В чате главный вход — сообщение пользователя; мы тщательно «готовим» системный и пользовательский промпт.

Лэнс: Но в агентах контекст приходит не только от человека — на каждом шаге идут ответы инструментов. Ты управляешь не только системными инструкциями и пользовательскими, но и потоком «наблюдений» из инструментов за десятки и сотни шагов.

Важно: У Manus классный разбор: типичная задача — 50 вызовов инструментов. У Anthropic — в проде (например, Claude Code) — сотни.

Лэнс: Я сам это прочувствовал: собрал «наивный» агент, где все ответы инструментов бездумно добавляются в историю — и внезапно полмиллиона токенов, $1–$2 за прогон. Плюс «context rot» (деградация качества при длинном контексте) — об этом говорил Джефф из Chroma. И банальная проблема — упираешься в окно контекста.

Пять категорий контекст-инжиниринга

1. Offloading (Выгрузка контекста)

Алессио: Давай разложим твои «пять категорий» контекст-инжиниринга. Начнём с «offload» — что это?

Лэнс: «Наивный» агент каждую порцию ответа инструментов снова несёт модели, и история растёт. Идея offloading: не тащить «сырое» содержимое обратно в LLM, а складывать его «вне контекста» — на диск, в состояние агента (state) и т.п. А в историю записывать лёгкий след — краткую сводку или URL. Агент знает, что «нашёл» и может подтянуть полные данные по требованию. Это существенно экономит токены.

Свикс: Как понять «минимум» сведений, который надо оставить в контексте, чтобы модель знала, что и где подгружать?

Лэнс: На примере Open Deep Research (сейчас, согласно Deep Research Bench, это лучший открытый deep research-агент): я делаю тщательно промптованную суммаризацию с упором на «полный охват» ключевых пунктов — чтобы агент понимал, когда стоит подтянуть оригинал.

Лэнс: Cognition писали, что суммаризация — непростая штука, они даже обучали модель для этого. Мой опыт: если тщательно «инженерить» промпт суммаризации под высокий recall, всё работает очень неплохо.

2. Context Isolation (Изоляция контекста)

Алессio: Мы на митапе слышали: «сжимать часто, чтобы не ловить context rot». И была мысль про мультиагентность — мол, разные роли изолируют и подгружают своё, а один агент всё не унесёт.

Лэнс: Да, «изоляция контекста» через мультиагентность — важная тема. Cognition скептичны к мультиагентам: подагенты принимают собственные решения, они конфликтуют, а согласовать сложно.

Лэнс: Я согласен: мультиагенты хороши там, где задачи легко параллелятся и в основном «читают», а не «пишут». Для deep research это идеально: множество подагентов собирают фактуру, а «пишем» — один раз в конце. У Anthropic deep researcher так и устроен.

Лэнс: А вот кодинг — сложнее: если каждый подагент «пишет» свою часть, неявные решения конфликтуют. Здесь я скорее на стороне Уолдена из Cognition: нужно осторожно. Хотя у Claude Code уже есть подагенты — значит, они нашли как-то рабочие схемы.

3. Retrieval (Извлечение информации)

Алессio: Перейдём к retrieval. Ты видел разные подходы у код-агентов.

Лэнс: Да. В Windsurf (Варун) — классический многошаговый RAG: чанкование кода по семантическим границам, эмбеддинги, векторный поиск, знаниевые графы, ранжирование.

Лэнс: А у Anthropic/Claude Code (Борис) — «агентный поиск» без индексации: простые файловые инструменты, «прощупывание» репо, и это работает удивительно хорошо.

Мини-бенчмарк сравнения методов:

  • • Векторное индексирование
  • • «llm.txt» (список ссылок с описаниями + инструмент «загрузи файл по ссылке»)
  • • Грубая «набивка» всего контента в контекст

Лучшим оказался «llm.txt» с хорошими описаниями и простым инструментом загрузки.

Лэнс: Лучшим оказался «llm.txt» с хорошими описаниями и простым инструментом загрузки. Агент сам решает: «Для этого вопроса мне нужна такая-то страница». Просто, эффективно, меньше возни, чем строить индекс.

Свикс: Я сделал «Deep Wiki» — по сути масштабированный llm.txt для репозиториев. И тоже вижу профит.

Лэнс: Я даже написал утилиту, которая пробегает по документации, отправляет каждую страницу в дешёвую LLM для качественного краткого описания и собирает llm.txt. Когда описания хорошие, Claude Code выбирает нужные страницы очень точно. Ключ — качество описаний в llm.txt.

4. Reducing Context (Сжатие контекста)

Алессio: Давай к «уменьшению контекста» (compaction/pruning). Все видели, как IDE-компакторы срабатывают у порога окна.

Лэнс: Да, но помимо «почти упёрлись в окно» можно и нужно сжимать на границах инструментов. В Open Deep Research я так и делаю.

Лэнс: Пример у Hugging Face: их «open deep research» запускает код-блоки в окружении, а LLM возвращают только «выжимку», сырые результаты остаются в окружении. У Anthropic — тоже суммаризация «нахождений».

Лэнс: Контраргумент от Manus/Cognition: сжатие контекста опасно потерями. Поэтому они пропагандируют «offload»: исходник сохраняем (диск, файловая система), а в контекст отдаём безопасную выжимку, чтобы при необходимости подтянуть оригинал.

Спорный момент: оставлять ли «ошибки» в истории? Есть «context poisoning» (Дрю Бруник, Gemini Tech Report: ошибка/галлюцинация «отравляет» историю и уводит не туда). Но для ошибок инструментов я предпочитаю оставлять их в истории — агент так быстрее исправляется.

5. Caching (Кеширование)

Алессио: Пройдёмся по caching.

Лэнс: Manus правильно отметили: из-за цикла агент каждый раз снова «пережёвывает» ту же историю. Кеширование истории — снижает стоимость и задержки. Ранее у Anthropic был явный заголовок для кеша; сейчас у многих провайдеров кеширование стало более «автоматическим».

Лэнс: Но важно: кеш не лечит «длинный контекст» как таковой — лишь ускоряет и удешевляет. «Context rot» от длины никуда не девается, даже если попадать в кеш.

Memory vs Context Engineering

Алессио: Поговорим о «памяти» (memory). Это тоже про контекст?

Лэнс: Частично да. Я мыслю по двум осям: запись и чтение воспоминаний, и уровень автоматизации для каждой.

Claude Code подход (простой и симпатичный):

  • Читать — просто подтягивать все ваши «CLAUDE.md» при запуске
  • Записывать — по явному запросу пользователя («сохранить в память»)

Лэнс: Другой полюс — ChatGPT: он сам решает, когда писать/читать память. Это сложно и чревато: Саймон показывал, как генерация картинки «подтянула» его геолокацию из памяти и вставила в сцену, хотя он этого не хотел.

Лэнс: Чтение памяти на масштабе — это, по сути, retrieval: индекс прошлых диалогов, семантический поиск и т.д.

Практичный подход: Мне нравится пара «память + человек в контуре»: у моего «почтового агента» правки пользователя (тон, формулировки, правки вызовов инструментов) идут в память; потом LLM рефлексирует и обновляет инструкции с учётом предпочтений. Это простой, практичный путь «обучать» агента под пользователя.

Горький урок (Bitter Lesson) в AI-инжиниринге

Алессио: Завершим «горьким уроком» (Bitter Lesson). Ты проводишь параллели с AI-инжинирингом.

Лэнс: В блестящем докладе Хёнг Вон Чунга (ex-OpenAI, теперь HMSL/ML) про «горький урок» главный тезис: каждые ~5 лет за те же деньги доступный compute вырастает на порядок; в долгую побеждают более общие методы с меньшим количеством ручных индуктивных предубеждений, питаемые данными и вычислениями.

Лэнс: На практике: чтобы «заработало сегодня», мы добавляем структуру (жёсткие пайплайны, ручные эвристики). Но по мере роста возможностей моделей эта структура начинает сдерживать прогресс. Мы должны уметь вовремя её «снимать».

Мой опыт с Deep Research:

• Начал с очень структурного воркфлоу без tool calling (в 2024 это казалось «надёжнее»)

• Потом модели и инструментальные стеки (MCP, вызовы инструментов) резко улучшились — и «структура» меня блокировала

• Дважды выкидывал и переписывал систему

• Сначала перешёл к агенту, но допустил ошибку: дал подагентам писать разделы отчёта по отдельности — итог получался разрозненным

• Убрал независимое «письмо» и сделал единичную финальную генерацию отчёта — стало отлично

Лэнс: Мораль: строим «настолько структуру, насколько нужно сегодня», но постоянно пересматриваем и снимаем её по мере взросления моделей.

Свикс: Это похоже на то, что происходит на рынке: инкрементальные «AI над существующим процессом» сначала выигрывают у «AI-native» подходов, но потом модели «догоняют» и выигрывает более общий, менее структурированный дизайн. И да — фреймворки и абстракции стоит делать легко «разбираемыми».

Фреймворки и абстракции

Лэнс: Согласен. Важно различать:

Низкоуровневая оркестрация

  • • Узлы, рёбра, состояние (как в LangGraph или внутреннем Shopify ROAST)
  • • Набор кирпичиков, их легко перекомпоновать
  • • Извлечь пользу от чекпойнтов/состояния без «закатывания в бетон»

Высокоуровневые абстракции-агенты

  • from framework import Agent
  • • Риск «чёрного ящика»
  • • Сложнее «снимать структуру» по мере эволюции

Лэнс: Мы сами в LangGraph делаем упор на низкоуровневые компоненты и совместимость с MCP: крупным организациям важны стандарты интеграций.

См. доклад Джона Уэлша из Anthropic про эволюцию MCP: когда у всех «всё своё», наступает хаос, и стандарт резко снижает когнитивную нагрузку.

MCP и стандартизация

Алессio: А MCP-серверы для документации?

Лэнс: У нас есть простой MCP-сервер для LangGraph документации — «MCP doc». Он фактически отдаёт llm.txt и даёт простой поиск/загрузку.

Лэнс: Важно: хранить «подсказки» (prompts) в самом сервере — как им пользоваться. Многие недооценивают, что в спецификации MCP есть prompts и sampling — это сильно помогает, особенно для онбординга агентов.

Лэнс: Я обычно делаю отдельные серверы для разных проектов со специфичными промптами и ресурсами. Это помогает избежать ситуации «не работает» → «а, нужно лучше промптить» → «но как пользователь должен об этом узнать?»

Практические выводы

Что работает сейчас:

  • • Offloading с качественной суммаризацией
  • • llm.txt + простые файловые инструменты часто лучше сложного RAG
  • • Мультиагенты для «чтения», единый агент для «письма»
  • • Кеширование для экономии, но не для решения context rot
  • • Память через human-in-the-loop для персонализации

Чего избегать:

  • • Наивного накопления всего контекста в истории
  • • Преждевременных абстракций, которые сложно «разобрать»
  • • Мультиагентов для сильно связанных задач (например, кодинг)
  • • Агрессивной компрессии без возможности восстановить исходник

Философия:

«Добавляй структуру, чтобы работало сегодня, но будь готов её убрать завтра»

Заключение

Алессio: Кажется, мы прошлись по всем крупным темам: offloading, сжатие/суммаризация, retrieval, изоляция контекста, кеширование, память, «горький урок», роль фреймворков и MCP. Лэнс, что-нибудь напоследок?

Лэнс: Да — я сделал бесплатные курсы: про амбиентных агентов и про open deep research. Мне нравится связка «сделал проект — сделал онбординг-курс к нему» (по мысли Карпати: «видео — отличный онрамп»).

Лэнс: Если хотите попробовать сильный открытый deep research-агент — загляните. У нас уже есть ещё более мощные результаты с GPT-5, но и текущая открытая версия очень конкурентоспособна.

Алессio: Спасибо, Лэнс! Было очень интересно.

Свикс: Спасибо!

Лэнс: Спасибо, что позвали!