Prérequis
  • Python 3.10+ installé
  • Bases de Python (variables, fonctions, listes)
  • Une clé API OpenAI (ou Ollama pour un usage 100% local)
  • Environnement virtuel Python recommandé

Pourquoi LangChain ?

LangChain est le framework Python qui a standardisé la façon de construire des applications avec des LLM. Ses atouts :

  • Compatible avec tous les LLM : OpenAI, Anthropic, Google, Ollama, HuggingFace…
  • Abstractions réutilisables : chaînes, mémoire, retrieval, agents
  • Écosystème riche : 300+ intégrations (bases de données, APIs, outils…)
  • LangSmith : observabilité native pour le debugging
  • Large communauté : 92k+ stars GitHub, documentation exhaustive

Installation

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

# Installer LangChain et ses dépendances
pip install langchain langchain-openai langchain-community python-dotenv

# Créer le fichier .env
echo "OPENAI_API_KEY=votre-cle-api-ici" > .env

Étape 1 — Votre premier appel LLM

from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage

load_dotenv()

# Initialiser le modèle
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)

# Premier appel
messages = [
  SystemMessage(content="Tu es un assistant expert en IA pour PME."),
  HumanMessage(content="Qu'est-ce qu'un agent IA en 2 phrases ?")
]

reponse = llm.invoke(messages)
print(reponse.content)

Étape 2 — Prompt Templates (réutilisables)

from langchain_core.prompts import ChatPromptTemplate

# Créer un template de prompt réutilisable
template = ChatPromptTemplate.from_messages([
  ("system", "Tu es un expert en {domaine}. Réponds en français, concis."),
  ("human", "{question}")
])

# Chaîner le template avec le modèle (LCEL - LangChain Expression Language)
chaine = template | llm

# Utiliser la chaîne
reponse = chaine.invoke({
  "domaine": "cybersécurité pour PME",
  "question": "Quelles sont les 3 menaces IA les plus courantes ?"
})
print(reponse.content)

Étape 3 — Mémoire conversationnelle

from langchain_core.chat_history import InMemoryChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory

# Stocker l'historique en mémoire
historiques = {}

def obtenir_historique(session_id: str):
  if session_id not in historiques:
    historiques[session_id] = InMemoryChatMessageHistory()
  return historiques[session_id]

# Ajouter la mémoire à la chaîne
chaine_avec_memoire = RunnableWithMessageHistory(
  chaine,
  obtenir_historique,
  input_messages_key="question",
  history_messages_key="history"
)

# Conversation avec mémoire
config = {"configurable": {"session_id": "user_1"}}
rep1 = chaine_avec_memoire.invoke({"question": "Je m'appelle Marc."}, config)
rep2 = chaine_avec_memoire.invoke({"question": "Comment je m'appelle ?"}, config)
print(rep2.content) # → "Vous vous appelez Marc."

Étape 4 — RAG avec LangChain

from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
from langchain.chains import RetrievalQA

# 1. Charger vos documents
loader = TextLoader("ma_documentation.txt", encoding="utf-8")
documents = loader.load()

# 2. Découper en chunks
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
chunks = splitter.split_documents(documents)

# 3. Créer la base vectorielle
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(chunks, embeddings)

# 4. Créer la chaîne RAG
qa_chain = RetrievalQA.from_chain_type(
  llm=llm,
  retriever=vectorstore.as_retriever(search_kwargs={"k": 3}),
  return_source_documents=True
)

# 5. Interroger vos documents
resultat = qa_chain.invoke({"query": "Quelle est notre politique de remboursement ?"})
print(resultat["result"])
print(resultat["source_documents"]) # Sources citées

Pour une explication complète du RAG, voir notre article : RAG expliqué simplement.

Étape 5 — Votre premier agent avec outils

from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.tools import tool

# Définir des outils personnalisés
@tool
def calculer_tva(montant_ht: float) -> str:
  """Calcule le montant TTC à partir d'un montant HT (TVA 20%)."""
  tva = montant_ht * 0.20
  ttc = montant_ht + tva
  return f"HT: {montant_ht}€, TVA: {tva:.2f}€, TTC: {ttc:.2f}€"

@tool
def rechercher_client(nom: str) -> str:
  """Recherche un client dans la base de données par nom."""
  # En production : requête SQL ou API CRM
  clients = {"Dupont": "SARL Dupont, 10 rue de Paris, CA: 500k€"}
  return clients.get(nom, "Client non trouvé")

outils = [calculer_tva, rechercher_client]

# Créer le prompt de l'agent
prompt = ChatPromptTemplate.from_messages([
  ("system", "Tu es un assistant commercial pour PME. Utilise les outils disponibles."),
  ("human", "{input}"),
  ("placeholder", "{agent_scratchpad}")
])

# Créer et lancer l'agent
agent = create_tool_calling_agent(llm, outils, prompt)
executor = AgentExecutor(agent=agent, tools=outils, verbose=True)

resultat = executor.invoke({"input": "Quel est le TTC pour un devis de 2500€ HT ?"})
print(resultat["output"])

Utiliser LangChain avec Ollama (100% local)

pip install langchain-ollama

from langchain_ollama import ChatOllama

# Remplacer OpenAI par Ollama — aucune autre modification nécessaire !
llm_local = ChatOllama(model="qwen2.5:14b", base_url="http://localhost:11434")

# Tout le reste du code fonctionne identiquement

Déboguer avec LangSmith

LangSmith est l'outil d'observabilité officiel de LangChain. Activez-le en ajoutant ces variables d'environnement :

LANGCHAIN_TRACING_V2=true
LANGCHAIN_API_KEY=votre-cle-langsmith
LANGCHAIN_PROJECT=mon-projet-pme

Chaque appel LLM apparaît dans le dashboard LangSmith avec les tokens utilisés, la latence, et les entrées/sorties. Gratuit jusqu'à 5 000 traces/mois.

FAQ — LangChain

LangChain est-il toujours pertinent en 2026 face à CrewAI et LangGraph ?

Oui. LangChain est la fondation sur laquelle LangGraph est construit. CrewAI utilise aussi LangChain en interne. LangChain reste la bibliothèque la plus complète pour les intégrations (200+ connecteurs). En 2026, la recommandation est : LangChain pour les briques de base, LangGraph pour les agents stateful complexes, CrewAI pour les systèmes multi-agents simples à configurer.

Pourquoi ma chaîne LangChain est lente en production ?

Les causes les plus fréquentes : latence de l'API LLM (inévitable, 0.5-3s), re-calcul des embeddings à chaque requête (solution : persister la base vectorielle), chargement des documents à chaque appel (solution : charger une fois au démarrage), absence de streaming (solution : utiliser llm.stream() pour afficher les tokens en temps réel).