SessionEvent
來自 Copilot 的訊息全部都是Revolution\Copilot\Types\SessionEvent 類別。
由於這個類別最常被使用,因此加入了 Laravel 風格的便利功能。
content()
取得 AI 最重要的回應訊息。
__toString() 的隱式型別轉換也會回傳訊息內容。
Event type 判斷
可使用isAssistantMessage()、isUserMessage()、isIdle()、isAssistantMessageDelta()。
若有常用的 Event type,可能會再新增輔助方法。
可用 is() 判斷任意 EventType。
type() 會回傳 SessionEventType enum 的字串值。
failed() / successful()
當事件類型為 SESSION_ERROR 時,failed() 為 true。
successful() 則相反。
為配合 Laravel 的命名慣例,由 isError() 改名而來。
throw()
與 Laravel 的 HTTP API 或 Process API 一樣,錯誤會被保留,可透過 throw() 拋出例外。
沒有錯誤時不會做任何事,因此可以這樣寫。
SESSION_ERROR 時會拋出 Revolution\Copilot\Exceptions\SessionErrorException。
逾時會拋出 Revolution\Copilot\Exceptions\SessionTimeoutException。
JSON-RPC 錯誤會拋出 Revolution\Copilot\Exceptions\JsonRpcException。
Conditionable
可使用when() 與 unless()。
Dumpable
可使用dump() 與 dd()。
Tappable
可使用tap()。
InteractsWithData
此功能僅適用於 SessionEvent 的$data 屬性。
可使用熟悉的輔助方法,例如 all()、has()、only()、collect()。
詳細請參閱 InteractsWithData。
SessionEvent 的 $data 會依 EventType 有不同結構,方便針對各事件存取其值。
content() 內部也是使用 InteractsWithData。
toArray() / toJson()
可將整個 SessionEvent 轉為陣列或 JSON。
collect() 方法。
因為 $data 已經有 InteractsWithData 的 collect()。
若要對整個事件進行 collection 操作,請使用 Laravel 的 collect() 輔助函式。
broadcast() / broadcastNow()
可以與 Laravel AI SDK 的 StreamEvent 相同介面進行廣播。
AI SDK 中用於 streaming,但在 SessionEvent 中可用於任意 EventType。
broadcastNow() 不經由 queue,而是立即廣播。
最新資訊請參閱 GitHub 儲存庫。