Asünkroonsed üleandmised
Kasuta start_workflows(), kui töövoog peab leitud töö üle andma sõltumatutele tipptaseme töövoogudele, selle asemel et hoida kõike ühes käituses.
Kui modelleerid konkreetselt agendikäitusi, on start_agents() ja wait_for_agents() semantilised aliased agenditöödele sobivate vaikeväärtustega.
Suuremate terviknäidete kohta vaata teemat Agentide orkestreerimine.
See sobib agendilaadseks orkestreerimiseks:
- planeerija töövoog leiab käitusajal ülesandeid
- igast ülesandest saab omaette püsiv töövoog
- ematöövoog talletab nende töövoogude ID-d olekus
- ematöövoog saab hiljem oodata
all,any,quorumvõi nimega käivitatud rühma
Meetod ->start_workflows()
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 ] );
Selles näites:
PlanTopicsStepkirjutab teemakoormuste massiivi asukohta$state['topics']start_workflows()käivitab iga teema jaoks üheagent_tasktöövoo- Käivitatud töövoogude ID-d kirjutatakse asukohta
$state['child_workflow_ids'] wait_for_workflow_group()peatub, kuni käivitatud rühm täidab valitud lõpetamistingimuseSynthesizeBriefStepsaab lõpetatud alamkäituste olekud võtme$state['child_results']all
Alamkäituste koormused
Iga üksus kohas items_key saab ühe käivitatud töövoo algkoormuseks.
Kui üksus on massiiv, liidetakse selle avalikud võtmed alamkäituse koormusse:
[
[ 'topic' => 'pricing', 'source' => 'competitors' ],
[ 'topic' => 'reviews', 'source' => 'customers' ],
]
Kui üksus on skalaar, salvestab Queuety selle võtme payload_key alla:
->start_workflows(
items_key: 'topic_names',
workflow_builder: $agent_task,
payload_key: 'topic',
)
Emaoleku pärimine
Vaikimisi liidab start_workflows() iga alamkäituse koormusse ematöövoo avaliku oleku.
See tähendab, et ühine kontekst, näiteks brief_id, account_id või campaign, on igas käivitatud töövoos automaatselt saadaval.
Pärimisest jäetakse välja lähtekoht items_key ja result_key, et ükski alamkäitus ei saaks kogu ülesannete loendit ega lõplikku töövoogude ID-de massiivi.
Määra inherit_state: false, kui iga alamkäitus peaks saama ainult oma üksuse koormuse.
Miks mitte run_workflow()?
run_workflow() loob ema- ja alamkäituse suhte, kus ematöövoog peatub selle sammu juures, kuni alamkäitus lõpeb.
start_workflows() on vabam lahendus:
- käivitatud töövood on sõltumatud tipptaseme töövood
- iga käivitatud töövoogu saab eraldi uurida, uuesti proovida või eksportida
- ematöövoog otsustab hiljem, kas ja kuidas neid oodata
Seetõttu sobib start_workflows() paremini asünkroonseks agendiülesannete üleandmiseks, samas kui run_workflow() sobib paremini pesastatud kompositsiooniks ühes orkestreerimispuus.
Hilisem ootamine
start_workflows() on mõeldud kasutamiseks koos funktsiooniga Töövoogude sõltuvused:
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::Allkogub kõik lõpetatud alamkäituste olekudWaitMode::Anyjätkub esimese eduka alamkäituse järel
Nii saad planeerija ja täitja orkestreerimise ilma täieliku käitusajal muudetava DAG-mootorita.
Agenditööks sobivad aliased
start_agents() on start_workflows() alias, mille vaikeväärtused sobivad planeerija ja täitja töövoogudele:
result_keyvaikeväärtus onagent_workflow_idspayload_keyvaikeväärtus onagent_tasknamevaikeväärtus onstart_agents
wait_for_agents() on wait_for_workflows() alias, mille vaikeväärtused sobivad agenditulemuste kogumiseks:
workflowsvaikeväärtus onagent_workflow_idsresult_keyvaikeväärtus onagent_resultsnamevaikeväärtus onwait_for_agents
wait_for_agent_group() on wait_for_workflow_group() alias, mille vaikeväärtused sobivad agentide partiidele.
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 ] );