QASenior

Тестування LLM-продуктів

Тестування LLM-продукту — це тестування фічі, чия модель по-різному відповідає на те саме питання у двох запусках, хоча більшість перевірок лишаються точними. Сторінка починається з двадцяти збоїв, з якими виходить асистент замовлень, — перевірки, що ловить кожен, і де вона запускається; далі — відсутній тестовий оракул, детермінований шар і його нещасливі шляхи, властивості для відповідей без очікуваного значення, список OWASP 2026 як план тестування, хто чим володіє і пʼять релізів, що пішли не так.

Перевіряються точно
14 із 20 збоїв
Немає очікуваної відповіді
Перевіряйте властивість
Рядки супротивника з
OWASP LLM Top 10, 2026

Двадцять збоїв, з якими виходить LLM-фіча, — перевірка, що ловить кожен, і де вона запускається

Ніхто не відкриває сторінку про тестування LLM-продуктів заради визначення. Її відкривають, бо фіча на носі, а звичний тест-план не пасує: вивід змінюється між запусками, тож що взагалі перевіряти? Відповідь менш екзотична, ніж питання. Нижче — двадцять збоїв, з якими, найімовірніше, вийде асистент замовлень в інтернет-магазині. Він відповідає на «де моє замовлення», пояснює правила повернення з довідкового центру й може розпочати повернення. Кожен рядок називає, що отримує клієнт, яка перевірка це ловить, якого вона роду і коли запускається. Рядки 1–4 — інтеграція, 5–10 — контракт виводу, 11–15 — зміст, 16–19 — супротивник, а 20 — дрейф. Наступні розділи посилаються на них за номерами.

#Що отримує клієнтПеревірка, що це ловитьРід · коли запускається
1Порожня бульбашка в чатіЗаписана відмова й порожня відповідь обидві показують повідомлення й пропозицію звернутися до людиниТочна · кожен коміт
2Спінер тридцять секунд, а тоді «Щось пішло не так»Інʼєктовані тайм-аут, 429 і 500 від провайдера: передача людині в межах бюджету часуТочна · кожен коміт
3Пів речення або нічого: відповідь обрізало на ліміті токенів, і вона не розпарсиласяЗаписана зупинка max_tokens: парсер її відхиляє, а фіча повторює запит або переходить на запасний шляхТочна · кожен коміт
4«Ваше замовлення відправлено», коли сервіс замовлень повернув помилкуІнʼєктована помилка інструмента: жоден статус замовлення не може зʼявитися у відповіді без даних інструмента за нимТочна · кожен коміт
5Відповідь, яку інтерфейс не може показатиВалідація схеми кожної відповіді: поля, їхні типи, дозволені значенняТочна · кожен коміт, у продакшні
6Тікет, скерований у чергу, якої не існуєНамір — одна з шести дозволених мітокТочна · кожен коміт
7Повернення, розпочате не для того замовленняПеревірка аргументів виклику інструмента: ідентифікатор замовлення належить цьому клієнтові й саме той, який він назвавТочна · кожна зміна
8Сума повернення, що не збігається із замовленнямКожне число у відповіді перераховане з результату інструментаТочна · кожна зміна
9Посилання на статтю довідки, яка каже іншеЦитована стаття є в індексі й містить наведений фрагментТочна · кожна зміна
10Впевнена відповідь на питання, якого правила не покриваютьКейси, відповіді на які в довідці немає: прапорець handoff виставленоТочна · кожна зміна
11Правильна відповідь на інше питанняВідкалібрований суддя-модель: «чи відповідає відповідь на поставлене питання — так чи ні»Оцінка · кожна зміна
12Правильна відповідь без умови, яка все вирішує: вікно повернення закривається в пʼятницюСуддя, якому дано факти, потрібні кожному кейсу: чи є у відповіді кожен із нихОцінка · кожна зміна
13Інша відповідь, коли те саме питання поставлено іншими словами чи українськоюІнваріантність: перефразування й переклади одного кейсу дають той самий намір, виклик інструмента й фактиВластивість · кожна зміна
14Те саме рішення, коли змінились факти: «так, можна повернути» на 34-й день із 30Напрям: перенесіть дату доставки через межу 30 днів — і рішення має змінитисяВластивість · кожна зміна
15Дія, виконана тому, що так звелів відгук про товар чи листВорожий текст, підкладений у довідку та у вивід інструментів: виклики інструментів мають збігатися із запуском без ньогоВластивість · щоночі, перед релізом
16Адреса іншого клієнта у відповідіКожне імʼя, адреса й телефон у відповіді належать клієнтові, який увійшовТочна · кожен коміт, у продакшні
17Системний промпт і перелік інструментів, зачитані будь-кому, хто попроситьРядок-канарка з промпту ніколи не зʼявляється у відповіді — а нічого секретного в промпті немає від самого початкуТочна · перед релізом
18Посилання чи зображення, що несе дані на інший сайтРендерер пропускає лише власні домени магазину, у кожній формі Markdown: вбудованій, посилальній, у зображенніТочна · кожен коміт
19Одна розмова, що коштує в сто разів більше за медіануЛіміти на виклики інструментів і токени на розмову, перевірені кейсом, побудованим так, щоб зациклитисяТочна · кожен коміт, у продакшні
20Гірші відповіді, хоча нічого не розгорталиЗакріплена модель, оцінюваний набір щоночі проти живого API і частки з продакшну — відмови, передачі людині, «не сподобалось» — з алертамиЖива · щоночі, у продакшні

