Saltar al contenido principal

Solicitud de entrada del usuario

Si configuras el handler onUserInputRequest, el agente podrá hacer preguntas al usuario mediante la herramienta 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 - contenido de la pregunta
        // $request->choices - array de opciones múltiples (opcional)
        // $request->allowFreeform - si se permite entrada libre (por defecto: true)

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

        // Devuelve la respuesta del usuario
        return new UserInputResponse(
            answer: 'PHP',
            wasFreeform: true, // si la respuesta fue libre en lugar de elegida de las opciones
        );
    },
]);

Clase UserInputRequest

Solicitud de entrada del usuario procedente del agente.
PropiedadTipoDescripción
questionstringLa pregunta que se le hace al usuario
choices?arrayOpciones cuando es una elección múltiple (opcional)
allowFreeform?boolSi se permite entrada libre (por defecto: true)

Clase UserInputResponse

Respuesta a una solicitud de entrada del usuario.
PropiedadTipoDescripción
answerstringRespuesta del usuario
wasFreeformboolSi la respuesta fue en formato libre (true cuando no proviene de las opciones)

Ejemplo práctico

Uso dentro de un comando interactivo:
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Types\UserInputRequest;
use Revolution\Copilot\Types\UserInputResponse;

// Dentro de un comando de 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) {
            // Si hay opciones, usa el método choice
            $answer = $command->choice(
                $request->question,
                $request->choices,
                $request->choices[0] ?? null
            );

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

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

        return new UserInputResponse(answer: $answer, wasFreeform: true);
    },
]);
Consulta la información más reciente en el repositorio de GitHub.
Última modificación el 13 de julio de 2026