Modèle / jeu de données
PacktPublishing/LLM-Engineers-Handbook avatar
PacktPublishing/LLM-Engineers-Handbook

LLM Engineer's Handbook : le dépôt compagnon d'un livre, pas un framework

The LLM's practical guide: From the fundamentals to deploying advanced LLM and RAG apps to AWS using LLMOps best practices

5 334 étoiles1 292 forksPythonMIT

En bref

De quoi s’agit-il ?
Le dépôt officiel du livre de Paul Iusztin et Maxime Labonne enchaîne collecte de données, entraînement, RAG, déploiement AWS et monitoring dans un seul projet Python. C'est un support pédagogique qui suppose un compte sur sept services externes avant de produire quoi que ce soit.
À qui s’adresse-t-il ?
Ce dépôt s'adresse à des ingénieurs qui veulent lire un système LLM complet de bout en bout et qui acceptent de créer des comptes HuggingFace, Comet ML, Opik, ZenML, AWS, MongoDB et Qdrant pour cela. Ceux qui cherchent une bibliothèque à importer dans un projet existant, ou un RAG minimal sans infrastructure cloud, doivent passer leur chemin : le README ne décrit aucune installation hors ligne.
Puis-je l’utiliser commercialement ?
Oui. MIT est une licence permissive : vous pouvez utiliser, modifier et vendre un logiciel qui en dépend, à condition de conserver les mentions de droit d’auteur et de licence.
Est-il encore maintenu ?
Oui. Les derniers commits datent d’il y a 147 jours.
En quel langage est-il écrit ?
Principalement Python, d’après les statistiques de langage de GitHub.

Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 15 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.

ANALYSE OPEN SOURCE APPROFONDIE

Un dépôt qui suit un livre, avec la dette que cela implique

Le README est explicite sur la relation entre le code et l'ouvrage : le dépôt est maintenu activement et peut contenir des mises à jour absentes du livre, avec la consigne de toujours s'y référer pour la dernière version du code. Cette phrase a une conséquence pratique que beaucoup de lecteurs sous-estiment. Un chapitre imprimé fige une version des dépendances et des chemins d'import ; le dépôt, lui, bouge. Si vous suivez le livre page à page en 2026, attendez-vous à des écarts sur les noms de modules, les signatures de fonctions et les configurations ZenML. L'inverse est vrai aussi : le code seul, sans le livre, laisse des zones grises. Le README renvoie au chapitre 2 pour la présentation de chaque outil et aux chapitres 10 et 11 pour les guides pas à pas de mise en place. Autrement dit, la documentation d'installation complète n'est pas dans le dépôt. C'est un choix assumé de publication, pas un oubli, mais il faut le savoir avant de cloner.

Le problème visé : montrer un système LLM entier plutôt qu'un composant

La plupart des dépôts Python autour des LLM traitent un morceau : une bibliothèque de retrieval, un script de fine-tuning, un serveur d'inférence. Ici, la liste des fonctionnalités couvre la chaîne entière, de la collecte et génération de données jusqu'au monitoring, en passant par l'entraînement, un système RAG simple, un déploiement AWS et un cadre de tests et d'évaluation. Le public visé est donc l'ingénieur qui sait déjà écrire du Python et qui veut voir comment ces briques s'articulent dans un projet unique, avec des frontières de responsabilités explicites. Le modèle final entraîné est publié séparément sur Hugging Face sous le nom mlabonne/TwinLlama-3.1-8B-DPO, ce qui permet de dissocier l'étude du pipeline d'entraînement de son exécution réelle. C'est un point important : on peut lire et comprendre la partie entraînement sans jamais lancer un job GPU.

Architecture : une séparation DDD et un sens de dépendance unique

Le paquet principal llm_engineering est découpé en quatre sous-ensembles : domain pour les entités métier, application pour la logique et les crawlers ainsi que l'implémentation RAG, model pour l'entraînement et l'inférence, infrastructure pour les intégrations externes (AWS, Qdrant, MongoDB, FastAPI). Le README précise le sens des imports : infrastructure, puis model, puis application, puis domain. Cette direction unique est le point le plus intéressant du dépôt sur le plan technique. Elle signifie que le domaine ne connaît ni Qdrant ni MongoDB, et que remplacer une base vectorielle revient en principe à toucher infrastructure sans propager de changement vers le bas. En pratique, la règle n'est pas vérifiable depuis le README seul : il faudrait inspecter les imports réels pour confirmer qu'aucune fuite n'existe. C'est exactement le genre de vérification que ce dépôt est fait pour enseigner, et il serait cohérent de commencer par là. Autour du paquet, pipelines contient les pipelines ZenML qui servent de point d'entrée à tout le cycle de vie, steps contient les composants réutilisables, tests quelques exemples utilisés dans la CI, et code_snippets des exemples autonomes exécutables indépendamment.

Les outils en ligne de commande et le rôle de chacun

Le dossier tools contient quatre scripts dont le README décrit la fonction. run.py est le point d'entrée pour lancer les pipelines ZenML. ml_service.py démarre le serveur d'inférence REST. rag.py illustre l'usage du module de retrieval. data_warehouse.py sert à exporter ou importer les données du data warehouse MongoDB via des fichiers JSON. Ce dernier est le plus utile au quotidien : il donne une porte de sortie vers des fichiers plats, ce qui évite de dépendre d'une instance MongoDB pour inspecter ou sauvegarder un jeu de données. Le dossier configs contient des fichiers YAML ZenML qui contrôlent l'exécution des pipelines et des steps. C'est le mécanisme de configuration central du projet, et c'est aussi ce qui rend le dépôt dépendant d'une version précise de ZenML : un changement de schéma de configuration côté ZenML casse les fichiers du dépôt, indépendamment de toute modification des auteurs.

