Vai al contenuto principale

Richieste di input dell’utente

Se imposti l’handler onUserInputRequest, l’agente può rivolgere domande all’utente tramite lo strumento 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: 'Chiedi all\'utente quale linguaggio preferisce');
    dump($response->content());
}, config: [
    'model' => 'gpt-5',
    'onUserInputRequest' => function (UserInputRequest $request): UserInputResponse {
        // $request->question - contenuto della domanda
        // $request->choices - array di opzioni multiple (opzionale)
        // $request->allowFreeform - se è consentito l'input libero (default: true)

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

        // Restituisci la risposta dell'utente
        return new UserInputResponse(
            answer: 'PHP',
            wasFreeform: true, // true se input libero anziché scelta da opzioni
        );
    },
]);

Classe UserInputRequest

Rappresenta una richiesta di input dell’utente da parte dell’agente.
ProprietàTipoDescrizione
questionstringLa domanda da porre all’utente
choices?arrayOpzioni in caso di scelta multipla (opzionale)
allowFreeform?boolSe è consentito l’input libero (default: true)

Classe UserInputResponse

Rappresenta la risposta a una richiesta di input dell’utente.
ProprietàTipoDescrizione
answerstringLa risposta dell’utente
wasFreeformbooltrue se la risposta è input libero (non selezionata dalle opzioni)

Esempio pratico

Uso all’interno di un comando interattivo.
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Types\UserInputRequest;
use Revolution\Copilot\Types\UserInputResponse;

// All'interno di un comando Artisan
Copilot::start(function (CopilotSession $session) use ($command) {
    $response = $session->sendAndWait(prompt: 'Configurazione del progetto');
    $command->info($response->content());
}, config: [
    'onUserInputRequest' => function (UserInputRequest $request) use ($command): UserInputResponse {
        if ($request->choices) {
            // Se ci sono opzioni, usa il metodo choice
            $answer = $command->choice(
                $request->question,
                $request->choices,
                $request->choices[0] ?? null
            );

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

        // Input libero
        $answer = $command->ask($request->question);

        return new UserInputResponse(answer: $answer, wasFreeform: true);
    },
]);
Per le informazioni più recenti fai riferimento al repository GitHub.
Ultima modifica il 13 luglio 2026