메인 콘텐츠로 건너뛰기

SessionEvent

Copilot에서 오는 메시지는 모두 Revolution\Copilot\Types\SessionEvent 클래스입니다. 이 클래스는 가장 많이 사용되므로 Laravel다운 편리 기능이 추가되어 있습니다.

content()

AI로부터의 가장 중요한 응답 메시지를 가져옵니다.
$response = Copilot::run('1 + 1');
echo $response->content(); // '2'
// content()는 null이 될 수 있습니다
__toString()에 의한 암묵적 타입 변환으로도 메시지 내용을 반환합니다.
echo (string) $response; // '2'
// 이쪽은 null이 되지 않습니다

Event type 판정

isAssistantMessage(), isUserMessage(), isIdle(), isAssistantMessageDelta()를 사용할 수 있습니다. 자주 사용하는 Event type이 있다면 추가로 헬퍼가 추가되는 경우가 있습니다. is()로 임의의 EventType을 판정할 수 있습니다.
use Revolution\Copilot\Enums\SessionEventType;

if ($response->is(SessionEventType::HOOK_START)) {
    // 훅 시작 이벤트 시의 처리
}
type()SessionEventType enum의 문자열 값을 반환합니다.
echo $response->type(); // 'assistant.message'

failed() / successful()

이벤트 타입이 SESSION_ERROR일 때는 failed()가 true가 됩니다. successful()은 그 반대입니다. Laravel의 명명에 맞추기 위해 isError()에서 개명되었습니다.

throw()

Laravel의 HTTP API나 Process API와 마찬가지로 에러는 보유되며, throw()로 예외를 송출할 수 있습니다. 에러가 없는 경우 아무것도 하지 않으므로 다음과 같이 쓸 수 있습니다.
$content = $response->throw()->content();
이벤트 타입이 SESSION_ERROR인 경우 Revolution\Copilot\Exceptions\SessionErrorException을 송출합니다. 타임아웃 시에는 Revolution\Copilot\Exceptions\SessionTimeoutException을 송출합니다. JSON-RPC의 에러에서는 Revolution\Copilot\Exceptions\JsonRpcException을 송출합니다.

Conditionable

when()unless()를 사용할 수 있습니다.
$response->when($response->isAssistantMessage(), function (SessionEvent $event) {
    // 어시스턴트 메시지 시의 처리
});

Dumpable

dump()dd()를 사용할 수 있습니다.
$response->dump();

Tappable

tap()을 사용할 수 있습니다.
return $response->tap(function (SessionEvent $event) {
    // 어떤 처리
    info($event->content());
});

InteractsWithData

이 기능은 SessionEvent의 $data 프로퍼티에만 적용됩니다. all(), has(), only(), collect() 등 익숙한 헬퍼를 사용할 수 있습니다. 자세한 내용은 InteractsWithData를 참고하세요. SessionEvent의 $dataEventType마다 구조가 다르므로 이벤트별 값 접근에 편리합니다. content()도 내부적으로 InteractsWithData를 사용합니다.
return $this->data('content', $default);

// default를 지정하면 content()는 null이 되지 않습니다
echo $response->content('');

toArray() / toJson()

SessionEvent 전체를 배열 또는 JSON으로 변환할 수 있습니다.
$array = $response->toArray();
$json = $response->toJson();
이벤트 전체용 collect() 메서드는 없습니다. $data에는 InteractsWithData의 collect()가 있기 때문입니다. 이벤트 전체를 컬렉션 조작하려면 Laravel의 collect() 헬퍼를 사용합니다.
$collect = collect($response->toArray());

broadcast() / broadcastNow()

Laravel AI SDK의 StreamEvent와 같은 인터페이스로 브로드캐스트할 수 있습니다. AI SDK에서는 스트리밍 시에 사용되지만, SessionEvent에서는 임의의 EventType에서 사용할 수 있습니다.
use Illuminate\Broadcasting\Channel;

$event->broadcast(new Channel('channel-name'));
broadcastNow()는 큐를 거치지 않고 즉시 브로드캐스트합니다.
$event->broadcastNow(new Channel('channel-name'));
스트리밍 시의 이용 예:
use Illuminate\Broadcasting\Channel;
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\SessionConfig;
use Revolution\Copilot\Types\SessionEvent;

Copilot::start(function (CopilotSession $session) {
    $session->on(function (SessionEvent $event): void {
        if ($event->isAssistantMessageDelta()) {
            $event->broadcastNow(new Channel('copilot'));
        }
    });

    $session->sendAndWait(prompt: 'Tell me something about Laravel.');
}, config: new SessionConfig(streaming: true));
최신 정보는 GitHub 저장소를 참고하세요.
마지막 수정일 2026년 7월 13일