Вступ

  • Обмеження AI агентів залежить не лише від розміру моделі, але й від майстерності в „управлінні контекстом“. Це можна порівняти з налаштуванням пам’яті для процесора, адже це визначає глибину і ефективність мислення агента.
  • Контекстне вікно не є сміттєзвалищем: інформаційна перевантаженість може „отруювати“, перешкоджати та плутати судження AI. Точність важливіша за обсяг.
  • Професіонали управляють контекстом AI за допомогою чотирьох стратегій: „запису, відбору, стиснення та ізоляції“, акцентуючи на використанні обмеженої „пам’яті“ для досягнення максимальної ефективності.
  • Майбутня конкуренція — це конкуренція за ефективність систем. Використання архітектури з багатьма агентами для „ізоляції“ завдань, дозволяє кожному агенту досягти максимальних результатів у своєму власному маленькому вікні, що є ключем до створення складних систем завдань.

Основне резюме

Агенти (Agent) виконують завдання за допомогою контексту (Context). Термін „контекстне інженерство“ означає мистецтво та науку точного впровадження відповідної інформації в контекстне вікно агента на кожному етапі виконання задачі. У цій статті ми підсумовуємо основні стратегії контекстного інженерства, що використовуються сьогодні популярними агентами.

Context Engineering

Контекстне інженерство (Context Engineering)

Як сказав Андрій Карпаті, великі мовні моделі (LLM) можна вважати „новим типом операційної системи“. LLM є ЦП, а його „контекстне вікно“ — це ОП, що слугує робочою пам’яттю моделі. Як і в ОП, обсяг контекстного вікна LLM обмежений, що створює проблеми обробки різних джерел контексту. Однією з основних завдань операційної системи є ефективне управління ОП для ЦП, що є схожою роллю для контекстного інженерства. Карпаті точно сформулював це так:

Контекстне інженерство — це „…мистецтво і наука точного заповнення контекстного вікна для наступного кроку (розрахунку)“.

Context Engineering

При створенні додатків на основі LLM, з якими типами контексту нам потрібно працювати? Контекстне інженерство охоплює кілька різних типів контексту:

  • • Інструкції (Instructions) – підказки, пам’ять, приклади з невеликою кількістю зразків, описи інструментів тощо.
  • • Знання (Knowledge) – факти, пам’ять тощо.
  • • Інструменти (Tools) – зворотна інформація з викликів інструментів.

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

Цього року, з покращенням можливостей LLM у розумінні та використанні інструментів, інтерес до агентів зріс. Агенти виконують завдання, по черзі використовуючи LLM та інструменти, особливо ускладнені довгострокові завдання.

Context Engineering for Agents

Проте довгострокові завдання та постійно накопичувані відгуки з інструментів означають, що агенти зазвичай споживають велику кількість токенів. Це може призвести до багатьох проблем: перевантаження контекстного вікна, збільшення витрат та затримок, а також зниження продуктивності агента. Дрю Бреуінг чітко підкреслив, що занадто довгий контекст може призвести до проблем з продуктивністю у кількох випадках:

  • • Отруєння контексту (Context Poisoning): коли в контекст потрапляють помилки (неправильна інформація).
  • • Відволікання контексту (Context Distraction): коли надлишок контекстної інформації затоплює первинні знання моделі.
  • • Плутанина контексту (Context Confusion): коли безвідносна інформація контексту впливає на відповіді моделі.
  • • Конфлікт контексту (Context Clash): коли різні частини контексту суперечать одна одній.

Зважаючи на ці проблеми, компанія Cognition AI підкреслила важливість контекстного інженерства:

„Контекстне інженерство“… насправді є основним завданням інженерів, що створюють AI агентів.

Компанія Anthropic також зазначила:

Агенти зазвичай потребують сотень раундів діалогу, що вимагає від нас обережних стратегій управління контекстом.

То як нині розробники вирішують цю проблему? Я підсумував існуючі методи в чотирьох категоріях — запис, відбір, стиснення та ізоляція — і навів приклади.

Memory Type

Запис контексту (Write Context)

Запис контексту означає збереження інформації поза межами контекстного вікна для використання агентом під час виконання завдань.

Тимчасове сховище (Scratchpads)

Люди під час розв’язання проблем ведуть нотатки і запам’ятовують інформацію, щоб використовувати її в майбутніх завданнях. Агенти також поступово набувають цих можливостей! Використання „тимчасового сховища“ для нотаток — це один із способів зберігати інформацію під час виконання завдань агентом. Основна ідея полягає в тому, що інформація зберігається поза контекстним вікном, але має бути доступною для агента в будь-який момент. Дослідницька система з багатьма агентами від Anthropic надає яскравий приклад:

„Головний дослідник“ спочатку продумує метод розв’язання проблеми та зберігає свій план у „пам’яті“ для збереження контексту, оскільки, якщо токени в контекстному вікні перевищать 200 тис., це може призвести до його обрізки, тоді як збереження плану є критично важливим.

