Flux de travail IA

Un workflow IA est un système qui combine de manière ordonnée plusieurs appels à des modèles d'IA, l'utilisation d'outils et des étapes de traitement de données en un pipeline automatisé.

Un seul appel à un LLM peut répondre à des questions, mais les tâches du monde réel nécessitent souvent : rechercher sur le Web → extraire des informations → analyser → rédiger un rapport → envoyer un e-mail. Le workflow IA consiste à enchaîner ces étapes afin que l'IA puisse accomplir automatiquement l'ensemble de la tâche, plutôt que de simplement répondre à une seule phrase.

Une analogie intuitive

Imaginez une chaîne de montage :

ModeAnalogieDescription
Appel unique à un LLMComme un artisanDonnez-lui un morceau de fer, et il vous rend une épée
Flux de travail IAComme une chaîne de montage entièreLes matières premières entrent, passent automatiquement par la fusion → le forgeage → la trempe → le polissage → l'emballage, et des produits finis en sortent

Chaque étape peut être un modèle d'IA, une fonction de code, une API externe ou un nœud de révision humaine.

Évolution des questions-réponses à l'action

Three levels of AI capability Level 1: Single Q&A Q & A User input → LLM → Output Example: "Help me write a poem" Limitation: single-step only Cannot complete complex tasks → Level 2: Chain — chained calls Chain Step A → Step B → Step C Example: Translate → Summarize → Polish Limitation: fixed flow Cannot make dynamic decisions → Level 3: AI Workflow With Agent Agent Perceive → Plan → Tool calling → Reflect → Iterate in a loop Example: Research competitors and generate a report Dynamic decision-making, can complete open-ended tasks AI Workflow is the main paradigm for deploying AI applications today, and it is also the implementation foundation of AI Agents.

Pourquoi le workflow IA est nécessaire

Limites des appels uniques

Un seul appel à un LLM peut accomplir très peu de choses :

  • Fenêtre de contexte limitée : impossible de lire un livre entier d'un seul coup
  • Impossible d'accéder aux informations en temps réel : les données d'entraînement ont une date limite
  • Impossible d'effectuer des actions : impossible d'envoyer réellement des e-mails, d'écrire et d'exécuter du code
  • Impossible de s'auto-valider : impossible de prendre conscience des erreurs après les avoir générées et de les corriger
  • Les tâches complexes sont sujettes aux erreurs : en faire trop en une seule étape entraîne une dégradation de la qualité

Cinq problèmes fondamentaux résolus par le workflow IA

Five core problems solved by AI Workflow Task decomposition Break down complex tasks into multiple small steps Each step focuses on one thing Write report → Research+ Outline + Writing + Review Improve accuracy Reduce per-step pressure Tool integration Call search, databases Code executor, API and other external capabilities Search engines, calculators Databases, email services Break through knowledge boundaries Connect to the real world Iterative reflection AI can examine itself After output, when issues are found Retry and correct Generate code → Run → Error → Fix Automatic error correction Quality is more guaranteed Parallel processing Multiple subtasks simultaneously Execute without queuing Waiting for the previous step to complete Simultaneously analyze finance technology, market — three dimensions Greatly improve efficiency Save runtime Observability The input and output of each step Can all be recorded Monitoring and debugging Logs, tracing Error localization Production-grade reliability Facilitates troubleshooting

Composants principaux

Un workflow IA complet se compose des éléments fondamentaux suivants.

AI Workflow core architecture components AI Workflow Orchestration engine LLM/Model GPT-4、Claude Gemini, local models The brain of the Workflow Tools Search, code execution Databases, external APIs Interact with the outside Memory Short-term: conversation history Long-term: vector database Cross-session persistence State Task progress, intermediate results, context passing Like a relay baton Human intervention Review, feedback Correction, authorization Pause for high-risk operations Routing/Condition Decide based on conditions Which execution path to take Branching, looping, jumping Input/Output Text, images, files Structured data All components are orchestrated and coordinated by the orchestration engine (LangChain / LlamaIndex / Dify, etc.)

Explication détaillée de chaque composant

LLM (grand modèle de langage)- Le « cerveau » du Workflow, responsable du raisonnement, de la génération et de la prise de décision. Couramment utilisés : GPT-4o, Claude 3.5, Gemini 1.5, Llama 3 local.

Outils- Interfaces qui permettent à l'IA d'interagir avec le monde extérieur, notamment : moteurs de recherche (Tavily, Serper, Bing), exécuteurs de code (Python REPL, environnements sandbox), requêtes de base de données (SQL, DB vectorielle), API externes (météo, cours boursiers, e-mail, calendrier), opérations sur fichiers (lecture/écriture, analyse de PDF/Excel).

