JavaRush /Курси /Claude Code SELF /Що бачить агент: контекст

Що бачить агент: контекст

Claude Code SELF
Рівень 10 , Лекція 1
Відкрита

1. Великий чужий проєкт не можна звалити навмання

Стривай, — думає Тьома, піднявши руки. Портал же досі висить недорозібраний. І тут його наздоганяє ранкова думка: а що, як і портал так само — скинути агенту, «вночі сам розбереться»?

Він пробує сформулювати це вголос у чаті, і Льоха його зупиняє:

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

Зʼявляється нова незручність. Тьома неохоче пробігає очима по порталу й уголос називає, що бачить. Ось, здається, загальна вітрина — те, що бачить відвідувач на вході. Ось щось про нарахування нагород, якісь бали. Ось лідерборд — таблиця найкращих. Ось бонусна іграшка всередині кампанії. Ось окремі партнерські шматки — про них він узагалі нічого не розуміє, чуже. Криво, навпомацки, половина — взагалі незрозуміло що і навіщо. Але хоча б це вже не «відкрив і потонув в обсязі» — він уперше сам розкладає кашу на шматки з назвами.

Нудьга підступає до горла, і Тьома вирішує змінити тему, сподіваючись, що Льоха не помітить:

— Слухай, до речі. Сашко іноді ніби сліпне. Прошу підправити щось, а він поруч і робить вигляд, що не бачить сусідній шматок коду — ніби його взагалі немає. То гальмує, то лінується, не збагну. Що це взагалі?

На його подив Льоха із задоволенням чіпляється за запитання — він явно його чекав.

— О, ось це вдалий момент. Сашко не гальмує і не лінується. Це ти поки не розумієш, що він насправді бачить. Давай поясню тобі на конкретному прикладі: на твоєму великому порталі, — на маленькому воно б і не вилізло. Ходімо.

2. Вікно уваги — файл з історією

Льоха відкриває агента просто в папці порталу.

— Дивись. Ти думаєш, ШІ-агент «знає твій репозиторій». Відкрив проєкт — тримає все в голові. Так?

— Ну… так. Він же тут, у папці.

— А от і ні. І це найважливіше, що ти сьогодні зрозумієш. Давай без прелюдій, простіше. Знаєш, як агент узагалі влаштований усередині? Уся ваша з ним робота — це один довгий текстовий файл. Звичайний. У ньому поспіль, згори вниз, лежить історія: твоє повідомлення, відповідь агента, твоє наступне, його відповідь, що він прочитав і що зробив. Стрічка переписки. Щоразу, коли ти натискаєш Enter, ШІ-агент надсилає файл із вашою перепискою на ШІ-сервер, де ШІ перечитує весь цей файл цілком, від самого верху — і дописує в кінець наступне повідомлення. І так по колу.

Тьома кліпає.

— Почекай. Тобто він щоразу все заново перечитує? Усе наше базікання?

— Усе. Іншої памʼяті в нього немає. Немає ніякого «він знає проєкт» — є тільки цей файл-історія. Що в нього потрапило — те ШІ й бачить. Чого у файлі немає — того для нього не існує. Не «забув», не «полінувався». Просто в стрічці вашої переписки цього немає, а більше він ніде нічого не бере.

— А що взагалі в цей файл потрапляє? — Тьома подається ближче до монітора.

— Три речі. Перше — історія вашої розмови: усе, що ви тут наговорили в цій сесії. Друге — файли, які ти сам указав або які агент прочитав у процесі роботи. Третє — правила проєкту, вони підтягуються автоматично, але про це трохи пізніше — окремо. Ось і весь файл. Більше в ньому нічого немає.

Він дає Тьомі секунду переварити й додає:

