Chainlit Avancé
Mise à jour :
Après avoir mis en place une première application Chainlit fonctionnelle, vous souhaitez désormais la rendre plus robuste et adaptée à un usage en production ? Ce guide est la suite directe de notre premier tutoriel sur Chainlit ↗. Nous allons aborder des améliorations concrètes : la persistance des conversations, un streaming optimisé, un système de logs professionnels, et une intégration performante de Mistral, le tout dans un cadre modulaire et maintenable.
Mise en place de la persistance des conversations
La persistance des conversations permet à vos utilisateurs de retrouver leur historique même après une déconnexion ou une fermeture de session. Pour cela, nous allons connecter Chainlit à une base PostgreSQL afin de stocker les messages de manière fiable et durable.
Installation
Avant de commencer, assurez-vous d’avoir une instance PostgreSQL opérationnelle. Vous pouvez utiliser un serveur local ou un service cloud comme AWS RDS, DigitalOcean, etc.
Installation de PostgreSQL localement
Dans notre cas, nous allons installer postgreSQL localement pour le développement. Si vous n’avez pas PostgreSQL installé, suivez les instructions ci-dessous :
sudo apt updatesudo apt install postgresql postgresql-contrib
Vérifiez que le service PostgreSQL est actif :
sudo systemctl start postgresqlsudo systemctl enable postgresql
Exemple : Afficher la progression d’une recherche vectorielle avec Chainlit
Voici comment afficher un message de progression pendant une recherche dans une base vectorielle, puis mettre à jour le step avec la liste des documents trouvés :
import chainlit as cl
@cl.on_messageasync def main(message: cl.Message): # Création du step avec le message initial async with cl.Step(name="Recherche RAG") as step: step.input = message.content step.output = "🔎 Recherche dans la base vectorielle..."
# Ici, effectuez la recherche dans la base vectorielle docs = await search_vector_db(message.content) # À adapter à votre code
# Préparez la liste des liens trouvés if docs: liens = "\n".join([f"- [{doc.title}]({doc.url})" for doc in docs]) step.output = f"✅ Documents trouvés :\n{liens}" else: step.output = "Aucun document trouvé."
# Met à jour le step dans l'UI await step.update()
Création de la base PostgreSQL
Connectez-vous à votre serveur PostgreSQL (local ou distant) avec psql
:
sudo -u postgres psql
Ensuite, créez une base de données dédiée pour Chainlit :
CREATE DATABASE chainlit;
Créez ensuite un utilisateur dédié avec les droits appropriés :
CREATE USER chainlit_user WITH PASSWORD 'votre_mot_de_passe';
GRANT CONNECT ON DATABASE chainlit TO chainlit_user;
Connectez-vous à la base et créez le schéma de stockage :
\c chainlit
CREATE SCHEMA db;
GRANT USAGE, CREATE ON SCHEMA db TO chainlit_user;
🔐 Configuration des droits et environnement
Dans le fichier .env
de votre projet, ajoutez la variable suivante :
DATABASE_URL=postgresql://chainlit_user:votre_mot_de_passe@localhost:5432/chainlit
Assurez-vous que votre base PostgreSQL autorise les connexions via TCP depuis votre application. Vérifiez le fichier pg_hba.conf
si nécessaire.