Тестът, който не работи тук
Обичайният модулен тест сравнява резултат с очаквана стойност. При езиков модел това е безсмислено — един и същ вход дава различен текст, а и добрият отговор може да е формулиран по десет начина.
| Обикновен код | Система с модел | |
|---|---|---|
| Изход | един и същ | различен всеки път |
| Проверка | равенство | свойства на отговора |
| Провал | еднозначен | понякога граничен |
| Скорост | милисекунди | секунди и пари |
Разделете двете
Логиката около модела (търсене, права, лимити, запис, разчитане) е обикновен код и се тества обикновено. Само самият отговор изисква друг подход.
Фалшив модел
Фалшив клиент (fake / stub)
Заместител на клиента към модела, който връща предварително зададен отговор, без да излиза в мрежата.
С него се тества цялата верига без цена и без несигурност: правилно ли е сглобен промптът, записва ли се разговорът, обработват ли се грешките, спазва ли се лимитът.
- Фалшив клиент, който връща фиксиран текст → тества се потокът.
- Фалшив клиент, който хвърля 429 → тества се повторният опит.
- Фалшив клиент, който връща невалиден JSON → тества се проверката.
- Фалшив клиент, който се бави 40 секунди → тества се таймаутът.
Оттук идва слоят от урок 15
Ако извикванията са разпръснати из целия проект, фалшив клиент не може да се вмъкне. Отделеният слой прави тестването възможно.
Проверки по свойства
За самия отговор не проверяваме текста, а неговите свойства:
| Свойство | Проверка | Надеждност |
|---|---|---|
| Съдържа ключова стойност | „7:45“ е в отговора | висока |
| Валиден формат | разчита се като JSON по схема | висока |
| Признава незнание | съдържа договорената фраза | висока |
| Посочен източник | има цитат в квадратни скоби | висока |
| Дължина и език | под 200 думи, на български | висока |
| Не съдържа забранено | няма лични данни, няма обидни думи | средна |
| Основано на текста | оценка от модел-съдия | средна |
Праг вместо равенство
Тестът за качество не е „минава / не минава“ за един въпрос, а дял минали за целия набор: „поне 17 от 20“. Отделен въпрос може да се провали случайно; спад на целия набор е сигнал.
Златен набор
Златен набор
Фиксиран списък от входове с приети отговори или свойства, който не се променя, докато настройвате системата.
- 20–50 реални случая, включително гранични и такива без отговор.
- За всеки — проверка, която може да се изпълни автоматично.
- Пуска се преди всяка промяна и след нея.
- Резултатът се записва с дата, версия на промпта и версия на модела.
- Спад под договорения праг спира промяната.
Температурата при тестване
За тестовете температурата се сваля до 0. Останалата разлика между пусканията идва от самата услуга и е добре да се вижда — пуснете набора три пъти и вижте разсейването, преди да обявите праг.
Цената на тестовете
- Тестовете с фалшив модел са безплатни и бързи — те са мнозинството.
- Тестовете с истински модел струват пари и се пускат по-рядко: преди пускане в употреба, не при всяко записване на файл.
- Кеширайте отговорите на златния набор, за да сравнявате без ново извикване.