|
|
пре 2 недеља | |
|---|---|---|
| .. | ||
| deploy | пре 2 недеља | |
| docs/graphs | пре 2 недеља | |
| src | пре 2 недеља | |
| tests | пре 2 недеља | |
| .env.example | пре 2 недеља | |
| .gitignore | пре 2 недеља | |
| .pre-commit-config.yaml | пре 2 недеља | |
| README.md | пре 2 недеља | |
| main.py | пре 2 недеља | |
| pyproject.toml | пре 2 недеља | |
| uv.lock | пре 2 недеља | |
Formation Agents IA · LangGraph · Projet fil rouge
Implémenter un agent ReAct capable de répondre à des questions sur un catalogue produit, en utilisant des outils LangGraph.
Les tests vous disent si votre implémentation est correcte. Le formateur a la correction en cas de blocage.
# 1. Installer les dépendances
uv sync --extra dev
# 2. Copier la configuration
cp .env.example .env
# Vérifier que MODEL_NAME correspond au modèle téléchargé
# 3. Démarrer Ollama
ollama serve &
# 4. Vérifier qu'Ollama répond
curl http://localhost:11434/v1/models
src/tools/catalogue.py4 fonctions marquées TODO (dans l’ordre recommandé) :
| Fonction | Difficulté | Tests |
|---|---|---|
search_product() |
⭐ | TestSearchProduct (5 tests) |
calculate_price() |
⭐⭐ | TestCalculatePrice (7 tests) |
list_products() |
⭐⭐ | TestListProducts (6 tests) |
check_stock() |
⭐ bonus | TestCheckStock (5 tests) |
src/models/provider.py1 fonction get_llm() : lire les variables d’env et retourner un ChatOpenAI.
src/agents/react_agent.py3 fonctions dans l’ordre :
| Fonction | Ce qu’elle fait |
|---|---|
should_continue() |
Décide si l’agent utilise un outil ou s’arrête |
agent_node() |
Appelle le LLM et retourne sa décision |
build_agent() |
Assemble le graphe (noeuds + edges + compilation) |
# Tous les tests unitaires (Ollama non requis)
uv run pytest tests/unit/ -v
# Un module à la fois
uv run pytest tests/unit/test_tools.py -v
uv run pytest tests/unit/test_agent.py -v
# Un test précis
uv run pytest tests/unit/test_tools.py::TestSearchProduct::test_found_by_partial_name -v
# Mode interactif (une fois react_agent.py implémenté)
uv run python main.py
# Question directe
uv run python main.py --ask "Quel est le prix d'une souris ?"
# Avec traces des outils appelés
uv run python main.py --verbose
# Visualiser le graphe LangGraph
uv run python main.py --visualize
Questions de test suggérées :
Quel est le prix d'un laptop pro ?
Je veux 3 souris avec une remise de 15%, combien ça coûte ?
Quels produits audio avez-vous ?
Puis-je commander 10 écrans 4K ?
Avez-vous des produits en rupture de stock ?
# Linting
uv run ruff check src/
# Typage strict
uv run mypy src/
⬜ Étape 1a : search_product() → TestSearchProduct passe (5 tests)
⬜ Étape 1b : calculate_price() → TestCalculatePrice passe (7 tests)
⬜ Étape 1c : list_products() → TestListProducts passe (6 tests)
⬜ Étape 2 : get_llm() → provider.py implémenté
⬜ Étape 3a : should_continue() → TestShouldContinue passe (4 tests)
⬜ Étape 3b : agent_node() → TestAgentNode passe (4 tests)
⬜ Étape 3c : build_agent() → TestBuildAgent passe (3 tests)
⬜ Bonus : check_stock() → TestCheckStock passe (5 tests)
⬜ Livrable : premier commit poussé sur Git
| Fichier | Rôle |
|---|---|
src/tools/catalogue.py |
CATALOGUE dict + squelettes |
tests/unit/test_tools.py |
Spécification des outils |
tests/unit/test_agent.py |
Spécification du graphe |
main.py |
CLI interactif complet |
pyproject.toml |
Dépendances + config |
.env.example |
Variables d’environnement |
Powered by TurnKey Linux.