Guide Pratique

Guide LangChain : Premier Agent IA en Python

LangChain est le framework Python de référence pour construire des applications LLM. Ce guide vous emmène de l'installation jusqu'au déploiement d'un agent opérationnel, avec des exemples concrets adaptés aux besoins des PME françaises : chatbot FAQ, agent de recherche, résumeur de documents.

Guide LangChain : Premier Agent IA en Python

Qu'est-ce que LangChain ?

LangChain est un framework open-source Python (et JavaScript) qui simplifie la construction d'applications utilisant des LLM (Large Language Models). Lancé fin 2022, il est devenu le standard de facto pour orchestrer des appels LLM, des outils externes et de la mémoire dans une même application cohérente.

Ce que LangChain résout concrètement : Sans framework, construire une application LLM signifie gérer manuellement les appels API, la gestion du contexte, la sérialisation des messages, la gestion des erreurs et les retries, l'intégration d'outils externes, et la persistance de l'historique de conversation. LangChain abstrait tout cela avec des interfaces standardisées.

Les composants principaux de LangChain :

  • LLMs et ChatModels : interfaces unifiées pour GPT, Claude, Mistral, Gemini, Ollama et plus de 50 autres modèles
  • PromptTemplates : gestion structurée des prompts avec variables et formatage
  • Chains : séquences d'opérations composables (prompt → LLM → parser → tool → ...)
  • Agents : systèmes autonomes qui décident quels outils utiliser selon la requête
  • Tools : fonctions exposées à l'agent (recherche web, calcul, API, base de données)
  • Memory : gestion de l'historique conversationnel
  • Retrievers : interfaces pour la recherche de documents (RAG)
  • Output Parsers : structuration de la sortie LLM en objets Python

Bon à savoir : Depuis LangChain 0.3, l'API a été profondément restructurée autour de LCEL (LangChain Expression Language). Si vous lisez des tutoriels anciens utilisant LLMChain, ConversationChain ou SequentialChain, sachez qu'ils sont dépréciés. Ce guide utilise exclusivement la syntaxe moderne.

LangChain vs LangGraph vs LlamaIndex : lequel choisir ?

Framework Spécialité Points forts Cas d'usage idéal
LangChain Orchestration généraliste Écosystème large, agents, intégrations, LCEL Chatbots, agents multi-outils, workflows LLM
LangGraph Agents avec état / cycles Workflows complexes, human-in-the-loop, persistance d'état Agents de longue durée, processus d'approbation
LlamaIndex Ingestion et RAG Connecteurs de données riches, chunking avancé, query engines Bases de connaissances RAG, Q&A sur documents

Règle pratique : Commencez avec LangChain pour 90 % des projets. Ajoutez LangGraph si votre agent doit gérer des états complexes ou des cycles. Utilisez LlamaIndex si votre projet est centré sur l'ingestion de documents (vous pouvez combiner LlamaIndex pour le RAG et LangChain pour l'agent).

Installation et configuration de l'environnement

Un environnement Python propre est la base de tout projet LangChain sérieux. Voici la procédure recommandée :

1. Créer l'environnement virtuel :

# Créer et activer l'environnement virtuel
python -m venv .venv
source .venv/bin/activate  # Linux/Mac
# .venv\Scripts\activate   # Windows

# Vérifier la version Python
python --version  # 3.11.x ou 3.12.x recommandé

2. Installer LangChain et ses dépendances :

# Core LangChain
pip install langchain langchain-core langchain-community

# Intégration OpenAI (ou choisissez votre LLM)
pip install langchain-openai

# Variables d'environnement
pip install python-dotenv

# Utilitaires
pip install httpx pydantic

3. Configurer les clés API dans un fichier .env :

# .env — NE JAMAIS committer ce fichier
OPENAI_API_KEY=sk-proj-...
# ANTHROPIC_API_KEY=sk-ant-...
# MISTRAL_API_KEY=...
LANGCHAIN_TRACING_V2=true
LANGCHAIN_API_KEY=ls__...  # Pour LangSmith (optionnel)

