Перейти до вмісту
coden

Як працює ШІ-агент: мовна модель у циклі з інструментами

Цикл міркування – виклик інструмента – результат на справжньому завданні над статтями сайту, три підходи та їхня ціна в токенах, чому росте контекст, план і пам’ять, надійність довгих завдань із перевіркою і без неї, і чому агентові потрібне схвалення.

11 хвилин Matěj Žalmánek 2026-10-16

Серія Основи ШІ Частина 50 з 52
  1. Мапа штучного інтелекту: що є що і як усе це пов’язано
  2. Коротка історія штучного інтелекту: від Тюрінга до мовних моделей
  3. Дані, модель, тренування, інференс: основні поняття на одному прикладі
  4. Як читати математичний запис: символи, індекси, суми та квантори
  5. Множини й відношення: конструктор, з якого складаються означення в ШІ
  6. Функції й відображення: чому кожна модель у ШІ — це функція
  7. Логіка й доведення: правила, за якими міркують у ШІ
  8. Графи й дерева: структура, на якій тримаються пошук і нейронні мережі
  9. Лінійна алгебра для машинного навчання: вектори, матриці й чому ШІ передусім множить
  10. Похідні, градієнт і правило ланцюжка: як модель дізнається, у якому напрямку вчитися
  11. Градієнтний спуск: як навчається модель
  12. Що таке ймовірність: від кидка кубика до аксіом Колмогорова
  13. Умовна ймовірність і теорема Баєса: як змінити оцінку, коли дізнаєтеся щось нове
  14. Випадкова величина і функція розподілу: одна функція, яка каже про розподіл усе
  15. Функція щільності та функція маси ймовірності: чому неперервна величина має в точці ймовірність нуль
  16. Математичне сподівання, дисперсія і коваріація: де лежить розподіл, наскільки він широкий і що з чим пов’язано
  17. Огляд розподілів ймовірностей: Бернуллі, біноміальний, Пуассона, рівномірний, нормальний і експоненційний
  18. Закон великих чисел і центральна гранична теорема: чому середні поводяться так передбачувано
  19. Статистика й оцінювання параметрів: максимальна правдоподібність, MAP і довірчі інтервали
  20. Теорія інформації: ентропія, перехресна ентропія і KL-дивергенція — звідки беруться функції втрат
  21. Пошук у просторі станів: BFS, DFS, UCS і A* з анімаціями
  22. Ігри та суперник: мінімакс, альфа-бета відсікання і Monte Carlo tree search
  23. Задоволення обмежень: бектрекінг, поширення обмежень і AC-3 на судоку та мапі чеських країв
  24. Логіка й системи, засновані на знаннях: пряме і зворотне виведення, резолюція та експертні системи
  25. Планування: STRIPS, світ кубиків, евристики з релаксації та планування в AI-агентах
  26. Локальний пошук та імітація відпалу: комівояжер через обласні центри Чехії
  27. Генетичні алгоритми: популяція, схрещування, мутація і добір на рюкзаку для походу
  28. Еволюційні стратегії і генетичне програмування: від правила однієї п’ятої до закону Кеплера
  29. Оптимізація мурашиною колонією: як феромоновий слід знаходить короткий шлях
  30. Оптимізація роєм частинок: інерція, власний досвід і досвід рою
  31. Нейроеволюція: еволюція ваг і форми нейронних мереж та алгоритм NEAT
  32. Нечіткі множини й функції належності: як записати «трохи тепло»
  33. Нечітка логіка та ймовірність: чому «трохи тепло» не означає «імовірно тепло»
  34. Нечітка логіка: t-норми, імплікації та правила ЯКЩО–ТО
  35. Нечітке керування: Мамдані та Суґено від вентилятора до маятника на візку
  36. Нечітка кластеризація: алгоритм fuzzy c-means і точки між кластерами
  37. Нейро-нечіткі системи (ANFIS): нечіткі правила, які навчаються з даних
  38. Марковські ланцюги: матриця переходів, стаціонарний розподіл і PageRank
  39. Приховані марковські моделі: алгоритм Вітербі й нечесне казино
  40. Байєсівські мережі: чому трава мокра і що з цього випливає для дощувача
  41. Фільтр Калмана: як за неточними вимірюваннями оцінити, де авто і як швидко воно їде
  42. Види машинного навчання: з учителем, без учителя, з частковим залученням учителя та інші
  43. Промпти, контекст і RAG: як дати моделі правильну інформацію
  44. Варіаційні автокодувальники (VAE): нові зображення з неперервного латентного простору
  45. Генеративні змагальні мережі (GAN): фальшувальник проти детектива
  46. Дифузійні моделі: як із чистого шуму постає зображення
  47. Марковські процеси ухвалення рішень: стани, дії, винагороди й рівняння Беллмана
  48. Q-навчання і DQN: як навчитися цінності дій — від таблиці до нейронної мережі
  49. Policy gradient і PPO: навчання безпосередньо політики
  50. Як працює ШІ-агент: мовна модель у циклі з інструментами
  51. Програмування з AI-агентами: завдання, тести й перевірка
  52. Оцінювання і безпека систем ШІ: як вимірювати і як стежити

