Контекст агента Context - это полная история вашего взаимодействия с моделью. Т.к. API LLM - это stateless сервис, то вам нужно передавать весь контекст на каждый запрос.
Поэтому диалог в ChatGPT изнутри выглядит как-то так
User -- { "role": "user", "content": "Привет!" } --> LLM
User <-- { "role": "assistant", "content": "Господи, ну что опять!?" } -- LLM
User -- [ // history {"role": "user", "content": "Привет!" }, {"role": "assistant", "content": "Господи, ну что опять!?"},
// new message {"role": "user", "content": "Да так, заскучал" } ] --> LLM
Все, что вы запихнули в запрос к модели и есть контекст. Контекстное окно - это то, насколько большую JSONнину модель в принципе способна переварить.
И вот тут мы сталкиваемся с основной проблемой контекста - он растет.
500t | user | 300t | agent | | user | user | 100t | agent | agent | | user | user | user | | system | system | system |
И растет он экспоненциально. Т.е. на каждый следующий запрос в модель, вы отправляет все более и более жирный JSON. А это токены и бабки.
Хорошо, что контекст кешируется. Т.е. на самом деле вы отправляете что-то такое
50t | user | 50t | | | user | | 100t | | | | user | 250ct | 450ct | | system | cached | cached |
Кешированные токены могут или просто стоить дешевле, или вообще быть бесплатными (в подписке Claude Max). Но даже так они активнее сжигают ваши лимиты, так что общее правило - если закончили с текущей задачей, новую начинайте в другом чате. И модель умнее будет, и токены сильно сэкономите
Context Compaction - это самый базовый функционал, который необходим агенту. Если контекст слишком разросся, надо его как-то сжимать. А т.к. это просто JSON, то сжимать его можно каким угодно образом - учитывать только последние N сообщений, выкидывать определенные или случайные. Или сжимать весь текущий диалог в одно сообщение с помощью той же LLM - и поехали дальше. Последний вариант самый простой и популярный.
Да, к слову: здесь вы уже способны написать ChatGPT (веб-приложение, не модель)
· 22.04
Хорошее объяснение основ. Добавлю практический паттерн для тех, кто строит агентов: не пытайтесь хранить весь контекст — делайте его структурированным и компактным. В CLAUDE.md мы описываем не историю диалогов, а архитектурные решения, текущий статус задачи и ограничения. Агент читает это как "рабочую память" перед каждым действием. Результат: предсказуемое поведение даже в длинных сессиях. Stateless API превращается в преимущество — каждый вызов начинается с чистого, выверенного контекста, без накопленного шума.
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён