For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Navigation principale
Theme

Exécution des agents

Comprenez la boucle d’exécution des agents, les stratégies de poursuite de la conversation et la diffusion en continu.

Définir un agent n’est que la première étape. Il faut ensuite comprendre ce qui se passe pendant une exécution, comment la conversation se poursuit au tour suivant et comment le workflow se déroule lorsqu’il se met en pause pour attendre une approbation ou le résultat d’un appel d’outil.

La boucle d’exécution de l’agent

Chaque exécution du SDK correspond à un tour pour l’application. Le moteur d’exécution répète les étapes suivantes jusqu’à ce qu’une condition d’arrêt soit remplie :

  1. Il appelle le modèle de l’agent actif avec les données d’entrée préparées.
  2. Il examine la sortie du modèle.
  3. Si le modèle produit des appels d’outils, le moteur les exécute et poursuit la boucle.
  4. Si le modèle passe la main à un autre agent spécialisé, le moteur poursuit la boucle avec cet agent.
  5. Si le modèle fournit une réponse finale et qu’il ne reste aucun appel d’outil à exécuter, le moteur renvoie un résultat.

Cette boucle est au cœur du SDK. Les outils, les passages de relais, les approbations et la diffusion en continu s’appuient tous sur elle sans la remplacer.

Choisissez une stratégie de gestion de la conversation

Il existe quatre façons courantes de conserver l’état de la conversation d’un tour à l’autre :

Stratégie Où l’état est conservé Cas d’usage privilégié Données à transmettre au tour suivant
result.history Votre application Boucles de discussion simples et contrôle maximal sur l’état L’historique prêt à être rejoué
session Votre système de stockage, avec le SDK Discussions dont l’état doit persister, exécutions pouvant reprendre et stockage que vous contrôlez La même session
conversationId API Conversations d’OpenAI État géré côté serveur et partagé entre plusieurs processus de traitement ou services Le même identifiant de conversation et uniquement les données du nouveau tour
previousResponseId API Responses d’OpenAI Poursuite de la conversation d’une réponse à l’autre avec un minimum de données à transmettre, l’état étant géré côté serveur L’identifiant de la dernière réponse et uniquement les données du nouveau tour

Dans la plupart des applications, choisissez une seule stratégie par conversation. Si vous rejouez l’historique local tout en utilisant un état géré côté serveur, vous risquez de dupliquer le contexte, sauf si vous prenez soin de réconcilier les deux états.

Conservez l’état sur plusieurs tours avec les sessions
import { Agent, MemorySession, run } from "@openai/agents";

const agent = new Agent({
  name: "Tour guide",
  instructions: "Answer with compact travel facts.",
});

const session = new MemorySession();

const firstTurn = await run(agent, "What city is the Golden Gate Bridge in?", {
  session,
});
console.log(firstTurn.finalOutput);

const secondTurn = await run(agent, "What state is it in?", { session });
console.log(secondTurn.finalOutput);

Privilégiez les sessions si vous souhaitez disposer d’une mémoire persistante, reprendre un workflow après une demande d’approbation ou laisser votre application contrôler le stockage.

Poursuivez la conversation avec un état géré côté serveur
import { Agent, run } from "@openai/agents";
import OpenAI from "openai";

const agent = new Agent({
  name: "Assistant",
  instructions: "Reply very concisely.",
});

const client = new OpenAI();
const { id: conversationId } = await client.conversations.create({});

const first = await run(agent, "What city is the Golden Gate Bridge in?", {
  conversationId,
});
console.log(first.finalOutput);

const second = await run(agent, "What state is it in?", {
  conversationId,
});
console.log(second.finalOutput);

Utilisez conversationId si plusieurs systèmes doivent partager une même conversation nommée. Utilisez previousResponseId si vous cherchez l’option la moins coûteuse pour passer d’une réponse à la suivante.

Suivez les exécutions en continu

La diffusion en continu utilise la même boucle d’exécution et les mêmes stratégies de gestion de l’état. La seule différence est que vous traitez les événements au fur et à mesure de l’exécution.

Diffusez le texte au fil de l’exécution
import { Agent, run } from "@openai/agents";

const agent = new Agent({
  name: "Planet guide",
  instructions: "Answer with short facts.",
});

const stream = await run(agent, "Give me three short facts about Saturn.", {
  stream: true,
});

for await (const event of stream) {
  if (
    event.type === "raw_model_stream_event" &&
    event.data.type === "output_text_delta"
  ) {
    process.stdout.write(event.data.delta);
  }
}

await stream.completed;
console.log("\nFinal:", stream.finalOutput);

Suivez ces trois règles :

  • Attendez la fin du flux avant de considérer que l’exécution a atteint son point d’arrêt.
  • Si l’exécution se met en pause dans l’attente d’une approbation, traitez les demandes figurant dans interruptions et reprenez l’exécution à partir de state plutôt que d’ouvrir un nouveau tour utilisateur.
  • Si vous annulez un flux en cours de tour et souhaitez poursuivre ce même tour ultérieurement, reprenez-le à partir de state.

Gérez les pauses et les échecs

Deux types de situations peuvent interrompre le déroulement normal d’une exécution :

  • Les échecs d’exécution ou de validation, par exemple lorsque le nombre maximal de tours est atteint, qu’un garde-fou lève une exception ou qu’un outil renvoie une erreur.
  • Les pauses prévues, par exemple lorsqu’une approbation humaine est demandée. L’exécution est alors interrompue volontairement et doit reprendre ultérieurement à partir du même état.

Lorsqu’une approbation est demandée, considérez que l’exécution en cours est en pause et reprenez le même tour. Vous préservez ainsi la cohérence du nombre de tours, de l’historique et des identifiants utilisés pour poursuivre la conversation côté serveur.

Étapes suivantes

Une fois la boucle d’exécution comprise, consultez le guide qui correspond à la prochaine partie du workflow que vous devez concevoir.