Повна програма серії Готово: 52 з 83 тем

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

Що варто знати заздалегідь: Промпти, контекст і RAG: як дати моделі правильну інформацію, Марковські процеси ухвалення рішень: стани, дії, винагороди й рівняння Беллмана

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

Продовжує частини Промпти, контекст і RAG, Токенізація і Марковські процеси прийняття рішень.

1. Модель у циклі

Означення — ШІ-агент

Агент — це програма, у якій мовна модель багаторазово (1) отримує завдання й дотеперішній перебіг, (2) вирішує, що далі — викликати інструмент чи відповісти, (3) обслуговувальна програма справді виконує інструмент і додає результат до контексту. Цикл закінчується, коли модель напише остаточну відповідь або вичерпається бюджет кроків. Чергування міркування й дії описали Шуньюй Яо та ін. (2022) під назвою ReAct (reason + act).

Простими словами

Тямущий колега на телефоні, який не бачить вашого комп’ютера. Він каже «відкрий папку src», ви читаєте йому, що там є, він каже «тепер файл server.js, рядки від 100 до 150» — і так далі, доки не матиме відповіді. Модель — це той колега, обслуговувальна програма — ваші руки й очі. Мовою навчання з підкріпленням: станом є дотеперішня розмова, дією — виклик інструмента.

vk = M(ck),   ck+1 = ck ⊕ vk ⊕ N(vk)

ck
контекст перед k-м викликом моделі: системний промпт, завдання і все, що досі сталося. Це весь «стан» агента — нічого іншого модель не пам’ятає
M
мовна модель; з контексту пише наступний крок. Єдина частина, яка «думає», і єдина, якій не можна повністю довіряти
vk
крок моделі: міркування й виклик інструмента або остаточна відповідь (тоді цикл закінчується)
N(vk)
результат інструмента, який обчислює обслуговувальна програма; додає до контексту те, чого модель сама знати не може (вміст файлу, вивід тестів)
⊕ — це додавання тексту в кінець. Це спрощена формалізація для цієї частини, а не запис зі статті про ReAct.
kontext = [системний промпт, опис інструментів, завдання]
for k = 1 … K_max:                       # бюджет кроків
    krok = model(kontext)                # читає ВЕСЬ контекст
    kontext += krok
    if krok — остаточна відповідь: return її
    if інструмент потребує згоди, а людина її не дала:
        kontext += "відхилено"; continue
    výsledek = proveď(krok.nástroj, krok.parametry)   # обслуговувальна програма
    kontext += výsledek
return "вичерпано бюджет кроків"

2. Інструменти

Означення — виклик інструментів (tool use, function calling)

До промпту вставляють опис інструментів: назву, для чого він і які має параметри (зазвичай як схему JSON). Модель донавчена так, щоб замість звичайного тексту вміла повернути структурований виклик, наприклад {"nastroj": "hledej", "text": "KL divergence"}. Обслуговувальна програма виклик перевіряє, виконує й повертає результат як наступне повідомлення. Модель сама нічого не запускає — лише пише, що треба запустити.

Простими словами

Меню й замовлення. Модель отримує меню («ось твої інструменти, і ось як їх замовляти») і пише замовлення саме в такому вигляді, який розуміє кухня. Готує кухня, а не гість. Тому кухні можна наказати, щоб деякі страви без згоди не видавала.

Наш агент працює над текстами 21 старішої статті цього сайту (тими самими, що й у частинах про токенізацію та RAG; вони чеською, тож і агент працює чеською) і має три інструменти. Увесь його системний промпт має 157 токенів:

Jsi agent, který odpovídá na otázky podle článků webu. Máš nástroje:
- seznam(): Vypíše články a jejich délku ve znacích.
- hledej(text, max): Najde výskyty textu ve všech článcích; vrátí článek, pozici a okolí.
- cti(clanek, od, do): Vrátí úsek článku od pozice do pozice (znaky).
V každém kroku napiš krátkou úvahu a zavolej jeden nástroj, nebo napiš konečnou odpověď s odkazem na článek. Když něco nenajdeš, zkus jiný dotaz.

