?
GuideintermédiaireVérifié le 2025-05

Assistants API : état et threads persistants

Construire des assistants avec mémoire de conversation et accès à des outils.

L'Assistants API d'OpenAI

L'Assistants API permet de créer des assistants IA avec état persistant. Contrairement à l'API Chat Completions qui est stateless, les Assistants gèrent automatiquement les threads de conversation, l'accès aux fichiers et l'exécution d'outils.

Concepts fondamentaux

Assistant Une configuration qui encapsule un modèle, des instructions, des outils et des fichiers.

Thread Une conversation. Les messages sont ajoutés au thread et persistent automatiquement.

Run L'exécution d'un assistant sur un thread. C'est le run qui génère la réponse.

Message Un message dans un thread (utilisateur ou assistant).

Créer un assistant

import OpenAI from "openai";

const client = new OpenAI();

const assistant = await client.beta.assistants.create({
  name: "Analyste de données",
  instructions: "Tu es un analyste de données expert. Utilise Code Interpreter pour analyser les fichiers fournis et produire des visualisations.",
  model: "gpt-4o",
  tools: [
    { type: "code_interpreter" },
    { type: "file_search" }
  ]
});

Flux complet d'une conversation

// 1. Créer un thread
const thread = await client.beta.threads.create();

// 2. Ajouter un message
await client.beta.threads.messages.create(thread.id, {
  role: "user",
  content: "Analyse ce fichier CSV et donne-moi les tendances principales."
});

// 3. Lancer un run
const run = await client.beta.threads.runs.create(thread.id, {
  assistant_id: assistant.id
});

// 4. Attendre la complétion (polling ou streaming)
let runStatus = await client.beta.threads.runs.retrieve(thread.id, run.id);
while (runStatus.status !== "completed") {
  await new Promise(r => setTimeout(r, 1000));
  runStatus = await client.beta.threads.runs.retrieve(thread.id, run.id);
}

// 5. Récupérer les messages
const messages = await client.beta.threads.messages.list(thread.id);

Outils intégrés

Code Interpreter Exécute du code Python dans un sandbox sécurisé. Idéal pour : - Analyse de données (CSV, Excel) - Génération de graphiques - Calculs mathématiques - Transformation de fichiers

File Search Recherche sémantique dans vos documents. Supporte : - PDF, DOCX, TXT, MD, et bien d'autres formats - Chunking et indexation automatiques - Vector store persistant pour les fichiers

Function Calling Appel de vos propres fonctions, comme avec l'API Chat Completions.

Streaming des réponses

const stream = client.beta.threads.runs.stream(thread.id, {
  assistant_id: assistant.id
});

for await (const event of stream) {
  if (event.event === "thread.message.delta") {
    const delta = event.data.delta.content?.[0];
    if (delta?.type === "text") {
      process.stdout.write(delta.text.value);
    }
  }
}

Vector Stores pour File Search

// Créer un vector store
const vectorStore = await client.beta.vectorStores.create({
  name: "Documentation produit"
});

// Uploader des fichiers
await client.beta.vectorStores.fileBatches.uploadAndPoll(vectorStore.id, {
  files: [fs.createReadStream("doc.pdf")]
});

// Associer à l'assistant
await client.beta.assistants.update(assistant.id, {
  tool_resources: {
    file_search: { vector_store_ids: [vectorStore.id] }
  }
});

Bonnes pratiques

  • Réutilisez les threads : Un thread par conversation utilisateur, pas un thread par message
  • Instructions claires : Le system prompt de l'assistant guide tout son comportement
  • Gestion des statuts : Un run peut être queued, in_progress, requires_action, completed, failed
  • Nettoyage : Supprimez les threads et fichiers obsolètes pour gérer les coûts de stockage
  • Streaming : Préférez le streaming pour une meilleure expérience utilisateur

Sources

APIassistantsstate