Wiki LLM selon Karpathy

Bonjour, les uns et les autres.
Connaissez-vous ce moment… vous lisez une feuille sèche… une seule page et puis dans votre cerveau se développe quelque chose comme si vous regardiez à travers un télescope vers Andromède et que l’immensité de l’univers se déployait.
C’est ce qui m’est arrivé avec une information sur le LLM Wiki selon Karpathy.

Qui diable est ce Karpathy ?

Oups, un garçon brillant apparemment. Il a en fait décrit, plus ou moins dans un croquis, comment nous pouvons diviser et répartir les informations de manière à ce qu’elles soient conservées, exploitables et utilisables même à l’avenir :

Mieux connu sous le nom de LLM Wiki.

Les principes de base, à mon avis :

  1. Les données /raw restent intactes, en lecture seule, qui sait ce qui viendra dans 20 ans.

  2. Ensuite, dans une deuxième couche, la représentation actuelle, ici aussi du texte pur sous forme de fichier md

  3. Dans la troisième couche, l’édition, le traitement et l’évaluation par l’IA

D’une certaine manière, cela m’a inspiré. Dans ma famille, il y a encore une arrière-grand-mère, encore assez en forme pour utiliser un dictaphone.

Mais le petit-fils de cinq ans est aussi déjà là, les vieilles histoires, expériences et recettes et documents disparaîtront cependant avec une probabilité quasi certaine dans les 10 ans.

Puis nous ajoutons une pincée d’intérêt de ma part et cela commence : un wiki pour notre famille doit être créé, exactement selon ces principes de base. La voix de l’arrière-grand-mère doit être préservée, une IA doit évaluer les données, créer un wiki et répondre aux questions éventuellement avec la voix de l’arrière-grand-mère.

C’est exactement ce que je veux vous présenter ici dans un ordre libre :

Un modèle de travail, matériel le plus simple et le moins coûteux, cela prendra plus de temps et parfois l’IA hallucine ou invente certaines choses, mais c’est parti :

Condition :
Tout est local, pas d’Internet, pas d’inscription, pas de jeton API, personne ne doit se soucier de ce qu’un des conteurs a à dire.
Matériel : En tant que modèle de travail, le matériel existant doit pouvoir être utilisé en échange de temps, donc le mini-ordinateur peut bien travailler toute une nuit. Je vais alors aller dormir.
Il ne devrait pas y avoir qu’un wiki à la fin, mais des questions posées, par exemple : « Raconte-moi une histoire de ma grand-mère avec la voix de grand-mère » doivent / doivent être possibles.

Étape 1 :

Mini PC, système Fedora, 8 Go de mémoire de travail.
Pas de CPU, pas de GPU RAM… Gimmick pour les pros :wink: :wink: :joy:

Étape 2 :

Nous avons besoin d’un Ollama, ici à titre d’exemple pour Fedora, mais en même temps avec la solution de la difficulté du commutateur virtuel QNAP (tout dans le même réseau) :

============================================================

2/3: Ollama (Serveur KI)

Exécute les modèles de langage et le modèle d'intégration.

Démarre en second.

============================================================

services:
test-ollama:
image: docker.io/ollama/ollama:latest

# Ce nom sera utilisé plus tard dans AnythingLLM comme adresse :
# http://test-ollama:11434
container_name: test-ollama

restart: unless-stopped
user: "root"

ports:
  # Accessible de l'extérieur, par exemple pour d'autres appareils sur le réseau domestique.
  # Sur Fedora, également autoriser dans le pare-feu :
  #   sudo firewall-cmd --permanent --add-port=11434/tcp
  #   sudo firewall-cmd --reload
  - "11434:11434"

volumes:
  # Les modèles téléchargés se trouvent ici et restent conservés lors
  # des redémarrages. ":Z" à cause de SELinux.
  - /srv/ki/ollama:/root/.ollama:Z

environment:
  # Taille de la fenêtre de texte par requête. Ollama utilise sinon une
  # petite valeur par défaut. 8192 est un compromis pour 8 Go de RAM,
  # une valeur plus grande nécessite beaucoup plus de mémoire.
  # Contrôle après le démarrage : podman exec -it test-ollama ollama ps
  - OLLAMA_CONTEXT_LENGTH=8192

