Eşzamansız Devirler
Bir iş akışının keşfedilen işleri tek bir çalıştırmanın içinde tutmak yerine bağımsız üst düzey iş akışlarına devretmesi gerektiğinde start_workflows() kullanın.
Ajan çalıştırmalarını özellikle modelliyorsanız, start_agents() ve wait_for_agents() ajanlara yönelik varsayılanlara sahip anlamsal takma adlardır.
Daha kapsamlı uçtan uca örnekler için Ajan Orkestrasyonu bölümüne bakın.
Bu, ajan tarzı orkestrasyon için kullanışlıdır:
- bir planlayıcı iş akışı çalışma zamanında görevleri keşfeder
- her görev kendi kalıcı iş akışına dönüşür
- üst iş akışı bu iş akışlarının kimliklerini duruma kaydeder
- üst iş akışı daha sonra
all,any,quorumveya adı belirtilmiş bir başlatılmış grubu bekleyebilir
->start_workflows() yöntemi
use Queuety\Enums\WaitMode;
use Queuety\Queuety;
$agent_task = Queuety::workflow( 'agent_task' )
->then( ResearchTopicStep::class )
->then( SummarizeTopicStep::class );
Queuety::workflow( 'brief_research' )
->then( PlanTopicsStep::class )
->start_workflows(
items_key: 'topics',
workflow_builder: $agent_task,
result_key: 'child_workflow_ids',
group_key: 'researchers',
)
->wait_for_workflow_group( 'researchers', WaitMode::All, result_key: 'child_results' )
->then( SynthesizeBriefStep::class )
->dispatch( [ 'brief_id' => 42 ] );
Bu örnekte:
PlanTopicsStep, konu yüklerinden oluşan bir diziyi$state['topics']konumuna yazarstart_workflows(), her konu için biragent_taskiş akışı başlatır- Başlatılan iş akışlarının kimlikleri
$state['child_workflow_ids']konumuna yazılır wait_for_workflow_group(), başlatılan grup seçilen tamamlanma koşulunu karşılayana kadar duraklarSynthesizeBriefStep, tamamlanan alt iş akışı durumlarını$state['child_results']altında alır
Alt iş akışı yükleri
items_key içindeki her öğe, başlatılan bir iş akışının ilk yükü olur.
Öğe bir diziyse, genel anahtarları alt iş akışının yüküne birleştirilir:
[
[ 'topic' => 'pricing', 'source' => 'competitors' ],
[ 'topic' => 'reviews', 'source' => 'customers' ],
]
Öğe skaler ise, Queuety onu payload_key altında saklar:
->start_workflows(
items_key: 'topic_names',
workflow_builder: $agent_task,
payload_key: 'topic',
)
Üst iş akışı durumunu devralma
Varsayılan olarak start_workflows(), üst iş akışının genel durumunu her alt iş akışının yüküyle birleştirir.
Bu, brief_id, account_id veya campaign gibi paylaşılan bağlamın başlatılan her iş akışında otomatik olarak kullanılabileceği anlamına gelir.
Kaynak items_key ile result_key devralmaya dahil edilmez; böylece her alt iş akışı görev listesinin tamamını veya nihai iş akışı kimlikleri dizisini almaz.
Her alt iş akışının yalnızca kendi öğe yükünü alması gerekiyorsa inherit_state: false ayarlayın.
Neden run_workflow() değil?
run_workflow(), üst iş akışının alt iş akışı tamamlanana kadar o adımda beklediği bir üst-alt ilişkisi oluşturur.
start_workflows() daha esnektir:
- başlatılan iş akışları bağımsız üst düzey iş akışlarıdır
- başlatılan her iş akışı kendi başına incelenebilir, yeniden denenebilir veya dışa aktarılabilir
- üst iş akışı, bunları bekleyip beklemeyeceğine ve nasıl bekleyeceğine daha sonra karar verir
Bu nedenle start_workflows(), ajan görevlerini eşzamansız olarak devretmeye daha uygundur; run_workflow() ise tek bir orkestrasyon ağacı içindeki iç içe bileşimler için daha uygundur.
Daha sonra bekleme
start_workflows(), İş Akışı Bağımlılıkları ile birlikte kullanılmak üzere tasarlanmıştır:
use Queuety\Enums\WaitMode;
Queuety::workflow( 'review_board' )
->start_workflows( 'review_tasks', $review_task_workflow, 'review_workflow_ids' )
->wait_for_workflows( 'review_workflow_ids', WaitMode::Any, 'winner' )
->then( FinalizeDecisionStep::class )
->dispatch( $payload );
WaitMode::All, tamamlanan tüm alt iş akışı durumlarını toplarWaitMode::Any, ilk başarılı alt iş akışında devam eder
Böylece çalışma zamanında düzenlenebilen tam bir DAG motoruna ihtiyaç duymadan planlayıcı/yürütücü orkestrasyonu kurabilirsiniz.
Ajanlara uygun takma adlar
start_agents(), planlayıcı/yürütücü akışlarına göre ayarlanmış varsayılanlara sahip bir start_workflows() takma adıdır:
result_keyvarsayılan olarakagent_workflow_idsdeğerini alırpayload_keyvarsayılan olarakagent_taskdeğerini alırnamevarsayılan olarakstart_agentsdeğerini alır
wait_for_agents(), ajan sonuçlarını toplamaya göre ayarlanmış varsayılanlara sahip bir wait_for_workflows() takma adıdır:
workflowsvarsayılan olarakagent_workflow_idsdeğerini alırresult_keyvarsayılan olarakagent_resultsdeğerini alırnamevarsayılan olarakwait_for_agentsdeğerini alır
wait_for_agent_group(), ajan gruplarına göre ayarlanmış varsayılanlara sahip bir wait_for_workflow_group() takma adıdır.
use Queuety\Enums\WaitMode;
$agent_run = Queuety::workflow( 'agent_run' )
->then( ResearchTopicStep::class )
->then( SummarizeTopicStep::class );
Queuety::workflow( 'brief_research' )
->then( PlanTopicsStep::class )
->start_agents( 'agent_tasks', $agent_run, group_key: 'researchers' )
->wait_for_agent_group( 'researchers', WaitMode::Quorum, 2 )
->then( SynthesizeBriefStep::class )
->dispatch( [ 'brief_id' => 42 ] );