LangChain LangSmith -- Observabilité
LangSmith est la plateforme d'observabilité officielle de LangChain qui vous aide à tracer les processus d'exécution des Agents, à surveiller les performances et à déboguer les problèmes.
Qu'est-ce que LangSmith
Lorsqu'un Agent s'exécute en arrière-plan, vous ne pouvez pas voir ce qui se passe à l'intérieur — quels modèles ont été appelés, quels outils ont été exécutés et combien de Tokens chaque étape a consommés. LangSmith résout ce problème de « boîte noire ».
| Fonctionnalités | Description |
|---|---|
| Traçage de l'exécution | Enregistre la trajectoire d'exécution de chaque étape de l'Agent |
| Surveillance des performances | Suit la consommation de temps et l'utilisation des Tokens de chaque appel |
| Rejeu de débogage | Afficher les informations détaillées des exécutions historiques |
| Tests d'évaluation | Créer des ensembles de tests pour évaluer les performances de l'Agent |
Démarrage rapide
Inscription et installation
$ pip install langsmith
Danssmith.langchain.comInscrivez-vous, obtenez une clé API, puis configurez-la dans .env :
Exemple
LANGCHAIN_TRACING_V2=true
LANGCHAIN_API_KEY=lsv2_pt_your_key_here
LANGCHAIN_PROJECT=my-agent-project
Traçage automatique
Exemple
load_dotenv() # La configuration LangSmith sera chargée automatiquement
from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
from langchain.messages import HumanMessage
from langchain.tools import tool
# Après avoir défini les variables d'environnement, toutes les exécutions d'Agent seront automatiquement tracées
# Aucun code supplémentaire nécessaire !
@tool
def search_course(keyword: str) -> str:
"""Rechercher des cours"""
return f"Résultats de recherche : cours liés à {keyword}"
model = init_chat_model("deepseek:deepseek-v4-flash", temperature=0)
agent = create_agent(
model=model,
tools=[search_course],
system_prompt="Vous êtes l'assistant du tutoriel Exemple.",
)
# Cette exécution sera automatiquement enregistrée dans LangSmith
result = agent.invoke({
"messages": [HumanMessage(content="Rechercher des cours Python")]
})
# Ouvrez https://smith.langchain.com pour consulter les enregistrements de trace
print("Terminé. Veuillez vous rendre dans la console LangSmith pour consulter les détails de trace")
Affichage des enregistrements de trace
Dans la console LangSmith, vous pouvez voir la trajectoire complète de chaque Agent :
- Exécution: Chronologie complète de l'appel au modèle → appel à l'outil → nouvel appel au modèle
- Entrée/Sortie: Les messages d'entrée et les résultats renvoyés par le modèle pour chaque étape
- Utilisation des tokens: Consommation de tokens et estimation des coûts pour chaque appel de modèle
- Analyse de latence: Répartition temporelle de chaque étape
- Messages d'erreur: Si une erreur se produit dans une étape, vous pouvez voir la trace complète de la pile d'erreurs
Création manuelle de traces
Exemple
# Utiliser le décorateur @traceable pour marquer les fonctions qui doivent être tracées
@traceable
def process_user_query(query: str) -> dict:
"""Traite la requête utilisateur (cette fonction sera tracée séparément)"""
# Prétraitement
cleaned = query.strip().lower()
# Appeler l'agent
result = agent.invoke({"messages": [HumanMessage(content=cleaned)]})
return {
"query": cleaned,
"answer": result["messages"][-1].content,
}
# Dans LangSmith, vous verrez process_user_query comme une étape indépendante
result = process_user_query("Recommandations de cours Python")
print(result["answer"])
Configuration commune
| Variables d'environnement | Description | Exemple |
|---|---|---|
| LANGCHAIN_TRACING_V2 | Activer le traçage (doit être défini sur true) | vrai |
| LANGCHAIN_API_KEY | Clé API LangSmith | lsv2_pt_xxx |
| LANGCHAIN_PROJECT | Nom du projet (utilisé pour regrouper les traces) | my-agent |
| LANGCHAIN_ENDPOINT | Point de terminaison de l'API (la valeur par défaut convient) | https://api.smith.langchain.com |
Autres extensionsEn production, il est recommandé de définir un taux d'échantillonnage des traces de LangSmith plus faible (pour éviter le coût élevé de l'enregistrement de toutes les requêtes), et de n'activer le traçage complet que lorsque le débogage est nécessaire.