— А тепер про «сліпого Сашка». Коли він «не побачив сусідній шматок коду» — це не примха. Просто того файла не було в стрічці повідомлень. Ти його явно не давав, сам агент його не відкривав — значить, в історії його немає, а отже для агента його не існує. Не можна врахувати те, чого перед тобою немає. Раніше ти думав: «ШІ знає мій репозиторій». А правда така: «Він знає тільки те, що зараз лежить у файлі-історії». Два різні всесвіти.

Тьома повільно киває. Щось клацає.

— Тобто він не гальмував. Я йому файл не дав, а він сам прочитати його не здогадався?

— Давай я тобі проведу маленький лікнеп про вміст цього файла з вашою перепискою. Його ще називають контекстом.

3. Заглянути у файл: команда /context

Льоха продовжує: — По-перше, ти завжди можеш подивитися, що вже є в цьому файлі. А по-друге, цим файлом можна керувати.

— Менше слів, більше діла, — недовірливо каже Тьома. — Покажи, що там у нас у цьому файлі просто зараз.

— Легко. Є команда. — Льоха друкує прямо в сесії:

/context

— Вона показує, чим забита стрічка: скільки місця зайнято і на що. Дивись.

На екрані зʼявляється розкладка:

❯ /context
  ⎿  Використання контексту
     ⛁ ⛁ ⛀ ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛁ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶   claude-opus (1M токенів)
     ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶   55.6k/1M токенів (6%)
     ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶
     ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶   За категоріями:
     ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶   ⛁ Системні інструкції: 3.9k
     ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶   ⛁ Правила проєкту: 6.7k
     ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶ ⛶   ⛁ Прочитані файли: 9.9k
                                           ⛁ Історія повідомлень: 22k
                                           ⛶ Вільно: 944k

  Прочитані файли (у вікні):
     pages/campaign/index.html
     assets/js/shell.js
     src/leaderboard.js

— Ось твій файл-історія як на долоні, — каже Льоха. — Кожен квадратик — шматочок місця. Зафарбовані — зайняті, порожні — вільні. Згори видно: зайнято 55 тисяч із мільйона, тобто шість відсотків. А нижче — на що пішло: системні інструкції, правила проєкту, прочитані файли, історія вашої розмови. А в самому низу — поіменно, які файли порталу він устиг прочитати і зараз тримає у вікні. Усе, що агент реально бачить, — ось тут. Нічого понад це в нього немає.

Тьома розглядає квадратики.

— Тобто ці відсотки — це скільки стрічки вже зайнято?

— Саме так. Файл не гумовий, у нього є межа — ось ці квадратики й є весь обсяг. Поки зайнято шість відсотків, місця хоч відбавляй. Але що довша розмова і що більше файлів подаси, то щільніше набивається.

— А тепер, — продовжує Льоха, — пошукай тут файл про нарахування нагород, reward-flow. Є він у списку прочитаних?

Тьома пробігає очима — і не знаходить.

— Немає його.

— От і воно. Його в стрічці немає. Тому якщо ти зараз попросиш «підправ нарахування балів» — агент гадатиме навмання, бо цього шматка не бачить. На маленькій іграшці таке майже не випливало: там увесь проєкт — два файли, він їх одразу хапав. А тут проєкт здоровенний, цілком у файл не лізе, і видно як на долоні: половини порталу перед агентом просто немає.

4. Покласти файл у стрічку: значок @

— І що, він так і буде сліпий? — Тьома вже розуміє, що ні, але все одно питає.

— Ні, звісно. Раз файла в стрічці немає — поклади його туди сам. Ось так:

Подивися @src/reward-flow.js і підправ нарахування балів.

— Значок @ перед іменем файла дописує цей файл прямо в стрічку, — пояснює Льоха. — Був невидимий — став видимим. Тепер агент його врахує, бо файл лежить у нього в історії. І вся «магія» випаровується: ти більше не чекаєш, що агент сам здогадається, — ти сам кладеш йому у файл те, що потрібно для задачі.

Тьома пробує сам — подає через @ той самий файл, який щойно не знаходився. Проганяє правку. І вперше агент не минає сусідній шматок — бо цей шматок тепер у стрічці. Для певності Тьома ще раз пише /context — і бачить reward-flow.js у списку прочитаного: потрапив куди треба.

