Passer au contenu principal

Reprise de session

Comment reprendre une session précédente.

Cas d’un chat interactif dans une commande Artisan

// listSessions récupère la liste des sessions passées
$sessions = Copilot::client()->listSessions();

// Sélectionnez l'ID de session à reprendre via Laravel\Prompts\select, par exemple
$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,
);

// Reprend la session avec l'ID sélectionné
$session = Copilot::client()->resumeSession($session_id);

// Récupère les messages précédents
$messages = $session->getMessages();

Cas d’un ID de session fixe

Hors mode interactif, on ne peut pas choisir : spécifiez un ID fixe dès le départ. Préparez un ID basé sur l’ID utilisateur ou tout autre contexte pertinent. Par exemple, pour un usage multi-utilisateur sur un service web, préparez l’ID à l’avance.
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);
Avec Copilot::start, vous pouvez également spécifier la reprise via l’argument resume.
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\ResumeSessionConfig;

// ResumeSessionConfig ne permet pas de spécifier 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');
Vous pouvez aussi, dans la closure de Copilot::start, détruire la session en cours et en reprendre une autre.
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.');
});

Reprendre la dernière session

Si aucune session n’existe, getLastSessionId() renvoie null et une nouvelle session démarre automatiquement. Vous pouvez également basculer entre 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);

Utiliser SessionMetadata

getSessionMetadata() renvoie également null si la session n’existe pas et démarre alors une nouvelle session. Vous obtenez aussi les dates de création et de mise à jour.
use Revolution\Copilot\Types\SessionMetadata;
use Revolution\Copilot\Facades\Copilot;

$meta = Copilot::client()->getSessionMetadata('user-123-conversation');
Pour les dernières informations, consultez le dépôt GitHub.
Dernière modification le 13 juillet 2026