80 % des projets GenAI ne dépassent pas le stade du POC. Ce n’est pas un problème d’IA — c’est un problème d’ingénierie. Le modèle fonctionne dans un notebook, l’équipe data est enthousiaste, le comité de direction a vu la démo. Et puis tout s’arrête quand le DSI pose les bonnes questions : où sont stockées les données ? Qui a accès au modèle ? Combien ça coûte à l’échelle ? Comment on monitore les hallucinations ?
Ce guide répond à ces questions. Pas avec des slides — avec de l’architecture.
Le problème du passage en production
Un POC GenAI, c’est un script Python, un notebook Colab, et un appel API vers GPT-4 ou Gemini. Ça fonctionne. C’est impressionnant. Et c’est exactement ce qui ne peut pas aller en production.
Les raisons sont connues :
- Pas d’infrastructure : le POC tourne sur le laptop d’un data scientist.
- Pas de sécurité : les clés API sont en dur dans le code, les données transitent par des APIs tierces sans chiffrement.
- Pas d’observabilité : personne ne sait combien d’appels sont faits, combien coûtent-ils, ni si les réponses sont correctes.
- Pas de gouvernance : aucun audit trail, aucune traçabilité des décisions du modèle, aucune conformité RGPD ou AI Act.
La bonne nouvelle : GCP fournit tous les blocs nécessaires pour résoudre ces problèmes. La mauvaise : il faut savoir lesquels utiliser et comment les assembler.
Architecture cible
L’architecture de production d’un système GenAI sur GCP repose sur 5 couches :
1. Couche d’inférence — Vertex AI
Vertex AI est le point d’entrée. Il expose les modèles Google (Gemini Pro, Gemini Ultra) et les modèles tiers (Claude, Mistral via Model Garden) derrière une API unifiée.
Pourquoi Vertex AI et pas l’API directe de Google AI Studio ?
- VPC-SC (Virtual Private Cloud Service Controls) : les requêtes au modèle restent dans votre périmètre réseau. Aucune donnée ne sort vers l’internet public.
- IAM granulaire : chaque service, chaque utilisateur a des permissions spécifiques. Le modèle de facturation est lié au projet GCP, pas à une clé API partagée.
- Audit logging natif : chaque appel API est logué dans Cloud Audit Logs. Qui a appelé quoi, quand, avec quels paramètres.
- Quotas et rate limiting : configurables par projet, par modèle, par région.
Configuration recommandée :
# vertex-ai-config.yaml
endpoint:
region: europe-west1 # Données en Europe
model: gemini-1.5-pro-002
max_output_tokens: 8192
temperature: 0.1 # Production = déterminisme
safety_settings:
- category: HARM_CATEGORY_DANGEROUS_CONTENT
threshold: BLOCK_LOW_AND_ABOVE
2. Couche d’orchestration — Cloud Run + LangGraph
Le modèle seul ne fait rien d’utile. Il faut une couche d’orchestration qui gère :
- Le routage des requêtes vers le bon modèle
- La gestion du contexte (mémoire conversationnelle)
- L’appel aux outils (bases de données, APIs, systèmes internes)
- Les guardrails (validation, confirmation, fallbacks)
Cloud Run est le choix par défaut pour héberger cette couche :
- Scale-to-zero : pas de coût tant qu’il n’y a pas de trafic
- Auto-scaling : jusqu’à 1000 instances en cas de pic
- Cold start < 2s avec des images optimisées (distroless, multi-stage build)
- VPC Connector pour accéder aux ressources internes (Cloud SQL, Memorystore)
LangGraph est le framework d’orchestration recommandé :
- Graphes de décision explicites (pas de chaînes opaques)
- Nœuds d’interruption pour le human-in-the-loop
- Persistence d’état intégrée (checkpoints)
- Sous-graphes pour les flux complexes
3. Couche de données — Cloud SQL + AlloyDB
Les données de votre système GenAI se répartissent en 3 catégories :
| Type | Solution GCP | Usage |
|---|---|---|
| Données métier | Cloud SQL (PostgreSQL) | CRM, ERP, données structurées |
| Embeddings vectoriels | AlloyDB + pgvector | RAG, recherche sémantique |
| Cache conversationnel | Memorystore (Redis) | Sessions, mémoire court-terme |
| Documents source | Cloud Storage | PDFs, images, fichiers bruts |
AlloyDB mérite une attention particulière :
- Compatible PostgreSQL (migration transparente)
- Moteur vectoriel intégré (pgvector natif, optimisé Google)
- Performances 4x supérieures à Cloud SQL pour les requêtes vectorielles
- Pas besoin d’une base vectorielle séparée (Pinecone, Weaviate)
-- Création d'une table avec colonne vectorielle
CREATE TABLE documents (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
content TEXT NOT NULL,
embedding VECTOR(768), -- Dimension Vertex AI embeddings
metadata JSONB,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Index HNSW pour la recherche approximative
CREATE INDEX idx_documents_embedding
ON documents USING hnsw (embedding vector_cosine_ops)
WITH (m = 16, ef_construction = 200);
4. Couche de sécurité
La sécurité d’un système GenAI en production couvre 4 périmètres :
Périmètre réseau :
- VPC dédié avec sous-réseaux privés
- VPC Service Controls autour de Vertex AI, Cloud SQL, Cloud Storage
- Private Service Connect pour les endpoints Vertex AI
- Pas d’IP publique sur les services
Périmètre identité :
- Service accounts dédiés par service (pas de compte partagé)
- Workload Identity Federation pour les pipelines CI/CD
- IAM Conditions pour limiter l’accès par heure, IP source, ou attribut
- Pas de clés API en dur — Secret Manager uniquement
Périmètre données :
- CMEK (Customer-Managed Encryption Keys) via Cloud KMS
- DLP API pour scanner les prompts et réponses (PII, données sensibles)
- Data residency :
europe-west1pour toutes les ressources - Retention policies sur les logs et les données
Périmètre modèle :
- Safety filters Vertex AI activés
- Guardrails applicatifs (validation des entrées et sorties)
- Détection des prompt injections (pattern matching + classifieur)
- Rate limiting par utilisateur et par session
5. Couche d’observabilité
Vous ne pouvez pas exploiter ce que vous ne pouvez pas voir. L’observabilité d’un système GenAI va au-delà du monitoring classique :
Métriques techniques (Cloud Monitoring) :
- Latence P50/P90/P99 des appels Vertex AI
- Token count par requête (input + output)
- Taux d’erreur par modèle et par endpoint
- Coût par requête (tokens × prix unitaire)
Métriques métier (custom) :
- Taux de satisfaction utilisateur (thumbs up/down)
- Taux d’escalade vers un humain
- Taux d’hallucination détectée (via guardrails)
- Temps de résolution end-to-end
Traces (Cloud Trace + Langfuse) :
- Trace complète de chaque requête : prompt → modèle → outils → réponse
- Durée de chaque étape (embedding, retrieval, inference, post-processing)
- Contexte utilisé pour chaque réponse (chunks RAG, outils appelés)
# Exemple d'instrumentation avec Langfuse
from langfuse import Langfuse
langfuse = Langfuse(
public_key=os.environ["LANGFUSE_PUBLIC_KEY"],
secret_key=os.environ["LANGFUSE_SECRET_KEY"],
host="https://langfuse.your-domain.com" # Self-hosted
)
@langfuse.observe(name="process_query")
def process_query(user_query: str, session_id: str):
# La trace capture automatiquement :
# - Le prompt envoyé au modèle
# - Les tokens consommés
# - La latence
# - Les outils appelés
# - La réponse générée
...
Estimation des coûts
Le coût d’un système GenAI en production sur GCP se décompose en 4 postes :
| Poste | Service GCP | Estimation mensuelle |
|---|---|---|
| Inférence | Vertex AI (Gemini Pro) | 500 – 3 000 € |
| Compute | Cloud Run (2 services) | 50 – 200 € |
| Base de données | AlloyDB | 300 – 800 € |
| Stockage + réseau | Cloud Storage + egress | 50 – 100 € |
| Observabilité | Cloud Monitoring + Langfuse | 100 – 300 € |
| Total | 1 000 – 4 400 € /mois |
Ces estimations correspondent à un usage de 10 000 à 50 000 requêtes par mois. Le poste principal est toujours l’inférence — le nombre de tokens consommés.
Optimisations courantes :
- Cache sémantique (Memorystore) : -30 à -50 % sur les appels modèle pour les questions récurrentes
- Prompt compression : réduire le contexte RAG aux chunks les plus pertinents
- Modèle adapté : utiliser Gemini Flash pour les tâches simples (classification, extraction), Gemini Pro pour le raisonnement complexe
- Committed Use Discounts : -20 à -40 % sur AlloyDB et Cloud Run avec engagement 1 ou 3 ans
CI/CD et déploiement
Le pipeline de déploiement d’un système GenAI ressemble à un pipeline classique, avec des étapes supplémentaires :
# cloudbuild.yaml
steps:
# 1. Tests unitaires + intégration
- name: 'python:3.12-slim'
entrypoint: 'bash'
args: ['-c', 'pip install -r requirements.txt && pytest tests/']
# 2. Scan des tool calls (diplomat-agent)
- name: 'python:3.12-slim'
entrypoint: 'bash'
args: ['-c', 'pip install diplomat-agent && diplomat-agent . --fail-on-unchecked']
# 3. Scan de sécurité (Trivy)
- name: 'aquasec/trivy'
args: ['fs', '--severity', 'HIGH,CRITICAL', '--exit-code', '1', '.']
# 4. Build + push image
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/genai-service:$SHORT_SHA', '.']
# 5. Deploy sur Cloud Run
- name: 'gcr.io/cloud-builders/gcloud'
args:
- 'run'
- 'deploy'
- 'genai-service'
- '--image=gcr.io/$PROJECT_ID/genai-service:$SHORT_SHA'
- '--region=europe-west1'
- '--platform=managed'
- '--no-allow-unauthenticated'
- '--vpc-connector=genai-vpc-connector'
Points importants :
- L’étape diplomat-agent bloque le déploiement si de nouveaux tool calls non protégés sont introduits
--no-allow-unauthenticated: le service n’est pas public. L’accès passe par IAP (Identity-Aware Proxy) ou un API Gateway authentifié- VPC Connector : le service Cloud Run accède aux ressources privées (AlloyDB, Memorystore) sans passer par l’internet public
Conformité AI Act
L’AI Act européen entre en application en août 2026 pour les systèmes à haut risque. Si votre système GenAI prend des décisions impactant des personnes (santé, RH, finance, justice), vous êtes concerné.
Les obligations techniques principales :
| Article | Obligation | Implémentation GCP |
|---|---|---|
| Art. 9 | Gestion des risques | Registre toolcalls.yaml + guardrails documentés |
| Art. 12 | Traçabilité | Cloud Audit Logs + Langfuse traces |
| Art. 14 | Contrôle humain | Nœuds d’interruption LangGraph (human-in-the-loop) |
| Art. 13 | Transparence | Documentation d’architecture + registre des capacités |
La bonne pratique : intégrer ces obligations dès la conception (privacy & compliance by design), pas en retrofit avant l’échéance.
Checklist de mise en production
Avant de déployer votre système GenAI en production sur GCP :
Infrastructure :
- VPC dédié avec VPC-SC activé
- AlloyDB ou Cloud SQL avec pgvector configuré
- Cloud Run avec VPC Connector
- Secret Manager pour les credentials
- CMEK via Cloud KMS
Sécurité :
- Service accounts dédiés (principe du moindre privilège)
- DLP API activée sur les entrées/sorties
- Safety filters Vertex AI configurés
- Scan diplomat-agent dans le pipeline CI/CD
- Pas de clé API en dur nulle part
Observabilité :
- Langfuse ou équivalent déployé
- Dashboards Cloud Monitoring configurés
- Alertes sur les métriques critiques (latence, coût, erreurs)
- Budget alerts GCP configurés
Gouvernance :
-
toolcalls.yamlcommité et reviewé - Documentation d’architecture à jour
- Runbooks opérationnels rédigés
- Plan de conformité AI Act si applicable
Conclusion
Mettre un système GenAI en production sur GCP n’est pas fondamentalement différent de mettre n’importe quel système distribué en production. Les mêmes principes s’appliquent : infrastructure as code, observabilité, sécurité en profondeur, CI/CD, documentation.
Ce qui change, c’est la surface de risque. Un LLM peut halluciner, être injecté par un prompt malveillant, ou consommer des milliers d’euros de tokens en quelques minutes si les guardrails ne sont pas en place.
La bonne nouvelle : GCP fournit tous les blocs. L’enjeu est de les assembler correctement — architecture réseau, gestion des identités, observabilité, gouvernance des outils. C’est de l’ingénierie, pas de la magie.
Si vous êtes DSI ou CTO et que vous avez un POC GenAI qui attend de passer en production, prenez 30 minutes pour en discuter. On regarde ensemble votre architecture et on identifie les gaps.