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

# SDK OpenAI Agents

> Tracez avec Weave un agent créé à l’aide du SDK OpenAI Agents.

export const AgentLensBanner = ({href}) => <Tip>
    <strong>This workflow is also available in CoreWeave Agent Lens.</strong> Agent Lens is the Forge experience built for tracing, monitoring, and analyzing AI agents, with automated insights into agent failures and user intents. It uses the same trace data as Weights & Biases Weave, so the traces you already send appear there with nothing to migrate.{' '}
    <a href={href || '/products/agent-lens'}>{href ? 'See how to do this in Agent Lens' : 'Learn about Agent Lens'}</a>.
  </Tip>;

<AgentLensBanner href="/fr/products/agent-lens/integrations/openai-agents-sdk" />

Le SDK OpenAI Agents est un framework léger qui permet de créer des agents et des flux de travail multi-agents à partir de l'API d'OpenAI. Weave trace automatiquement les agents créés avec le SDK OpenAI Agents, notamment chaque appel d’agent, chaque transfert vers un sous-agent, chaque appel de modèle et chaque appel d’outil. Weave affiche les données capturées dans la vue **Agents** de votre projet.

<h2 id="trace-openai-agents-sdk-agents-with-weave">
  Tracer les agents du SDK OpenAI Agents avec Weave
</h2>

