
# Neuron Atkarīgās darbplūsmas

Šis piemērs atbild uz bieži uzdotu jautājumu par aģentu darbību:

> Vai viena darbplūsma var noteikt, ka cita darbplūsma drīkst turpināties tikai pēc iepriekšējās darbplūsmas pabeigšanas?

Jā. Būtiskā nianse ir tā, ka Queuety to jau nodrošina ar `wait_for_workflow()` un `wait_for_workflows()`.

Tas nozīmē, ka:

- darbplūsmu `X` var palaist tagad
- `X` var gaidīt `waiting_for_workflows`
- `X` atsāk darbu tikai tad, kad `Y` darbplūsma ir pabeigta

## Piemērs: vispirms izpēte, pēc tam rakstīšana

Izmantojiet vienu augstākā līmeņa darbplūsmu izpētes materiālu kopas sagatavošanai un otru augstākā līmeņa darbplūsmu galīgā teksta melnraksta izveidei.

### Izpētes darbplūsma

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

### Rakstīšanas darbplūsma

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

Kad sākas rakstīšanas darbplūsma, tā uzreiz tiek apturēta stāvoklī `waiting_for_workflows`, līdz izpētes darbplūsma ir sekmīgi pabeigta.

## Rakstīšanas darbība 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']` ir pieejams, jo `wait_for_workflow()` nokopēja pabeigto publisko stāvokli no atkarīgās darbplūsmas pašreizējā darbplūsmā, izmantojot atslēgu `research`.

## Kad izmantot šo pieeju vienas lielas darbplūsmas vietā

Izvēlieties atsevišķas augstākā līmeņa darbplūsmas, ja:

- posmiem ir atšķirīgi atbildīgie vai darbības cikli
- vēlaties tos pārbaudīt un mēģināt vēlreiz neatkarīgi
- nākamo posmu jāvar palaist, pirms iepriekšējais ir pabeigts

Izvēlieties vienu darbplūsmu, ja:

- posmi ir cieši saistīti
- tiem ir viens darbības cikls un viens stāvokļa kopums

## Kā šeit iederas stāvokļu mašīna

Ja šī rakstīšanas plūsma ir daļa no ilgstošas redakcionālas sesijas, ļaujiet [stāvokļu mašīnai](https://queuety.inline0.dev/lv/docs/state-machines) pārvaldīt ārējo dzīves ciklu, bet izmantojiet šīs darbplūsmas ierobežotas izpildes posmiem. Tā dzīves cikla stāvokļi, piemēram, `awaiting_brief`, `researching`, `awaiting_review` un `completed`, paliek skaidri norādīti, vienlaikus saglabājot darbplūsmas noturību katrā posmā.

## Viena svarīga atšķirība

Šī pieeja nozīmē:

- `X` pastāv jau tagad, bet gaida `Y`

Tas **nenozīmē**:

- `X` tiek izveidots tikai pēc `Y` pabeigšanas

Ja vēlaties otro variantu, lieciet vecākdarbplūsmai gaidīt `Y` un tikai pēc tam izsaukt `start_workflows()` vai `start_agents()`, lai veiktu `X`.

## Saistītā dokumentācija

- [Darbplūsmu atkarības](https://queuety.inline0.dev/lv/docs/workflows/dependencies)
- [Asinhronās nodošanas](https://queuety.inline0.dev/lv/docs/workflows/async-handoffs)
- [Aģentu orķestrēšana](https://queuety.inline0.dev/lv/docs/workflows/agent-orchestration)
- [Stāvokļu mašīnas](https://queuety.inline0.dev/lv/docs/state-machines)