Справжні інструменти агентів для програмування схожі: шукати у файлах, прочитати фрагмент файлу, змінити його, запустити команду в терміналі. Від 2024 року інструменти можна під’єднувати й через спільний протокол MCP (Model Context Protocol), тож той самий інструмент — базу даних, календар, браузер — може використовувати будь-який агент.

3. Одне питання, три підходи

Питання: «Чому KL-дивергенція не є відстанню? Наведи приклад зі статей.» (в оригіналі: «Proč KL divergence není vzdálenost? Uveď příklad z článků.»). Відповідь є в статті про теорію інформації: KL-дивергенція не симетрична, DKL(0,7 ‖ 0,5) = 0,119, але DKL(0,5 ‖ 0,7) = 0,126. Кроки агента ми записали вручну — замість моделі ми написали міркування й виклики. Але інструменти, їхні результати й токени — справжні.

Приклад — чому DKL(0,7 ‖ 0,5) ≠ DKL(0,5 ‖ 0,7)

Для двох розподілів так/ні (дощ з імовірністю p, модель каже q) маємо DKL(p ‖ q) = p log2(p/q) + (1 − p) log2((1 − p)/(1 − q)) біт.

DKL(0,7 ‖ 0,5) = 0,7 · log2 1,4 + 0,3 · log2 0,6 = 0,340 − 0,221 = 0,119.

DKL(0,5 ‖ 0,7) = 0,5 · log2(5/7) + 0,5 · log2(5/3) = −0,243 + 0,368 = 0,126.

Щоразу усереднюють за іншим розподілом (за тим, який є дійсністю), тому перестановка аргументів дає інше число — а відстань (метрика) мусить бути симетричною. Це і є відповідь, яку шукає агент.