Mémoire- La mémoire à court terme stocke l'historique de conversation de la session en cours (stocké dans le prompt) ; la mémoire à long terme permet un stockage persistant entre les sessions via base de données vectorielle + RAG ; la mémoire de travail maintient l'état intermédiaire pendant l'exécution de la tâche.

État- Le support d'information transmis entre les étapes d'une tâche, comme un témoin de relais ; chaque étape peut lire le résultat de l'étape précédente et écrire de nouveaux résultats.

Routeur / Condition (Router)- Détermine dynamiquement l'étape suivante en fonction de la sortie de l'étape précédente, permettant un contrôle de flux complexe tel que le branchement, la boucle et le saut.

Humain dans la boucle- Met en pause à des nœuds clés pour attendre la confirmation humaine, adapté aux opérations à haut risque (par ex., suppression de données, envoi d'e-mails, opérations financières).


Six modèles de Workflow courants

Voici les six modèles de conception les plus courants dans un Workflow IA, du plus simple au plus complexe, adaptés à différents scénarios.

Modèle 1 : Chaîne séquentielle

Le modèle le plus basique, où les étapes A → B → C s'exécutent linéairement, et la sortie de l'étape précédente est l'entrée de la suivante.

Pattern 1: Sequential Chain Input User's original English article Step 1 Translate English → Chinese GPT-4o Step 2 Summarize Extract core points Within 100 characters Step 3 Polish Optimize expression Add title Output Refined Chinese summary Including title and key points Each step's output automatically becomes the input of the next step, flowing linearly with clear logic
DimensionDescription
Scénarios applicablesPipelines de traitement de documents, génération de contenu, transformation de données
AvantagesSimple, prévisible
InconvénientsRigide, ne peut pas s'ajuster dynamiquement en fonction du contenu

Modèle 2 : Routage conditionnel

Sélectionner dynamiquement différents chemins suivants en fonction du contenu de sortie d'une certaine étape.

Pattern 2: Conditional Routing User question "How to use Python to sort a list?" Intent classification Router Code problem → Code generation Agent Run code to verify Return result + explanation Knowledge problem → RAG knowledge base retrieval Retrieve relevant documents Generate an answer based on the documents Real-time problem → Online search Search for the latest information Synthesize into an answer The routing node dispatches tasks to the most appropriate processing branch based on the question type
DimensionDescription
Scénarios applicablesService client intelligent, assistants multifonctions, classification et traitement des questions
AvantagesFlexible, utilisation élevée des ressources
InconvénientsLa logique de routage nécessite une conception minutieuse ; les erreurs de classification affectent l'ensemble du processus

Modèle 3 : Exécution parallèle

Plusieurs sous-tâches s'exécutent simultanément, et les résultats sont agrégés à la fin.

DimensionDescription
Scénarios applicablesAnalyse multidimensionnelle, traitement par lots, sous-tâches indépendantes
AvantagesVitesse considérablement améliorée
InconvénientsNécessite de gérer le contrôle de concurrence et la logique de fusion des résultats

Modèle 4 : Boucle ReAct (Raisonnement + Action)

L'IA raisonne d'abord pour décider quoi faire, puis agit pour appeler des outils, et continue à raisonner en fonction des résultats, en boucle jusqu'à ce que la tâche soit terminée. C'est le modèle central des Agents IA.

Pattern 4: ReAct Loop (Reason → Act → Observe → Repeat) Task Query Beijing today's weather and recommend outfits Thought (thinking) I need to first obtain Beijing real-time weather Should call the weather API Action (acting) Call weather tool get_weather( city="Beijing") Observation Return: sunny, temperature 18°C, light breeze (tool execution result) Loop continues reasoning Thought (Round 2) The weather is known, now we can directly provide outfit suggestions Final Answer Beijing is sunny today, 18°C; it is recommended to wear a light jacket Long pants + sneakers; you may bring a thin jacket as backup. (Task complete, exit loop) In each round, 'Thought → Action → Observation' continuously accumulates information until the LLM believes it can make a final answer.
DimensionDescription
Scénarios applicablesAgent IA, exécution de tâches complexes, résolution de problèmes ouverts
AvantagesDynamique et flexible, peut gérer des situations inconnues
InconvénientsLe nombre de boucles n'est pas contrôlable, et un nombre maximal d'étapes doit être défini pour éviter une boucle infinie.

Modèle 5 : Planifier et exécuter

Laisser d'abord le LLM former un plan complet, puis exécuter étape par étape selon le plan. La différence avec ReAct est « réfléchir clairement d'abord, puis agir ».

Mode 5: Plan & Execute (plan first, then execute) Task objective Research competitors and write an analysis report Planner Planning 1 Collect competitor information 2 Extract key features 3 Compare and analyze 4 Write the report Execute 1 Search engine Call x3 Execute 2+3 LLM extraction Comparative analysis Execute 4 → Output Generate Markdown Competitive analysis report The Planner uses only one LLM call to formulate a global plan, and subsequent steps are strictly executed according to the plan.

Modèle 6 : Collaboration multi-Agents

Plusieurs Agents spécialisés travaillent en collaboration, et chaque Agent a son propre rôle et ensemble d'outils.

Mode 6: Multi-Agent Collaboration (Multi-Agent) Coordinator Agent Receives user tasks, assigns them to specialized Agents, and aggregates results. Researcher Agent Tools: search engine, web scraping Responsibilities: collect information, organize facts Output: structured information summary ↑ Report to coordinator Analyst Agent Tools: calculator, Python Responsibilities: data analysis, chart generation Output: analysis conclusions ↑ Report to coordinator Writer Agent Tools: document templates Responsibilities: writing and polishing reports Output: final document ↑ Report to coordinator Reviewer Agent Tools: fact-checking tools Responsibilities: verify accuracy Output: review comments ↑ Report to coordinator Final result → User Each Agent specializes in one skill; the coordinator manages the overall situation. Division of labor and cooperation is far more efficient than a single Agent.
DimensionDescription
Scénarios applicablesDéveloppement logiciel complexe, assistance à la recherche, automatisation d'entreprise
AvantagesSpécialisation dédiée, qualité supérieure, facile à mettre à l'échelle
InconvénientsComplexité système élevée ; la communication entre Agents nécessite une conception minutieuse

Comparaison des principaux frameworks et outils

Voici une comparaison complète des frameworks de Workflow IA les plus courants, pour vous aider à choisir en fonction de votre situation.

AI Workflow mainstream framework comprehensive comparison Framework Positioning Core features Suitable for Learning curve Open source LangChain Python/JS Code-first framework Most complete ecosystem Full coverage of Chain, Agent, RAG Largest number of tool integrations (200+) LangSmith observability platform Developers with Python basics Need extensive custom integration Medium √ LangGraph Created by LangChain Graph-based Agent framework Stateful workflows Use "graphs" to define complex workflows Built-in state management, resumable checkpoints Supports Human-in-the-Loop Scenarios requiring complex process control Production-grade Agent applications Difficult √ LlamaIndex Python RAG-specialized framework Strongest data processing Optimal data ingestion, indexing, and retrieval Supports 80+ data source connectors Built-in advanced RAG strategies Knowledge base, document Q&A scenarios Requires integrating large amounts of unstructured data Medium √ Dify Open-source LLMOps Visual low-code Full-stack AI platform Drag-and-drop workflow building, no coding required Built-in application management, API publishing Supports self-hosting and cloud Users with non-technical backgrounds From rapid prototyping to production deployment Lowest √ n8n Automation platform General-purpose workflow automation Includes AI nodes 400+ service integrations, visual orchestration Hybrid of AI nodes + traditional automation Self-hostable, data stays in-country Requires connecting to various SaaS systems Business process automation scenarios Relatively low √ CrewAI Python Multi-Agent collaboration Role-playing framework Defines Agents by 'role' and 'task' Built-in delegation and supervision mechanisms Minimalist API, quick to learn Multi-Agent collaboration scenarios Beginners with basic Python knowledge Relatively low √ Recommendations for beginners: with coding background → LangChain / CrewAI; non-technical background → Dify / n8n

Arbre de décision pour le choix du framework

En fonction de votre situation spécifique, suivez l'arbre de décision ci-dessous pour choisir le framework approprié :

你的情况是什么?
│
├─── 没有编程基础,想用可视化工具搭建
│    ├─── 主要是 AI 应用(问答、生成)→ Dify(首选)
│    └─── 需要连接 Slack/邮件等 SaaS 系统 → n8n
│
├─── 有 Python 基础,代码优先
│    ├─── 做知识库 / RAG 系统 → LlamaIndex
│    ├─── 做多 Agent 协作,想快速上手 → CrewAI
│    ├─── 需要复杂有状态流程控制 → LangGraph
│    └─── 通用场景,想要最大生态 → LangChain
│
└─── 已有明确场景,生产级要求
     ├─── 高并发、精细控制 → LangGraph + LangSmith
     └─── 企业部署、私有化 → Dify 自托管

Démarrage rapide : exemples de code Python

Les exemples suivants passent de la chaîne séquentielle la plus simple à une collaboration multi-Agent complexe, démontrant comment mettre en œuvre des Workflows IA étape par étape.

Chaîne séquentielle LangChain

Le modèle de Workflow le plus basique, en enchaînant plusieurs étapes d'appel LLM avec l'opérateur pipe |.

Installer les paquets de dépendances :

pip install langchain langchain-openai

Exemple

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

llm = ChatOpenAI(model="gpt-4o-mini", api_key="your-api-key")

# ─── Définir trois étapes ────────────────────────────────────────────
# Étape 1 : Traduire l'article en chinois
translate_prompt = ChatPromptTemplate.from_template(
    Traduisez l'article anglais suivant en chinois, en préservant le sens original :\n\n{article}"
)

# Étape 2 : Extraire le résumé
summarize_prompt = ChatPromptTemplate.from_template(
    Veuillez distiller l'article suivant en 3 points clés, une phrase chacun :\n\n{translated}"
)

# Étape 3 : Générer le titre
title_prompt = ChatPromptTemplate.from_template(
    À partir du résumé suivant, générez un titre chinois attrayant (en 15 caractères maximum) :\n\n{summary}"
)

parser = StrOutputParser()

# ─── Enchaîner avec l'opérateur | pour former un pipeline ─────────────────────────────────
chain = (
    {"translated": translate_prompt | llm | parser}
    | {"summary": summarize_prompt | llm | parser,
       "translated": lambda x: x["translated"]}
    | title_prompt | llm | parser
)

# ─── Exécuter ────────────────────────────────────────────────────
article = """
L’intelligence artificielle transforme notre façon de travailler et de vivre.
De l’automatisation des tâches répétitives à l’assistance au travail créatif,
Les outils d’IA deviennent indispensables dans les flux de travail modernes...
"""


result = chain.invoke({"article": article})
print(result)
AI 正在重塑现代工作流:从自动化到创意辅助

Agent d’appel d’outils (mode ReAct)

ReAct est le mode central d’un agent IA, permettant à l’IA d’alterner entre réflexion et action jusqu’à ce que la tâche soit terminée.

Exemple

from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_react_agent
from langchain_core.tools import tool
from langchain import hub
import requests, datetime

# ─── Définir les outils ────────────────────────────────────────────────
@tool
def get_weather(city: str) -> str:
    """Obtenir les informations météorologiques actuelles pour une ville spécifiée"""
    # Remplacer par une API météo réelle en production
    mock_data = {
        "Beijing": "Ensoleillé, 22°C, légère brise",
        "Shanghai": "Nuageux, 26°C, humidité 75%",
        "Guangzhou": "Pluie légère, 30°C, prenez un parapluie",
    }
    return mock_data.get(city, f"Aucune donnée météorologique disponible pour {city}")

@tool
def search_web(query: str) -> str:
    """Rechercher des informations sur le web et renvoyer un résumé du contenu pertinent"""
    # Intégrer Tavily / Serper API en production
    return f"Résultats de recherche pour '{query}' : Ceci est un résultat de recherche simulé..."

@tool
def calculate(expression: str) -> str:
    """Calculer une expression mathématique, par ex., '2 + 3 * 4'"""
    try:
        result = eval(expression, {"__builtins__": {}}, {})
        return str(result)
    except Exception as e:
        return f"Erreur de calcul : {e}"

@tool
def get_date() -> str:
    """Obtenir la date d'aujourd'hui"""
    return datetime.date.today().strftime("%Y-%m-%d")

# ─── Créer un agent ───────────────────────────────────────────────
tools = [get_weather, search_web, calculate, get_date]
llm   = ChatOpenAI(model="gpt-4o", temperature=0)

# Utiliser le prompt ReAct standard de LangChain Hub
prompt = hub.pull("hwchase17/react")

agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(
    agent=agent,
    tools=tools,
    verbose=True,      # Afficher chaque étape de raisonnement pour faciliter le débogage
    max_iterations=8,  # Empêcher les boucles infinies
    handle_parsing_errors=True
)

# ─── Exécuter ────────────────────────────────────────────────────
result = agent_executor.invoke({
    "input": "Quelle est la date d'aujourd'hui ? Quel temps fait-il à Pékin ? Si vous marchez 5km en extérieur, vous brûlez environ 300 calories, "
             "Courir la même distance brûle environ 1.6 fois celle de la marche. Veuillez calculer les calories brûlées en courant."
})

print(result["output"])
# L'agent décidera automatiquement : d'abord appeler get_date → get_weather("Beijing") → calculate("300*1.6")
# Enfin, combinez toutes les informations pour donner une réponse complète

Flux de travail avec état LangGraph

LangGraph définit des flux de travail complexes à l'aide de graphes, où chaque nœud est une fonction et les arêtes définissent la logique de transition.

Exemple

from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
from typing import TypedDict, Annotated
import operator

# ─── Définir la structure d'état (données transmises entre les nœuds) ────────────────────────
class ResearchState(TypedDict):
    topic: str                             # Sujet de recherche
    research_notes: str                    # Notes de recherche
    draft: str                             # Brouillon
    review_feedback: str                   # Retour de révision
    final_report: str                      # Rapport final
    revision_count: Annotated[int, operator.add]   # Nombre de révisions (cumulatif)

llm = ChatOpenAI(model="gpt-4o")

# ─── Définir les fonctions de nœud ─────────────────────────────────────────────
def research_node(state: ResearchState) -> dict:
    """Nœud 1 : Phase de recherche"""
    response = llm.invoke(
        f"Veuillez effectuer une brève recherche sur le sujet suivant et énumérer 5 points clés : {state['topic']}"
    )
    return {"research_notes": response.content}

def write_node(state: ResearchState) -> dict:
    """Nœud 2 : Rédiger le brouillon"""
    prompt = f"""
Sujet : {state['topic']}
Notes de recherche : {state['research_notes']}
{'Commentaires de la révision précédente : ' + state.get('review_feedback', '') if state.get('review_feedback') else ''}

Veuillez rédiger un brouillon de 300 mots d'un rapport d'analyse basé sur le contenu ci-dessus.
    """

    response = llm.invoke(prompt)
    return {"draft": response.content, "revision_count": 1}

def review_node(state: ResearchState) -> dict:
    """Nœud 3 : Révision du brouillon"""
    response = llm.invoke(
        f"Examinez le rapport suivant. Si la qualité répond au standard, répondez 'APPROVED' ; sinon, fournissez des suggestions de révision spécifiques :\n\n{state['draft']}"
    )
    return {"review_feedback": response.content}

def finalize_node(state: ResearchState) -> dict:
    """Nœud 4 : Finalisation"""
    return {"final_report": state["draft"]}

# ─── Fonction de routage : déterminer quel chemin prendre après révision ─────────────────────────────
def should_revise(state: ResearchState) -> str:
    if "APPROVED" in state["review_feedback"]:
        return "finalize"           # → Finaliser
    elif state["revision_count"] >= 3:
        return "finalize"           # → Dépasse 3 révisions, terminaison forcée
    else:
        return "revise"             # → Retour au nœud de rédaction pour révision

# ─── Construire le graphe de workflow ─────────────────────────────────────────────
workflow = StateGraph(ResearchState)

# Ajouter les nœuds
workflow.add_node("research",  research_node)
workflow.add_node("write",     write_node)
workflow.add_node("review",    review_node)
workflow.add_node("finalize",  finalize_node)

# Définir le point d'entrée
workflow.set_entry_point("research")

# Ajouter les arêtes (définir la logique de transition)
workflow.add_edge("research", "write")       # Recherche → Rédaction
workflow.add_edge("write",    "review")      # Rédaction → Révision

# Arête conditionnelle : choisir le chemin en fonction du résultat de la révision
workflow.add_conditional_edges(
    "review",
    should_revise,
    {
        "revise":   "write",    # Nécessite une révision → Retour à la rédaction
        "finalize": "finalize"  # Approuvé → Finaliser
    }
)

workflow.add_edge("finalize", END)

# Compiler et exécuter
app = workflow.compile()

result = app.invoke({"topic": "L'impact de l'IA générative sur l'industrie du développement logiciel", "revision_count": 0})
print(result["final_report"])

Collaboration multi-agents avec CrewAI

CrewAI permet à plusieurs agents de collaborer comme une équipe en définissant des rôles et des tâches.

Exemple

from crewai import Agent, Task, Crew, Processus
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o")

# ─── Définir l'Agent (Rôle) ────────────────────────────────────────
researcher = Agent(
    role=Chercheur de marché,
    goal=Collecter et organiser des informations de marché complètes et précises sur le sujet cible.,
    backstory=Vous êtes un analyste de marché expérimenté, habile à extraire des enseignements clés à partir de vastes quantités d'informations.,
    llm=llm,
    verbose=True
)

analyst = Agent(
    role=Analyste de données,
    goal=À partir des informations fournies par le chercheur, mener une analyse approfondie et tirer des conclusions précieuses.,
    backstory=Vous excellez dans l'utilisation des données pour communiquer et savez déceler les tendances et opportunités cachées dans l'information.,
    llm=llm,
    verbose=True
)

writer = Agent(
    role=Expert en rédaction de rapports,
    goal=Rédigez les conclusions analytiques dans un rapport clair, professionnel et convaincant.,
    backstory=Vous avez une grande expérience de la rédaction professionnelle et pouvez rendre une analyse complexe facile à comprendre.,
    llm=llm,
    verbose=True
)

# ─── Définir la tâche ────────────────────────────────────────
research_task = Task(
    description=Recherchez l'état actuel du marché chinois des véhicules à énergie nouvelle, y compris les principales marques, la part de marché et les tendances de croissance.,
    expected_output=Un rapport d'étude de marché contenant 5 points de données clés, y compris des chiffres et des faits précis.,
    agent=researcher
)

analysis_task = Task(
    description=Sur la base du rapport de recherche, analysez les opportunités et les risques au cours des 3 prochaines années et fournissez des recommandations de notation d'investissement.,
    expected_output=Tableau d'analyse SWOT + notation d'investissement (fortement recommandé/recommandé/neutre/prudent) + justification,
    agent=analyst,
    context=[research_task]    Sortie de la tâche de recherche dépendante
)

writing_task = Task(
    description=Intégrez la recherche et l'analyse dans une note d'information professionnelle sur l'investissement de 500 mots avec une mise en forme claire.,
    expected_output=Une note d'information comprenant quatre sections : résumé exécutif, état du marché, opportunités et risques, et recommandations d'investissement.,
    agent=writer,
    context=[research_task, analysis_task]
)

# ─── Constituer l'équipe et exécuter ───────────────────────────────────────────
crew = Crew(
    agents=[researcher, analyst, writer],
    tasks=[research_task, analysis_task, writing_task],
    process=Process.sequential,    # Exécution séquentielle (peut aussi être changée en hiérarchique)
    verbose=True
)

result = crew.kickoff()
print(result)

Boucle de validation humaine (Nœud de révision manuelle)

LangGraph permet de suspendre l'exécution aux étapes critiques pour attendre la confirmation humaine avant de continuer.

Exemple

from langgraph.graph import StateGraph, END
from langgraph.checkpoint.memory import MemorySaver
from typing import TypedDict

class EmailState(TypedDict):
    recipient: str
    content: str
    approved: bool

def draft_email(state: EmailState) -> dict:
    Rédiger un e-mail.
    content = fCher {state['recipient']},\n\nCeci est le contenu de l'e-mail rédigé par l'IA...\n\nCordialement
    return {"content": content}

def send_email(state: EmailState) -> dict:
    Envoyer un e-mail (opération à haut risque, nécessite un examen manuel avant exécution)
    print(fL'e-mail a été envoyé à {state['recipient']})
    return {}

# Routage : décider d'envoyer ou non en fonction du résultat de l'examen manuel.
def check_approval(state: EmailState) -> str:
    return "send" if state.get("approved") else END

workflow = StateGraph(EmailState)
workflow.add_node("draft", draft_email)
workflow.add_node("send", send_email)
workflow.set_entry_point("draft")

# Pause après la fin du brouillon, attendre la revue humaine (interrupt_after)
workflow.add_conditional_edges("draft", check_approval, {"send": "send", END: END})
workflow.add_edge("send", END)

# Utiliser MemorySaver pour prendre en charge l'interruption et la reprise
memory = MemorySaver()
app = workflow.compile(
    checkpointer=memory,
    interrupt_after=["draft"]      # Pause après le nœud draft
)

config = {"configurable": {"thread_id": "email-001"}}

# Premier lancement : pause après l'exécution jusqu'à draft
state = app.invoke({"recipient": "Client A", "approved": False}, config)
print("Brouillon généré, en attente de révision :")
print(state["content"])

# Après examen manuel, mettre à jour le statut et poursuivre l'exécution
user_input = input("\nApprouver l'envoi ? (y/n) : ")
if user_input.lower() == "y":
    app.update_state(config, {"approved": True})
    app.invoke(None, config)   # Continuer depuis le point d'arrêt
    print("E-mail envoyé")
else:
    print("Envoi annulé")

Ingénierie des prompts : techniques clés dans le flux de travail

Dans le flux de travail d'IA, la qualité du prompt affecte directement la qualité de sortie de chaque nœud.

Exemple

# Définition de rôle floue
# system_prompt = "Vous êtes un assistant IA, aidez-moi à analyser ce document"

# Définition de rôle claire (recommandée)
system_prompt = """
Vous êtes un analyste financier professionnel, spécialisé dans l'identification des signaux de risque dans les rapports financiers.
Votre tâche : Extraire tous les points de données clés liés aux passifs, aux flux de trésorerie et à la rentabilité à partir du rapport suivant.
Format de sortie : JSON, contenant risk_level (high/medium/low) et key_findings (liste).
Remarque : Ne produire que du JSON, ne pas ajouter de texte explicatif.
"""

Exemple

# Passer du texte non structuré
# state["previous_output"] = "Résultat de l'analyse : Cette entreprise semble bonne, il y a quelques risques..."

# Passer des données structurées (recommandé)
state["analysis_result"] = {
    "risk_level": "moyen",
    "key_findings": ["Ratio d'endettement 45%, moyenne du secteur 38%", "Le flux de trésorerie est positif, T3 en baisse de 12% par rapport au trimestre précédent"],
    "recommendation": "Conserver avec prudence"
}

Exemple

# Forcer la sortie JSON dans le prompt
prompt = """
Veuillez analyser le sentiment du texte suivant.
Produisez strictement le format JSON suivant, n'ajoutez aucun autre contenu :
{
  "sentiment": "positif" | "négatif" | "neutre",
  "confidence": 0.0-1.0,
"reason": "brève explication"
}

Texte : {text}
"""

Gestion des erreurs et réessai

Exemple

from tenacity import retry, stop_after_attempt, wait_exponential
import logging

@retry(
    stop=stop_after_attempt(3),                         # Réessayer jusqu'à 3 fois
    wait=wait_exponential(multiplier=1, min=2, max=10)  # Attente avec repli exponentiel
)
def call_llm_with_retry(prompt: str) -> str:
    try:
        response = llm.invoke(prompt)
        return response.content
    except Exception as e:
        logging.error(f"L'appel au LLM a échoué : {e}")
        raise

def safe_parse_json(text: str) -> dict:
    """Analyser en toute sécurité la sortie JSON du LLM"""
    import json, re
    # Extraire la partie JSON (le LLM ajoute parfois du texte explicatif supplémentaire)
    json_match = re.search(r'\{.*\}', text, re.DOTALL)
    if json_match:
        try:
            return json.loads(json_match.group())
        except json.JSONDecodeError:
            pass
    return {"error": Échec de l'analyse, "raw": text}

Contrôle des coûts

Exemple

# ─── Sélectionner les modèles selon l'importance de la tâche ────────────────────────────────
def get_llm(task_type: str):
    if task_type == "classification":   # Pour les tâches de classification, un modèle léger suffit
        return ChatOpenAI(model="gpt-4o-mini")
    elif task_type == "generation":     # Pour les tâches de génération, utilisez un modèle moyen
        return ChatOpenAI(model="gpt-4o-mini")
    elif task_type == "reasoning":      # Pour un raisonnement complexe, utilisez un modèle puissant
        return ChatOpenAI(model="gpt-4o")

# ─── Mettre en cache les requêtes répétées ──────────────────────────────────────────
from langchain.globals import set_llm_cache
from langchain_community.cache import InMemoryCache
set_llm_cache(InMemoryCache())   # Renvoyer directement le résultat mis en cache pour une entrée identique ; pas de facturation en double

# ─── Découper le texte pour éviter une longueur excessive ──────────────────────────────────────
from langchain.text_splitter import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter(
    chunk_size=2000,       # 2000 caractères par segment
    chunk_overlap=200      # Chevauchement de 200 caractères pour maintenir la cohérence du contexte
)
chunks = splitter.split_text(long_document)

Scénarios d'application typiques

AI Workflow a été largement adopté dans de multiples domaines. Les six scénarios les plus représentatifs sont les suivants.

AI Workflow Typical Application Scenarios AI Programming Assistant User describes requirements → Understand requirements → Generate code → Run automatically → Detect errors → Auto-fix → Generate documentation and test cases Representative: GitHub Copilot Workspace Claude Code、Cursor Automated Research Reports Receive research topic → Break down into sub-problems → Gather information in parallel → Extract Key information → Comprehensive analysis → Generate a complete report with citations Representative: Perplexity Deep Research OpenAI Deep Research Intelligent Customer Service System Identify user intent → Query order database → Retrieve policy documents → Generate personalized reply → Complex issues escalated to human agents Representative: AI customer service of major e-commerce platforms Bank Intelligent Customer Service Data Analysis Automation Upload Excel/CSV → Understand data structure → Automatically select analysis method → Execute Python → Generate charts + natural language interpretation Representative: ChatGPT Advanced Data Analysis Content Marketing Pipeline Input topic and audience → Research hot topics → Generate outline → Write full text → Optimize SEO → Generate image descriptions → Multi-platform adaptation Examples: Various types of AI writing and marketing automation tools Medical assisted diagnosis Patient describes symptoms → Structured Medical history → Retrieve medical literature → Analyze imaging reports → Generate Reference suggestions → Doctor confirmation Note: High-risk scenarios must retain human confirmation Human-in-the-Loop

Bonnes pratiques et pièges courants

Pièges courants et solutions

Voici les problèmes les plus courants rencontrés par les débutants lors de l'utilisation d'AI Workflow.

PiègeSymptômeSolution
Cascade d'hallucinationsLa sortie précédente de l'IA est incorrecte, transmise comme un fait à l'étape suivante, amplifiant l'erreur.Ajoutez des étapes de vérification aux nœuds clés ; utilisez des outils pour les informations numériques.
Boucle infinieL'agent ReAct appelle à plusieurs reprises des outils sans savoir quand s'arrêter.Définissez max_iterations ; donnez au LLM des conditions d'arrêt explicites.
Explosion du contexteÀ mesure que les étapes augmentent, le texte transmis au LLM devient plus long et dépasse la fenêtre.Ne transmettez que les champs nécessaires à chaque étape ; compressez les informations historiques avec des résumés.
Abus d'outilsL'agent peut répondre directement mais continue d'appeler des outils.Optimisez les descriptions des outils ; indiquez clairement au LLM quand les outils ne sont pas nécessaires.
Échec d'analyse JSONLe format de sortie du LLM est instable, ce qui fait planter le programme.Ajoutez safe_parse_json ; utilisez OutputParser de LangChain.
Dépassement des coûtsL'utilisation des tokens n'est pas estimée, et la facture mensuelle dépasse les attentes.Testez d'abord avec gpt-4o-mini ; utilisez LangSmith pour surveiller l'utilisation.
Conflit de concurrencePlusieurs Agents écrivant simultanément dans le même état provoquent une corruption des données.Utilisez la gestion d'état intégrée de LangGraph ; évitez de partager un état mutable.

Résumé et parcours d'apprentissage

Révision des connaissances essentielles

AI Workflow Core Knowledge Points Core Elements LLM, tools memory, state routing, human Intervention: six major components Form a complete system Six major patterns Sequential chain Conditional routing Parallel execution ReAct loop Plan&Execute Multi-Agent Mainstream frameworks LangChain LangGraph LlamaIndex CrewAI Dify / n8n Select as needed Key code Chain: chained invocation Tool Definition StateGraph state graph Agent + Executor Human-in-Loop interrupt_after Key pitfalls Hallucination cascade Infinite Loop Context explosion. JSON parsing failed Cost overrun Prevention is better than cure application scenarios AI coding assistant Research report Smart customer service Data analysis Content production Medical assistance

Parcours d'apprentissage recommandé

Phase 1 : Comprendre les bases (1 semaine)

  1. Comprendre les appels API LLM, être capable d'effectuer des requêtes avec le SDK OpenAI
  2. Parcourir l'exemple de chaîne séquentielle LangChain dans cet article
  3. Comprendre les principes de base de l'ingénierie des prompts

Phase 2 : Outils et Agents (2 semaines)

  1. Apprendre à définir des outils avec le décorateur @tool
  2. Parcourir l'exemple ReAct Agent, observer les logs verbeux pour comprendre la logique de boucle
  3. Utiliser Dify ou n8n pour construire un prototype de Workflow visuel

Phase 3 : Workflow complexe (3 semaines)

  1. Apprendre les graphes d'état LangGraph, implémenter un workflow avec branchement conditionnel
  2. Utiliser CrewAI pour implémenter une tâche de collaboration à deux Agents
  3. Intégrer de vrais outils (Tavily Search, Python REPL)
  4. Utiliser LangSmith pour observer et déboguer votre Workflow

Phase 4 : Prêt pour la production (en continu)

  1. Implémenter la nouvelle tentative en cas d'erreur et l'analyse de sortie structurée
  2. Surveillance et optimisation des coûts (utilisation de modèles par niveaux)
  3. Déployer en production, mettre en place la surveillance et les alertes

Ressources de référence

autres extensions