— О, — Тьома відкидається. — Отже, Сашко й не гальмував жодного разу. Просто я йому очі не відкривав — не показував, куди дивитися.

— Ось ти й зрозумів головне на сьогодні. Не «чому він не здогадався», а «а я й не показав». — Льоха задоволений. — Хочеш, щоб агент врахував конкретний файл, — не сподівайся на телепатію. Подай його через @, попроси прочитати, опиши. Сам збирай перед ним стрічку.

5. Скинути вікно: /clear і /rewind

— А буває й навпаки, — додає Льоха. — Стрічка засмітилася старим із минулої задачі, агент тягне за собою зайве й плутається. Тоді можна завести чистий файл:

/clear

— Це не «видалити все», — уточнює він, помітивши тривогу на обличчі Тьоми. — Стара історія збережеться, до неї завжди можна повернутися. Просто перед агентом тепер чистий аркуш, порожня стрічка. Починаєш розмову заново.

І тут у Тьоми спливає давній спогад.

— Слухай, а памʼятаєш, я /rewind смикав, коли відкати розбирали? Так і не збагнув тоді, що саме відмотується.

— А тепер зрозумієш, — Льоха майже усміхається. — Відмотувалася саме ця стрічка. /rewind відрізає у файлі-історії хвіст — ніби ти відмотав стрічку назад, до того місця, де ще все було добре. Бачиш, ще один шматок пазла став на місце.

— Слухай, а він мене цим місяць бісив, — каже Тьома. — А це не баг був. Просто така межа: бачить стрічку, не підкинув йому файл — значить, його немає.

6. Власна карта зон проєкту

— І раз агент бачить лише стрічку ваших повідомлень, — продовжує Льоха, — найрозумніше, що ти можеш зробити з цим здоровим чужим порталом, — намалювати собі грубу карту. Своїми словами: що тут де. Не документація, не гарний README — особиста шпаргалка. Назвімо її для себе PROJECT_NOTE. Кинув її агенту через @ — і в нього в стрічці одразу не голі файли, а план місцевості.

— Дуже цікава думка. А що в неї писати? — чіпляється Тьома за незрозуміле.

— Не краса, а зони. Де вітрина, де нарахування нагород, де лідерборд, де бонусна гра, де партнерські шматки.

— А агенту вона навіщо? — кидає Тьома. — Я ж йому файли й так по запиту підкидаю.

Так вона не агенту, — хмикає Льоха. — Вона тобі. За годину сам забудеш, що тут несуче, а що крихке і куди лізти небезпечно.

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

# PROJECT_NOTE — launch-портал (моя карта зон)

ВІТРИНА — pages/ + assets/js/shell.js, assets/css/portal.css
    сторінки розділів, загальний каркас: шапка, навігація, обгортка сторінок.
    НЕСУЧЕ: зламаю — падає весь портал. Торкатися обережно.

REWARD-FLOW — src/reward-flow.js (+ data/rewards.json)
    нарахування нагород і балів. Ядро кампанії.
    НЕСУЧЕ: на ньому висить уся механіка призів.

LEADERBOARD — src/leaderboard.js
    таблиця лідерів. Читає бали з reward-flow.

BONUS-GAME — src/bonus-game/
    бонусна мінігра в «три в ряд» зі своїм рахунком і тестами. Живе окремо від решти.

PARTNER-ЗОНИ — src/partner/ (acme.js, globex.js)
    шматки партнерів. Чужий код, я в ньому ще не розбирався.
    НЕБЕЗПЕЧНО: навмання не чіпати — там свої правила, легко зламати чуже.

Збирання: npm run build. Тести: npm test.

Тьома перечитує свою карту — і до нього доходить, що він тримає в руках не просто нотатку.

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

— Ось тепер ти міркуєш як профі, — киває Льоха.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