跳转到主要内容

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 在流式输出时使用它,但在 SessionEvent 中可以用于任意 EventType
broadcastNow() 不经过队列,立即广播。
流式输出时的使用示例:
最新信息请参考 GitHub 仓库
最后修改于 2026年7月18日