Attention : Ajoutez toujours .env à votre .gitignore avant de faire votre premier commit. Une clé API exposée sur GitHub peut être exploitée en quelques minutes par des bots automatisés, générant des factures importantes.

Les composants essentiels de LangChain

Avant d'écrire du code, comprendre les 5 abstractions clés de LangChain vous évitera beaucoup de confusion :

1. ChatModels : les wrappers LLM. ChatOpenAI, ChatAnthropic, ChatMistralAI... Ils exposent tous la même interface : invoke(messages), stream(messages), batch(list_messages). Changer de LLM = changer une ligne.

2. Messages : les types de messages LangChain respectent le format OpenAI : HumanMessage (utilisateur), AIMessage (assistant), SystemMessage (instruction système), ToolMessage (résultat d'outil). Tout est typé avec Pydantic.

3. PromptTemplates : ChatPromptTemplate vous permet de définir des prompts paramétriques réutilisables. Les variables sont injectées avec {variable}.

4. Output Parsers : transforment la réponse string du LLM en objets Python structurés. StrOutputParser (texte brut), JsonOutputParser, PydanticOutputParser (vers un modèle Pydantic).

5. Runnables : l'interface commune de LCEL. Tout composant LangChain moderne est un Runnable avec les méthodes invoke, stream, batch, ainvoke (async). Les Runnables se composent avec l'opérateur |.

Créer sa première chain LangChain

Une chain est une séquence de Runnables composés avec LCEL. Voici un exemple complet et fonctionnel :

from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

load_dotenv()

# 1. Définir le modèle
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.3)

# 2. Définir le prompt
prompt = ChatPromptTemplate.from_messages([
    ("system", "Tu es un assistant expert en {domaine}. Réponds en français, de façon concise et pratique."),
    ("human", "{question}")
])

# 3. Parser la sortie
parser = StrOutputParser()

# 4. Composer la chain avec LCEL (pipe operator)
chain = prompt | llm | parser

# 5. Utiliser la chain
reponse = chain.invoke({
    "domaine": "automatisation des processus",
    "question": "Quels sont les 3 premiers processus à automatiser dans une PME ?"
})
print(reponse)

La puissance de LCEL réside dans la facilité de composition. Vous pouvez ajouter des étapes n'importe où dans le pipe, passer des inputs en parallèle avec RunnableParallel, ou ajouter de la logique conditionnelle avec RunnableBranch.

Streaming la réponse :

# Streaming token par token pour une meilleure UX
for chunk in chain.stream({"domaine": "RH", "question": "Comment automatiser l'onboarding ?"}):
    print(chunk, end="", flush=True)

Astuce AutomateIA : Utilisez temperature=0 pour les tâches qui nécessitent de la consistance (extraction de données, classification), et temperature=0.7 pour les tâches créatives (rédaction, reformulation). Pour la plupart des chatbots, 0.3 est un bon équilibre.

Créer un agent LangChain avec des outils

Un agent va plus loin qu'une chain : il décide de manière autonome quels outils utiliser et dans quel ordre, en fonction de la requête. Le LLM joue le rôle d'un "cerveau" qui planifie et délègue.

Définir des outils avec le décorateur @tool :

from langchain_core.tools import tool
from datetime import datetime

@tool
def get_current_date() -> str:
    """Retourne la date et l'heure actuelles en français."""
    now = datetime.now()
    return now.strftime("%A %d %B %Y à %H:%M")

@tool
def calculate(expression: str) -> str:
    """Calcule une expression mathématique simple. Exemples: '2 + 2', '150 * 0.20'"""
    try:
        result = eval(expression, {"__builtins__": {}})
        return f"Résultat : {result}"
    except Exception as e:
        return f"Erreur de calcul : {str(e)}"

tools = [get_current_date, calculate]

Créer l'agent avec AgentExecutor :

from langchain_openai import ChatOpenAI
from langchain.agents import create_openai_tools_agent, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)

prompt = ChatPromptTemplate.from_messages([
    ("system", "Tu es un assistant utile. Utilise les outils disponibles pour répondre précisément. Réponds toujours en français."),
    ("human", "{input}"),
    MessagesPlaceholder(variable_name="agent_scratchpad"),
])