networks:
  - my-ki-netz

networks:
my-ki-netz:
external: true

Dans Ollama, vous tirez votre modèle adapté à la mémoire. Avec 8 Go de RAM, vous pouvez vous attendre à : temps de réponse long et nombreuses hallucinations :joy:

Étape 3 : Ensuite, vous aurez bien sûr besoin d’un Podman/Docker pour afficher le wiki :

============================================================

Wiki-Viewer (SilverBullet)

Affiche les pages Markdown du wiki dans le navigateur, afin que

la famille n'ait rien à installer. Lecture seule.

Appel dans le réseau domestique :  http://:3000

Ouvrir le pare-feu sur Fedora :

firewall-cmd --permanent --add-port=3000/tcp

firewall-cmd --reload

Remarque : SilverBullet est conçu pour HTTPS. L'affichage peut

fonctionner de manière limitée via HTTP pur. Cela ne se voit

qu'après un test dans le navigateur.

============================================================

services:
wiki-viewer-thomas:
# Nom complet de l'image avec le registre, sinon Podman demande.
image: 

container_name: wiki-viewer-thomas
restart: unless-stopped

ports:
  # Gauche : port sur le serveur, droite : port dans le conteneur.
  # Pour un deuxième wiki (par exemple marlis) une copie de ce
  # fichier avec un autre container_name et port, par exemple "3001:3000".
  - "3000:3000"

volumes:
  # Seuls les dossiers wiki/ sont affichés, PAS raw/ (c'est là que se
  # trouvent les textes originaux non vérifiés).
  # ":z" (petit) au lieu de ":Z" : le dossier est également utilisé par wiki.py et
  # plus tard éventuellement par un conteneur de maintenance. Avec ":Z"
  # (grand) SELinux le donnerait exclusivement à ce seul conteneur.
  - /srv/ki/llm-wiki/rueger/wiki:/space:z

environment:
  # Accès pour la famille en tant que nom d'utilisateur:mot de passe.
  # Veuillez modifier. Ne pas choisir de mot de passe avec deux-points ou
  # des espaces.
  - SB_USER=famille:mannheim-2007

  # Protection en écriture : les pages ne peuvent être consultées dans le
  # navigateur, mais pas modifiées. Elles sont exclusivement entretenues par wiki.py.
  - SB_READ_ONLY=true

  - SB_INDEX_PAGE=web/index

… et voici ce que vous obtenez :

Une porte de réfrigérateur, pleine d’aimants et de notes :

Dans la partie supérieure, les boutons ronds sont des « aimants » avec des liens vers les personnes.
En dessous, une série de « notes » avec des liens vers
Audio : liste de toutes les enregistrements audio inclus.
Personnes : liste de toutes les personnes générées par l’IA
Lieux : de même, par l’IA, tous les lieux
Événements : de même, IA, tous les événements trouvés
Histoires : toutes les histoires
Recettes : les recettes de cuisine de grand-mère
Sources : sera remplacé par des documents (acte de mariage, etc. etc.)
En dessous :
Lien vers un formulaire de saisie, ici vous pouvez poser des questions textuelles à l’IA, elle répond en fonction de son modèle, de sa RAM et du temps, généralement de manière appropriée :wink:

Dans la partie inférieure de notre porte de réfrigérateur, un peu d’aide et de soutien :

À venir : À entrer manuellement si un tag est découvert dans le wiki, il apparaît ici dans le mois de l’appel, c’est-à-dire : Si quelqu’un ouvre le wiki en novembre, il obtient tous les rendez-vous mentionnés pour le mois de novembre, de l’anniversaire de décès au jour de mariage.
En dessous, encore des liens pour
Aide
Données
Administration.

Le chemin est fondamentalement toujours le même, les données vont vers /raw. C’est là que l’IA récupère les nouveaux fichiers, les traite et génère le wiki.

Tout cela avec un seul script… mais cela viendra plus tard.

Comme toujours : suggestions, conseils, compléments bienvenus.
Salutations
Tom

Oups, la section image est manquante dans le YAML pour le Wiki Viewer :

services:
wiki-viewer-thomas:
# Nom complet de l'image avec le registre, sinon Podman demande.
image: Package silverbullet · GitHub
container_name: wiki-viewer-thomas
restart: unless-stopped