Chatbot avec mémoire
Objectif du Workflow
Section intitulée « 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
Section intitulée « 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
Section intitulée « A faire avant de commencer »Installer n8n
Section intitulée « Installer n8n »Uniquement si vous ne l’avez pas encore fait
Clé API Groq
Section intitulée « Clé API Groq »Se connecter sur la console Groq et obtenir un clé API afin de renseigner les “credentials” dans n8n.
Invite de login
Confirmation d’envoi de courriel
Courriel de confirmation
Menu des clés API
Création d’un clé API
API générée
Gestion des clés API
Info
N’oubliez pas de déclarer vos “credentials” dans n8n afin que le composant puisse fonctionner normalement.
Installer Redis localement
Section intitulée « 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
Section intitulée « Fichiers utilisés »Voici les lignes à ajouter dans votre docker-compose.yml initial de n8n.
...
redis_mem:
image: redis:6-alpine
container_name: redis_mem
restart: always
volumes:
- redis_storage_mem:/data
command: redis-server --requirepass mypassword
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
interval: 5s
timeout: 5s
retries: 10
networks:
- web
Danger
Il est impératif de changer le mot de passe de votre instance “Redis”.
Info
N’oubliez pas de déclarer vos “credentials” dans n8n afin que le composant puisse fonctionner normalement.
Mise en oeuvre
Section intitulée « Mise en oeuvre »Copie des fichiers directement depuis git et ajout dans notre docker-compose.yml
cd tuto-n8n-simpleURL="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
docker compose up -dVérification du bon fonctionnement, il doit y avoir un nouveau conteneur redis_mem
# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESe8a2e9c503a7 redis:6-alpine "docker-entrypoint.s…" 5 seconds ago Up 5 seconds (healthy) 6379/tcp redis_mema921b6c6d5a9 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 n8n07fedd9f82e1 redis:6-alpine "docker-entrypoint.s…" 2 hours ago Up 2 hours (healthy) 6379/tcp n8n_redisce562b350902 postgres:16 "docker-entrypoint.s…" 2 hours ago Up 2 hours (healthy) 5432/tcp n8n_postgresqlSuppression de Redis (optionnel)
Section intitulée « 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
Section intitulée « Retour à ma version initiale de n8n »En utilisant Git, retour à la version initiale et suppression des conteneurs orphelins
git reset --harddocker compose up -d --remove-orphansdocker volume rm tuto-n8n-simple_redis_storage_memSuppression uniquement de redis_mem
Section intitulée « 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.ymldocker compose up -d --remove-orphansdocker volume rm tuto-n8n-simple_redis_storage_memRessources
Section intitulée « 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
Section intitulée « Workflow »Copiez-coller le workflow dans n8n…
{
"name": "Grocq with Redis",
"nodes": [
{
"parameters": {
"model": "llama3-groq-8b-8192-tool-use-preview",
"options": {},
"requestOptions": {}
},
"id": "6d86ea5c-a261-4f48-82e1-da8320a5a6dd",
"name": "Groq Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGroq",
"typeVersion": 1,
"position": [
820,
420
],
"credentials": {
"groqApi": {
"id": "u4SobGEjjuXQixeQ",
"name": "Groq account"
}
}
},
{
"parameters": {
"requestOptions": {}
},
"id": "6907b7b2-8d82-41d4-8736-f104826d7a81",
"name": "Redis Chat Memory",
"type": "@n8n/n8n-nodes-langchain.memoryRedisChat",
"typeVersion": 1.2,
"position": [
960,
420
],
"credentials": {
"redis": {
"id": "wWb5QYSGlU3ORgUe",
"name": "Redis account"
}
}
},
{
"parameters": {
"requestOptions": {}
},
"id": "93008494-1b42-4aab-8b5b-4c881089c0ef",
"name": "Wikipedia",
"type": "@n8n/n8n-nodes-langchain.toolWikipedia",
"typeVersion": 1,
"position": [
1060,
420
]
},
{
"parameters": {},
"id": "40147443-e116-43cf-91cd-9332a2db59fb",
"name": "When chat message received",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"typeVersion": 1,
"position": [
620,
200
],
"webhookId": "88dae1fe-0fe3-4443-a0a6-843bc2d02332"
},
{
"parameters": {
"agent": "conversationalAgent",
"options": {}
},
"id": "8780b31a-bb2c-4518-aaf3-54ce2997e4be",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 1.6,
"position": [
840,
200
]
}
],
"pinData": {},
"connections": {
"Groq Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Redis Chat Memory": {
"ai_memory": [
[
{
"node": "AI Agent",
"type": "ai_memory",
"index": 0
}
]
]
},
"Wikipedia": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"When chat message received": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "63d5135b-4d23-411f-bf3d-bbe0aad1bbbb",
"meta": {
"templateCredsSetupCompleted": true,
"instanceId": "366d92472788798a2a8c91dff5608f9b248c880970d12dcd224edfaeeb4a3df8"
},
"id": "NjsXIL9CS6JKbIqD",
"tags": []
}
Configuration finale dans n8n
Section intitulée « Configuration finale dans n8n »Il convient de rajouter les “credentials” et finaliser la configuration du workflow.
Ajout “credentials” Groq
Choix du LLM Groq
Ajout “credentials” Redis
Lancer le chat
Chatter avec l’IA