> ## Documentation Index
> Fetch the complete documentation index at: https://docs.quivr.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Escalader

> Passe la main à un agent avec un brouillon de réponse

export const ToolUsage = ({name, description, arguments: args = {}, response = {}}) => {
  const argsJson = JSON.stringify(args, null, 2);
  const responseJson = JSON.stringify(response, null, 2);
  return <div className="border border-zinc-200 dark:border-zinc-700 rounded-xl p-5 my-4 bg-white dark:bg-zinc-900/50">
      {}
      <div className="flex items-center gap-2 mb-1">
        <span className="font-mono font-semibold text-base text-blue-500 dark:text-blue-400">
          @{name}
        </span>
      </div>

      {}
      {description && <p className="text-zinc-500 dark:text-zinc-400 text-sm m-0 mb-4 leading-relaxed">
          {description}
        </p>}

      {}
      <div className="grid grid-cols-1 sm:grid-cols-2 gap-3">
        <div className="flex flex-col">
          <span className="text-xs font-medium text-zinc-400 dark:text-zinc-500 mb-1.5 uppercase tracking-wide">
            Arguments
          </span>
          <pre className="font-mono text-xs bg-zinc-50 dark:bg-zinc-800/70 p-3 rounded-lg m-0 overflow-x-auto flex-1 text-zinc-600 dark:text-zinc-300 border border-zinc-100 dark:border-zinc-700/50">
            {argsJson}
          </pre>
        </div>

        <div className="flex flex-col">
          <span className="text-xs font-medium text-zinc-400 dark:text-zinc-500 mb-1.5 uppercase tracking-wide">
            Response
          </span>
          <pre className="font-mono text-xs bg-zinc-50 dark:bg-zinc-800/70 p-3 rounded-lg m-0 overflow-x-auto flex-1 text-zinc-600 dark:text-zinc-300 border border-zinc-100 dark:border-zinc-700/50">
            {responseJson}
          </pre>
        </div>
      </div>
    </div>;
};

export const WorkflowExample = ({title, whenToUse, steps = []}) => {
  const parseToolMentions = text => {
    if (!text) return text;
    const parts = text.split(/(@[\w-]+)/g);
    return parts.map((part, i) => {
      if (part.startsWith("@")) {
        const toolName = part.slice(1);
        return <span key={i} className="text-blue-500 dark:text-blue-400 font-semibold bg-blue-50 dark:bg-blue-950/50 px-1.5 py-0.5 rounded text-[0.9em] whitespace-nowrap">
            @{toolName}
          </span>;
      }
      return part;
    });
  };
  return <div className="my-6 border-2 border-dashed border-zinc-300 dark:border-zinc-600 rounded-xl p-6">
      {}
      <h3 className="text-xl font-semibold text-zinc-900 dark:text-zinc-100 m-0 mb-5">
        {title}
      </h3>

      {}
      <div className="mb-6">
        <span className="text-sm font-medium text-zinc-500 dark:text-zinc-400 block mb-2">
          When to use
        </span>
        <div className="border border-zinc-200 dark:border-zinc-700 rounded-lg p-4 bg-zinc-50/50 dark:bg-zinc-800/30">
          <p className="m-0 text-zinc-700 dark:text-zinc-300 leading-relaxed">
            {whenToUse}
          </p>
        </div>
      </div>

      {}
      <div>
        <span className="text-sm font-semibold text-zinc-900 dark:text-zinc-100 block mb-4">
          Steps
        </span>
        <div className="flex flex-col gap-4">
          {steps && steps.map((step, index) => <div key={index} className="flex gap-3 items-start">
              <span className="flex items-center gap-1.5 flex-shrink-0 pt-0.5">
                <span className="text-blue-500 dark:text-blue-400 font-medium text-sm tabular-nums">
                  {index + 1}.
                </span>
              </span>
              <span className="text-zinc-700 dark:text-zinc-300 leading-relaxed">
                {parseToolMentions(step)}
              </span>
            </div>)}
        </div>
      </div>
    </div>;
};

## Ce que fait cet outil

Quand votre workflow atteint ses limites, cet outil :

1. **Arrête** le workflow personnalisé
2. **Génère** un brouillon de réponse via l'algorithme de base Quivr
3. **Transmet** le ticket à un agent humain qui validera ou modifiera le brouillon

<Note>
  L'agent reçoit un brouillon pré-rédigé qu'il peut modifier avant d'envoyer au client. Le message n'est jamais envoyé automatiquement.
</Note>

## Utilisation dans un workflow

<ToolUsage name="escalate_to_agent" description="Arrete le workflow et transmet le ticket a un agent humain" arguments={{ reason: "Demande client" }} response={{ success: true, draft_generated: true, assigned_to: "agent@company.com" }} />

## Ce qui se passe concretement

```mermaid theme={null}
flowchart LR
    A[Workflow s'arrête] --> B[Quivr génère un brouillon]
    B --> C[Agent reçoit le ticket]
    C --> D[Agent modifie/valide]
    D --> E[Réponse envoyée]
```

1. Votre workflow s'interrompt
2. Quivr utilise son algorithme de base pour rédiger une réponse
3. L'agent voit le ticket avec le brouillon proposé
4. L'agent peut modifier, compléter ou réécrire avant d'envoyer

## Quand l'utiliser

<AccordionGroup>
  <Accordion title="Le client demande un humain" icon="user">
    Respectez toujours cette demande explicite.
  </Accordion>

  <Accordion title="Décision sensible" icon="scale-balanced">
    Remboursements importants, litiges, cas nécessitant un jugement humain.
  </Accordion>

  <Accordion title="Cas non prévu" icon="circle-question">
    Le problème sort du cadre de votre workflow.
  </Accordion>

  <Accordion title="Client mécontent" icon="face-angry">
    Signes d'insatisfaction croissante malgré vos réponses.
  </Accordion>
</AccordionGroup>

## Exemple

<WorkflowExample
  title="Escalade vers un agent"
  whenToUse="Quand le ticket necessite l'intervention d'un humain"
  steps={[
"Si le client demande explicitement un agent, confirme que tu transmets sa demande",
"Utilise @escalate_to_agent pour passer la main",
"Si le remboursement depasse 500 euros, explique qu'un specialiste va prendre le relais",
"Si le probleme depasse tes competences, rassure le client et escalade"
]}
/>

## Bonnes pratiques

<Warning>
  Ne pas abuser de cet outil. Un bon workflow doit résoudre la majorité des cas automatiquement.
</Warning>

* **Prévenez le client** : "Un spécialiste va prendre le relais."
* **Résumez le contexte** : Cela aide l'agent à comprendre rapidement la situation.
* **Gardez l'escalade exceptionnelle** : Si vous escaladez trop souvent, améliorez votre workflow.