agent = create_openai_tools_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# Tester l'agent
result = agent_executor.invoke({"input": "Quel jour sommes-nous et combien font 15% de 3500 euros ?"})
print(result["output"])

Attention : Le paramètre verbose=True est indispensable pendant le développement — il affiche le raisonnement de l'agent et les appels d'outils. En production, mettez verbose=False pour éviter d'exposer des informations sensibles dans les logs.

Gérer la mémoire conversationnelle

Par défaut, chaque appel à un agent est stateless : il ne se souvient pas des échanges précédents. Pour un chatbot, c'est rédhibitoire. LangChain propose plusieurs approches selon vos besoins.

RunnableWithMessageHistory (approche moderne recommandée) :

from langchain_community.chat_message_histories import ChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory

# Stockage en mémoire (dict de sessions)
store = {}

def get_session_history(session_id: str):
    if session_id not in store:
        store[session_id] = ChatMessageHistory()
    return store[session_id]

# Adapter le prompt pour inclure l'historique
prompt_with_history = ChatPromptTemplate.from_messages([
    ("system", "Tu es un assistant commercial expert. Réponds en français."),
    MessagesPlaceholder(variable_name="history"),
    ("human", "{input}"),
])

chain = prompt_with_history | llm | StrOutputParser()

chain_with_memory = RunnableWithMessageHistory(
    chain,
    get_session_history,
    input_messages_key="input",
    history_messages_key="history",
)

# Utiliser avec un session_id
config = {"configurable": {"session_id": "user_123"}}
reponse1 = chain_with_memory.invoke({"input": "Mon budget est de 5000 euros."}, config=config)
reponse2 = chain_with_memory.invoke({"input": "Quelles solutions me recommandes-tu ?"}, config=config)

Types de mémoire selon le cas d'usage :

  • ChatMessageHistory (in-memory) : idéal pour les tests et prototypes. Les données sont perdues au redémarrage.
  • RedisChatMessageHistory : persistance Redis pour la production. Gère plusieurs utilisateurs simultanés.
  • SQLChatMessageHistory : persistance SQL pour les environnements sans Redis.
  • Fenêtre glissante : conservez seulement les N derniers messages pour maîtriser les coûts de tokens.

LCEL : la syntaxe moderne de LangChain

LCEL (LangChain Expression Language) est la syntaxe de composition introduite en LangChain 0.2 qui remplace toutes les classes de chains héritées. Elle repose sur l'opérateur | (pipe) et des primitives simples.

Composition parallèle avec RunnableParallel :

from langchain_core.runnables import RunnableParallel, RunnablePassthrough

# Exécuter deux analyses en parallèle
analyse_parallele = RunnableParallel(
    resume=prompt_resume | llm | StrOutputParser(),
    points_cles=prompt_points_cles | llm | StrOutputParser(),
)

# RunnablePassthrough passe l'input tel quel
chain_avec_contexte = (
    RunnableParallel({"context": retriever, "question": RunnablePassthrough()})
    | prompt_rag
    | llm
    | StrOutputParser()
)

Avantages de LCEL :

  • Streaming automatique : chaque composant peut streamer sa sortie vers le suivant
  • Batch natif : chain.batch([input1, input2, input3]) pour le traitement en masse
  • Async natif : await chain.ainvoke(input) sans configuration supplémentaire
  • Observabilité : chaque étape est automatiquement tracée dans LangSmith

Déboguer et monitorer avec LangSmith

LangSmith est la plateforme d'observabilité officielle de LangChain. Elle trace chaque appel LLM, chaque étape de chain et chaque appel d'outil avec tous les inputs/outputs, latences et coûts.

Activer LangSmith en 2 variables d'environnement :

# Dans votre .env
LANGCHAIN_TRACING_V2=true
LANGCHAIN_API_KEY=ls__votre_cle_api
LANGCHAIN_PROJECT=mon-projet-pme  # optionnel

C'est tout. Dès que ces variables sont définies, toutes vos chains et agents envoient automatiquement leurs traces à LangSmith. Aucune modification de code n'est nécessaire.

