Chatbot avec mémoire
Objectif du Workflow
Simple LLM avec Groq
Ce simple workflow permet de mettre en oeuvre un robot de chat avec des connaissances plutôt agnostiques.
Description du workflow
Le Workflow comporte peu de composants :
- Un chat permettant l'interaction avec l'utilisateur.
- Un LLM, ici des modèles proposés gratuitement par la société Groq permettant de réaliser de l'inférence à partir des données provenant du chat.
- Une base de donnée simple s'appuyant sur "Redis" pour stocker les données.
- Un tool wikipedia permettant d'aiguiller les requêtes vers la célèbre encyclopedie interactive.
A faire avant de commencer
Installer n8n
Uniquement si vous ne l'avez pas encore fait
Clé API Groq
Se connecter sur la console Groq et obtenir un clé API afin de renseigner les "credentials" dans n8n.
Confirmation d'envoi de courriel
Information
N'oubliez pas de déclarer vos "credentials" dans n8n afin que le composant puisse fonctionner normalement.
Installer Redis localement
Il est impératif de créer un nouveau service "Redis" local afin de pouvoir stocker les éléments conversationnels du chat en tant que mémoire.
Fichiers utilisés
Voici les lignes à ajouter dans votre docker-compose.yml initial de n8n.
Danger
Il est impératif de changer le mot de passe de votre instance "Redis".
Information
N'oubliez pas de déclarer vos "credentials" dans n8n afin que le composant puisse fonctionner normalement.
Mise en oeuvre
Copie des fichiers directement depuis git et ajout dans notre docker-compose.yml
cd tuto-n8n-simple
URL="https://gitea.ia86.cc/perso/tuto-n8n-chatbotv1/raw/branch/main/docker-compose.add.yml"
CONTENT="$(wget -qO- "${URL}")\n\nvolumes:\n%VOL%"
CONTENT_ESCAPED=$(echo "${CONTENT}" | awk '{printf "%s\\n", $0}' | sed 's/\\/\\\\/g; s/\//\\\//g')
LABEL=$(echo "${CONTENT}"|head -1|sed "s/#=== //")
VOLUME=$(echo "${CONTENT}"|grep " \+volumes:$" -A1|grep -v " \+volumes:"|sed 's/ *- *\([a-zA-Z0-9_-]*\):.*/\1/')
echo -en "$(cat docker-compose.yml|sed "s/^volumes:$/${CONTENT_ESCAPED}/"|sed "s/%VOL%./ ${VOLUME}: #${LABEL}/")" > docker-compose.yml
(re)Lancement de la pile docker-compose
Vérification du bon fonctionnement, il doit y avoir un nouveau conteneur redis_mem
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e8a2e9c503a7 redis:6-alpine "docker-entrypoint.s…" 5 seconds ago Up 5 seconds (healthy) 6379/tcp redis_mem
a921b6c6d5a9 docker.n8n.io/n8nio/n8n:1.46.0 "tini -- /docker-ent…" 2 hours ago Up 2 hours (healthy) 0.0.0.0:5678->5678/tcp n8n
07fedd9f82e1 redis:6-alpine "docker-entrypoint.s…" 2 hours ago Up 2 hours (healthy) 6379/tcp n8n_redis
ce562b350902 postgres:16 "docker-entrypoint.s…" 2 hours ago Up 2 hours (healthy) 5432/tcp n8n_postgresql
Suppression de Redis (optionnel)
Si vous ne souhaitez plus utiliser redis pour stocker les conversations antérieures ou si vous souhaitez supprimer complètement ce workflow.
Retour à ma version initiale de n8n
En utilisant Git, retour à la version initiale et suppression des conteneurs orphelins
git reset --hard
docker compose up -d --remove-orphans
docker volume rm tuto-n8n-simple_redis_storage_mem
Suppression uniquement de redis_mem
Dans le cas où vous auriez installé autre chose entre temps...et vous ne souhaitez pas revenir à la version initiale de n8n
NAME="redis_mem"
CONTENT=$(cat docker-compose.yml|sed "/#=== ${NAME}/,/#===/d"|grep -v "#${NAME}")
echo "${CONTENT}" > docker-compose.yml
docker compose up -d --remove-orphans
docker volume rm tuto-n8n-simple_redis_storage_mem
Ressources
Plan des services et ressources utilisés
flowchart TD
C[docker-compose.yml] --> D[n8n_postgresql]
C --> E[n8n_redis]
C --> F[n8n]
C --> L[redis_mem]
D -->|Volumes| G[db_storage:/var/lib/postgresql/data]
E -->|Volumes| H[redis_storage:/data]
F -->|Volumes| I[n8n_storage:/home/node/.n8n]
L -->|Volumes| M[redis_storage_mem:/data]
D -->|Networks| J[web]
E -->|Networks| J
F -->|Networks| J
F -->|Networks| K[internet]
L -->|Networks| J
style C fill:#bbf,stroke:#333,stroke-width:2px
style D fill:#cfc,stroke:#333,stroke-width:2px
style E fill:#cfc,stroke:#333,stroke-width:2px
style F fill:#cfc,stroke:#333,stroke-width:2px
style G fill:#ffc,stroke:#333,stroke-width:1px
style H fill:#ffc,stroke:#333,stroke-width:1px
style I fill:#ffc,stroke:#333,stroke-width:1px
style J fill:#fcc,stroke:#333,stroke-width:1px
style K fill:#fcc,stroke:#333,stroke-width:1px
style L fill:#cfc,stroke:#333,stroke-width:1px
style M fill:#ffc,stroke:#333,stroke-width:2px
Workflow
Copiez-coller le workflow dans n8n...
Configuration finale dans n8n
Il convient de rajouter les "credentials" et finaliser la configuration du workflow.