> ## Documentation Index
> Fetch the complete documentation index at: https://docs.responsibleailabs.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Construire un chatbot IA responsable

> Partie 1 sur 2 - Configuration, évaluation de base, analyse approfondie et compréhension des scores RAIL.

<Info>
  **Partie 2 :** [Fonctionnalités de production](/use-cases/ai-chatbot-production) - Enveloppes de fournisseur, application des politiques, sessions et observabilité.
</Info>

## La configuration

Nous construisons un chatbot de support client pour un produit SaaS fictif appelé "CloudDash", un tableau de bord de surveillance cloud. Le chatbot répond aux questions sur les prix, les fonctionnalités et le dépannage. En cours de route, nous ajoutons une évaluation des scores RAIL à chaque couche pour garantir que les réponses du chatbot sont sûres, précises, équitables et utiles.

### Installer les dépendances

```bash theme={null}
pip install "rail-score-sdk[openai,google,langfuse]" openai google-genai
```

### Variables d'environnement

Créez un fichier `.env` :

```bash theme={null}
RAIL_API_KEY=YOUR_RAIL_API_KEY
OPENAI_API_KEY=sk-your_openai_key
GEMINI_API_KEY=your_gemini_key

# Optionnel : pour la Partie 2 (observabilité Langfuse)
LANGFUSE_PUBLIC_KEY=pk-lf-...
LANGFUSE_SECRET_KEY=sk-lf-...
LANGFUSE_HOST=https://cloud.langfuse.com
```

