
# Neuron Függő munkafolyamatok

Ez a példa egy gyakori, ügynökalapú kérdésre ad választ:

> Dönthet úgy egy munkafolyamat, hogy egy másik csak egy korábbi munkafolyamat befejeződése után folytatódjon?

Igen. Fontos tudni, hogy a Queuety ezt már támogatja a `wait_for_workflow()` és a `wait_for_workflows()` segítségével.

Ez azt jelenti, hogy:

- a `X` munkafolyamat most indítható
- a `X` várakozhat a `waiting_for_workflows` állapotban
- a `X` csak akkor folytatódik, amikor a `Y` munkafolyamat befejeződik

## Példa: előbb kutatás, aztán írás

Használj egy felső szintű munkafolyamatot a kutatási anyag összeállításához, egy másikat pedig a végleges szöveg megírásához.

### Kutatási munkafolyamat

```php
use Queuety\Enums\WaitMode;
use Queuety\Queuety;

$research_agent = Queuety::workflow('research_agent')
    ->then(ResearchTopicStep::class);

$research_id = Queuety::workflow('research_packet')
    ->then(PlanResearchTasksStep::class)
    ->start_agents('agent_tasks', $research_agent)
    ->wait_for_agents(mode: WaitMode::All, result_key: 'agent_results')
    ->then(SynthesizeResearchPacketStep::class)
    ->dispatch([
        'brief_id' => 42,
        'provider' => 'anthropic',
    ]);
```

### Írási munkafolyamat

```php
Queuety::workflow('write_brief')
    ->wait_for_workflow('research_workflow_id', 'research')
    ->then(WriteBriefWithNeuronStep::class)
    ->wait_for_decision(result_key: 'editor_review')
    ->then(PublishBriefStep::class)
    ->dispatch([
        'brief_id' => 42,
        'research_workflow_id' => $research_id,
        'provider' => 'openai',
    ]);
```

Amikor az írási munkafolyamat elindul, azonnal szüneteltetett állapotba kerül a `waiting_for_workflows` ponton, amíg a kutatási munkafolyamat sikeresen be nem fejeződik.

## A Neuron írási lépés

```php
namespace App\Workflow\Steps;

use App\Neuron\WriterAgent;
use NeuronAI\Chat\Messages\UserMessage;
use Queuety\Step;

final class WriteBriefWithNeuronStep implements Step
{
    public function handle(array $state): array
    {
        $agent = new WriterAgent(
            providerName: $state['provider'] ?? 'openai',
        );

        $message = $agent->chat(
            new UserMessage(sprintf(
                "Write the final brief for brief %d using this research packet:\n\n%s",
                $state['brief_id'],
                json_encode($state['research'], JSON_PRETTY_PRINT),
            ))
        )->getMessage();

        return [
            'draft_markdown' => $message->getContent(),
        ];
    }

    public function config(): array
    {
        return [];
    }
}
```

A `$state['research']` azért érhető el, mert a `wait_for_workflow()` a függőségi munkafolyamat befejezett nyilvános állapotát a `research` kulcs alatt átmásolta az aktuális munkafolyamatba.

## Mikor válaszd ezt egyetlen óriási munkafolyamat helyett

Válassz külön felső szintű munkafolyamatokat, ha:

- a szakaszoknak más a felelőse vagy az üzemeltetési életciklusa
- külön szeretnéd megvizsgálni és újraindítani őket
- a későbbi szakaszt már az előző befejezése előtt el kell tudni indítani

Egyetlen munkafolyamatot válassz, ha:

- a szakaszok szorosan összekapcsolódnak
- közös életciklusuk és állapotuk van

## Hogyan illeszkedik ide az állapotgép

Ha ez az írási folyamat egy hosszabb életű szerkesztőségi munkamenet része, bízd a [állapotgépre](https://queuety.inline0.dev/hu/docs/state-machines) a külső életciklus kezelését, és használd ezeket a munkafolyamatokat a körülhatárolt végrehajtási szakaszokhoz. Így az olyan életciklus-állapotok, mint a `awaiting_brief`, `researching`, `awaiting_review` és `completed` egyértelműek maradnak, miközben az egyes fázisokban megőrzöd a munkafolyamat tartósságát.

## Egy fontos különbség

Ez a minta azt jelenti, hogy:

- a `X` már létezik, de a `Y` értékre vár

Ez **nem** azt jelenti, hogy:

- a `X` csak a `Y` befejeződése után jön létre

Ha a második viselkedést szeretnéd, egy szülő munkafolyamat várjon a `Y` értékre, és csak ezután hívja meg a `start_workflows()` vagy a `start_agents()` elemet a `X` céljából.

## Kapcsolódó dokumentáció

- [Munkafolyamat-függőségek](https://queuety.inline0.dev/hu/docs/workflows/dependencies)
- [Aszinkron átadások](https://queuety.inline0.dev/hu/docs/workflows/async-handoffs)
- [Ügynökök vezénylése](https://queuety.inline0.dev/hu/docs/workflows/agent-orchestration)
- [Állapotgépek](https://queuety.inline0.dev/hu/docs/state-machines)
