Partage
  • Partager sur Facebook
  • Partager sur Twitter

[PHP-CURL] utiliser API assistant d OpenAI

    12 avril 2024 à 12:09:05

    Bonjour,

    J'essai d'utiliser l'api assistant d'open ai. Le script plus bas ne fonctionne pas, je ne parviens pas à récupérer la réponse de l'assistant. Cependant ce script arrive a créer le thread, mettre le message dans le thread, d'appeler l'assistant créer dans l'interface assistant d'openai. Mais la réponse est toujours en statue queued même après 1 minutes d'attente. Est ce que vous savez comment faire pour faire correctement la derniere etape ?

    C'est un script qui s'exécute en localhost avec mamp.

    Si je pose la même question directement dans l'interface playground de l'assitant cela fonctionne bien.

    voila ce que le programme affiche sur la page : Réponse de création de thread : { "id": "thread_ppdspKZl2Nriz26Hx2RYcl0J", "object": "thread", "created_at": 1712914227, "metadata": {} }


    ID du thread créé : thread_ppdspKZl2Nriz26Hx2RYcl0J

    Réponse d'envoi de message : { "id": "msg_178yboDsLvLr0OU0cPBM91CF", "object": "thread.message", "created_at": 1712914227, "assistant_id": null, "thread_id": "thread_ppdspKZl2Nriz26Hx2RYcl0J", "run_id": null, "role": "user", "content": [ { "type": "text", "text": { "value": "c'est ou paris ?", "annotations": [] } } ], "file_ids": [], "metadata": {} }
    Réponse de la requête de run : { "id": "run_lGw5ISp0oatRsQU4c1h9spXo", "object": "thread.run", "created_at": 1712914228, "assistant_id": "asst_L8TvQ0gPXvHyHjXfw8Ugo8xp", "thread_id": "thread_ppdspKZl2Nriz26Hx2RYcl0J", "status": "queued", "started_at": null, "expires_at": 1712914828, "cancelled_at": null, "failed_at": null, "completed_at": null, "required_action": null, "last_error": null, "model": "gpt-3.5-turbo", "instructions": "You are an experienced travel agent.", "tools": [], "file_ids": [], "metadata": {}, "temperature": 1.0, "usage": null }
    <?php
    $api_key = "VOTRE CLE API";
    $assistant_id = "ID de votre ASSISTANT";
    
    function createThreadAndGetId() {
        global $api_key;
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://api.openai.com/v1/threads");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            "Content-Type: application/json",
            "Authorization: Bearer $api_key",
            "OpenAI-Beta: assistants=v1"
        ]);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        $response = curl_exec($ch);
        curl_close($ch);
        echo "Réponse de création de thread : " . $response . "\n\n";
        $data = json_decode($response, true);
        return $data['id'] ?? null;
    }
    
    $thread_id = createThreadAndGetId();
    
    $run_completed = false;
    $max_checks = 10;  // Définir un nombre maximum de tentatives de vérification
    $check_interval = 6;  // Nombre de secondes à attendre entre chaque vérification
    
    
    
    if ($thread_id) {
        echo "<br><br>ID du thread créé : " . $thread_id . "\n\n";
    
        // Envoi d'un message
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://api.openai.com/v1/threads/$thread_id/messages");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            "Content-Type: application/json",
            "Authorization: Bearer $api_key",
    		"OpenAI-Beta: assistants=v1"
        ]);
        $data = json_encode([
            "role" => "user",
            "content" => "c'est ou paris ?"
        ]);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        $response = curl_exec($ch);
        curl_close($ch);
        echo "<br><br>Réponse d'envoi de message : " . $response . "\n\n";
    
        // Exécution d'une requête de run
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://api.openai.com/v1/threads/$thread_id/runs");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            "Content-Type: application/json",
            "Authorization: Bearer $api_key",
    		"OpenAI-Beta: assistants=v1"
        ]);
        $data = json_encode([
            "assistant_id" => $assistant_id
        ]);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        $response = curl_exec($ch);
        curl_close($ch);
        echo "<br>Réponse de la requête de run : " . $response . "\n\n<br>";
    
        // Récupération des messages après le run
        for ($i = 0; $i < $max_checks; $i++) {
            sleep($check_interval); // Attendre quelques secondes avant de vérifier le statut
    
            // Interroger le statut du run
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, "https://api.openai.com/v1/threads/$thread_id/messages");
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_HTTPHEADER, [
                "Content-Type: application/json",
                "Authorization: Bearer $api_key",
                "OpenAI-Beta: assistants=v1"
            ]);
    		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
            $run_response = curl_exec($ch);
            if ($run_response === false) {
                echo 'Erreur cURL lors de la récupération du statut du run: ' . curl_error($ch);
            }
            curl_close($ch);
    
            $run_status = json_decode($run_response, true);
            if ($run_status && isset($run_status['status']) && $run_status['status'] === 'completed') {
                $run_completed = true;
                echo "Le run est complété.\n";
                break;
            } elseif ($run_status && isset($run_status['status']) && $run_status['status'] === 'failed') {
                echo "Le run a échoué.\n";
                break;
            }
        }
    
        if ($run_completed) {
            // Récupérer et afficher les messages après que le run soit complet
            echo "<br>Réponse de la requête de liste de message : " . $run_response . "\n\n<br>";
        } else {
            echo "Le run n'est pas terminé après $max_checks vérifications.\n";
        }
    } else {
        echo "<br><br>Erreur lors de la création du thread.\n\n";
    }
    ?>



    • Partager sur Facebook
    • Partager sur Twitter
      17 avril 2024 à 11:03:04

      Si vous avez un script simple php/curl , qui permet de contacter son propre assistant OPENAI, je prends aussi , je l’étudierai.
      • Partager sur Facebook
      • Partager sur Twitter

      [PHP-CURL] utiliser API assistant d OpenAI

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      • Editeur
      • Markdown