Асистент цитує документацію, а не переказує її
Асистент гаманця відповідає на запитання про мережу та про сам гаманець англійською, російською та українською. Він побудований інакше, ніж більшість подібних асистентів, і різниця видна вже на першому незручному запитанні.
Проблема була в переказі
Звичайний підхід — дати моделі знайдений фрагмент і попросити пояснити. З цього ми й почали. Модель
на 1,7 мільярда параметрів переказувала жваво й упевнено: назвала .agent платним ім'ям для
мультипідписної скарбниці, хоча це .vault, і поділила адреси на відкриті й закриті — таких видів
не існує.
Жодна метрика цього не помітила. Планка, яку ми перевіряли, стежила за відсутністю певних заборонених слів, а не за тим, чи правдиві речення, — а впевнене, гладке, хибне речення не містить жодного забороненого слова.
Тож модель перестала писати відповіді. Тепер вона робить єдине, у чому не може помилитися нам на користь: називає, який зі знайдених фрагментів відповідає на запитання, або каже, що жоден. Вибирати — не те саме, що складати. Вибрати можна лише з уже написаного; вигадці немає з чим звірятися.
Цифри ніколи не проходять через модель
Баланс, комісія, мінімальний стейк, скільки ви надіслали й отримали — кожне значення надходить від вузла вже обчисленим і підставляється у фіксоване речення. Модель не бачить числа й не пише його.
Ми свідомо не підсумовуємо перекази всередині асистента. Друга грошова арифметика поруч із власною арифметикою мережі рано чи пізно з нею розійдеться, і того дня ніщо про це не сповістить. Натомість підсумки отримали власний ендпоінт вузла, і він виключає службові маркери так само, як список транзакцій: цифру і список читає одна людина, тож вони мають збігатися.
Відмови — це правила, а не настрій моделі. Прохання підписати переказ відхиляється щоразу, а не майже щоразу.
Він знає гаманець екран за екраном
Запитайте, що робить кнопка Send, для чого вкладка Recovery, чому переказ стоїть у held або чи
може будь-хто зареєструвати ШІ-модель, — відповідь береться із запису, написаного для цього екрана,
тією мовою, якою ви запитали.
Опис кнопки псується першим. Кнопку перейменовують, переносять або прибирають, а текст переживає її і впевнено бреше. Тому кожен запис називає маршрут, який описує, а два тести тримають обидві сторони разом: запис має вказувати на маршрут, що справді є в застосунку, і кожен екран має мати хоча б один запис. Перейменована вкладка ламає збірку; нова не потрапить у реліз без опису.
Наскільки це потрібно, видно з нашого власного репозиторію. Там місяцями лежала тека знань з описом консенсусу, який ми замінили навесні; її не читав жоден код і ніхто не помічав, бо не було з чим її звірити.
Що скасувало вимірювання
План передбачав, що асистент перепитуватиме, яке з двох тлумачень ви мали на увазі, коли найкращі кандидати отримують близькі оцінки. Ми це виміряли й відмовилися від ідеї.
Правильний вибір може мати відрив 0,014. Хибний — 0,093. Розподіли повністю перекриваються, і жоден поріг їх не розділяє. Гірше того, найвпевненіші помилки трапляються там, де правильного інструмента взагалі немає, — і жоден відрив цього ніколи не впіймає. На практиці ця функція перетворювала правильні відповіді на запитання.
Вимірювальний інструмент потребував не меншого ремонту, ніж те, що він вимірював. Він штрафував українську за дослівний збіг із російською в короткому шаблоні, хоча один рядок не може належати лише одній із двох мов. Він оцінював відповіді з бази знань так, ніби від них належався шаблон. І непомітно скочувався до вгадування щоразу, коли не вдавався потрібний йому імпорт, бо помилку ковтали. Інструмент, що помиляється на вашу користь, гірший, ніж жодного.
Де ми зараз
На живому вузлі, сорок п'ять запитань трьома мовами: відмови за правилом — 100%, цифри за шаблоном — 100%, мова відповіді — 100% у кожній із трьох, вигадок — нуль, маршрутизація — 100%.
Більшість відповідей займає частку секунди, бо в більшості випадків модель узагалі не запускається.