Підхід 1: шукай і читай фрагмент
  1. Шукаю точно слова з питання.

    hledej(text: "KL divergence není metrika")
    nic nenalezeno
    +34 токенів, контекст 209
  2. Нічого. Спробую лише назву поняття.

    hledej(text: "KL divergence")
    5 výskytů:
    informace:3258: … minimum je tam, kde model říká pravdu. KL divergence Definice — Kullbackova–Leiblerova diver…
    informace:3656: …,222 bitu. Podle Gibbsovy nerovnosti je KL divergence vždy nezáporná a nulová jen pro q = p .…
    informace:3717: …záporná  … (ще 310 символів)
    +205 токенів, контекст 414
  3. Це в статті informace. Прочитаю околицю.

    cti(clanek: "informace", od: 3660, do: 3960)
    ivergence vždy nezáporná a nulová jen pro q = p . Pozor, KL divergence není vzdálenost: není symetrická. D KL (0,7 ‖ 0,5) = 0,119, ale D KL (0,5 ‖ 0,7) = 0,126. Záleží na tom, co je skutečnost a co model. Informační zisk Definice — podmíněná entropie H ( Y | X … (ще 40 символів)
    +146 токенів, контекст 560

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

Підхід 2: читай статті одну за одною
  1. Не знаю, де це. Пройду статті одну за одною.

    cti(clanek: "co-je-pravdepodobnost")
    Jazykový model nevybírá další slovo, ale pravděpodobnosti všech slov. Klasifikátor neříká „je to kočka“, ale „s pravděpodobností 0,93 je to kočka“. Celé strojov … (ще 7 175 символів)
    +1 933 токенів, контекст 2 108
  2. Тут цього немає, наступна стаття.

    cti(clanek: "csp")
    Rozvrh hodin, ve kterém žádný učitel neučí dvě třídy naráz. Sudoku. Rozmístění součástek na desce, směny v nemocnici, přidělení letadel k branám. Všechny tyhle  … (ще 11 914 символів)
    +3 148 токенів, контекст 5 256
  3. … ще 8 кроків так само (контекст наприкінці 24 927 токенів)

Агент без пошуку проходить статті в алфавітному порядку. На відповідь натрапляє лише в 10-й статті, а контекст тим часом зростає до 24 927 токенів.

І третій підхід, одноразовий RAG з минулої частини: знайти три найподібніші фрагменти й вставити їх у промпт. Усі три фрагменти походять із правильної статті (informace, informace, informace), але жоден не містить прикладу з числами 0,119 і 0,126 — відповідь була б без прикладу. Агент у циклі може сказати собі «цього замало, читаю далі». Одноразовий пошук — ні.

4. Контекст дорогий

Означення — ціна циклу

Модель не має пам’яті між викликами; на кожному кроці вона знову читає весь контекст — системний промпт, завдання і всі дотеперішні кроки та результати інструментів. Якщо ck — довжина контексту перед k-м викликом, модель загалом обробляє ∑k ck токенів. Оскільки контекст із кожним кроком росте, загальна ціна росте приблизно з квадратом кількості кроків.

Простими словами

Наче перед кожним реченням листа вам доводилося б перечитувати весь лист від початку. Короткий лист — не біда. Довгий лист, до якого ви ще й вклеїли десять прочитаних книжок, дорогий — і серед усіх тих сторінок легко губиться головне.

102103104105106 читай усе 141 820 шукай, читай уривок 1 358 одноразовий RAG 647 оброблені токени (кількість, лог. шкала) підхід (варіант)
Скільки токенів модель обробляє загалом (логарифмічно)

Підхід «читай усе» коштує 141 820 оброблених токенів, «шукай і читай фрагмент» — лише 1 358, тобто в 104 разів менше, і за ту саму відповідь. Тому добрі агенти для програмування спершу шукають (grep) і читають лише шматки файлів. І тому довгу сесію час від часу ущільнюють: старішу частину розмови замінюють підсумком, щоб контекст вмістився і модель у ньому не губилася. Допомагає й кешування початку промпту (prompt caching), завдяки якому повторне читання того самого початку обходиться дешевше.

Z = ∑k=1K ck,   ck = c1 + ∑j<k (vj + oj)

Z
загалом оброблені токени — те, за що платять і на що чекають
K
кількість викликів моделі (кроки з інструментом + остаточна відповідь); кожен виклик читає контекст знову від початку
c1
системний промпт і завдання; вони в контексті від першого виклику, тож за них платять K разів — тому варто мати їх короткими й кешувати
vj + oj
токени, які додав крок j: виклик і результат інструмента. Крок j читається в усіх пізніших викликах, тому за довгий результат інструмента платять багато разів
Ціна одного кроку залежить не лише від того, що крок поверне, а й від того, скільки кроків після нього ще буде.
Теорема — ціна росте з квадратом кількості кроків

Якщо кожен крок додає однаково d токенів, то ck = c1 + (k − 1) d і

Z = K c1 + d · K(K − 1) / 2.

Доведення: ∑k=1K (k − 1) = 0 + 1 + … + (K − 1) = K(K − 1) / 2. ∎ Для великого K переважає другий член ≈ d K² / 2: удвічі довша сесія коштує приблизно вчетверо більше.

Приклад — перерахунок обох підходів

Шукай і читай фрагмент. Системний промпт має 157 токенів, питання 18, отже c1 = 175. Після трьох кроків контекст має 209, 414, 560 токенів. Чотири виклики моделі читають Z = 175 + 209 + 414 + 560 = 1 358 токенів.

Читай усе. K = 11 викликів, контекст зростає з 175 до 24 927 токенів, у середньому на d = (24 927 − 175) / 10 ≈ 2 475 за крок. За теоремою Z ≈ 11 · 175 + 2 475 · 11 · 10 / 2 = 138 050; насправді 141 820 (статті мають різну довжину, тож кроки додають не зовсім однаково). Системний промпт із питанням становить із цього лише 1 925 токенів — майже все інше є повторним читанням статей.

5. План і пам’ять

Означення — планування й пам’ять агента

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

Простими словами

Майстер на довшому замовленні пише собі список на папері, а ввечері записує в зошит, що з’ясував, — уранці йому не треба все пам’ятати, досить відкрити зошит. На допоміжну роботу він посилає учня й хоче від нього лише «готово, це було тут».

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

6. Довгі завдання й перевірка

Агент, який робить правильний крок у 90 % випадків, здається надійним. Але завдання складається з багатьох кроків, і помилка в будь-якому з них його псує. Якщо крок вдається з імовірністю p, то все завдання з n кроків вдається з імовірністю pn — якщо агент не розпізнає помилок.

Означення — замкнений цикл зі зворотним зв’язком

Після кроку агент перевіряє результат (запускає тести, читає вивід команди, порівнює з очікуваним). Якщо він розпізнає помилку з імовірністю d і може повторити крок до r разів, то успішність кроку q = p ∑k=0r ((1 − p) d)k, а всього завдання — qn.

Простими словами

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

q = p ∑k=0r ((1 − p) d)k = p + p (1 − p) d + p ((1 − p) d)² + …

p
спроба вдається; кожен доданок закінчується рівно однією вдалою спробою
1 − p
спроба не вдається; кожна невдача перед успіхом коштує один такий множник
d
перевірка розпізнає невдачу; лише тоді агент повторює крок — нерозпізнана помилка проходить далі й псує завдання
∑k=0r, k
k = скільки спроб не вдалося, перш ніж одна вийшла; щонайбільше r повторень, щоб агент не пробував безкінечно
Успішність кроку з перевіркою; усе завдання з n незалежних кроків вдається з імовірністю qn. Без перевірки d = 0 і лишається q = p.
0 %25 %50 %75 %100 % 020406080100 довжина завдання n (кількість кроків) успішність завдання (%)
Успішність завдання залежно від кількості кроків (перевірка розпізнає 90 % помилок, щонайбільше дві повторні спроби) крок вдається у 90 % крок вдається у 99 % суцільна з перевіркою, пунктирна без

З p = 0,9 і двадцятьма кроками без перевірки вдається лише 12 % завдань, з перевіркою 79 %. Симуляція 20 000 завдань дає 12 % і 79 %, формула сходиться. Навіть дуже добрий крок (p = 0,99) на сотні кроків без перевірки частіше зазнає невдачі, ніж вдається (37 %); з перевіркою вдається в 90 %. Це головна причина, чому агенти для програмування працюють так добре: код можна запустити й протестувати, тож майже кожен крок має зворотний зв’язок. Організація METR (2025) вимірює, що довжина завдань, із якими агенти справляються в половині випадків, подвоюється приблизно кожні сім місяців.

Приклад — p = 0,9, d = 0,9, r = 2, двадцять кроків

Успішність кроку: q = 0,9 + 0,9 · 0,1 · 0,9 + 0,9 · (0,1 · 0,9)² = 0,9 + 0,081 + 0,00729 = 0,98829.

Усе завдання: без перевірки 0,920 = 0,122, з перевіркою 0,9882920 = 0,790. Крок покращився лише з 90 % до 98,8 %, а завдання — з 12 % до 79 %: степінь n роздуває малі відмінності в кроці.

Означення — довжина завдання, з яким агент справляється в половині випадків

Це найбільше n, для якого qn ≥ 1/2, тобто n½ = ln 0,5 / ln q ≈ 0,69 / (1 − q) для q, близького до 1.

У нашій моделі: p = 0,9 без перевірки 6,6 кроку, з перевіркою 58,8; p = 0,99 без перевірки 69,0, з перевіркою 686. Завдання, з яким агент справляється наполовину, подовжується приблизно пропорційно тому, у скільки разів знижується частота помилок кроку 1 − q.

Ту саму величину (довжину завдання, з яким агент справляється в 50 % випадків) вимірює METR — тільки не в кроках, а в часі, якого завдання забрало б у людини (Thomas Kwa та ін., Measuring AI Ability to Complete Long Tasks, 2025). Наша формула — спрощена модель із незалежними кроками, а не їхній метод.

7. Дозволи й нагляд

Агент, якому дозволено запускати команди, може й шкодити — помилково (видалить не ту папку) або за вказівкою, яку прочитав у чужому тексті (prompt injection). Захист тримається не на моделі, а на обслуговувальній програмі: інструменти з обмеженими правами, робота в ізольованому середовищі, а головне — схвалення: небезпечні або незворотні кроки виконуються лише після згоди людини. На цьому тримається і coden: агент працює на вашому комп’ютері, а ви схвалюєте його кроки з телефона.

8. Підсумок

  • Агент = мовна модель у циклі: міркування, виклик інструмента, результат у контекст, знову.
  • Модель лише описує інструменти структурованим викликом; запускає їх обслуговувальна програма, яка може примусово застосовувати правила.
  • Цикл уміє виправити невдалий пошук — одноразовий RAG ні.
  • Кожен виклик читає весь контекст: «читай усе» коштувало 141 820 токенів, «шукай і читай фрагмент» — 1 358.
  • План, нотатки у файлах і субагенти тримають контекст малим і зрозумілим.
  • Без перевірки успішність падає з довжиною завдання як pn; тести й перевірка це змінюють (20 кроків при p = 0,9: 12 % → 79 %).

Хочете спробувати самі? Попросіть ШІ-агента описати вам кожен виклик інструмента, який він зробить під час завдання, а наприкінці оцінити, скільки токенів йому коштувало завдання. Потім дайте йому те саме завдання з вказівкою «спершу шукай, читай лише фрагменти».

Маєте іншу думку? Напишіть на support@coden-app.com.

Агент на вашому комп’ютері, керований з телефона