Vai al contenuto principale

Ripresa della sessione

Come riprendere una sessione precedente.

Uso all’interno di una chat interattiva con un comando Artisan

// Con listSessions ottieni l'elenco delle sessioni precedenti
$sessions = Copilot::client()->listSessions();

// Con Laravel\Prompts\select ecc. seleziona l'ID della sessione da riprendere
$sessions = collect(Copilot::client()->listSessions())
    ->mapWithKeys(function (SessionMetadata $session) {
        return [$session->sessionId => $session->summary ?? ''];
    })
    ->toArray();

$session_id = select(
    label: 'What session do you want to resume?',
    options: $sessions,
);

// Riprendi la sessione con l'ID selezionato
$session = Copilot::client()->resumeSession($session_id);

// Ottieni i messaggi finora
$messages = $session->getMessages();

Usare un ID di sessione fisso

Se non sei in modalità interattiva non puoi selezionare, quindi specifica un ID fisso fin dall’inizio. Prepara un ID basato sull’ID utente o su un altro contesto. Ad esempio, se lo usi in un servizio web multi-utente, adotta questo metodo che prepara l’ID in anticipo.
use Revolution\Copilot\Types\SessionConfig;
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Facades\Copilot;

$config = new SessionConfig(
    sessionId: 'user-123-conversation',
);

Copilot::start(function (CopilotSession $session) {
    dump('Starting Copilot session: '.$session->id());

    $response = $session->sendAndWait(prompt: 'Tell me something about Laravel.');
}, config: $config);
Al momento della ripresa, con Copilot::start puoi anche specificare l’argomento resume.
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\ResumeSessionConfig;

// In ResumeSessionConfig non puoi specificare sessionId
$config = new ResumeSessionConfig();

Copilot::start(function (CopilotSession $session) {
    dump('Starting Copilot session: '.$session->id());

    $response = $session->sendAndWait(prompt: 'Tell me something about Laravel.');
}, config: $config, resume: 'user-123-conversation');
Puoi anche dismettere la sessione corrente all’interno della closure di Copilot::start e riprenderne una nuova.
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Facades\Copilot;

Copilot::start(function (CopilotSession $session) {
    dump('Starting Copilot session: '.$session->id());

    $session->disconnect();

    $session = Copilot::client()->resumeSession(sessionId: 'user-123-conversation');

    $response = $session->sendAndWait(prompt: 'Tell me something about Laravel.');
});

Riprendere l’ultima sessione

Se non esiste una sessione, getLastSessionId() restituisce null e viene avviata automaticamente una nuova sessione. Puoi anche commutare SessionConfig.
use Revolution\Copilot\Types\SessionConfig;
use Revolution\Copilot\Types\ResumeSessionConfig;
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Facades\Copilot;

$session_id = Copilot::client()->getLastSessionId();

if (empty($session_id)) {
    $config = new SessionConfig();
} else {
    $config = new ResumeSessionConfig();
}

Copilot::start(function (CopilotSession $session) {
    dump('Starting Copilot session: '.$session->id());

    $response = $session->sendAndWait(prompt: 'Tell me something about Laravel.');
}, config: $config, resume: $session_id);

Usare SessionMetadata

Anche getSessionMetadata() restituisce null se la sessione non esiste, quindi allo stesso modo viene avviata una nuova sessione. Puoi ottenere anche data di creazione e aggiornamento della sessione.
use Revolution\Copilot\Types\SessionMetadata;
use Revolution\Copilot\Facades\Copilot;

$meta = Copilot::client()->getSessionMetadata('user-123-conversation');
Per le informazioni più recenti fai riferimento al repository GitHub.
Ultima modifica il 13 luglio 2026