Фундаментальные подходы к памяти
Мы начинаем с обсуждения простейших подходов к памяти: полагание на скользящее окно контекста для базовой модели и память на основе ключевых слов. Несмотря на их простоту, они более чем достаточны для широкого спектра случаев использования.
Управление окнами контекста
Мы начинаем с простейшего подхода к памяти: полагание на окно контекста. "Окно контекста" относится к информации, которая передается базовой модели как вход в одном вызове. Максимальное число токенов, которое базовая модель может поглотить и обработать в одном вызове, называется "длиной контекста". Этот контекст эффективно является рабочей памятью для этого запроса. Один токен в среднем составляет около ¾ слова или примерно четыре символа; например, 1,000 токенов соответствуют примерно 750 английским словам.
Многие популярные модели сегодня прошли через примерно 4,000-токеновые (≈3,000 слов, ~12 страниц) и 8,000-токеновые (≈6,000 слов, ~24 страницы) лимиты. GPT-5 и Claude 3.7 Sonnet теперь предлагают максимум 272,000 токенов на входе, в то время как Gemini 2.5 принимает до миллиона токенов на входе.
Окно контекста является критическим ресурсом для разработчиков, который нужно использовать эффективно. Мы хотим предоставить базовой модели всю информацию, необходимую для выполнения задачи, но не больше. Окно контекста — это вся информация, которая предоставляется базовой модели, когда модель вызывается. В простейшем подходе окно контекста содержит текущий вопрос и все предыдущие взаимодействия в текущей сессии. Когда это окно заполняется, включаются только самые последние взаимодействия.
В некоторых обстоятельствах у нас будет больше информации для предоставления, чем мы можем поместить в окно контекста. Когда это происходит, нам нужно быть осторожными с тем, как мы распределяем наш ограниченный бюджет токенов.
Для простых случаев использования вы можете использовать скользящее окно контекста. В этом случае, по мере прогресса взаимодействия с базовой моделью, полное взаимодействие передается в окно контекста. В определенный момент окно контекста заполняется, и самые старые части контекста удаляются и заменяются самыми последними частями контекста, в порядке "первым пришел — первым ушел". Это легко реализовать, имеет низкую сложность и будет работать для многих случаев использования.
Основной недостаток этого подхода заключается в том, что информация будет потеряна, независимо от того, насколько она релевантна или важна, как только произойдет достаточно взаимодействий, чтобы удалить её из текущего контекста. С большими промптами или многословными ответами базовых моделей это может произойти быстро. Базовые модели также могут пропустить важную информацию в больших промптах, поэтому выделение наиболее релевантного контекста и размещение его близко к концу промпта может увеличить вероятность того, что он будет использован.
Традиционный полнотекстовый поиск
Традиционный полнотекстовый поиск формирует основу многих крупномасштабных систем извлечения и предлагает надежный, зрелый подход к внедрению точного исторического контекста в агенты, поддерживаемые базовыми моделями. В его основе лежит инвертированный индекс, который предварительно обрабатывает весь текст через токенизацию, нормализацию (приведение к нижнему регистру, стемминг) и удаление стоп-слов, затем отображает каждый термин в список фрагментов сообщений или документов, в которых он появляется.
Эта структура обеспечивает молниеносные поиски — вместо сканирования каждого сохраненного сообщения агент просто следует по списку постингов термина для извлечения именно тех отрывков, которые содержат ключевые слова запроса.
Для ранжирования этих результатов по релевантности большинство систем используют функцию оценки BM25. BM25 взвешивает каждый отрывок по его частоте терминов (как часто термин запроса появляется), обратной частоте документов (насколько редок термин в корпусе) и нормализации длины документа (штрафуя чрезмерно длинные или чрезмерно короткие фрагменты).
Когда приходит пользовательский запрос, он анализируется с тем же текстовым конвейером, который используется для индексации, и BM25 производит отсортированный список топ-K кандидатских отрывков. Эти топ-попадания — часто усеченные или суммированные — затем вводятся непосредственно в промпт базовой модели, обеспечивая, чтобы модель видела наиболее уместный исторический контекст без исчерпания её длины контекста.
Хотя этот подход, основанный на ключевых словах, превосходен в определении точных или высокоспецифичных терминов, он может пропустить более широкие темы, перефразировки или концептуальные связи, которые не были выражены в оригинальном тексте. Для захвата этой более глубокой, "основанной на значении" памяти — чтобы ваш агент мог вспомнить связанные идеи, даже когда точные слова различаются — мы обращаемся к семантической памяти и векторным хранилищам.