
# Neuron Bağımlı İş Akışları

Bu örnek, aracılarla ilgili sık sorulan bir soruyu yanıtlar:

> Bir iş akışı, önceki bir iş akışı tamamlanana kadar başka bir iş akışının devam etmemesine karar verebilir mi?

Evet. Önemli bir ayrıntı şu: Queuety bunu zaten `wait_for_workflow()` ve `wait_for_workflows()` ile destekliyor.

Bunun anlamı:

- `X` iş akışı hemen gönderilebilir
- `X`, `waiting_for_workflows` içinde bekleyebilir
- `X` yalnızca `Y` iş akışı tamamlandığında devam eder

## Örnek: önce araştırma, sonra yazım

Bir üst düzey iş akışını araştırma dosyası oluşturmak, ikinci bir üst düzey iş akışını da son metni taslak hâline getirmek için kullanın.

### Araştırma iş akışı

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

### Yazım iş akışı

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

Yazım iş akışı başladığında, araştırma iş akışı başarıyla tamamlanana kadar hemen `waiting_for_workflows` içinde duraklar.

## Neuron yazım adımı

```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']` kullanılabilir; çünkü `wait_for_workflow()`, bağımlı iş akışından tamamlanmış genel durumu `research` anahtarı altında mevcut iş akışına kopyalamıştır.

## Tek ve dev bir iş akışı yerine bunu ne zaman kullanmalı

Şu durumlarda ayrı üst düzey iş akışlarını tercih edin:

- Aşamaların farklı sahipleri veya operasyonel yaşam döngüleri varsa
- Bunları birbirinden bağımsız incelemek ve yeniden denemek istiyorsanız
- Önceki aşama tamamlanmadan sonraki aşamanın gönderilebilmesi gerekiyorsa

Şu durumlarda tek bir iş akışını tercih edin:

- Aşamalar sıkı biçimde birbirine bağlıysa
- Tek bir yaşam döngüsünü ve tek bir durum kümesini paylaşıyorlarsa

## Durum makinesi nerede devreye girer

Bu yazım akışı daha uzun ömürlü bir editoryal oturumun parçasıysa, dış yaşam döngüsünü [durum makinesi](https://queuety.inline0.dev/tr/docs/state-machines) yönetsin ve bu iş akışları sınırlı yürütme aşamalarını üstlensin. Böylece `awaiting_brief`, `researching`, `awaiting_review` ve `completed` gibi yaşam döngüsü durumları açıkça tanımlanırken her aşamadaki iş akışı kalıcılığı korunur.

## Önemli bir ayrım

Bu kalıp şu anlama gelir:

- `X` şimdi oluşturulur, ancak `Y` öğesini bekler

Şu anlama **gelmez**:

- `X`, `Y` tamamlanana kadar oluşturulmaz

İkinci davranışı istiyorsanız, bir üst iş akışının `Y` öğesini beklemesini sağlayın ve ancak bundan sonra `X` için `start_workflows()` veya `start_agents()` çağrısını yapın.

## İlgili belgeler

- [İş Akışı Bağımlılıkları](https://queuety.inline0.dev/tr/docs/workflows/dependencies)
- [Eşzamansız Devirler](https://queuety.inline0.dev/tr/docs/workflows/async-handoffs)
- [Aracı Orkestrasyonu](https://queuety.inline0.dev/tr/docs/workflows/agent-orchestration)
- [Durum Makineleri](https://queuety.inline0.dev/tr/docs/state-machines)