Що змінюється насправді: зник оракул

У дослідженнях тестування є назва для того, що зламалося. Тестовий оракул — це те, що вирішує, чи правильний вивід; зазвичай це очікуване значення, записане поруч із вводом. 2015 року Ерл Барр, Марк Гарман і колеги зробили огляд проблеми оракула: як відрізнити правильну поведінку від хибної, коли очікуваного значення немає або його надто дорого записати. Вона є в наукових симуляціях, є в моделях машинного навчання, а LLM-фіча має її в найчистішому вигляді. Очікуваний вивід на «де моє замовлення?» — будь-яке з тисячі прийнятних речень.

Не зламалася решта ідеї. Оракул не мусить бути очікуваним рядком. Ним може бути контракт, який вивід має задовольнити, звʼязок між двома виводами, оцінювач, що повертає вердикт, людина або те, що справжні користувачі зробили з відповіддю. Кожен рядок таблиці вище використовує одне з цього, а остання колонка каже, що саме.

ОракулЩо він вирішуєЦіна запускуРядки
Контракт (точна)Вивід дотримується правила: парситься, має свої поля, його число збігається з інструментом, посилання веде на наш доменНічого; мілісекунди1–10, 16–19
Звʼязок (властивість)Два виводи повʼязані як слід: однакові для перефразування, різні, коли змінився фактДва виклики фічі13–15
Оцінювач (оцінка)Модель повертає вердикт щодо одного виводу за записаним критеріємВиклик на кейс плюс калібрування11–12
ЛюдинаЧитає вибірку перед релізом і розмічає кейси, за якими калібрують кожного оцінювачаХвилини на кейсза 11–12
Продакшн (жива)Справжня суміш вводів і те, що користувачі зробили з відповідямиНічого за запуск; повільно читати20
Уся складність тестування LLM-фічі вміщається в одну зміну. Ліворуч — тест, який ви вже знаєте: той самий ввід дає той самий вивід, тож перевірка є рівністю, а вердикт — бінарним. Праворуч той самий ввід дає іншу відповідь на кожному запуску, тож рівність не просто сувора — вона беззмістовна. Перевірка стає оцінювачем, що повертає число, і порогом, що вирішує, а один запуск перестає бути доказом: ви дивитеся на частку по багатьох кейсах, а не на проходження одного. Нижній ряд додає ту половину, про яку в захваті забувають. Дуже багато в LLM-фічі досі перевіряється точно: що відповідь парситься як валідний JSON за вашою схемою, що в ній немає персональних даних, що викликано очікуваний інструмент з очікуваними аргументами, що вона вклалася в бюджет затримки й вартості. Ці перевірки миттєві, безкоштовні й безсуперечні, і вони мають нести стільки вашого набору, скільки взагалі можуть, — перш ніж до справи береться будь-яка оцінка.

