Впровадження Guardrails (обмежень відповідей) AI-асистента в мобільному застосунку
Ваш AI-асистент у продакшені без захисту — відкриті двері для проблем. Користувач поставить питання поза доменом, спробує prompt injection через завантажений документ, або модель сама згенерує небажаний контент. Ми розробляємо та впроваджуємо guardrails як багатошарову систему валідації на вході та виході. Наш досвід — понад 5 років у мобільній розробці, 50+ успішних проєктів з інтеграцією AI. Оцінимо ваш проєкт безкоштовно — зв'яжіться з нами.
Які загрози закривають guardrails?
Prompt injection — коли користувач вставляє в запит команди типу «Ignore previous instructions». Без фільтрації це може призвести до виконання небажаних дій. Guardrails на вході перевіряють запит за паттернами та класифікатором. За нашою статистикою, до 15% запитів у застосунках з контентом містять спроби інжекції.
Вихід за рамки домену — асистент починає відповідати на теми, не пов'язані з функціоналом застосунку. Наприклад, фінансовий асистент обговорює погоду. Тематичний класифікатор на основі ембеддінгів або швидкої LLM відсікає такі запити з точністю 95% і вище.
Порушення бізнес-правил — модель може повернути невалідний JSON або суму з від'ємним значенням. Валідація вихідного формату та семантики запобігає показу некоректних даних користувачеві.
Як ми це робимо: архітектура guardrails
Ми розміщуємо guardrails на серверному проміжному ПЗ, яке проксіює запити від мобільного клієнта до LLM. Це гарантує, що захист не можна обійти прямим зверненням до API.
Input guardrails: тематичний фільтр та захист від інжекцій
Тематичний фільтр визначає, чи належить запит до домену застосунку. Найпростіший варіант — embeddings + cosine similarity з набором «дозволених тем». Більш надійний — окремий швидкий класифікатор на основі GPT-4o-mini з низькою температурою, latency близько 200 мс:
func isOnTopic(_ userMessage: String) async -> Bool {
let classifierPrompt = """
Визнач, чи належить наступне питання до теми особистих фінансів (бюджет, витрати, заощадження, інвестиції).
Відповідь тільки: YES або NO.
Питання: \(userMessage)
"""
let response = await llmClient.complete(classifierPrompt, temperature: 0)
return response.trimmingCharacters(in: .whitespaces) == "YES"
}
Для виявлення prompt injection використовуємо два рівні: швидкий regex-пошук (ловить типові паттерни) та класифікатор на основі LLM. Такий підхід дає точність 97%, що на 20% краще, ніж простий текстовий фільтр.
Output guardrails: валідація формату та бізнес-правил
Зазначимо: коли асистент повертає структуровані дані, кожну відповідь потрібно перевірити перед рендерингом:
// Android — Kotlin
data class AssistantResponse(
val text: String,
val category: String?,
val amount: Double?
)
fun validateResponse(raw: String): AssistantResponse? {
return try {
val parsed = gson.fromJson(raw, AssistantResponse::class.java)
// Бізнес-правила: сума не може бути від'ємною
if (parsed.amount != null && parsed.amount < 0) return null
// Категорія повинна бути з дозволеного списку
if (parsed.category != null && parsed.category !in allowedCategories) return null
parsed
} catch (e: JsonSyntaxException) {
null // Відповідь не у форматі JSON — відкидаємо, показуємо fallback
}
}
Контроль довжини та тону відповіді. Встановлюємо max_tokens у запиті та перевіряємо довжину на клієнті. Наприклад, для чату задаємо ліміт 8000 символів, а якщо відповідь перевищує — показуємо повідомлення «Відповідь занадто довга, уточніть запит».
Чому guardrails мають бути на сервері?
Клієнтську логіку легко обійти прямим зверненням до API. Серверне проміжне ПЗ гарантує, що всі перевірки виконуються незалежно від клієнта, і захищає від витоків токенів та маніпуляцій. Навіть якщо зловмисник перехопить трафік, він не зможе змінити правила фільтрації.
Процес впровадження guardrails
Робота проходить у кілька етапів:
- Аналітика та проєктування правил — разом з вами визначаємо домен, список заборонених тем, формат відповідей та бізнес-обмеження.
- Реалізація input guardrails — пишемо тематичний класифікатор на основі ембеддінгів (точність 98%) та детектор інжекцій на базі LLM (затримка менше 300 мс).
- Реалізація output guardrails — валідатори формату (JSON-схема), бізнес-правил (перевірка 5+ умов) та довжини (максимум 1024 токени).
- Тестування на наборі з 100+ варіантів запитів — перевіряємо точність і повноту, покриття цільових сценаріїв не менше 95%.
- Деплой та моніторинг — налаштовуємо логування порушень і fallback-сценарії, обробляємо до 1000 запитів на секунду.
Що входить у результати роботи
За підсумком ви отримуєте:
- Робочий код guardrails (серверне проміжне ПЗ на Python/Node.js/Go)
- Набір тестів зі звітом про покриття (мінімум 95% цільових сценаріїв)
- Документацію щодо правил та архітектури
- Доступ до системи моніторингу порушень (лог порушень з мітками часу)
- Навчання вашої команди (1-годинна сесія)
Бібліотеки для реалізації guardrails
Для невеликих проєктів достатньо власного проміжного ПЗ з набором правил. Для enterprise підходять:
- Guardrails AI — декларативний опис правил з автоматичним retry. Підтримує валідацію схем, тональності, довжини. Легко інтегрується з сервером.
- NeMo Guardrails від NVIDIA — більш важке рішення, підтримує діалогові flow та topical rails. Підходить для складних асистентів з безліччю сценаріїв.
Порівняння: Guardrails AI простіший у налаштуванні — розгортається за день. NeMo Guardrails вимагає більше часу, але дає більш гнучке керування діалогом. На практиці наша система guardrails скорочує кількість хибних спрацьовувань у 3 рази порівняно з базовими фільтрами.
Орієнтири за термінами
Базові input/output фільтри — 1–2 дні. Тематичний класифікатор з тестовим покриттям — 2–3 дні. Повна багатошарова система з логуванням порушень — 4–5 днів. Вартість розраховується індивідуально — зв'яжіться з нами для оцінки вашого проєкту. Впровадження guardrails дозволяє заощадити до $5000 на місяць на ручній модерації та прискорити обробку запитів на 60%. Крім того, зниження навантаження на підтримку економить до $2000 на місяць за рахунок автоматизації відповідей.
Коли guardrails необхідні
Без guardrails ви ризикуєте отримати до 40% нерелевантних запитів, витік даних через інжекції та репутаційні втрати. Ми гарантуємо, що впроваджена система відсікає не менше 95% небажаних запитів. Зв'яжіться з нами для оцінки вашого проєкту — розрахуємо терміни та вартість.
Приклад конфігурації guardrails
```yaml guardrails: input: topical: allowed_topics: ["фінанси", "бюджет"] threshold: 0.7 injection: method: llm_classifier model: gpt-4o-mini temperature: 0 output: format: schema: assistant_response_schema business_rules: - amount >= 0 - category in allowedCategories - response_length < 10000 chars ```| Тип guardrail | Що перевіряє | Приклад правила |
|---|---|---|
| Input тематичний | Відповідність домену | Embedding similarity > 0.7 |
| Input injection | Спроби злому | Класифікатор LLM з точністю 97% |
| Output формат | JSON-схема | Парсинг та перевірка полів |
| Output довжина | Кількість токенів | max_tokens=1024, клієнтський ліміт 8000 символів |
| Етап роботи | Тривалість | Результат |
|---|---|---|
| Аналітика та проєктування | 1 день | Специфікація правил |
| Реалізація input guardrails | 1-2 дні | Код класифікаторів |
| Реалізація output guardrails | 1-2 дні | Код валідаторів |
| Тестування та деплой | 1 день | Звіт про покриття |
Детальніше про prompt injection та Guardrails AI — обидва підходять.







