Skip to main content

Steering 與 Queueing

在一般 Laravel 應用程式流程中,幾乎沒有直接使用 steering 的場景。Laravel 的同步執行模式難以受益於此,基本上採用預設的 queueing 運作即可。
Agent 處理過程中傳送訊息有兩種模式:SteeringQueueing

概觀

send() / sendAndWait() / sendAndStream() / Copilot::run() 皆有 $mode 參數。

Steering("immediate")

直接將訊息注入 Agent 目前正在處理的 turn。Agent 會即時接收訊息並調整回應。適合在不中斷正在進行的作業下修正方向。
Steering 屬於 best-effort。若 Agent 已經送出工具呼叫,則會在該工具呼叫完成後才套用,並在同一個 turn 內處理。若 steering 訊息在 turn 結束後才到達,會被自動移至 queue。

Queueing("enqueue")

將訊息加入 queue,並在目前 turn 完成後依序處理。每個 queue 中的訊息會作為獨立的 turn 執行。這是省略 $mode 時的預設動作。

Laravel 的實務考量

Laravel 主要使用 Copilot::run()sendAndWait() 等同步模式。這些會傳送訊息並等待進入 idle,因此 在 Agent 處理期間沒有機會插入,$mode 實質上沒有意義
Steering("immediate")發揮作用的場景,是用 send() 非同步傳送訊息,同時另以其他訊息並行介入進行中的 turn。Laravel 的同步流程難以製造這種時機,因此基本上不指定 $mode,維持預設即可

應該使用哪一個

最佳實踐

  • 預設使用 queueing — 省略 $mode(或指定 "enqueue")在多數情境下都是合適的。行為可預測。
  • Steering 用於修正"immediate" 僅在 Agent 明顯做錯事時才使用。
  • Steering 訊息應簡潔 — 使用能於目前 context 理解的短訊息。長而複雜的 steering 訊息反而會造成混亂。
  • 避免連續 steering — 短時間內傳送多次 steering 可能導致 turn 品質下降。若需大幅轉向,直接中斷 turn 重新開始有時反而更適當。

參考

最新資訊請參閱 GitHub 儲存庫
最後修改於 2026年8月2日