Поширений обхід — поставити температуру на нуль і все одно порівнювати рядок. Нульова температура означає, що модель завжди бере найімовірніший наступний токен, тож вивід мав би повторюватися. У вересні 2025 року Горас Гі та колеги з Thinking Machines Lab показали, чому на звичайному сервері інференсу цього не стається. Вони надіслали один промпт тисячу разів за нульової температури й отримали вісімдесят різних продовжень. Перші 102 токени збігалися в усіх тисячі; на 103-му 992 продовжили «Queens, New York», а вісім — «New York City».

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

Спершу детермінований шар: контракт, інструменти й нещасливі шляхи

Намалюйте фічу блоками — і обриси роботи стануть очевидними. Асистент замовлень — це обробник запиту, маршрутизатор намірів, пошук статтями довідки, виклик моделі, парсер, три інструменти й рендерер. Імовірнісний лише один блок. Решта — звичайний код, і на кожному є точні перевірки, що виконуються за мілісекунди. Діаграма прикріплює кожен рядок таблиці до блоку, який він тестує.

Намальований блоками, асистент замовлень здебільшого виявляється звичайним ПЗ. Надходить запит, маршрутизатор обирає один із шести намірів, пошук знаходить статті довідки, модель пише відповідь і може викликати один із трьох інструментів, валідатор перевіряє результат, а рендерер показує його. Імовірнісна лише модель. Кожен із двадцяти рядків сторінки стоїть під блоком, який тестує. Чотирнадцять — точні перевірки, і вони покривають шість із семи блоків: мітку наміру на маршрутизаторі, цитати на пошуку, аргументи й збої на інструментах, схему, числа, прапорець передачі людині, персональні дані й канарку промпту на валідаторі, відмови й зовнішні посилання на рендерері. Навіть блок моделі має один точний рядок — рядок 2, тайм-аут виклику провайдера, — поруч із двома оцінюваними рядками й тим, що видно лише в продакшні. Три рядки властивостей стоять біля запиту, де змінюють ввід, і біля пошуку, куди підкладають ворожий текст.

Структурований вивід прибрав цілий клас цих збоїв і лишив три. Коли OpenAI запустила його в серпні 2024 року, її власна оцінка на складних схемах виросла з менш ніж 40% у старішої моделі до 100% у суворому режимі. Те саме оголошення перелічує, чого гарантія не покриває. Відмова повертається як відмова, а не за схемою. Відповідь, що дійшла до max_tokens, зупиняється, не завершивши обʼєкт. А значення всередині валідного обʼєкта однаково можуть бути хибними. Ці три обмеження — рядки 1, 3 і 8; тому гарантія схеми не скасовує тестів, а підказує, які саме писати.

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

Інтеграційні рядки можуть запускатися на кожен коміт, лише якщо провайдера не викликають, тож відповіді беруться з файлів. Частину записують із живого провайдера: звичайну відповідь, відмову, відповідь, обрізану на ліміті токенів, виклик інструмента. Решту пишуть вручну, бо ніхто не змусить провайдера на замовлення дати тайм-аут, повернути 429 чи 500, надіслати зламаний JSON або щоб інструмент дав збій. Кожен коміт відтворює ці файли у вашому власному коді, а точні рядки 1–6 перевіряють те, що побачив би клієнт; запуск безкоштовний, триває секунди й щоразу дає той самий результат. Тестують ваш код, а не провайдера. У цьому ж і слабкість: записи показують провайдера таким, яким він був у день запису. Нічний запуск проти живого API, рядок 20, помічає, коли вони розійшлися, — і тоді першими під підозрою записи.
ЗбійЩо має отримати клієнтРядок
Провайдер не відповідає вчасноПовідомлення й передачу людині в межах бюджету часу — а не спінер2
429, обмеження частотиОдин повтор із відступом, потім передачу людині; пакетні задачі ніколи не забирають квоту чату2
Зупинка на max_tokensВідхилення парсером; один повтор із проханням коротшої відповіді3
ВідмоваРечення, яке інтерфейс може показати, а не порожню рамку1
Інструмент замовлень дає збій«Зараз я не бачу вашого замовлення» — і жодного статусу4
Зламаний JSONВідхилення, один повтор і запис у частку збоїв схеми5

Немає очікуваної відповіді? Перевіряйте властивість

