All guides
Intermediate-AdvancedSelf-pacedFree GuideSection 29/33

Agents IA et orchestration

Learn to build and check a web application with development tools and AI assistants. Practise design, coding and validation.

The full lessons for this course are currently available in French. Use the section menu to navigate the French course.

💡

Free content, available without an account. Tools and models change: use the current model guide to check their versions. Models and sources

Section 13.6.5 : Agents IA et orchestration

🎯 Objectif pédagogique

Comprendre les agents IA autonomes, l'orchestration multi-agents, et implémenter un agent capable d'utiliser des outils (function calling) pour accomplir des tâches complexes.


Qu'est-ce qu'un agent IA ?

Un agent IA est un système qui utilise un LLM pour raisonner, planifier, et agir de manière autonome. Contrairement à un simple chatbot qui répond, un agent peut utiliser des outils, consulter des bases de données, et exécuter des actions.

Loading diagram…

Function Calling (Tool Use)

Le function calling permet au LLM d'appeler des fonctions que vous définissez :

# Définir les outils disponibles
TOOLS = [
  {
    type: 'function',
    function: {
      name: 'search_products',
      description: 'Recherche des produits dans le catalogue',
      parameters: {
        type: 'object',
        properties: {
          query: { type: 'string', description: 'Termes de recherche' },
          category: { type: 'string', description: 'Catégorie de produit' },
          max_price: { type: 'number', description: 'Prix maximum' }
        },
        required: ['query']
      }
    }
  },
  {
    type: 'function',
    function: {
      name: 'get_order_status',
      description: 'Vérifie le statut d une commande',
      parameters: {
        type: 'object',
        properties: {
          order_id: { type: 'string', description: 'ID de la commande' }
        },
        required: ['order_id']
      }
    }
  }
]

Implémentation d'un agent

# app/services/agent_service.rb

class AgentService
  MAX_ITERATIONS = 10

  def initialize(tools:)
    @tools = tools
    @messages = []
  end

  def run(user_message)
    @messages << { role: 'user', content: user_message }

    MAX_ITERATIONS.times do
      response = OPENAI_CLIENT.chat(
        parameters: {
          model: 'gpt-4',
          messages: @messages,
          tools: @tools,
          tool_choice: 'auto'
        }
      )

      message = response.dig('choices', 0, 'message')
      @messages << message

      # Si le LLM veut appeler un outil
      if message['tool_calls']
        message['tool_calls'].each do |tool_call|
          result = execute_tool(
            tool_call['function']['name'],
            JSON.parse(tool_call['function']['arguments'])
          )

          @messages << {
            role: 'tool',
            tool_call_id: tool_call['id'],
            content: result.to_json
          }
        end
      else
        # Réponse finale
        return message['content']
      end
    end

    'Agent a atteint la limite d itérations.'
  end

  private

  def execute_tool(name, args)
    case name
    when 'search_products'
      Product.search(args['query'])
             .where(category: args['category'])
             .where('price <= ?', args['max_price'])
             .limit(5)
             .map { |p| { name: p.name, price: p.price } }
    when 'get_order_status'
      order = Order.find_by(id: args['order_id'])
      order ? { status: order.status, eta: order.eta } : { error: 'Commande non trouvée' }
    end
  end
end

# Utilisation
agent = AgentService.new(tools: TOOLS)
response = agent.run(
  "Je cherche des chaussures de running sous 100€, "  \
  "et aussi le statut de ma commande #12345"
)

Orchestration multi-agents

Pour des tâches complexes, plusieurs agents spécialisés collaborent :

# Agent de routage (dispatcher)
class DispatcherAgent
  AGENTS = {
    'sales' => SalesAgent,
    'support' => SupportAgent,
    'analytics' => AnalyticsAgent
  }

  def route(message)
    # Le LLM détermine quel agent doit traiter
    category = AiService.chat(
      "Classifie ce message en une catégorie : sales, support, analytics.\n" \
      "Message : #{message}\n" \
      "Réponds uniquement par la catégorie.",
      system_message: 'Tu es un routeur de messages.'
    ).strip.downcase

    agent_class = AGENTS[category]
    agent_class.new.handle(message)
  end
end
Quick Check

Quelle est la différence fondamentale entre un chatbot et un agent IA ?

Learn AI, from prompts to agents

15 free guidesQuizzes, diagrams and workshopsNo account needed

Your progress

Progress is self-reported and stored in your browser. The final completion record is not a qualification or an independent assessment.

View progress and completion record

Learn AI, from prompts to agents

15 free guidesQuizzes, diagrams and workshopsNo account needed

One practical AI workflow in your inbox

Methods, resources and new exercises. Free, unsubscribe at any time.