<Tabs>
  <Tab title="Python">
    Le SDK Weave patche automatiquement le [SDK OpenAI Agents pour Python](https://github.com/openai/openai-agents-python). Vous pouvez ainsi capturer les traces de vos agents avec une configuration minimale. Ce guide explique comment initialiser Weave, puis exécuter sur plusieurs tours de conversation un agent de recherche créé avec le SDK OpenAI Agents. Weave capture ainsi chaque appel d’agent, appel de modèle et appel d’outil tout au long de la session.

    <h3 id="prerequisites">
      Prérequis
    </h3>

    Avant de commencer, assurez-vous de disposer des éléments suivants :

    * Un compte CoreWeave Forge et une [clé API](https://forge.coreweave.com/settings#apikeys) définie dans la variable d’environnement `WANDB_API_KEY`.
    * Une [clé API OpenAI](https://platform.openai.com/api-keys).
    * Python 3.10 ou version ultérieure.
  </Tab>

  <Tab title="TypeScript">
    Weave s’intègre au [SDK OpenAI Agents pour Node](https://github.com/openai/openai-agents-js) (`@openai/agents`) pour tracer automatiquement les exécutions de vos agents. Nécessite `@openai/agents` en version `0.4.15` ou ultérieure.

    <h3 id="prerequisites-2">
      Prérequis
    </h3>

    Avant de commencer, assurez-vous de disposer des éléments suivants :

    * Un compte CoreWeave Forge et une [clé API](https://forge.coreweave.com/settings#apikeys) définie dans la variable d’environnement `WANDB_API_KEY`.
    * Une [clé API OpenAI](https://platform.openai.com/api-keys).
    * Node.js 18 ou version ultérieure.
  </Tab>
</Tabs>

<h3 id="install-packages">
  Installer les paquets
</h3>

Installez les paquets suivants dans votre environnement de développement afin que votre script puisse accéder à Weave et au SDK.

<CodeGroup>
  ```bash Python theme={"system"}
  pip install weave openai-agents requests
  ```

  ```bash TypeScript theme={"system"}
  npm install weave @openai/agents zod
  ```
</CodeGroup>

<h3 id="initialize-weave-in-your-code">
  Initialiser Weave dans votre code
</h3>

<Tabs>
  <Tab title="Python">
    Ajoutez `weave.init` au projet, en indiquant les noms de votre équipe et de votre projet CoreWeave Forge, puis créez votre agent comme d’habitude. Le code suivant définit un outil de fonction `wikipedia_search` et un agent `Research assistant`, puis soumet trois questions au `Runner` du SDK OpenAI Agents pendant que Weave capture la trace.

    ```python lines  highlight="6" theme={"system"}
    import asyncio
    import requests
    import weave
    from agents import Agent, Runner, function_tool

    weave.init("<your-team>/<your-project-name>")

    @function_tool
    def wikipedia_search(query: str) -> str:
        """Search Wikipedia for a topic and return its title and intro paragraph."""
        r = requests.get(
            "https://en.wikipedia.org/w/api.php",
            params={
                "action": "query", "generator": "search", "gsrsearch": query, "gsrlimit": 1,
                "prop": "extracts", "exintro": True, "explaintext": True, "format": "json",
            },
            headers={"User-Agent": "weave-demo"},
        ).json()
        page = next(iter(r["query"]["pages"].values()))
        return f"{page['title']}: {page['extract']}"

    agent = Agent(
        name="Research assistant",
        instructions=(
            "You are a research assistant. Use the wikipedia_search tool to look up "
            "topics when needed, and cite the article titles you used."
        ),
        tools=[wikipedia_search],
    )

    async def main():
        history = []
        for question in [
            "Who founded Anthropic?",
            "What is Claude (the AI assistant)?",
            "Summarize what we discussed in one sentence.",
        ]:
            history.append({"role": "user", "content": question})
            print(f"USER: {question}")
            result = await Runner.run(agent, input=history)
            print(f"AGENT: {result.final_output}\n")
            history = result.to_input_list()

    asyncio.run(main())
    ```

    L’exemple enchaîne trois tours de conversation au sein d’une seule et même conversation. Les deux premiers tours déclenchent des recherches sur Wikipédia, et le troisième s’appuie sur le contexte déjà accumulé dans la conversation pour produire une synthèse sans appel d’outil. Chaque appel à `Runner.run` poursuit la conversation en transmettant la liste d’entrées du résultat précédent comme nouvelle requête.
  </Tab>

  <Tab title="TypeScript">
    Weave instrumente automatiquement `@openai/agents` au moyen de hooks du chargeur de modules dès son importation. La configuration requise varie légèrement selon le système de modules. Pour en savoir plus sur les différences entre CommonJS et ESM, ainsi que sur le fonctionnement des hooks du chargeur de Weave, consultez le [guide d'intégration des bibliothèques tierces du SDK TypeScript](/fr/products/wandb/weave/guides/integrations/js).

    * **Projets CommonJS** : aucune configuration supplémentaire n’est nécessaire. Chargez `weave` avec `require` avant `@openai/agents` afin que l’instrumentation automatique s’exécute en premier.
    * **Projets ESM** : démarrez Node avec l’option `--import=weave/instrument` afin que l’instrumentation soit chargée avant tout autre module.

    Le code suivant définit un outil `wikipedia_search` et un agent `Research assistant`, puis soumet trois questions au `Runner` du SDK pendant que Weave capture la trace. Chaque appel `run()` étant tracé comme une trace de premier niveau distincte, l'exemple crée un `Runner` avec un `groupId` partagé et le réutilise pour les trois appels. Weave se sert de `groupId` pour regrouper les traces d'une même conversation ; en l'absence de `groupId`, il utilise l'ID propre à chaque trace.

    ```typescript lines  highlight="33" title="main.mjs" theme={"system"}
    import { randomUUID } from "node:crypto";
    import * as weave from "weave";
    import { Agent, Runner, tool, type AgentInputItem } from "@openai/agents";
    import { z } from "zod";

    const wikipediaSearch = tool({
        name: "wikipedia_search",
        description: "Search Wikipedia for a topic and return its title and intro paragraph.",
        parameters: z.object({
        query: z.string().describe("The topic to search for"),
        }),
        async execute({ query }) {
        const url = new URL("https://en.wikipedia.org/w/api.php");
        url.search = new URLSearchParams({
            action: "query",
            generator: "search",
            gsrsearch: query,
            gsrlimit: "1",
            prop: "extracts",
            exintro: "true",
            explaintext: "true",
            format: "json",
        }).toString();

        const response = await fetch(url, { headers: { "User-Agent": "weave-demo" } });
        const data = await response.json();
        const page = Object.values(data.query.pages)[0] as { title: string; extract: string };
        return `${page.title}: ${page.extract}`;
        },
    });

    async function main() {
        await weave.init("<your-team>/<your-project-name>");

        const agent = new Agent({
        name: "Research assistant",
        instructions:
            "You are a research assistant. Use the wikipedia_search tool to look up " +
            "topics when needed, and cite the article titles you used.",
        tools: [wikipediaSearch],
        });

        const runner = new Runner({ groupId: randomUUID() });

        const questions = [
        "Who founded Anthropic?",
        "What is Claude (the AI assistant)?",
        "Summarize what we discussed in one sentence.",
        ];

        let history: AgentInputItem[] = [];
        for (const question of questions) {
        history.push({ role: "user", content: question });
        console.log(`USER: ${question}`);
        const result = await runner.run(agent, history);
        console.log(`AGENT: ${result.finalOutput}\n`);
        history = result.history;
        }
    }

    main();
    ```

    L’exemple enchaîne trois tours de conversation au sein d’une même conversation. Les deux premiers tours déclenchent des recherches sur Wikipédia, et le troisième s’appuie sur le contexte des échanges précédents pour produire une synthèse sans appel d’outil. Chaque appel à `runner.run` poursuit la conversation en réinjectant l’`history` du résultat précédent comme entrée suivante, et partage le même `groupId` afin que Weave regroupe les trois tours en une seule session dans la vue Agents.

    Enregistrez l’exemple sous le nom `main.mjs`, puis exécutez-le avec l’option `--import=weave/instrument` afin que le hook du chargeur s’exécute avant tout autre module :

    ```bash theme={"system"}
    node --import=weave/instrument main.mjs
    ```

    <h3 id="manual-instrumentation">
      Instrumentation manuelle
    </h3>

    L’instrumentation manuelle n’est nécessaire que lorsque les hooks du chargeur de modules ne peuvent pas s’exécuter : par exemple, si vous utilisez un bundler qui regroupe les dépendances dans un seul fichier, dans les environnements qui ne prennent pas en charge les options de CLI de Node, ou avec des schémas de chargement dynamique de modules qui contournent les hooks du chargeur.

    Utilisez `instrumentOpenAIAgents()` pour enregistrer explicitement l’instrumentation :

    ```typescript lines theme={"system"}
    import * as weave from "weave";

    await weave.init("<your-team>/<your-project-name>");
    await weave.instrumentOpenAIAgents();
    ```

    Si vous avez besoin d’un contrôle complet sur le processeur de traçage — par exemple, pour configurer un processeur personnalisé ou l’enregistrer conditionnellement —, créez-le et enregistrez-le directement :

    ```typescript lines theme={"system"}
    import { addTraceProcessor } from "@openai/agents";
    import { createOpenAIAgentsTracingProcessor } from "weave";

    const processor = createOpenAIAgentsTracingProcessor();
    addTraceProcessor(processor);
    ```
  </Tab>
</Tabs>

<h3 id="see-your-agent-traces-in-the-agents-view">
  Consulter les traces de votre agent dans la vue Agents
</h3>

Une fois le script exécuté, `weave.init()` affiche un lien vers votre projet. Ouvrez la vue **Agents** pour examiner :

* Une session regroupant les tours de conversation.
* Chaque tour de conversation, représenté par un span `invoke_agent` contenant des spans enfants imbriqués `chat` et `execute_tool`.
* L’entrée complète, le modèle, la sortie, l’utilisation des jetons et les résultats des outils à chaque étape.

Pour en savoir plus sur l’affichage des données Agents dans Weave, consultez [Afficher l’activité des agents](/fr/products/wandb/weave/guides/tracking/view-agent-activity).
