Context Engineering â Section 1 : Introduction
Définition, différences avec le Prompt Engineering et raisons du changement de paradigme.
1.1 Définition du Context Engineering
Sélection, structuration, compression, orchestration, gouvernance.
Context Engineering : ingĂ©nierie systĂ©matique du contexte fourni aux LLM/agents pour des rĂ©ponses fiables, traçables et Ă©conomes. Elle englobe lâacquisition des sources, lâindexation, la sĂ©lection pertinente, la structuration (schĂ©mas/sections/rĂŽles), la compression multi-niveaux, lâorchestration (outils/mĂ©moires) et la gouvernance (sĂ©curitĂ©, conformitĂ©, coĂ»t).
Pense âpipeline de contexteâ : composable, observable, testable, versionnĂ©.
Objectifs métiers
Réduire les hallucinations, augmenter la précision, accélérer le time-to-answer, assurer la conformité (RGPD/ISO), maßtriser les coûts.
Objectifs techniques
Standardiser les prompts, tracer sources & citations, contrĂŽler la sortie (JSON/schema), exploiter cache & fenĂȘtres longues.
Portée
Docs internes, bases, APIs, tickets, logs, emails, Knowledge Graphs, mémoires.
KPI
relevance@k, faithfulness, %citations, latence p50/p95, token-cost, cache hit, incident rate.
Bonnes pratiques : tags tenant/role/scope, horodatage, provenance, versioning, RBAC jusque dans le retrieval.
Livrables concrets
- Schéma JSON des prompts (sections/roles/constraints).
- Templates assemblage (Jinja/Django).
- Policy pack : RGPD, secrets, redaction, PII scrubbers.
- Playbooks : support, code copilots, analytics.
- Dashboards : coûts, latence, erreurs, health.
- Corpus indexé (chunk + embeddings cohérents).
- Repair prompts + validateurs (pydantic/jsonschema).
- Scripts dâĂ©valuation (gold sets, LLM-as-judge groundĂ©).
Gabarit (template Django)
{% with ctx=builder.build(user, question) %}
{{ ctx.system }}
Contexte:
- Faits: {{ ctx.facts|join:" | " }}
- Citations: {{ ctx.citations|length }} ref.
Question: {{ ctx.user }}
Contraintes: {{ ctx.constraints|join:", " }}
{% endwith %}Glossaire minimal
- Chunking : découpage docs.
- Embeddings : vecteurs.
- Hybrid search : BM25 + vecteur.
- RRF : fusion de rangs.
- Re-ranking : rerang par cross-encoder.
- Context cache : réutilisation.
- Guarded output : validation JSON.
- KG : Knowledge Graph.
Architecture type (texte)
[Ingestion] â [Indexation] â [Retrieval Hybride] â [Compression]
â [Assembly: system+facts+citations+constraints] â [LLM/Agents]
â [Validation JSON + Repair] â [Logging/Telemetry] â [Feedback Loop]Pseudo-code dâorchestration
def answer(question, user, role):
sources = retrieve_hybrid(question, k=8, user=user)
distilled = compress_sources(sources, target_tokens=1200)
prompt = assemble(role=role, facts=distilled.facts,
citations=distilled.citations,
constraints=["Réponse †250 mots","Puces","+ JSON si liste"])
raw = call_llm(prompt, temperature=0.2, tools=TOOLS)
return validate_or_repair(raw, schema=ANSWER_SCHEMA)Deux cas dâusage
- Support interne : docs IT + tickets â rĂ©ponses sourcĂ©es, format FAQ.
- Copilot code : contexte repo + issues + conventions â patch minimal + tests.
Exiger des citations (doc_id+loc) pour chaque affirmation non triviale.
1.2 Différences : Prompt vs Context Engineering
| Aspect | Prompt Eng. | Context Eng. |
|---|---|---|
| UnitĂ© | Prompt textuel | Pipeline (retrievalâassemblyâvalidation) |
| Structure | Libre | JSON/roles/sections |
| Sources | Copier/coller | Indexées, scorées, filtrées |
| ContrÎle sortie | Relecture manuelle | Schéma + validateur + repair |
| Traçabilité | Faible | Citations/IDs/offsets |
| Ăchelle | PoC | Production |
Sans structure â fragilitĂ© : variations de phrasing, oublis, coĂ»ts inutiles.
5 patterns recommandés
- Sectioned Prompt (roles/system/user/tools/constraints).
- FactsâClaimsâCitations (chaque claim rĂ©fĂ©rencĂ©).
- Task-Split : retrieve â compress â answer.
- Memory-First : profil utilisateur + historique avant retrieval.
- Guarded Output : validation JSON + repair.
Combiner patterns 2+5 pour limiter les hallucinations.
Anti-patterns fréquents
- Coller des blobs (docs entiers non résumés).
- Absence de rĂŽle/contraintes/format.
- Pas dâID source ni de citations.
- Mélanger mémoire session et profil permanent.
- Pas dâobservabilitĂ©/coĂ»ts.
- Ignorer PII/consentement.
Ne loggez jamais des PII en clair dans vos traces.
Trois exemples
- Juridique : prompts structurĂ©s + citations RGPD â fiches synthĂšse.
- Support N2 : facts + runbooks + tool use (Grafana/PagerDuty).
- Code : patch minimal + tests + chemins exacts.
{
"system":"Assistant RGPD",
"context":{"facts":["Art.5âŠ","Art.32âŠ"],"citations":[{"doc_id":"rgpd.md","loc":"§5.1"}]},
"user":"Puis-je conserver les logs 6 mois ?",
"constraints":["Puces","â€180 mots","Cite les articles"]
}Gabarit (Django Template)
{{ system_block }}
Contexte:
- Faits: {{ facts|join:"; " }}
- Citations: {{ citations|length }} ref.
Question: {{ user_question }}
Contraintes: {{ constraints|join:", " }}Validateur (pydantic)
class Answer(BaseModel):
summary: str
steps: list[str]
confidence: float
citations: list[dict]1.3 Pourquoi ce changement de paradigme ?
- A. Limites du prompting
- B. Moteurs du changement
- C. Playbook de bascule
- D. KPI & ROI
- E. Risques & mitigations
- Non-reproductibilité : sensibilité au phrasing, variabilité.
- Faible traçabilitĂ© : pas de preuves, pas dâexplicabilitĂ©.
- Coût croissant : prompts verbeux, peu réutilisés.
- Pas dâoutillage : pas de tests, pas dâobservabilitĂ©.
Ne pas confondre fenĂȘtre longue et contexte utile : plus â mieux.
LLM + longs contextes
FenĂȘtres 100kâ1M tokens â besoin de sĂ©lection/compaction + cache.
Exigences métier
Traçabilité/citations, conformité, prévisibilité des coûts.
ĂcosystĂšme
DB vecteur/KG, tool-use, observabilité, agents multi-étapes.
Le passage au pipeline permet A/B tests, mesures et itérations structurées.
Playbook (6 étapes)
- Auditer vos prompts actuels, coûts, échecs typiques.
- Définir un schéma de prompt + patrons de sortie.
- Indexer le corpus (chunking/embeddings/KG).
- Assembler un Context Builder (service/SDK).
- Observer (logs/metrics/coûts) + tests automatiques.
- Industrialiser (cache, policies, repair, guardrails).
def migrate_to_context_eng():
audit = audit_prompts()
schema = define_prompt_schema()
index = build_index(corpus)
builder = build_context_builder(schema, index)
obs = setup_observability()
return rollout(builder, obs)KPI & ROI (exemple)
| KPI | Avant | AprĂšs |
|---|---|---|
| Faithfulness | 0.68 | 0.90 |
| Latency p50 | 1600 ms | 900 ms |
| Token cost / req | 1.0Ă | 0.65Ă |
| Cache hit | â | 35% |
Risques & mitigations
- PII leak â scrubbers + masquage + RBAC.
- Hallucination â citations obligatoires + re-rank.
- CoĂ»t â compression + cache + batching.
- Drift corpus â index refresh programmĂ©.
- Tech debt â schema versioning + tests.
Checklist déploiement : [ ] schéma versionné [ ] logs masqués [ ] tests retrieval [ ] budget tokens.
