Passer au contenu principal

Requête d’entrée utilisateur

En configurant un gestionnaire onUserInputRequest, vous permettez à l’agent de poser des questions à l’utilisateur via l’outil ask_user.
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Types\UserInputRequest;
use Revolution\Copilot\Types\UserInputResponse;

Copilot::start(function (CopilotSession $session) {
    $response = $session->sendAndWait(prompt: 'ユーザーに好きな言語を聞いて');
    dump($response->content());
}, config: [
    'model' => 'gpt-5',
    'onUserInputRequest' => function (UserInputRequest $request): UserInputResponse {
        // $request->question - Contenu de la question
        // $request->choices - Tableau de choix multiples (optionnel)
        // $request->allowFreeform - Saisie libre autorisée ? (par défaut : true)

        dump("Question from agent: {$request->question}");
        if ($request->choices) {
            dump('Choices: '.implode(', ', $request->choices));
        }

        // Renvoie la réponse de l'utilisateur
        return new UserInputResponse(
            answer: 'PHP',
            wasFreeform: true, // Saisie libre plutôt que choix d'une option
        );
    },
]);

Classe UserInputRequest

Requête d’entrée utilisateur provenant de l’agent.
PropriétéTypeDescription
questionstringQuestion à poser à l’utilisateur
choices?arrayChoix disponibles pour un choix multiple (optionnel)
allowFreeform?boolSaisie libre autorisée (par défaut : true)

Classe UserInputResponse

Réponse à une requête d’entrée utilisateur.
PropriétéTypeDescription
answerstringRéponse de l’utilisateur
wasFreeformboolLa réponse est-elle une saisie libre (true si elle ne provient pas d’un choix)

Exemple pratique

Utilisation dans une commande interactive.
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Types\UserInputRequest;
use Revolution\Copilot\Types\UserInputResponse;

// Dans une commande Artisan
Copilot::start(function (CopilotSession $session) use ($command) {
    $response = $session->sendAndWait(prompt: 'プロジェクトの設定を行います');
    $command->info($response->content());
}, config: [
    'onUserInputRequest' => function (UserInputRequest $request) use ($command): UserInputResponse {
        if ($request->choices) {
            // S'il existe des choix, utilisez la méthode choice
            $answer = $command->choice(
                $request->question,
                $request->choices,
                $request->choices[0] ?? null
            );

            return new UserInputResponse(answer: $answer, wasFreeform: false);
        }

        // Saisie libre
        $answer = $command->ask($request->question);

        return new UserInputResponse(answer: $answer, wasFreeform: true);
    },
]);
Pour les dernières informations, consultez le dépôt GitHub.
Dernière modification le 13 juillet 2026