
Программируемые защитные механизмы для LLM-чат-приложений: обеспечение входных/выходных ограничений, блокировка джейлбрейков и prompt-инъекций, обнаружение галлюцинаций и маскирование конфиденциальных данных.
ПОСЛЕДНИЙ РЕЛИЗ / ВЕРСИЯ ДЛЯ РАЗРАБОТКИ: Ветка develop отслеживает последнюю версию в разработке. Последняя выпущенная версия — 0.24.1.
✨✨✨
📌 Официальная документация библиотеки NeMo Guardrails доступна по адресу docs.nvidia.com/nemo/guardrails.
✨✨✨
Библиотека NVIDIA NeMo Guardrails — это открытый набор инструментов для простого добавления программируемых guardrails в разговорные приложения на основе LLM. Guardrails (или сокращённо «rails») — это определённые способы управления выводом большой языковой модели, например: не говорить о политике, отвечать определённым образом на конкретные запросы пользователя, следовать предопределённому пути диалога, использовать определённый языковой стиль, извлекать структурированные данные и многое другое.
Эта статья представляет библиотеку NeMo Guardrails и содержит технический обзор системы и текущую оценку.
Python 3.10, 3.11, 3.12 или 3.13.
Для установки с помощью pip:```bash
pip install nemoguardrails
Более подробные инструкции см. в [Руководстве по установке](https://docs.nvidia.com/nemo/guardrails/get-started/installation-guide).
## Обзор
<!-- start-documentation-reuse -->
Библиотека NeMo Guardrails позволяет разработчикам, создающим приложения на основе LLM, добавлять **программируемые ограждения** (programmable guardrails) между кодом приложения и LLM.
<div align="center">
<img src="https://raw.githubusercontent.com/NVIDIA-NeMo/Guardrails/develop/docs/_static/images/programmable_guardrails.png" width="75%" alt="Programmable Guardrails">
</div>
Ключевые преимущества добавления *программируемых ограждений*:
- **Создание надёжных, безопасных и защищённых приложений на основе LLM:** вы можете определять ограждения для управления и защиты диалогов; вы можете задать поведение вашего приложения на основе LLM по определённым темам и предотвратить его участие в обсуждениях нежелательных тем.
- **Безопасное подключение моделей, цепочек и других сервисов:** вы можете безопасно и бесшовно подключать LLM к другим сервисам (также известным как инструменты).
- **Управляемый диалог**: вы можете направлять LLM по заранее заданным сценариям разговора, что позволяет проектировать взаимодействие в соответствии с лучшими практиками дизайна диалогов и обеспечивать соблюдение стандартных операционных процедур (например, аутентификация, поддержка).
<!-- end-documentation-reuse -->
### Защита от уязвимостей LLM
Библиотека NeMo Guardrails предоставляет несколько механизмов защиты чат-приложений на основе LLM от распространённых уязвимостей LLM, таких как джейлбрейки и инъекции промптов. Ниже приведён примерный обзор защиты, обеспечиваемой различными конфигурациями ограждений для примера [ABC Bot](https://github.com/nvidia-nemo/guardrails/blob/develop/examples/bots/abc), включённого в этот репозиторий. Более подробную информацию см. на странице [Сканирование уязвимостей LLM](https://docs.nvidia.com/nemo/guardrails/evaluation/llm-vulnerability-scanning.html).
<div align="center">
<img src="https://raw.githubusercontent.com/NVIDIA-NeMo/Guardrails/develop/docs/_static/images/abc-llm-vulnerability-scan-results.png" width="500">
</div>
### Сценарии использования
Программируемые ограждения можно применять в различных типах сценариев использования:
1. **Ответы на вопросы** по набору документов (также известное как Retrieval Augmented Generation): обеспечение проверки фактов и модерации вывода.
2. **Ассистенты для конкретных предметных областей** (также известные как чат-боты): обеспечение того, чтобы ассистент оставался в рамках темы и следовал спроектированным сценариям разговора.
3. **Конечные точки LLM**: добавление ограждений к вашей пользовательской LLM для более безопасного взаимодействия с клиентами.
4. **Цепочки LangChain** (опционально): если вы используете LangChain для какого-либо сценария, вы можете добавить слой ограждений вокруг ваших цепочек. Чтобы включить эту интеграцию, задайте переменную окружения `NEMOGUARDRAILS_LLM_FRAMEWORK=langchain` или вызовите `set_default_framework("langchain")`.
### Использование
Чтобы добавить программируемые ограждения в ваше приложение, вы можете использовать Python API или сервер ограждений (см. [Руководство по серверу](https://docs.nvidia.com/nemo/guardrails/get-started/integrate-into-application) для получения подробной информации). Использование Python API аналогично прямому использованию LLM. Вызов слоя ограждений вместо LLM требует лишь минимальных изменений в кодовой базе и включает два простых шага:
1. Загрузка конфигурации ограждений и создание экземпляра `LLMRails`.
2. Выполнение вызовов к LLM с использованием методов `generate`/`generate_async`.```python
from nemoguardrails import LLMRails, RailsConfig
# Load a guardrails configuration from the specified path.
config = RailsConfig.from_path("PATH/TO/CONFIG")
rails = LLMRails(config)
completion = rails.generate(
messages=[{"role": "user", "content": "Hello world!"}]
)
Пример вывода:```json {"role": "assistant", "content": "Hi! How can I help you?"}
Формат ввода и вывода для метода `generate` аналогичен [Chat Completions API](https://platform.openai.com/docs/guides/gpt/chat-completions-api) от OpenAI.
#### Асинхронный API
Библиотека NeMo Guardrails — это набор инструментов, ориентированный в первую очередь на асинхронность, поскольку основные механизмы реализованы с использованием асинхронной модели Python. Публичные методы имеют как синхронную, так и асинхронную версии. Например: `LLMRails.generate` и `LLMRails.generate_async`.
### Поддерживаемые LLM
Вы можете использовать NeMo Guardrails с несколькими LLM, такими как OpenAI GPT-3.5, GPT-4, LLaMa-2, Falcon, Vicuna или Mosaic. Для получения более подробной информации ознакомьтесь с разделом [Supported LLM Models](https://docs.nvidia.com/nemo/guardrails/about-nemo-guardrails-library/supported-llms) в руководстве по конфигурации.
### Типы Guardrails
Библиотека NeMo Guardrails поддерживает пять основных типов guardrails: