Тема
Хід агента
Цю сторінку можна не читати, поки помічник робить те, що треба. Хід — це серце агента, і чіпати його варто лише тоді, коли задачу не розв’язати ані знаннями, ані діями, ані характером.
Що це таке
Хід — це кроки, з яких складається одна робота агента: від питання клієнта до відповіді.
У звичайного помічника крок один: подумав — відповів. Але кроків може бути кілька, і саме форма ходу відрізняє «бот, який відповідає» від «бот, який відповідає й перевіряє себе».
Кроки бувають трьох видів:
- звернення до моделі — власне «подумати». Таких кроків може бути скільки завгодно, кожен зі своїм завданням;
- запит без моделі — просто сходити в чужу систему по дані;
- скрипт без моделі — зробити роботу за правилом: порахувати, обробити дані, попрацювати з репозиторієм. Докладно — нижче.
Кроки можна робити умовними («нового немає — не чіпай модель»), а ті, що не залежать один від одного, виконуються одночасно.
Готові форми
Створюючи агента, конструктор бере одну з готових заготовок — вона дає і характер, і форму ходу:
| Заготовка | Форма | Кому |
|---|---|---|
| Помічник на сайті | один крок: відповідає сам, кличе дії, коли треба | більшості |
| Відповідь із перевіркою | два кроки: один складає відповідь, другий її перечитує | там, де ціна помилки висока |
| Фоновий працівник | один крок, без співрозмовника: результат кладе дією | для роботи за розкладом |
Заготовка не дає знань, дій і ключів — вони в кожного свої, і їх додає конструктор у розмові. Він скаже вголос, чого бракує, одразу після створення агента.
Коли варто змінити хід
Реалістичний випадок один: агент обіцяє зайве. Тоді допомагає другий крок-перевіряльник — він викидає з відповіді все, чого немає у знаннях.
Хай перед відповіддю перечитує себе й прибирає все, чого немає в матеріалах
Це коштує дорожче — і вам скажуть наперед
Кожен зайвий крок із моделлю — це ще одне звернення до моделі. Перед зміною конструктор покаже й що саме зміниться, і скільки це коштуватиме:
Цей граф — до 2 звернень до моделі на хід і приблизно до 40 с.
Тобто розмова стає приблизно вдвічі дорожчою. Ви бачите це до того, як сказали «так».
Окремо конструктор попередить, якщо задумане не встигне відповісти живому відвідувачу: у чаті стільки не чекають, і такій роботі місце в розкладі.
Що вміє крок-скрипт
Скрипт — це не лише «порахувати». Крок виконується в окремому середовищі, яке платформа піднімає на час ходу й гасить після нього, тож у ньому можна робити роботу, а не тільки арифметику.
| Що | Як це виглядає для вас |
|---|---|
| обробити дані | зібрати, порахувати, перевести формат — усе, що незручно просити в моделі |
| попрацювати з репозиторієм | назвіть адресу — платформа розгорне його в робочий каталог перед запуском |
| опублікувати результат | назвіть гілку — зроблене поїде туди після успішного запуску |
| віддати файл співрозмовнику | звіт, таблиця, зображення, архів приходять у розмову посиланням |
Хай щоночі бере наш репозиторій, збирає звіт про залежності й кладе його в гілку reports
Ключів до репозиторію в вас не питають
Доступ до репозиторію дає платформа, а не ви: жоден токен у середовище виконання не потрапляє, тож скрипт не може його прочитати. Якщо конструктор просить вас принести ключ від стороннього сервісу для цього — це помилка, скажіть йому про неї.
Межі, які варто знати наперед:
- середовище живе рівно один хід. Файл, створений цього разу, наступного разу вже немає — те, що має зберегтися, кладіть у репозиторій або віддавайте файлом;
- інтернет у ньому обмежений. Доступні сховища пакетів і репозиторії, а не будь-яка адреса;
- опубліковано буде лише те, що відпрацювало. Скрипт упав — у репозиторій не поїде нічого, і ви про це дізнаєтесь. Половина роботи під виглядом готової гірша за чесну поламку;
- один крок має стелю часу — типово дві хвилини. Довше можна попросити, але не понад п’ять. Не встиг — його спиняють, і про це скажуть прямо: «не встиг» і «зламався» — різні відповіді, і лікують їх по-різному;
- увесь фоновий хід — за розкладом чи тригером — має стелю п’ять хвилин. Кроки всередині нього ділять цей час між собою: довгий скрипт лишає менше решті ходу;
- файл, який агент віддає, — до 25 МіБ. Більший не піде взагалі, а не поїде обрізаним: побитий файл із упевненим «готово» гірший за відмову.
Файл може отримати не тільки ви
Це та сама здатність: агент кладе зроблений файл у розмову посиланням — байдуже, розмовляє він із вами чи з вашим клієнтом. Готовий рахунок, добірка, вивантаження за запитом.
Файли, які ви завантажили заздалегідь, — це інше й лежить окремо. Див. Що агент знає.
Зробити те саме з кожним
Найчастіша форма роботи, яку не опишеш одним кроком: «знайди все нове й обробі кожне».
Щодня шукай нові оголошення по моїх критеріях і оціни кожне окремо
Крок, позначений як перебірний, виконується один раз на елемент переліку — і це робить платформа, а не модель. Різниця в тому, що модель на сотому елементі вже не памʼятає першого, а платформа рахує: у журналі ходу стоїть «оброблено 137 із 137», а не «зроблено».
Що варто знати:
- до 200 елементів за раз. Більше — відмова з підказкою звузити вибірку, а не мовчазне обрізання: «оброблено все» про третину роботи гірше за чесне «забагато»;
- по чотири одночасно. Кожен елемент, який іде до моделі, — це окреме звернення й окремі кредити;
- поламка одного елемента видна окремо. «Оброблено 340, з них 7 із помилкою» — а не «сталася помилка»;
- джерело переліку — і записник. Перебирати можна не лише вихід сусіднього кроку, а й картки, які агент назбирав раніше:
records:listing?status=нове. Так робота на тисячу елементів іде порціями по 100 — кожен запуск бере до ста карток, які ще не оброблені, якщо крок міняє стан картки (Що агент зібрав); - недороблене чутно. Якщо хід скінчився раніше, ніж перелік, це поламка в панелі, а не рядок у трасі: інакше вузол, що підсумовує, звітував би «оброблено все» про третину роботи.
Спитати вас і продовжити
Є рішення, які агент не бере на себе: брати обʼєкт чи ні, який із варіантів обрати, давати знижку. Для них у нього є третій спосіб звернутись до вас — окрім «дозволь дію» і «сповісти»:
Якщо не певен, чи обʼєкт вартий уваги, — спитай мене й чекай
Агент ставить питання, робить те, що від відповіді не залежить, і закінчує хід — він не висить, чекаючи. Ви бачите питання в панелі («Питає») і в сповіщенні, відповідаєте під самим питанням, словами конструктору («скажи йому: так, бери»), Reply на повідомлення в Telegram або просто відповіддю на лист, якщо в агента підключена пошта, — і агент продовжує окремим ходом, з вашою відповіддю на вході.
Він прокинеться без памʼяті тієї розмови, тому разом із питанням він записує, що збирався робити з відповіддю. Це видно поруч із питанням.
Питання протухає за тиждень
Відповідь через місяць — відповідь на те, чого вже немає. Протерміноване питання видно окремо, як «не дочекався», і про нього приходить сповіщення: ця робота стояла тиждень.
Повернутись до цього пізніше
Агент може відкласти разову роботу й повернутись до неї сам:
Опублікуй пост, а через добу зніми з нього метрики й скажи, що вийшло
Це не розклад: розклад будить агента щоразу, а тут він повертається один раз і до конкретного предмета. Саме цим агент починає бачити результат власної роботи — а не просто робити її.
У панелі це рядок Відкладено. Кожне відкладення можна подивитись і скасувати: там видно, що саме агент зробить і коли.
Відповідь повертається туди, де її пообіцяли: якщо агент сказав це відвідувачу в чаті, за добу він напише саме йому, а не вам у сповіщення. Обіцянка, дана в розмові, у ній і виконується.
Якщо платформа не прокинулась вчасно
Прострочена робота не виконується й позначається окремо. «Нагадай сьогодні до 18:00», виконане о третій ночі, гірше за невиконане — тож ми показуємо це як нашу поламку, а не як зроблене.
Такий рядок не глухий кут: поруч стоїть Повторити, і робота ставиться заново словами самого агента — не переказаними вашими. У панелі це окремий рядок Не сталося.
Зміна ходу завжди питає
Це одна зі змін, які клієнти побачать одразу. Конструктор:
- подивиться, як хід влаштований зараз;
- скаже словами, що додасть, що прибере, що переставить;
- дочекається виразного «так»;
- і лише тоді змінить.
Передумали після — скажіть «скасуй», і хід повернеться як був.
Якщо стало гірше
Поверни хід як був
Поверни агента до того, як було вчора
Точки повернення знімаються самі перед кожною розмовою, у якій щось міняється. Див. Якщо вийшло не те.
Далі
- Якщо вийшло не те — скасування й точки повернення.
- Скільки це коштує — за що списуються кредити.
Репетиція: перевірити без наслідків
Після того як ви змінили дії чи характер, найкраща перевірка — справжнє питання клієнта. Але справжнє питання проти агента з дією «оформити замовлення» означало б справжнє замовлення. Тому є репетиція: скажіть конструктору «покажи, що б ти зробив на «хочу дві піци»».
Агент відповість по-справжньому — з тими самими знаннями й тим самим характером, — а кожну дію назовні запише замість виконати: замовлення не оформиться, лист не піде, картка не запишеться, оператор не покличеться. Ви побачите і відповідь, і перелік «зробив би» з аргументами — саме дії ви й хотіли побачити.
Три речі, які варто знати:
- сліду немає: репетиція не потрапляє в історію розмов, у кеш відповідей і в памʼять про людей; наступний справжній клієнт її не побачить;
- читання справжні: знання, пошук в інтернеті й картки на читання працюють як завжди — інакше відповідь не була б відповіддю агента;
- хід платний: модель відповідає по-справжньому, тож репетиція коштує стільки ж, скільки одна розмова, і видна в журналі ходів як «репетиція».
І те саме для розкладу
Фоновий агент — той, кому репетиція потрібна найбільше. Він діє без людини поруч: коли о 9:00 він розішле двісті листів, дивитись на це буде нікому, а дізнатись заздалегідь, що саме він зробить, можна було лише дочекавшись девʼятої.
покажи, що зробить ранкове зведення
Агент пройде свій хід задачею цього розкладу — по-справжньому, від вашого імені, — а дії запише. Памʼять агента при цьому не зсувається: інакше наступний справжній запуск пропустив би роботу, якої ніхто не робив.
Робіть це щоразу після створення чи зміни розкладу. Конструктор і сам запропонує.
Через API — POST /v1/dashboard/bots/{id}/rehearse з {"message": "…"} для розмови або {"trigger_id": "…"} для розкладу; у відповіді answer і would_do.