<Note>
  **Obtenez votre clé API RAIL :** Inscrivez-vous sur [responsibleailabs.ai/dashboard](https://responsibleailabs.ai/dashboard). Le niveau gratuit comprend 100 crédits pour suivre tout ce tutoriel.
</Note>

## Construire le chatbot de base

Commencez avec un chatbot de base utilisant OpenAI directement, sans intégration RAIL pour l'instant. C'est la fondation sur laquelle nous allons ajouter le scoring.

```python chatbot.py theme={null}
import openai
import os

openai_client = openai.OpenAI(api_key=os.getenv("OPENAI_API_KEY"))

SYSTEM_PROMPT = """Vous êtes CloudDash Support, un assistant utile pour
CloudDash — un tableau de bord de surveillance cloud. Répondez aux questions sur
les prix, les fonctionnalités, la configuration et le dépannage. Soyez concis et précis.
Si vous ne savez pas quelque chose, dites-le."""


def chat(user_message: str, history: list[dict] = None) -> str:
    messages = [{"role": "system", "content": SYSTEM_PROMPT}]
    if history:
        messages.extend(history)
    messages.append({"role": "user", "content": user_message})

    response = openai_client.chat.completions.create(
        model="gpt-4o",
        messages=messages,
        temperature=0.3,
    )
    return response.choices[0].message.content


reply = chat("Quels plans tarifaires proposez-vous ?")
print(reply)
```

Cela fonctionne, mais nous n'avons aucune visibilité sur la qualité de la réponse. Cette réponse est-elle sûre ? Est-elle factuellement précise ? Contient-elle des biais ? Nous n'avons aucun moyen de le savoir, jusqu'à ce que nous ajoutions le score RAIL.

## Ajouter l'évaluation du score RAIL

La manière la plus simple d'ajouter l'évaluation RAIL est avec `RailScoreClient`. Un appel nous donne des scores sur les 8 dimensions RAIL.

```python chatbot_with_eval.py theme={null}
from rail_score_sdk import RailScoreClient
import os

rail = RailScoreClient(api_key=os.getenv("RAIL_API_KEY"))

reply = chat("Quels plans tarifaires proposez-vous ?")

result = rail.eval(content=reply, mode="basic")

print(f"Score global : {result.rail_score.score}")
print(f"Confiance :    {result.rail_score.confidence}")
print()
for dim_name, dim_score in result.dimension_scores.items():
    print(f"  {dim_name:15s} {dim_score.score}")
```

<Accordion title="Exemple de sortie">
  ```
  Score global : 8.4
  Confiance :    0.91

    équité         8.5
    sécurité       9.2
    fiabilité      7.8
    transparence   8.0
    vie_privée     5.0
    responsabilité 8.1
    inclusivité    8.7
    impact_utilisateur 9.0
  ```
</Accordion>

### Interpréter les résultats

| Dimension          | Score | Ce que cela signifie                                              |
| ------------------ | ----- | ----------------------------------------------------------------- |
| Sécurité           | 9.2   | Pas de contenu nuisible, approprié pour tous les utilisateurs     |
| Impact utilisateur | 9.0   | Répond directement à la question au bon niveau de détail          |
| Inclusivité        | 8.7   | Langage accessible, pas de termes exclusifs                       |
| Équité             | 8.5   | Traitement équitable, pas de biais démographique                  |
| Responsabilité     | 8.1   | Raisonnement clair, revendications traçables                      |
| Transparence       | 8.0   | Représentation honnête des connaissances                          |
| Fiabilité          | 7.8   | Principalement précis, mais les détails de prix sont synthétiques |
| Vie privée         | 5.0   | Non applicable - aucune PII impliquée                             |

<Tip>
  **Vie privée = 5.0** signifie "non applicable." RAIL retourne 5.0 (neutre) lorsque la vie privée est sans rapport avec le contenu évalué.
</Tip>

## Évaluation approfondie

Le mode de base vous donne des scores. Le mode approfondi vous donne le *pourquoi* : explications par dimension, problèmes détectés et suggestions d'amélioration.

```python deep_eval.py theme={null}
result = rail.eval(content=reply, mode="deep")

print(f"Global : {result.rail_score.score}")
print()

for dim_name, detail in result.dimension_scores.items():
    print(f"--- {dim_name} (score : {detail.score}) ---")
    print(f"  Explication : {detail.explanation}")
    if detail.issues:
        print(f"  Problèmes : {', '.join(detail.issues)}")
    if detail.suggestions:
        print(f"  Suggestion : {detail.suggestions[0]}")
    print()
```

<Accordion title="Exemple de sortie">
  ```
  Global : 8.4

  --- fiabilité (score : 7.8) ---
    Explication : La réponse fournit des chiffres de prix spécifiques (29 $, 79 $)
    qui semblent raisonnables mais ne peuvent pas être vérifiés par rapport aux prix réels de CloudDash.
    La répartition des fonctionnalités est plausible mais non confirmée.
    Problèmes : revendication_trop_confiance
    Suggestion : Ajoutez un avertissement indiquant que les prix sont susceptibles de changer, ou
    liez à la page de prix officielle pour les informations les plus récentes.

  --- transparence (score : 8.0) ---
    Explication : La réponse présente clairement les trois niveaux avec
    des fonctionnalités distinctes. Cependant, elle ne divulgue pas qu'elle peut ne pas avoir
    les dernières informations tarifaires.
    Problèmes : limitation_cachée
    Suggestion : Reconnaître que les détails des prix doivent être vérifiés sur
    le site officiel.

  --- impact_utilisateur (score : 9.0) ---
    Explication : Répond directement à la question de prix de l'utilisateur avec une
    comparaison bien structurée. La question de suivi ajoute de la valeur.
  ```
</Accordion>

### Basique vs Approfondi

|                            | Basique                                    | Approfondi                        |
| -------------------------- | ------------------------------------------ | --------------------------------- |
| **Coût**                   | 1 crédit                                   | 3 crédits                         |
| **Scores**                 | Global + 8 dimensions                      | Global + 8 dimensions             |
| **Explications**           | Non                                        | Oui, par dimension                |
| **Détection de problèmes** | Non                                        | Oui                               |
| **Meilleur pour**          | Vérifications en temps réel à volume élevé | Débogage, audit, analyse post-hoc |

<Tip>
  **Astuce d'économie :** Utilisez le mode de base pour chaque réponse en production, et le mode approfondi de manière sélective. Par exemple, déclenchez le mode approfondi lorsque le score de base tombe en dessous de votre seuil, ou comme un audit périodique sur un échantillon de réponses.
</Tip>

## Quelles sont les prochaines étapes

<Card title="Partie 2 : Fonctionnalités de production" icon="rocket" href="/use-cases/ai-chatbot-production">
  Enveloppes de fournisseur, application des politiques (bloquer/régénérer), suivi des sessions multi-tours et observabilité Langfuse.
</Card>
