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ı:
Xiş akışı hemen gönderilebilirX,waiting_for_workflowsiçinde bekleyebilirXyalnızcaYiş 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ışı
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ışı
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ı
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 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, ancakYöğesini bekler
Şu anlama gelmez:
X,Ytamamlanana 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.