Gestion du contexte et de l’historique client
Réponses personnalisées fondées sur les achats passés, les tickets et les préférences.
Gestion du contexte et de l’historique client est une leçon AI Agents gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage AI Agents, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours AI Agents comprend 4 leçons au total.
Pourquoi le contexte rend les agents plus humains
La différence entre un agent du service client médiocre et un excellent agent réside dans le contexte. Lorsqu'un agent dit : « Je vois que votre abonnement se renouvelle la semaine prochaine : souhaitez-vous le suspendre avant cette date ? », le client se sent compris, et pas simplement traité.
Cette leçon explique comment créer une couche riche de contexte client pour vos agents.
Schéma du profil client
Définissez un profil client standard qui regroupe les données provenant de plusieurs sources. L'agent reçoit ce dictionnaire au début de chaque conversation.
from dataclasses import dataclass, field
from datetime import date
@dataclass
class CustomerProfile:
customer_id: str
name: str
email: str
join_date: date
subscription_tier: str # 'free', 'pro', 'enterprise'
account_age_days: int
lifetime_value_usd: float
previous_tickets: list[dict] = field(default_factory=list)
recent_purchases: list[dict] = field(default_factory=list)
preferences: dict = field(default_factory=dict)
@property
def is_long_term_customer(self) -> bool:
return self.account_age_days > 365
if __name__ == '__main__':
from datetime import date
profile = CustomerProfile(
customer_id='cust_1', name='Jane Doe', email='jane@example.com',
join_date=date(2023, 1, 15), subscription_tier='pro',
account_age_days=400, lifetime_value_usd=1250.50,
)
print(f'{profile.name} ({profile.subscription_tier}) - long-term customer: {profile.is_long_term_customer}')
Récupération de l’historique des achats
Récupérez les N dernières commandes depuis votre système principal de commerce électronique. Incluez la date de la commande, les articles, le total et le statut. Ces informations indiquent à l’agent ce que le client a acheté et si certaines commandes récentes posent problème.
import requests
SHOP_API = 'https://api.yourshop.com'
SHOP_KEY = 'YOUR_SHOP_API_KEY'
def get_purchase_history(customer_id: str, limit: int = 10) -> list[dict]:
resp = requests.get(
f'{SHOP_API}/customers/{customer_id}/orders',
headers={'Authorization': f'Bearer {SHOP_KEY}'},
params={'limit': limit, 'sort': '-created_at'}
)
resp.raise_for_status()
orders = resp.json()['orders']
return [
{
'order_id': o['id'],
'date': o['created_at'][:10],
'total_usd': o['total'],
'status': o['status'],
'items': [i['name'] for i in o['line_items']]
}
for o in orders
]Récupération des tickets d’assistance précédents
Récupérez les N derniers tickets d’assistance pour comprendre les problèmes récurrents. Si le même problème du client a été résolu trois fois, il s’agit d’un problème lié au produit : faites-le remonter et signalez-le en conséquence.
def get_support_history(customer_id: str, limit: int = 5) -> list[dict]:
resp = requests.get(
f'{SHOP_API}/customers/{customer_id}/tickets',
headers={'Authorization': f'Bearer {SHOP_KEY}'},
params={'limit': limit, 'sort': '-created_at'}
)
resp.raise_for_status()
tickets = resp.json()['tickets']
return [
{
'ticket_id': t['id'],
'subject': t['subject'],
'status': t['status'],
'resolved': t.get('resolved_at', ''),
'category': t.get('category', 'general')
}
for t in tickets
]
def has_recurring_issue(tickets: list[dict], category: str) -> bool:
return sum(1 for t in tickets if t['category'] == category) >= 3Lecture du niveau et du statut de l’abonnement
Le niveau d’abonnement détermine les services auxquels le client a droit. Un client Pro qui pose une question sur une fonctionnalité indisponible avec son forfait nécessite une réponse différente de celle destinée à un client Enterprise posant la même question.
def get_subscription_info(customer_id: str) -> dict:
resp = requests.get(
f'{SHOP_API}/customers/{customer_id}/subscription',
headers={'Authorization': f'Bearer {SHOP_KEY}'}
)
if resp.status_code == 404:
return {'tier': 'free', 'status': 'active', 'renewal_date': None}
resp.raise_for_status()
sub = resp.json()
return {
'tier': sub['plan'],
'status': sub['status'], # active / past_due / canceled
'renewal_date': sub.get('current_period_end', '')[:10],
'cancel_at': sub.get('cancel_at_period_end', False)
}Calcul de l’ancienneté du compte
L’ancienneté du compte est un indicateur de fidélité du client. Un client qui est avec vous depuis 2021 doit être traité différemment d’une personne qui s’est inscrite hier. Mentionnez son ancienneté lorsque cela est pertinent afin d’établir une relation de confiance.
from datetime import datetime, timezone
def calculate_account_age(join_date_str: str) -> dict:
join = datetime.fromisoformat(join_date_str.replace('Z', '+00:00'))
now = datetime.now(timezone.utc)
delta = now - join
years = delta.days // 365
months = (delta.days % 365) // 30
return {
'days': delta.days,
'years': years,
'months': months,
'label': f'{years} year(s) and {months} month(s)' if years else f'{months} month(s)'
}
age = calculate_account_age('2021-03-15T00:00:00Z')
print(age['label']) # e.g. '5 year(s) and 2 month(s)'Création de la chaîne de contexte pour le LLM
Convertissez le profil client en un bloc de contexte concis, injecté dans l’invite système. Gardez-le court : incluez uniquement les faits directement pertinents pour la session actuelle.
def build_context_block(profile: CustomerProfile) -> str:
recent_order = profile.recent_purchases[0] if profile.recent_purchases else None
last_ticket = profile.previous_tickets[0] if profile.previous_tickets else None
parts = [
f'Customer: {profile.name} ({profile.email})',
f'Account age: {profile.account_age_days} days | Tier: {profile.subscription_tier}',
f'Lifetime value: USD {profile.lifetime_value_usd:.0f}',
]
if recent_order:
parts.append(
f'Last order: {recent_order["date"]} — '
f'{', '.join(recent_order["items"][:2])} ({recent_order["status"]})'
)
if last_ticket:
parts.append(f'Last ticket: "{last_ticket["subject"]}" ({last_ticket["status"]})')
return '\n'.join(parts)Personnalisation des réponses avec le contexte
Injectez le bloc de contexte dans l’invite système afin que le LLM y fasse naturellement référence dans ses réponses, sans qu’on le lui demande explicitement.
import openai
client = openai.OpenAI(api_key='YOUR_OPENAI_KEY')
def respond_with_context(user_message: str, profile: CustomerProfile) -> str:
context = build_context_block(profile)
system_prompt = (
f'You are a helpful customer service agent for ShopCo.\n'
f'Customer context:\n{context}\n\n'
f'Be warm and personal. Reference their history when relevant. '
f'Address the customer by first name.'
)
resp = client.chat.completions.create(
model='gpt-4o',
messages=[
{'role': 'system', 'content': system_prompt},
{'role': 'user', 'content': user_message}
]
)
return resp.choices[0].message.contentMise en cache du contexte client
Récupérer les données du profil auprès de plusieurs API à chaque message est lent et coûteux. Mettez le profil en cache au début de la conversation et ne mettez à jour que les champs susceptibles de changer, comme le statut de la commande et celui du ticket.
import time
profile_cache: dict[str, dict] = {} # customer_id -> {profile, fetched_at}
CACHE_TTL = 300 # 5 minutes
def get_cached_profile(customer_id: str) -> CustomerProfile | None:
entry = profile_cache.get(customer_id)
if entry and time.time() - entry['fetched_at'] < CACHE_TTL:
return entry['profile']
return None
def set_cached_profile(customer_id: str, profile: CustomerProfile):
profile_cache[customer_id] = {
'profile': profile,
'fetched_at': time.time()
}Détection des situations sensibles à partir de l’historique
L’historique peut révéler des tendances nécessitant un traitement particulier : un client dont les trois dernières commandes étaient défectueuses, une personne qui a menacé de résilier le mois dernier ou un utilisateur client depuis 7 ans.
def assess_risk_flags(profile: CustomerProfile) -> list[str]:
flags = []
# Check for cancellation risk
cancel_keywords = ['cancel', 'unsubscribe', 'quit', 'competitor']
for ticket in profile.previous_tickets:
if any(kw in ticket.get('subject', '').lower() for kw in cancel_keywords):
flags.append('cancellation_risk')
break
# Defective product pattern
defective = sum(1 for o in profile.recent_purchases if o.get('status') == 'refunded')
if defective >= 2:
flags.append('product_quality_issue')
# High-value customer
if profile.lifetime_value_usd > 5000:
flags.append('high_value_customer')
return flagsChaîne complète d’assemblage du contexte
Combinez toutes les sources de données dans une seule fonction assemble_context(), appelée une fois au début de la conversation.
from datetime import date
def assemble_context(email: str) -> CustomerProfile:
# Try cache first
# In production: look up customer_id from email in your user DB
customer_id = 'CUST_123'
cached = get_cached_profile(customer_id)
if cached:
return cached
# Fetch from all sources
sub = get_subscription_info(customer_id)
orders = get_purchase_history(customer_id)
tickets = get_support_history(customer_id)
profile = CustomerProfile(
customer_id=customer_id,
name='Alice Smith',
email=email,
join_date=date(2021, 3, 15),
subscription_tier=sub['tier'],
account_age_days=calculate_account_age('2021-03-15T00:00:00Z')['days'],
lifetime_value_usd=1240.00,
previous_tickets=tickets,
recent_purchases=orders
)
set_cached_profile(customer_id, profile)
return profileQuelle donnée du contexte client permet le plus directement à l’agent de dire « Je vois que vous êtes avec nous depuis 2021 » ?
La personnalisation des réponses nécessite de faire référence à des points de données précis du profil client. Identifier le champ qui permet de produire cette phrase constitue une question pratique de rappel.
Récapitulatif du contexte client
Un excellent agent du service client établit un profil détaillé à partir de l’historique des achats, des tickets d’assistance, du niveau d’abonnement et de l’ancienneté du compte. Injectez un bloc de contexte concis dans l’invite système, mettez-le en cache pour la session et utilisez les indicateurs de risque pour détecter les situations sensibles avant qu’elles ne s’aggravent.
Apprends AI Agents avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 60
- Leçons
- 239
Questions Fréquemment Posées
La leçon « Gestion du contexte et de l’historique client » est-elle gratuite ?
Oui — le texte complet de « Gestion du contexte et de l’historique client » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours AI Agents, passe à CoddyKit PRO. Le cours AI Agents comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Gestion du contexte et de l’historique client » ?
Réponses personnalisées fondées sur les achats passés, les tickets et les préférences. Tu pratiques AI Agents avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer AI Agents ?
Aucune expérience préalable n'est requise. AI Agents sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Gestion du contexte et de l’historique client » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon AI Agents ?
Oui. Chaque leçon AI Agents inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Routage des tickets et logique d’escalade
- Intégration CRM : Salesforce et HubSpot
- Protocoles de transfert vers un humain
- Gestion du contexte et de l’historique client