Ce que vous pouvez faire avec LangSmith :

  • Inspecter chaque étape d'une chain avec les inputs/outputs exacts
  • Identifier les étapes lentes (latence par step)
  • Suivre les coûts en tokens par requête et par projet
  • Créer des datasets de test à partir de traces réelles
  • Comparer les performances entre deux versions d'un prompt
  • Détecter les erreurs et les réponses de mauvaise qualité

Astuce AutomateIA : LangSmith est gratuit jusqu'à 5 000 traces par mois — suffisant pour tout projet PME en production légère. Activez-le dès le début du développement : le temps gagné au débogage justifie largement les quelques minutes de configuration.

Déployer son agent avec FastAPI

Une fois votre agent fonctionnel, exposez-le via une API FastAPI pour l'intégrer à votre site web, votre application ou vos outils internes.

from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from dotenv import load_dotenv

load_dotenv()
app = FastAPI(title="Agent IA AutomateIA")

app.add_middleware(
    CORSMiddleware,
    allow_origins=["https://votre-site.fr"],
    allow_methods=["POST"],
    allow_headers=["*"],
)

class ChatRequest(BaseModel):
    message: str
    session_id: str = "default"

class ChatResponse(BaseModel):
    response: str

@app.post("/chat", response_model=ChatResponse)
async def chat(request: ChatRequest):
    try:
        config = {"configurable": {"session_id": request.session_id}}
        result = await chain_with_memory.ainvoke(
            {"input": request.message},
            config=config
        )
        return ChatResponse(response=result)
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

@app.get("/health")
def health():
    return {"status": "ok"}

Démarrer le serveur :

pip install fastapi uvicorn
uvicorn main:app --host 0.0.0.0 --port 8000 --reload

3 exemples concrets pour PME françaises

Voici trois cas d'usage représentatifs que nous implémentons régulièrement avec nos clients :

Exemple 1 : Chatbot FAQ sur la documentation produit