Існує кілька способів реалізації тимчасового сховища: це може бути простий виклик інструмента, наприклад запис у файл, або поле в об’єкті стану під час виконання, яке залишається незмінним протягом всієї сесії. У будь-якому випадку, тимчасове сховище дозволяє агентам зберігати корисну інформацію для кращого виконання завдань.

Пам’ять (Memories)

Тимчасове сховище допомагає агентам вирішувати завдання в межах однієї сесії, але іноді агентам потрібно запам’ятовувати речі на кількох сесіях. Модель Reflexion впровадила концепцію рефлексії після кожного раунду дій агентів, а модель Generative Agents може періодично синтезувати пам’ять з набору відгуків попередніх дій агентів.

Ці концепції вже застосовуються в популярних продуктах, таких як ChatGPT, Cursor та Windsurf. Вони всі мають механізми автоматичного генерування довгострокової пам’яті на основі взаємодії користувача з агентом.

Memories

Відбір контексту (Select Context)

Відбір контексту означає перенесення необхідної інформації в контекстне вікно, щоб допомогти агенту виконувати завдання.

Тимчасове сховище (Scratchpad)

Механізм відбору контексту з тимчасового сховища залежить від його реалізації. Якщо це інструмент, агент може звертатися до нього через виклик. Якщо це частина стану агента під час виконання, розробники можуть на кожному етапі вибірково відкривати певні частини стану для агента. Це надає тонкий контроль над тим, як на надалі контекст з тимчасового сховища передаватимся LLM.

Пам’ять (Memories)

Якщо агент може зберігати пам’ять, він також повинен мати можливість відбирати пам’ять, що стосується поточного завдання. Це є досить корисним, оскільки дозволяє агентам вибирати приклади з невеликою кількістю зразків (ситуаційна пам’ять), щоб навчитися бажаним моделям поведінки; вибирати інструкції (програмна пам’ять), щоб направити свою поведінку; або вибирати факти (семантична пам’ять), щоб надати актуальний контекст для завдання.

Memory Type

Однією з великих проблем є забезпечення того, щоб відібрана пам’ять була релевантною. Деякі популярні агенти використовують лише невелику частину фіксованих документів, які завжди завантажуються в контекст. Наприклад, багато кодових агентів використовують файли для збереження інструкцій (програмна пам’ять), або в деяких випадках збереження прикладів (ситуаційна пам’ять). Claude Code використовує CLAUDE.md, а Cursor і Windsurf — правила з файлами.

Проте, якщо агент зберігає велику кількість (наприклад, типу „семантична пам’ять“) фактів або взаємин, відбір стає більш складним. ChatGPT є відмінним прикладом, оскільки він зберігає і відбирає факти з великої кількості пам’яті, специфічної для користувача.

Векторні вклади та/або графи знань є популярними техніками індексації пам’яті для підтримки відбору. І незважаючи на це, відбір пам’яті залишається складним. На виставці AIEngineer Саймон Уіллісон поділився прикладом помилок під час відбору пам’яті: ChatGPT отримав його місце розташування з пам’яті і випадково вплив на зображення, яке він запитував. Таке неочікуване або небажане повернення пам’яті може зробити так, що деякі користувачі відчувають, що їхнє контекстне вікно „більше не належить їм“!

Інструменти (Tools)

Агенти повинні використовувати інструменти, але якщо доступних інструментів занадто багато, це може призвести до перевантаження. Це часто відбувається через те, що описи інструментів можуть бути перетворені, ускладнюючи агентам вибір необхідного інструмента. Один зі способів — застосування RAG (пошук, посилений генерацією) на описах інструментів, щоб знаходити найбільш релевантний інструмент для завдання на основі семантичної схожості. Останні дослідження показують, що цей метод може підвищити точність вибору інструментів втричі.

Знання (Knowledge)

Пошук, посилений генерацією (RAG), сам по собі є величезною темою і може становити основний виклик контекстного інженерства. Кодові агенти — один з найкращих прикладів RAG у масштабних виробничих програмах. Варун з Windsurf прописав деякі з викликів:

Індикація коду не дорівнює пошуку контексту… ми намагаємося розпізнати код за допомогою AST (абстрактного синтаксичного дерева) і виконувати розділення за семантични

ми межами… Але зі збільшенням масштабу кодової бази пошук векторних вкладок як метод пошуку стає ненадійним… Ми маємо покладатися на комбінацію різних технологій, таких як grep/пошук по файлах, пошук на основі графів знань, а також… етап повторного сортування, де контекст буде відсортовано за релевантністю.

Стиснення контексту (Compress Context)

Стиснення контексту означає збереження тільки тих токенів, які необхідні для виконання завдання.

Підсумування контексту (Context Summarization)

