Section 11.5.3 : Architecture technique — Concevoir sa solution
🎯 Objectif pédagogique
Concevoir l'architecture technique d'une application IA : diagramme de composants, choix de stack, flux de données, et points d'intégration. Vous serez capable de dessiner l'architecture de votre projet avant de coder.
Dessiner avant de coder
Marc a son cadrage. Maintenant, il dessine l'architecture : quels composants, comment ils communiquent, quelles technologies. Un diagramme d'architecture, c'est le plan de l'architecte — sans lui, vous construisez à l'aveugle.
Architecture globale
┌──────────────────────────────────────────────────────────┐
│ CareerBot Pro — Architecture │
├──────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌────────────────────────────┐ │
│ │ FRONTEND │ │ BACKEND │ │
│ │ (Streamlit) │ │ │ │
│ │ │───▶│ app.py │ │
│ │ - Chat UI │ │ ├── agent.py (ReAct loop) │ │
│ │ - Sidebar │ │ ├── tools.py (functions) │ │
│ │ - Stats │ │ ├── guardrails.py │ │
│ │ - Upload │ │ ├── memory.py │ │
│ └──────────────┘ │ └── knowledge.py │ │
│ └──────┬────────┬──────────────┘ │
│ │ │ │
│ ┌──────▼──┐ ┌──▼───────────┐ │
│ │ OpenAI │ │ ChromaDB │ │
│ │ API │ │ (Vectors) │ │
│ │ │ │ │ │
│ │ GPT-4o │ │ Embeddings │ │
│ │ Embed │ │ Collections │ │
│ └─────────┘ └───────────────┘ │
│ │
└──────────────────────────────────────────────────────────┘
Flux de données détaillé
# Flux pour une question utilisateur :
# 1. INPUT : User tape "Quel salaire pour un Data Analyst ?"
# → Streamlit capture via st.chat_input()
# → Passe à guardrails.check_input()
# 2. GUARDRAILS INPUT :
# → PII filter : masque emails, téléphones
# → Injection check : bloc les patterns dangereux
# → Length check : max 5000 chars
# → Si bloqué → message d'erreur, pas d'appel API
# 3. AGENT :
# → System prompt + historique + user message
# → Appel OpenAI avec tools
# → Le modèle décide : tool_call "search_knowledge_base"(query="salaire Data Analyst")
# 4. TOOL EXECUTION :
# → knowledge.py : ChromaDB.query(query, n_results=3)
# → Retourne les 3 chunks les plus pertinents
# 5. AGENT (suite) :
# → Reçoit les chunks comme contexte
# → Génère une réponse sourcée
# → Pas de tool_call → réponse finale
# 6. GUARDRAILS OUTPUT :
# → Vérifie que la réponse ne contient pas le system prompt
# → Vérifie le ton et la cohérence
# 7. OUTPUT : Streamlit affiche la réponse en streaming
Choix de stack justifiés
| Composant | Technologie | Justification |
|---|---|---|
| Frontend | Streamlit | Prototypage rapide, Python natif, zéro JS |
| LLM | OpenAI GPT-4o | Meilleur rapport qualité/prix, function calling natif |
| Embeddings | text-embedding-3-small | Pas cher (0.02$/M tokens), bonne qualité |
| Vector DB | ChromaDB | Simple, local, Python natif, pas de serveur |
| Langage | Python 3.11+ | Écosystème IA dominant, bibliothèques matures |
| Déploiement | Streamlit Cloud | Gratuit, déploiement Git push, zéro DevOps |
| Secrets | .env + dotenv | Standard, sécurisé (.gitignore) |
Structure des données
# Modèles de données (pas besoin d'ORM pour un MVP)
# Message de conversation
message = \{
"role": "user" | "assistant" | "system" | "tool",
"content": "texte du message",
"timestamp": "2025-01-15T14:30:00",
"tool_calls": None | [...]
\}
# Profil utilisateur
user_profile = \{
"background": "Finance, 8 ans",
"target_role": "Data Analyst",
"skills": ["Python", "SQL", "Excel"],
"location": "Paris",
"salary_expectation": "45-55k€"
\}
# Document de la base de connaissances
knowledge_doc = \{
"id": "salary_data_analyst_2025",
"content": "Le salaire moyen...",
"metadata": \{
"category": "salaires",
"last_updated": "2025-01",
"source": "Glassdoor + INSEE"
\}
\}
Architecture = Communication
Le diagramme d'architecture n'est pas juste pour vous — c'est un outil de communication. En entretien, si on vous demande "Comment est architecturé votre projet ?", vous montrez le diagramme et expliquez en 2 minutes. C'est ce qui distingue un codeur d'un ingénieur.
🏋️ Exercice pratique (25 minutes)
- →Dessinez le diagramme d'architecture de votre projet (papier ou outil en ligne)
- →Listez chaque composant et justifiez votre choix de technologie
- →Documentez le flux de données pour une requête utilisateur
- →Identifiez les points de défaillance possibles (API down, ChromaDB vide)
Pourquoi dessiner l'architecture AVANT de coder ?