Architecture : LangChain + RAG (LlamaIndex pour l'ingestion) + pgvector. Le chatbot répond aux questions clients en s'appuyant sur vos fiches techniques, manuels et FAQ. Les réponses incluent automatiquement les sources. Temps de mise en place : 5 à 8 jours. Bénéfice typique : réduction de 40 à 60 % des tickets support de niveau 1.

Exemple 2 : Agent de recherche et synthèse

Architecture : LangChain Agent + outils web (Tavily Search) + outil de résumé. L'agent recherche des informations sur vos concurrents, les actualités de votre secteur ou des appels d'offres, et produit une synthèse structurée directement dans votre outil de reporting. Temps de mise en place : 3 à 5 jours. Bénéfice typique : 2 à 4 heures de veille manuelle économisées par semaine.

Exemple 3 : Résumeur et extracteur de documents

Architecture : LangChain Chain + Map-Reduce pour les longs documents + PydanticOutputParser. Traite en batch des contrats, rapports ou emails pour en extraire les informations clés dans un format structuré (JSON) directement intégrable dans votre CRM ou ERP. Temps de mise en place : 2 à 4 jours. Bénéfice typique : traitement de 50 documents en 5 minutes au lieu de 5 heures.

Projet Complexité Délai Coût mensuel estimé
Chatbot FAQ RAG Moyenne 5-8 jours 30-80 €
Agent de recherche Moyenne 3-5 jours 20-50 €
Résumeur de documents Faible 2-4 jours 10-30 €

LangChain abaisse considérablement la barrière technique pour construire des agents IA opérationnels. Un développeur Python débutant peut produire un premier prototype fonctionnel en quelques jours. La clé pour passer du prototype à la production est l'évaluation rigoureuse, le monitoring via LangSmith, et une architecture de mémoire adaptée à vos volumes.

Si vous souhaitez être accompagné dans la construction de votre premier agent LangChain ou dans le déploiement d'un système complet, AutomateIA peut vous apporter son expertise technique et sa connaissance des cas d'usage PME.

💡 Construisons votre agent IA ensemble

AutomateIA vous accompagne de la conception à la mise en production de vos agents LangChain — architecture, développement, déploiement et formation de vos équipes.

🚀 Obtenir mon audit gratuit

Questions fréquentes

LangChain est-il toujours pertinent en 2026 ?
Oui. LangChain a considérablement mûri depuis ses débuts et reste le framework le plus adopté pour les applications LLM en Python. La v0.3+ a rationalisé l'API avec LCEL, corrigé les instabilités passées et introduit LangGraph pour les workflows plus complexes. L'écosystème (intégrations, templates, LangSmith) est aujourd'hui très mature. Pour 90 % des cas d'usage PME, LangChain est un choix fiable et bien documenté.
Quelle version de Python utiliser avec LangChain ?
Python 3.11 est recommandé — il offre le meilleur équilibre entre performance (15 % plus rapide que 3.10) et compatibilité avec l'écosystème LangChain. Python 3.12 fonctionne aussi bien. Évitez Python 3.9 et 3.10 pour les nouveaux projets car certaines dépendances commencent à les abandonner.
LangChain fonctionne-t-il avec des modèles autres qu'OpenAI ?
Oui, LangChain supporte nativement Anthropic (Claude), Mistral, Google Gemini, Cohere, Hugging Face, Ollama (modèles locaux) et bien d'autres. Chaque intégration est dans un package séparé : langchain-anthropic, langchain-mistralai, etc. Vous pouvez changer de LLM sans réécrire votre logique métier grâce aux interfaces standardisées.
Quelle est la différence entre LangChain et LangGraph ?
LangChain est optimal pour les workflows linéaires ou avec branchements simples (chain A → B → C). LangGraph est conçu pour les agents avec cycles, états persistants et flux de contrôle complexes (un agent qui peut revenir en arrière, boucler, demander confirmation humaine). Commencez avec LangChain — migrez vers LangGraph quand vous avez besoin de logique d'agent plus sophistiquée.
Comment sécuriser un agent LangChain en production ?
Plusieurs couches sont nécessaires : authentification API (JWT ou API keys), rate limiting pour éviter les abus, validation des inputs (longueur maximale, filtrage de contenu), sandboxing des outils exécutant du code, et monitoring des appels avec LangSmith pour détecter les comportements anormaux. Ne jamais exposer un agent sans authentification, même en interne.
LangChain peut-il gérer du français nativement ?
Oui. LangChain est agnostique à la langue — c'est le LLM sous-jacent qui détermine la qualité du français. GPT-4o, Claude 3.5 et Mistral Large produisent un excellent français. Pour vos prompts, rédigez-les directement en français : les résultats sont meilleurs qu'en anglais pour des réponses destinées à des utilisateurs français.
Quel est le coût d'un agent LangChain en production pour une PME ?
Pour un chatbot FAQ traitant 1 000 questions par jour avec GPT-4o-mini (le modèle le plus économique d'OpenAI), le coût est d'environ 15 à 40 euros par mois selon la complexité des échanges. Avec Mistral Small auto-hébergé via une API Mistral, le coût tombe à 5-10 euros. L'infrastructure serveur pour faire tourner l'API FastAPI représente 10 à 20 euros supplémentaires sur un VPS standard.
Comment éviter les hallucinations dans un agent LangChain ?
La meilleure protection est de coupler l'agent à un système RAG (retrieval-augmented generation) : l'agent recherche d'abord dans votre base documentaire avant de répondre. Ajoutez une instruction système explicite du type 'Réponds uniquement à partir des documents fournis. Si tu ne sais pas, dis-le clairement.' et utilisez la faithfulness de RAGAS pour mesurer les hallucinations en production.
🎯
Découvrez votre potentiel d'automatisation

Répondez à 5 questions — obtenez votre score et 3 recommandations personnalisées en 2 minutes

⚡ Résultat immédiat 🔒 Sans engagement
Lancer l'audit express

Prêt à automatiser votre entreprise ?

Obtenez un audit gratuit de vos processus en 48h. Nos experts identifient les opportunités d'automatisation et estiment votre ROI potentiel.

Sans engagement · Réponse sous 24h · 100% gratuit