
Guardrail programmabili per app di chat LLM: applica vincoli di input/output, blocca jailbreak e prompt injection, rileva le allucinazioni e maschera i dati sensibili.
ULTIMA RELEASE / VERSIONE DI SVILUPPO: Il branch develop tiene traccia dell'ultima versione in sviluppo. L'ultima versione rilasciata è la 0.24.1.
✨✨✨
📌 La documentazione ufficiale della libreria NeMo Guardrails è disponibile su docs.nvidia.com/nemo/guardrails.
✨✨✨
La libreria NVIDIA NeMo Guardrails è un toolkit open-source per aggiungere facilmente guardrail programmabili alle applicazioni conversazionali basate su LLM. I guardrail (o "rails" in breve) sono modi specifici di controllare l'output di un modello linguistico di grandi dimensioni, come non parlare di politica, rispondere in modo particolare a richieste specifiche dell'utente, seguire un percorso di dialogo predefinito, utilizzare uno stile linguistico particolare, estrarre dati strutturati e altro ancora.
Questo articolo introduce la libreria NeMo Guardrails e contiene una panoramica tecnica del sistema e la valutazione attuale.
Python 3.10, 3.11, 3.12 o 3.13.
Per installare usando pip:```bash
pip install nemoguardrails
Per istruzioni più dettagliate, consulta la [Guida all'installazione](https://docs.nvidia.com/nemo/guardrails/get-started/installation-guide).
## Panoramica
<!-- start-documentation-reuse -->
La libreria NeMo Guardrails consente agli sviluppatori che creano applicazioni basate su LLM di aggiungere **guardrail programmabili** tra il codice dell'applicazione e l'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>
I vantaggi principali dell'aggiunta di *guardrail programmabili* includono:
- **Creare applicazioni basate su LLM affidabili, sicure e protette:** puoi definire dei rail per guidare e salvaguardare le conversazioni; puoi scegliere di definire il comportamento della tua applicazione basata su LLM su argomenti specifici e impedirle di intraprendere discussioni su argomenti indesiderati.
- **Connettere modelli, chain e altri servizi in modo sicuro:** puoi connettere un LLM ad altri servizi (detti anche tool) in modo semplice e sicuro.
- **Dialogo controllabile**: puoi guidare l'LLM a seguire percorsi conversazionali predefiniti, permettendoti di progettare l'interazione seguendo le best practice di conversation design e di applicare procedure operative standard (ad esempio, autenticazione, supporto).
<!-- end-documentation-reuse -->
### Protezione dalle vulnerabilità degli LLM
La libreria NeMo Guardrails fornisce diversi meccanismi per proteggere un'applicazione di chat basata su LLM dalle vulnerabilità comuni degli LLM, come jailbreak e prompt injection. Di seguito è riportata una panoramica di esempio della protezione offerta da diverse configurazioni di guardrail per l'esempio [ABC Bot](https://github.com/nvidia-nemo/guardrails/blob/develop/examples/bots/abc) incluso in questo repository. Per maggiori dettagli, consulta la pagina [LLM Vulnerability Scanning](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>
### Casi d'uso
Puoi utilizzare i guardrail programmabili in diversi tipi di casi d'uso:
1. **Question Answering** su un insieme di documenti (noto anche come Retrieval Augmented Generation): applica il fact-checking e la moderazione dell'output.
2. **Assistenti specifici per dominio** (noti anche come chatbot): assicurati che l'assistente rimanga in tema e segua i flussi conversazionali progettati.
3. **Endpoint LLM**: aggiungi guardrail al tuo LLM personalizzato per un'interazione con il cliente più sicura.
4. **LangChain Chains** (opzionale): se utilizzi LangChain per qualsiasi caso d'uso, puoi aggiungere uno strato di guardrail attorno alle tue chain. Per abilitare questa integrazione, imposta la variabile d'ambiente `NEMOGUARDRAILS_LLM_FRAMEWORK=langchain` oppure chiama `set_default_framework("langchain")`.
### Utilizzo
Per aggiungere guardrail programmabili alla tua applicazione puoi utilizzare l'API Python o un server di guardrail (vedi la [Guida al server](https://docs.nvidia.com/nemo/guardrails/get-started/integrate-into-application) per maggiori dettagli). L'utilizzo dell'API Python è simile all'utilizzo diretto dell'LLM. Chiamare lo strato di guardrail invece dell'LLM richiede solo modifiche minime al codice, e comporta due semplici passaggi:
1. Caricare una configurazione di guardrail e creare un'istanza `LLMRails`.
2. Effettuare le chiamate all'LLM utilizzando i metodi `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!"}]
)
Output di esempio:```json {"role": "assistant", "content": "Hi! How can I help you?"}
Il formato di input e output per il metodo `generate` è simile alla [Chat Completions API](https://platform.openai.com/docs/guides/gpt/chat-completions-api) di OpenAI.
#### API asincrona
La libreria NeMo Guardrails è un toolkit async-first poiché i meccanismi principali sono implementati utilizzando il modello asincrono di Python. I metodi pubblici hanno sia una versione sincrona che una asincrona. Ad esempio: `LLMRails.generate` e `LLMRails.generate_async`.
### LLM supportati
Puoi utilizzare NeMo Guardrails con più LLM come OpenAI GPT-3.5, GPT-4, LLaMa-2, Falcon, Vicuna o Mosaic. Per maggiori dettagli, consulta la sezione [Supported LLM Models](https://docs.nvidia.com/nemo/guardrails/about-nemo-guardrails-library/supported-llms) nella Guida alla configurazione.
### Tipi di guardrail
La libreria NeMo Guardrails supporta cinque tipi principali di guardrail: