> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Steering und Queueing

> Beschreibt den Unterschied zwischen Steering (immediate) und Queueing (enqueue) im Laravel Copilot SDK sowie deren sinnvolle Verwendung in Laravel.

## Steering und Queueing

<Info>
  Im normalen Ablauf einer Laravel-Anwendung besteht selten Bedarf, Steering direkt einzusetzen. Da synchrone Ausführungsmuster in Laravel wenig davon profitieren, ist grundsätzlich die Standardnutzung mit Queueing angemessen.
</Info>

Für das Senden von Nachrichten, während der Agent noch verarbeitet, gibt es zwei Muster: **Steering** und **Queueing**.

## Überblick

Alle Methoden `send()` / `sendAndWait()` / `sendAndStream()` / `Copilot::run()` verfügen über den Parameter `$mode`.

| Modus                    | Verhalten                                                          |
| ------------------------ | ------------------------------------------------------------------ |
| `"enqueue"` (Standard)   | Wird nach Abschluss des aktuellen Turns aus der Queue verarbeitet  |
| `"immediate"` (Steering) | Unterbricht den aktuell laufenden Turn und wird sofort eingespeist |

## Steering (`"immediate"`)

Speist die Nachricht direkt in den vom Agenten gerade bearbeiteten Turn ein. Der Agent empfängt sie in Echtzeit und passt die Antwort an. Nutzen Sie dies, um die Richtung zu korrigieren, ohne die laufende Arbeit abzubrechen.

```php theme={null}
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Contracts\CopilotSession;

Copilot::start(function (CopilotSession $session) {
    // Langlaufende Aufgabe starten
    $messageId = $session->send(prompt: 'Refactor the authentication module to use sessions');

    // Während der Agent verarbeitet, die Richtung korrigieren
    $session->send(
        prompt: 'Actually, use JWT tokens instead of sessions',
        mode: 'immediate',
    );

    // Warten, bis der Agent idle wird
    $response = $session->sendAndWait(prompt: 'Summarize what you did');
});
```

<Warning>
  Steering ist Best-Effort. Wenn der Agent bereits einen Tool-Aufruf initiiert hat, wird die Nachricht erst nach Abschluss dieses Tool-Aufrufs wirksam, jedoch weiterhin innerhalb desselben Turns. Trifft die Steering-Nachricht erst nach Abschluss des Turns ein, wird sie automatisch in die Queue verschoben.
</Warning>

## Queueing (`"enqueue"`)

Fügt die Nachricht einer Queue hinzu und verarbeitet sie nach Ende des aktuellen Turns nacheinander. Jede gequeuete Nachricht wird als eigenständiger Turn ausgeführt. Dies ist das Standardverhalten, wenn `$mode` weggelassen wird.

```php theme={null}
Copilot::start(function (CopilotSession $session) {
    // Erste Aufgabe starten
    $session->send(prompt: 'Set up the project structure');

    // Während der Agent verarbeitet, weitere Aufgaben in die Queue legen
    $session->send(prompt: 'Add unit tests for the auth module', mode: 'enqueue');
    $session->send(prompt: 'Update the README with setup instructions', mode: 'enqueue');

    // Warten, bis die Queue geleert ist
});
```

## Praktische Überlegungen für Laravel

In Laravel überwiegen synchrone Muster mit `Copilot::run()` oder `sendAndWait()`. Diese senden eine Nachricht und warten, bis der Agent idle wird. **Daher gibt es keine Gelegenheit, den laufenden Prozess zu unterbrechen, und `$mode` ist praktisch bedeutungslos.**

```php theme={null}
// Da Copilot::run() intern sendAndWait() aufruft,
// hat die Angabe von mode keine Wirkung

$response = Copilot::run(prompt: 'Tell me something about Laravel.');

// Auch innerhalb einer Session ist es unnötig, wenn Sie nur sendAndWait() nacheinander aufrufen
Copilot::start(function (CopilotSession $session) {
    $r1 = $session->sendAndWait(prompt: 'First task');
    $r2 = $session->sendAndWait(prompt: 'Second task');
});
```

Steering (`"immediate"`) entfaltet seinen Nutzen, wenn Sie mit `send()` Nachrichten asynchron versenden und parallel dazu über eine weitere Nachricht in den laufenden Turn eingreifen können. In Laravels synchronem Fluss ist es schwierig, diese Gelegenheit herzustellen. **Grundsätzlich ist es daher angebracht, `$mode` nicht zu setzen und beim Standard zu bleiben.**

## Welchen sollten Sie wählen?

| Situation                                 | Muster                         |
| ----------------------------------------- | ------------------------------ |
| Der Agent geht in die falsche Richtung    | Steering (`"immediate"`)       |
| Ihnen ist die nächste Aufgabe eingefallen | Queueing (`"enqueue"`)         |
| Mehrere Aufgaben nacheinander ausführen   | Queueing (`"enqueue"`)         |
| Normale Laravel-Anwendung                 | Standard (`$mode` nicht nötig) |

## Best Practices

* **Standard ist Queueing** – In den meisten Fällen ist es sinnvoll, `$mode` wegzulassen (oder `"enqueue"` anzugeben). Das Verhalten ist vorhersagbar.
* **Steering nur zur Korrektur** – Verwenden Sie `"immediate"` nur, wenn der Agent offensichtlich etwas Falsches tut.
* **Steering-Nachrichten kurz halten** – Wählen Sie kurze Nachrichten, die im aktuellen Kontext verständlich sind. Lange, komplexe Steering-Nachrichten stiften eher Verwirrung.
* **Aufeinanderfolgendes Steering vermeiden** – Mehrere Steering-Nachrichten in kurzer Folge können die Qualität des Turns mindern. Bei größerer Richtungsänderung kann es geeigneter sein, den Turn abzubrechen und neu zu beginnen.

## Referenzen

* [Grundlegende Verwendung](/de/packages/laravel-copilot-sdk/bare-usage)
* [Streaming](/de/packages/laravel-copilot-sdk/streaming)
* [send-on](/de/packages/laravel-copilot-sdk/send-on)

<Info>
  Aktuelle Informationen finden Sie im [GitHub-Repository](https://github.com/invokable/laravel-copilot-sdk).
</Info>


## Related topics

- [send() und on()](/de/packages/laravel-copilot-sdk/send-on.md)
- [Events und Listener](/de/events.md)
- [Queues und Jobs](/de/queues.md)
- [Session-Kontext und Filterung](/de/packages/laravel-copilot-sdk/session-context.md)
- [Laravel und KI-Entwicklung](/de/ai.md)