Взаємодії агента можуть тривати до сотень раундів, використовуючи інструменти, що споживають велику кількість токенів. Підсумування — це звичайний метод для подолання таких труднощів. Якщо ви використовували Claude Code, ви вже помітили, як це працює. Коли використання контекстного вікна перевищить 95%, Claude Code запускає „автоматичне стиснення“, яке підсумовує повну взаємодію між користувачем і агентом. Це підсумування може бути реалізоване через різні стратегії, такі як рекурсивне підсумовування чи ієрархічне підсумування.

Context Summarization

Доцільно інтегрувати кроки підсумування у дизайн агентів. Наприклад, це може бути корисно для післяобробки деяких викликів інструментів (особливо таких, як інструменти пошуку, що споживають велику кількість токенів). Компанія Cognition також зазначила, що підсумування вздовж меж, де агенти переходять один до одного, може допомогти зменшити споживання токенів під час передачі знань. Якщо необхідно зафіксувати певні події або рішення, підсумування може бути складним. Cognition для цього використовує налаштовану модель, що підкреслює, скільки зусиль може знадобитися для цього кроку.

Обрізка контексту (Context Trimming)

Зазвичай підсумування використовує LLM, щоб витягти найбільш релевантні частини контексту, а обрізка може бути більш схожою на фільтрацію або, як зазначив Дрю Бреуінг, „обрізання“ контексту. Це може бути зроблено за допомогою жорсткокодованих евристичних правил, наприклад, через видалення старіших повідомлень із списку повідомлень. Дрю також згадував Provence, контекстний обрізувач, налаштований для завдань запит-відповідь.

Ізоляція контексту (Isolating Context)

Ізоляція контексту означає розділення контексту для допомоги агенту у виконанні завдань.

Багатоагентна система (Multi-agent)

Одним із найпопулярніших способів ізоляції контексту є його розподіл між кількома підагентами. Однією з мотивацій бібліотеки Swarm від OpenAI є „розділення фокусу“, тобто команда агентів, що займається підзадачами. Кожен агент має свій специфічний набір інструментів, інструкцій та незалежне контекстне вікно.

Multi-agent

Досліджувана система з багатьма агентами від Anthropic переконливо демонструє, що кілька агентів зі незалежними контекстами перевершують єдиного агента в значній мірі, оскільки контекстні вікна кожного підагента можуть зосереджуватися на більш вузьких підзадачах. Як зазначено у їхньому блозі:

Підагенти працюють з власними контекстними вікнами паралельно, досліджуючи різні аспекти проблеми.

Звичайно, багатоагентні системи також стикаються з викликами, включаючи споживання токенів (наприклад, Anthropic повідомляє, що їхнє споживання токенів у 15 разів більше, ніж у чатових викликах), потребує продуманого процесу налаштування підказок для планування роботи підагентів, а також проблеми координації між підагентами.

Ізоляція контексту через середовища (Context Isolation with Environments)

Проект HuggingFace для глибоких досліджень демонструє ще один цікавий приклад ізоляції контексту. Більшість агентів використовують виклики інструментів API, які повертають JSON об’єкти (параметри інструментів), а потім передаються інструменту (наприклад, API пошуку) для отримання зворотного зв’язку (такого як результати пошуку). HuggingFace використовує CodeAgent, який безпосередньо виводить необхідний код для викликів інструментів. Цей код далі виконується у піщаному середовищі. Конкретний контекст, отриманий від викликів інструментів (таких як значення, що повертаються), потім передається назад до LLM.

Context Isolation with Environments

Це дозволяє контексту бути ізольованим у середовищі від LLM. Hugging Face зазначає, що це чудовий спосіб ізолювати об’єкти, які споживають велику кількість токенів:

Code Agents краще справляються з обробкою стану… потрібно зберегти зображення/аудіо/інші дані для майбутнього? Немає проблем, просто визначте їх як змінну, і ви зможете використовувати її пізніше.

Стан (State)

Слід зазначити, що об’єкт стану агента під час виконання також є хорошим способом ізоляції контексту. Це може слугувати подібною до піщаного середовища функцією. Об’єкт стану може бути налаштований схему (Schema, наприклад, модель Pydantic), яка містить поля, що можуть бути записані в контекст. Одне з полів в схемі (наприклад, messages) може бути відкрито для LLM під час кожної взаємодії агента, але інші поля в схемі можуть ізолювати інформацію, щоб їх можна було використовувати більш вибірково.

Висновок

Моделі контекстного інженерства агентів постійно еволюціонують, але ми можемо підсумувати звичайні методи в чотири основні категорії — запис, відбір, стиснення та ізоляція:

  • • Запис контексту — це збереження інформації поза контекстним вікном для використання агентом під час виконання завдань.
  • • Відбір контексту — це перенесення необхідної інформації в контекстне вікно, щоб допомогти агенту виконувати завдання.
  • • Стиснення контексту — це збереження тільки тих токенів, які необхідні для виконання завдання.
  • • Ізоляція контексту — це розділення контексту для полегшення виконання завдань агентом.

Розуміння та використання цих методів є основною роботою при створенні ефективних агентів сьогодні.