Рядки 13–15 не мають очікуваного виводу — і все одно їх не оцінюють балом. Вони порівнюють два запуски фічі між собою. Тестування ПЗ робить так десятиліттями всюди, де бракує оракула. Метаморфне тестування, огляд якого 2018 року зробили Цонг Юе Чен і колеги, перевіряє звʼязок між виводами замість самих виводів: поверніть вхідне зображення — і виявлені обʼєкти мають повернутися разом із ним.

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

Тип тестуЗміна вводуЩо має виконуватисяНа асистенті замовлень
Мінімальна функціональністьЖодної — прості кейсиКожен кейс проходить«Де замовлення 1042?» викликає get_order з 1042; «Хочу повернути синій светр» відкриває повернення
ІнваріантністьПерефразування, інша мова, друкарська помилка, речення про погодуТой самий намір, виклик інструмента й фактиРядок 13
Інваріантність діїВорожа інструкція всередині відгуку чи листаТі самі виклики інструментів, що й у запуску без неїРядок 15
НапрямДату доставки перенесено з 30-го дня на 31-йРішення про повернення змінюється на «ні»Рядок 14
НапрямНомер замовлення прибраноАсистент перепитує, а не вгадуєРядок 7, з іншого боку
Тест властивості не потребує очікуваної відповіді. Він починається з одного вихідного кейсу — чи можна повернути замовлення 1042, доставлене дванадцять днів тому, — вивід якого «так» і виклик, що розпочинає повернення. Далі правила роблять із нього похідні кейси, і кожен похідний несе не власну відповідь, а звʼязок, який його вивід має мати з виводом вихідного. Перефразування й переклад мають дійти того самого рішення — це інваріантність. Перенесення дати доставки на 31-й день, за межу тридцяти днів, має змінити рішення на «ні» — це тест напряму, тобто тестування граничних значень у новому середовищі. Відгук, що велить асистентові ігнорувати правила й повернути гроші, має лишити виклики інструментів такими самими, як без нього, — це інваріантність дії, тест на підкладені інструкції. Жодному з чотирьох не потрібен оцінювач, а з одного вихідного кейсу за правилом можна зробити багато похідних.

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

Супротивник: список OWASP 2026 як план тестування

Рядки 15–19 узято зі списку, яким тестувальник може користуватися безпосередньо. опублікував редакцію 2026 року свого Top 10 for LLM Applications 4 серпня 2026 року. Уперше рейтинг — не лише думка: голосування практиків важить три чверті, а решту дають 6 639 класифікованих реальних інцидентів. Передмова формулює позицію, що стоїть за всіма десятьма пунктами: «Перестаньте намагатися збудувати модель, яку неможливо обдурити. Збудуйте систему навколо неї так, щоб, коли модель обдурять — а це станеться, — не зламалося нічого важливого».

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

ПунктНа асистенті замовленьТестРядок
LLM01 Prompt InjectionТекст у відгуку, листі чи результаті інструмента сприймається як інструкціяВорожі документи, підкладені в індекс і у вивід інструментів; дії порівнюють із чистим запуском15
LLM02 Sensitive Information DisclosureДані іншого клієнта чи внутрішні нотатки у відповіді — або в аргументах інструментів і логахКожну персональну деталь у виводі звіряють з обліковим записом, що увійшов; те саме сканування — по слідах16
LLM03 Excessive AgencyАсистент може більше, ніж потрібно розмові, — повернути гроші, а не лише розпочати поверненняІнструментів рівно три; тест, що жоден промпт не дістається до чогось іще—
LLM06 Unbounded ConsumptionРозмова, що зациклюється на інструментах або просить есейЛіміти на розмову й кейс, побудований так, щоб зациклитися19
LLM07 MisinformationПравило, назване впевнено й хибно, а тоді виконанеЦитати, що мусять містити твердження, кейси без відповіді, обовʼязкові факти9, 10, 12
LLM08 Hidden Context ExposureСистемний промпт і схеми інструментів, зачитані цікавому клієнтовіРядок-канарка; нічого в промпті, що мало б значення, якби його прочитали17
LLM10 Improper Output HandlingВідповідь рендерять без перевірок: посилання, зображення, HTMLТести рендерера для кожної форми Markdown, а не лише вбудованої18

