Память и контекст: что тащим, что выбрасываем
У вашей петли появился мир и инструменты — и тут же возникла новая беда: контекст растёт. Каждый шаг дописывает наблюдение, каждый промпт несёт всю историю, и к десятому шагу агент платит за девять старых наблюдений, чтобы прочитать десятое. Это занятие — про то, что оставлять в контексте, а что выбрасывать, и почему это главный навык разработчика агентов вообще.
Почему контекст тает
Сложим смету шагов. Задача (~100 токенов) + паспорта инструментов (~150) + наблюдения. read_file по небольшому модулю — 300–800 токенов, и это наблюдение теперь ездит в каждом следующем промпте. Пять файлов — и петля уже тащит пару тысяч токенов хвоста, при этом для очередного решения нужны максимум два последних. На маленьком репозитории это деньги, на большом — упереться в окно модели.
Отсюда правило, которое стоит выучить как таблицу умножения: контекст — это рабочая память шага, а не архив запуска. Архив (полные логи, все наблюдения) при необходимости живёт отдельно — в файле; в контексте живут задача, свежие наблюдения и сжатая сводка старых.
Три уровня памяти
Уровень первый — задача. Неизменно первая строка каждого промпта. Ее не режут никогда: классическая поломка «агент забыл, зачем начал» — это не модель постарела, это кто-то сэкономил на первом куске текста.
Уровень второй — окно свежих наблюдений. Последние N наблюдений едут целиком: именно на них модель строит следующий шаг.
Уровень третий — сводка по остатку. Старые наблюдения не выбрасываются молча, а схлопываются в одну строку: (ранее: 12 наблюдений опущено). Модель знает, что было что-то ещё, и при необходимости может это «вспомнить» — из файла лога, если вы его ведёте. Такой файл-черновик называют scratchpad: полный лог наблюдений на диске, дешёвый и неограниченный.
Когда сжатие запускать — вопрос бюджета: считаете токены истории (токен-калькулятор из первого модуля!) и режете, когда превышен. Именно это — предмет сегодняшней домашки.
Какой контекст нужен код-агенту
Файловый агент задаёт главный вопрос курса: что принести в контекст, чтобы ответить на вопрос про репозиторий? Ответ никогда не «весь репозиторий» (помните «влезет же» из первого модуля — деньги и рассеянное внимание), а «расследование»:
дифф или файл, о котором вопрос — целиком;
файлы, на которые он ссылается (импорты, вызовы) — при необходимости;
структура папок — как карта местности, дёшево и полезно первым шагом.
Заметьте симметрию: это ровно то, что делает опытный разработчик, открывая незнакомый PR. Сначала дифф, потом «пойду посмотрю, откуда вызывается», и только в крайнем случае — «прочитаю весь сервис». Агент с хорошими инструментами (ваш search!) повторяет этот путь за копейки.
Память между запусками
Всё сказанное — про один запуск петли. Между запусками памяти нет вовсе: завтра ваш ревьюер не помнит вчерашнего PR, и если контекст нужен — вы сами положите его в промпт (правила ревью) или в файл (накопленные заметки). «Модель с памятью» из маркетинговых текстов — это всегда чей-то код, который подкладывает прошлое в новый запрос. Теперь этот код пишете вы, и вопросов «почему агент забыл» больше не существует — существует «что я не положил в контекст».
Что запомнить:
Контекст — рабочая память шага, не архив: задача всегда, свежие наблюдения окном, остальное — сводкой; полный лог — в scratchpad-файл.
Сжатие включается по бюджету токенов, а не «когда захочется»: считайте, потом режьте.
Для код-агента контекст собирается как расследование: сам объект вопроса → его связи → карта. Не «всё».
Между запусками памяти нет; любая «долгая память» — код, подкладывающий прошлое в промпт.
Дальше — короткий честный разговор про фреймворки: что они прячут в тех ста строках, которые вы теперь написали сами.
Петля агента: решить → сделать → посмотреть
5 мин
Домашка: агент с одним инструментом
3 мин
Квиз: Петля агента: решить → сделать → посмотреть
6 мин
Инструменты: руки агента
5 мин
Домашка: набор разведчика
3 мин
Квиз: Инструменты: руки агента
5 мин
Память и контекст: что тащим, что выбрасываем
5 мин
Домашка: сжатие истории
3 мин
Квиз: Память и контекст: что тащим, что выбрасываем
6 мин
Свой цикл против LangChain и LlamaIndex
4 мин
HARD-задача: прятки в репозитории
3 мин
Квиз: Свой цикл против LangChain и LlamaIndex
5 мин
Проект «Разведчик»: агент, который знает ваш репозиторий
3 мин