
# Neuron Priklausomos darbo eigos

Šiame pavyzdyje nagrinėjamas dažnas agentų naudojimo klausimas:

> Ar viena darbo eiga gali nuspręsti, kad kita turėtų tęstis tik pasibaigus ankstesnei?

Taip. Svarbu tai, kad Queuety tai jau palaiko naudodama `wait_for_workflow()` ir `wait_for_workflows()`.

Tai reiškia:

- darbo eigą `X` galima paleisti dabar
- `X` gali laukti `waiting_for_workflows`
- `X` tęsiama tik pasibaigus darbo eigai `Y`

## Pavyzdys: pirma tyrimas, tada rašymas

Vienoje aukščiausio lygio darbo eigoje parenkite tyrimo medžiagą, o kitoje – galutinio teksto juodraštį.

### Tyrimo darbo eiga

```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',
    ]);
```

### Rašymo darbo eiga

```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',
    ]);
```

Prasidėjusi rašymo darbo eiga iškart pristabdoma `waiting_for_workflows`, kol tyrimo darbo eiga sėkmingai baigiama.

## Rašymo žingsnis Neuron

```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 [];
    }
}
```

`$state['research']` pasiekiamas, nes `wait_for_workflow()` nukopijavo užbaigtą viešąją būseną iš priklausomos darbo eigos į dabartinę darbo eigą, naudodama raktą `research`.

## Kada rinktis šį būdą, o ne vieną didžiulę darbo eigą

Atskiras aukščiausio lygio darbo eigas rinkitės, kai:

- etapai turi skirtingus savininkus arba veiklos gyvavimo ciklus
- norite juos tikrinti ir bandyti dar kartą nepriklausomai
- vėlesnį etapą turėtų būti galima paleisti dar nepasibaigus ankstesniam

Vieną darbo eigą rinkitės, kai:

- etapai glaudžiai susiję
- jiems bendri gyvavimo ciklas ir būsenos duomenys

## Kur tinka būsenų mašina

Jei šis rašymo procesas yra ilgesnės redagavimo sesijos dalis, išorinį gyvavimo ciklą patikėkite [būsenų mašinai](https://queuety.inline0.dev/lt/docs/state-machines), o šias darbo eigas naudokite ribotos trukmės vykdymo etapams. Taip gyvavimo ciklo būsenos, tokios kaip `awaiting_brief`, `researching`, `awaiting_review` ir `completed`, lieka aiškios, o kiekviename etape išsaugomas darbo eigos patikimumas.

## Vienas svarbus skirtumas

Šis šablonas reiškia:

- `X` jau egzistuoja, bet laukia `Y`

Tai **nereiškia**:

- `X` sukuriama tik užbaigus `Y`

Jei reikia antrojo elgesio, nustatykite, kad tėvinė darbo eiga lauktų `Y`, ir tik tada iškviestų `start_workflows()` arba `start_agents()`, skirtą `X`.

## Susijusi dokumentacija

- [Darbo eigos priklausomybės](https://queuety.inline0.dev/lt/docs/workflows/dependencies)
- [Asinchroniniai perdavimai](https://queuety.inline0.dev/lt/docs/workflows/async-handoffs)
- [Agentų orkestravimas](https://queuety.inline0.dev/lt/docs/workflows/agent-orchestration)
- [Būsenų mašinos](https://queuety.inline0.dev/lt/docs/state-machines)