Три інші пункти — ланцюг постачання (LLM04), отруєння даних і моделі (LLM05) та слабкі місця векторів і ембедингів (LLM09) — живуть переважно в тому, як модель та індекс будують і наповнюють. Їм місце радше в безпековому огляді цього конвеєра, ніж у наборі тестів фічі. Одна практична пастка: список 2026 року пересунув вісім із десяти пунктів. System Prompt Leakage, що 2025 року був LLM07, тепер називається Hidden Context Exposure і має номер LLM08; Improper Output Handling опустився з пʼятого місця на десяте. Тест-план, що посилається на пункти лише за номером, тепер указує на інші пункти, тож пишіть рік поруч із номером — LLM08:2026.

Хто що пише і де запускається кожна перевірка

Тестувальник на звичайній фічі пише кроки й очікувані результати. На LLM-фічі кроки тривіальні — надішли це, прочитай те, — і складність переїжджає у визначення того, якою є добра відповідь. Це визначення є специфікацією. Його справді важко написати, і це найцінніший артефакт на проєкті, бо кожен оцінюваний рядок і кожен оцінювач добрі рівно настільки, наскільки добре воно.

  • QA володіє визначенням «добре»

    Записана рубрика: що має бути присутнім, чого не має бути ніколи, який тон, що робити, коли відповідь невідома. Без неї кожен розбір — суперечка про смак.

  • QA володіє корпусом збоїв

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

  • Розробка володіє каркасом

    Запис і відтворення відповідей, закріплення версій, зберігання результатів, вбудовування воріт у пайплайн. Звичайна інфраструктура, і ставитися до неї слід так само.

  • Один названий власник числа

    Хтось має мати право заблокувати реліз через якість. У LLM-фічі немає природного власника: промпт, пошук і рахунок зазвичай належать трьом різним людям.

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

МоментЩо запускаєтьсяЧому саме там
Кожен комітТочні рядки на записаних відповідях: 1–6, 16, 18, 19.Безкоштовно й миттєво — і покриває збої, що спричиняють більшість інцидентів.
Зміна промпту, моделі чи індексуРядки 7–14 на живій моделі: оцінюваний набір, порівняний покейсно із записаною базовою лінією.Ці три і є артефактом розгортання. Зміна будь-чого з них — це реліз, хай що каже тікет.
ЩоночіТой самий набір проти живого API плюс ворожі кейси рядка 15.Ловить дрейф, якого ви не спричиняли: оновлення провайдера, нову форму відмов, повільніший ендпоінт.
Перед релізомЗахищений набір — кейси, які не можна ламати, — рядки 15 і 17 і людина, що читає вибірку.Останній момент, коли на справжній вивід дивиться людина, а не клієнт.
У продакшніРядки 5, 16, 19 і 20 як монітори: збої схеми, персональні дані, вартість розмови, частки відмов і передач людині, «не сподобалось».Єдине місце, де існує справжня суміш вводів. Ваш тестовий набір — завжди вибірка минулого кварталу.

Пʼять релізів — і рядки, що спіймали б кожен

Жоден із цих випадків не був моделлю, яку неможливо протестувати. У кожному до публіки дійшло те, що перевіряє один із двадцяти рядків, і щоразу це знайшли користувачі, журналісти чи зовнішні дослідники, а не власний набір тестів команди.