Installation : des versions épinglées et sept services à provisionner

Le README liste les dépendances locales avec des versions minimales : pyenv en 2.3.36 ou plus (optionnel), Python 3.11, Poetry entre 1.8.3 et 2.0 exclu, Docker en 27.1.1 ou plus, AWS CLI en 2.15.42 ou plus, Git en 2.44.0 ou plus. La contrainte Poetry est une fourchette fermée vers le haut, ce qui n'est pas anodin : Poetry 2.x n'est pas accepté. L'installation commence par un git clone du dépôt suivi d'un cd dans le répertoire, puis la préparation de l'environnement Python. Le README propose deux voies : utiliser une installation globale si Python 3.11 est présent, avec une vérification par python --version qui doit afficher 3.11.x, ou passer par pyenv, présenté comme recommandé. Côté cloud, la liste est longue : HuggingFace pour le registre de modèles, Comet ML pour le suivi d'expériences, Opik pour le monitoring de prompts, ZenML pour l'orchestration et la couche d'artefacts, AWS pour le calcul et le stockage, MongoDB comme base NoSQL, Qdrant comme base vectorielle, et GitHub Actions pour la CI/CD. Le README précise que rien n'est à faire dans un premier temps et que les chapitres 10 et 11 guident la mise en place. Retenez surtout ceci : aucun chemin d'installation entièrement local n'est décrit dans le matériel fourni.

Ce que ce dépôt n'est pas, et par quoi le remplacer

Le cas où ce projet est le mauvais outil est simple à énoncer. Si votre objectif est d'ajouter une recherche sémantique à une application existante, vous n'avez pas besoin de ZenML, de MongoDB, de Qdrant, d'AWS, de Comet ML et d'Opik. Une bibliothèque comme LlamaIndex ou LangChain couvre le retrieval en quelques dizaines de lignes et s'installe avec pip, sans orchestrateur ni compte cloud. La différence d'approche est nette : ici, le RAG est un étage d'un système plus vaste, instrumenté et orchestré, où chaque exécution produit des artefacts traçables. Là, le retrieval est une fonction que vous appelez. Le coût de la première approche se paie en configuration et en dépendances externes ; celui de la seconde, en observabilité et en reproductibilité, que vous devrez reconstruire vous-même le jour où vous voudrez comparer deux versions d'un index. Le README qualifie d'ailleurs le RAG de ce dépôt de simple, ce qui est un aveu utile : ne l'adoptez pas pour ses performances de retrieval, adoptez-le pour la façon dont le retrieval s'insère dans une chaîne outillée. Un autre cas de rejet : si vous ne pouvez pas créer de comptes sur des services tiers, le dépôt perd l'essentiel de sa valeur démonstrative. Les tests présents dans tests/ sont décrits comme quelques exemples utilisés dans la CI, pas comme une suite complète, donc ne comptez pas sur eux pour valider une modification de votre côté.

Maintenance, licence et ce qu'il faut vérifier avant d'investir du temps

Le dépôt n'est pas archivé et le README indique qu'il est maintenu activement. Aucune release n'a été récupérée dans les métadonnées fournies, donc il n'existe pas de version étiquetée à laquelle s'accrocher : vous suivez la branche main. Pour un support pédagogique, c'est acceptable ; pour un projet qui sert de base à du code de production, c'est un risque de dérive silencieuse. La licence est MIT, ce qui autorise la réutilisation, la modification et la redistribution, y compris dans un contexte commercial, à condition de conserver l'avis de copyright et le texte de licence. Le README ne contient aucune mention de fichiers de licence supplémentaires ni de conditions propres aux services tiers ; or ces services ont leurs propres conditions et leurs propres coûts, et la licence MIT du dépôt ne les couvre évidemment pas. Je ne peux pas donner d'avis juridique ici, seulement signaler que la séparation entre le code sous MIT et les plateformes qu'il appelle mérite d'être lue avant tout usage commercial. Le point à vérifier en premier, si vous voulez évaluer la solidité du projet pour votre usage, n'est pas le nombre d'étoiles mais la cohérence entre les fichiers de configs/ et la version de ZenML que votre installation va résoudre : c'est là que se logera la première incompatibilité.

Conclusion éditoriale

Ce dépôt s'adresse à des ingénieurs qui veulent lire un système LLM complet de bout en bout et qui acceptent de créer des comptes HuggingFace, Comet ML, Opik, ZenML, AWS, MongoDB et Qdrant pour cela. Ceux qui cherchent une bibliothèque à importer dans un projet existant, ou un RAG minimal sans infrastructure cloud, doivent passer leur chemin : le README ne décrit aucune installation hors ligne. Avant de cloner, vérifiez que votre machine dispose de Poetry en version >= 1.8.3 et < 2.0 et de Python 3.11, puis lisez le fichier configs/ correspondant au pipeline que vous voulez lancer, car c'est lui qui détermine les services réellement sollicités.

Sources officielles

  1. Issues
  2. License: MIT
  3. PacktPublishing/LLM-Engineers-Handbook on GitHub
  4. Project website
  5. README
Notes de la communauté

Notes de la communauté