
# Neuron Βήμα ροής δεδομένων

Αυτό το παράδειγμα δείχνει έναν σαφή διαχωρισμό. Το Neuron μεταδίδει την απόκριση του agent σε διαδοχικά τμήματα, ενώ το Queuety αποθηκεύει μόνιμα κάθε τμήμα μέσω του `StreamingStep`. Έτσι, το UI μπορεί να λαμβάνει ένα προσχέδιο σε πραγματικό χρόνο, ενώ η ροή εργασιών εξακολουθεί να αντέχει σε καταρρεύσεις ή επαναλήψεις εργατών.

## Πότε είναι χρήσιμο αυτό το μοτίβο

Χρησιμοποιήστε το όταν ένα προσχέδιο ή μια απάντηση είναι αρκετά μεγάλο ώστε να θέλετε να μεταδίδεται ζωντανά, όταν δεν θέλετε να χαθεί μέρος της εξόδου αν τερματιστεί ο worker και όταν το τελικό τεχνούργημα πρέπει να αποθηκευτεί στην κατάσταση της ροής εργασιών μετά την ολοκλήρωση της μετάδοσης.

## Ο agent Neuron

```php
namespace App\Neuron;

use NeuronAI\Agent\Agent;
use NeuronAI\Providers\AIProviderInterface;
use NeuronAI\Providers\OpenAI\Responses\OpenAIResponses;
use NeuronAI\SystemPrompt;

final class DraftMemoAgent extends Agent
{
    protected function provider(): AIProviderInterface
    {
        return new OpenAIResponses(
            key: $_ENV['OPENAI_API_KEY'],
            model: $_ENV['OPENAI_MODEL'],
        );
    }

    public function instructions(): string
    {
        return (string) new SystemPrompt(
            background: [
                'You write crisp internal strategy memos.',
                'Prefer short sections and operationally useful language.',
            ],
        );
    }
}
```

## Το βήμα ροής δεδομένων Queuety

```php
namespace App\Workflow\Steps;

use App\Neuron\DraftMemoAgent;
use NeuronAI\Chat\Messages\UserMessage;
use Queuety\Contracts\StreamingStep;
use Queuety\Heartbeat;

final class StreamMemoDraftStep implements StreamingStep
{
    public function stream(array $state, array $existing_chunks = []): \Generator
    {
        if (! empty($existing_chunks)) {
            return;
        }

        $handler = (new DraftMemoAgent())->stream(
            new UserMessage(sprintf(
                "Write a strategy memo about %s for account %d.",
                $state['topic'],
                $state['account_id'],
            ))
        );

        foreach ($handler->events() as $i => $chunk) {
            Heartbeat::beat(['chunks' => $i + 1]);

            // This example assumes the agent has no tools attached, so
            // Neuron will stream text/reasoning chunks only.
            yield $chunk->content;
        }
    }

    public function on_complete(array $chunks, array $state): array
    {
        return [
            'draft_markdown' => implode('', $chunks),
        ];
    }

    public function config(): array
    {
        return [
            'max_attempts' => 3,
        ];
    }
}
```

## Χρήση σε ροή εργασιών

```php
use Queuety\Queuety;

Queuety::workflow('memo_drafting')
    ->then(BuildDraftBriefStep::class)
    ->then(StreamMemoDraftStep::class)
    ->then(StoreMemoStep::class)
    ->dispatch([
        'account_id' => 10,
        'topic' => 'pricing changes for enterprise accounts',
    ]);
```

## Γιατί να χρησιμοποιήσετε το Queuety αντί για προσαρμογείς ροής του Neuron μόνο

Οι προσαρμογείς ροής του Neuron είναι χρήσιμοι για πρωτόκολλα και μεταφορές στο frontend. Το Queuety προσφέρει κάτι διαφορετικό: κάθε τμήμα που παράγεται αποθηκεύεται μόνιμα, οι επαναλήψεις μπορούν να συνεχιστούν με τα προηγουμένως αποθηκευμένα τμήματα, το ολοκληρωμένο προσχέδιο συγχωνεύεται ξανά στην κατάσταση της ροής εργασιών και η ροή γίνεται ένα ανθεκτικό βήμα σε έναν ευρύτερο συντονισμό.

Αυτό καθιστά το μοτίβο κατάλληλο όταν η ροή αποτελεί μέρος μιας επιχειρησιακής διαδικασίας πολλών βημάτων και όχι απλώς μιας κλήσης UI αιτήματος/απόκρισης.

## Μια επιφύλαξη

Αν ο agent Neuron χρησιμοποιεί εργαλεία κατά τη ροή, χειριστείτε ρητά τους τύπους τμημάτων ροής. Η τρέχουσα τεκμηρίωση ροής του Neuron περιγράφει τα `TextChunk`, `ReasoningChunk`, `ToolCallChunk` και `ToolResultChunk`. Για μια ροή εργασιών σύνταξης στο παρασκήνιο, η απλούστερη προσέγγιση είναι συνήθως να περιορίσετε τον agent ροής σε κείμενο.

## Σχετική τεκμηρίωση

- [Βήματα ροής δεδομένων](https://queuety.inline0.dev/el/docs/workflows/streaming)
- [Συντονισμός agent](https://queuety.inline0.dev/el/docs/workflows/agent-orchestration)