ВипадокЩо сталосяРядки, що це покривають
Tessa, NEDA, травень 2023Чат-бот для людей із розладами харчової поведінки, який фахівці збудували із заздалегідь написаних відповідей, оператор у межах «оновлення системи» доповнив генеративним AI. Консультантка Шерон Максвелл спитала його про здорове харчування й почула пораду тримати дефіцит у 500–1000 калорій на день. За її словами, бота вимкнули за кілька годин після її скриншотів; асоціація закрила свою гарячу лінію з живими людьми місяцем раніше.20 і 12. Заміна записаних відповідей генеративною моделлю — це реліз, що потребує всього набору наново, а список фахівців про те, чого не можна казати ніколи, — це оцінюваний набір, на якому провалилася б перша ж відповідь.
Зображення Gemini, лютий 2024Налаштування, задумане показувати різноманіття людей, застосовувалося до промптів, що називали конкретний тип людей чи історичний контекст, а з часом модель стала, за словами Google, «значно обережнішою, ніж ми задумували», і відмовляла на безневинні промпти. Через три тижні після запуску Google призупинила генерацію зображень людей.14 і 1. Кейс напряму — промпт, що уточнює, кого показати, має отримати саме це, — і частка відмов як число, що відстежується, а не настрій, який раптом помічають.
Підсумки сповіщень Apple, грудень 2024Підсумки новинних сповіщень, показані під іменами видань, стверджували те, чого в статтях не було, — зокрема, що чоловік, якого звинувачують у вбивстві керівника UnitedHealthcare, застрелився. BBC поскаржилася в грудні; 16 січня 2025 року Apple вимкнула підсумки для новинних і розважальних застосунків у бета-версіях iOS 18.3.9 і 12. Підсумок звіряють із джерелом — кожне твердження в ньому має бути в статті, — а набір справжніх заголовків і є оцінюваним набором.
Grok, травень 2025Близько 3:15 за тихоокеанським часом 14 травня хтось змінив системний промпт бота в X, щоб той давав «конкретну відповідь» на політичну тему, і Grok вставляв її у відповіді на непов’язані питання. xAI назвала це несанкціонованою зміною, почала публікувати свої промпти на GitHub і заявила, що зміни проходитимуть рев’ю.13 і 20. Відповіді на непов’язані питання не можуть мати спільної теми — це кейс інваріантності, — а зміна промпту є розгортанням із рев’ю та прогоном захищеного набору перед ним.
EchoLeak, Microsoft 365 Copilot, червень 2025Лист іззовні компанії містив інструкції, написані так, ніби вони для людини-читача, тож класифікатор інʼєкцій його пропустив. Коли Copilot згодом діставав цей лист, відповідь могла винести дані через посилальні Markdown-посилання й зображення, яких фільтр посилань не розпізнавав. CVE-2025-32711, оцінка 9,3. Вразливість виправили ще до публікації розбору, і Microsoft каже, що жоден клієнт не постраждав.15 і 18. Ворожий документ в індексі й рендерер, перевірений кожною формою Markdown, а не лише тією, яку пишуть усі.

Де це вироджується

Чесне обмеження всього на цій сторінці в тому, що набір перевіряє те, що хтось здогадався в нього покласти. Двадцять рядків — це двадцять збоїв, які хтось уявив; тести властивостей потребують, щоб хтось вигадав звʼязок; червона команда знаходить атаки своїх учасників. Тестування не може показати, що інʼєкція неможлива, — саме тому передмова OWASP просить системи, у якій обдурена модель не ламає нічого важливого, і саме тому рядки, що обмежують можливості моделі (7, 16–19), варті більше за будь-яку оцінку.

  • Оголосити фічу нетестованою й випускати за демо: так кожен клієнт стає безоплатним тестувальником без каналу звітності.
  • Перевіряти точні рядки: виходить набір, що падає на кожному запуску з причин, не повʼязаних з якістю, — і його вимикають.
  • Поставити температуру на нуль і назвати вивід детермінованим.
  • Почати з оцінюваних рядків, бо вони нові, і так і не дійти до точних, що спричиняють інциденти.
  • Набір відтворення, якого не перезаписували від запуску, — зелений проти провайдера, якого вже не існує.
  • Вправа червоної команди, проведена один раз: знахідки виправили, але так і не перетворили на кейси.
  • Правки промпту й оновлення від постачальника, що оминають набір, бо «нічого не розгортали».
  • Пункти OWASP із номером, але без року — після перенумерації 2026 року.
  • Лишити вартість і затримку поза набором тестів: першим помітить той, хто відкриє рахунок.

Коли це застосовувати

Застосовуйте, коли

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

Уникайте, коли

  • Перевірок точних рядків на згенерованому тексті: вони падають постійно з причин, не повʼязаних з якістю.
  • Висновків з одного запуску, де самого семплінгу досить, щоб підперти будь-яку відповідь.
  • Оцінки моделлю там, де перевірка схеми, перерахунок чи пошук вирішили б питання точно.
  • Перевірки того, чи можна обдурити модель, замість того, що обдурена модель здатна зробити.

Джерела й метод

На чому стоїть ця стаття

  • 13 джерел
  • 5 задокументованих збоїв
  • Перевірено 17 жовтня 2026 р.

Дослідження з Claude. Пошук і звірку першоджерел зроблено з Claude (Anthropic). Відбір, текст і перевірку фактів — редакція Anatomy of IT Product.

Було корисно?

Поділіться з тим, хто працює над тією ж задачею.