> ## 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 un agent créé avec le SDK OpenAI Agents à l’aide d’Agent Lens.

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. CoreWeave Agent Lens 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.

<Note>
  This integration uses the Weights & Biases Weave SDK (`weave`), because the CoreWeave Forge SDK doesn't support this framework yet. Traces you send with Weave appear in Agent Lens, because both products share the same trace data.
</Note>

<h2 id="trace-openai-agents-sdk-agents-with-agent-lens">
  Tracer des agents du SDK OpenAI Agents avec Agent Lens
</h2>

<Tabs>
  <Tab title="Python">
    Le SDK Weave patche automatiquement le [SDK OpenAI Agents pour Python](https://github.com/openai/openai-agents-python), ce qui vous permet de capturer les traces de vos agents avec une configuration minimale. Ce guide explique comment initialiser Weave, puis exécuter un agent de recherche sur plusieurs tours de conversation conçu avec le SDK OpenAI Agents, afin qu’Agent Lens capture 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+.
  </Tab>

  <Tab title="TypeScript">
    Le SDK 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. Requiert la version `0.4.15` ou ultérieure de `@openai/agents`.

    <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+.
  </Tab>
</Tabs>

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

Installez les packages suivants dans votre environnement de développement pour que Weave et le SDK OpenAI Agents soient disponibles dans votre script.

<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-agent-lens-in-your-code">
  Initialiser Agent Lens dans votre code
</h3>

<Tabs>
  <Tab title="Python">
    Ajoutez `weave.init` au projet en indiquant les noms de votre équipe et de votre projet Forge, puis créez votre agent comme d’habitude. Le code suivant définit un outil fonction `wikipedia_search` et un agent `Research assistant`, puis soumet trois questions au `Runner` du SDK OpenAI Agents pendant qu’Agent Lens capture la trace. Chaque appel à `Runner.run` démarre sa propre trace ; l’exemple transmet donc à chaque appel un `RunConfig` contenant un `group_id` partagé. Weave utilise `group_id` pour regrouper les traces d’une même conversation et, lorsqu’aucun `group_id` n’est défini, se rabat sur l’ID propre à chaque trace.

    ```python lines  highlight="7,33,42" theme={"system"}
    import asyncio
    import uuid
    import requests
    import weave
    from agents import Agent, RunConfig, Runner, function_tool

    weave.init("[YOUR-TEAM]/[YOUR-PROJECT]")

    @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():
        run_config = RunConfig(group_id=str(uuid.uuid4()))
        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, run_config=run_config)
            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 même conversation. Les deux premiers tours de conversation déclenchent des recherches sur Wikipédia, tandis que le troisième s’appuie sur le contexte déjà établi 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 requête suivante, et réutilise le même `group_id` afin qu’Agent Lens regroupe les trois tours de conversation en une seule conversation dans l’onglet **Conversations**. Sans `group_id` commun, chaque tour de conversation se rabat sur son propre ID de trace et apparaît comme une conversation distincte.
  </Tab>

  <Tab title="TypeScript">
    Weave instrumente automatiquement `@openai/agents` dès son importation, grâce à des hooks du chargeur de modules. 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 des intégrations 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` pour que l’instrumentation automatique s’exécute en premier.
    * **Projets ESM** : démarrez Node avec l’option `--import=weave/instrument` pour 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 qu'Agent Lens capture la trace. Chaque appel à `run()` produit une trace de premier niveau distincte. L'exemple crée donc un `Runner` avec un `groupId` partagé et le réutilise pour les trois appels. Agent Lens utilise `groupId` pour regrouper les traces d'une même conversation. Lorsqu'aucun `groupId` n'est défini, il utilise à la place 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]");

        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 exécute 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 renvoyant l’`history` du résultat précédent comme nouvelle entrée, et réutilise le même `groupId` afin qu’Agent Lens regroupe les trois tours dans une seule session de l’onglet Conversations.

    Enregistrez l’exemple sous le nom `main.mjs` et 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 si les hooks du chargeur de modules ne peuvent pas s’exécuter, par exemple lorsque 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 ligne de commande de Node (CLI), ou avec des modes de chargement dynamique des 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]");
    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 sous condition, 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>

### View your traces in Agent Lens

After the script runs, `weave.init()` prints a link to your project in Weave. The same traces appear in Agent Lens, because both products share the same trace data. To view them in Agent Lens:

1. Navigate to [CoreWeave Forge](https://forge.coreweave.com) and select **Agent Lens** from the product menu.
2. Select your project.
3. In the Agent Lens side menu, select **Conversations**, and then select your conversation.

Each turn renders as an `invoke_agent` span with nested `chat` and `execute_tool` spans. Each span shows its input, model, output, token usage, and tool results.

For more information, see [View agent activity](/products/agent-lens/conversations/view-activity).
