Liigu sisu juurde

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, quorum või nimega käivitatud rühma

Meetod ->start_workflows()

PHP
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:

  1. PlanTopicsStep kirjutab teemakoormuste massiivi asukohta $state['topics']
  2. start_workflows() käivitab iga teema jaoks ühe agent_task töövoo
  3. Käivitatud töövoogude ID-d kirjutatakse asukohta $state['child_workflow_ids']
  4. wait_for_workflow_group() peatub, kuni käivitatud rühm täidab valitud lõpetamistingimuse
  5. SynthesizeBriefStep saab 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:

PHP
[
    [ 'topic' => 'pricing', 'source' => 'competitors' ],
    [ 'topic' => 'reviews', 'source' => 'customers' ],
]

Kui üksus on skalaar, salvestab Queuety selle võtme payload_key alla:

PHP
->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:

PHP
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 kogub kõik lõpetatud alamkäituste olekud
  • WaitMode::Any jä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_key vaikeväärtus on agent_workflow_ids
  • payload_key vaikeväärtus on agent_task
  • name vaikeväärtus on start_agents

wait_for_agents() on wait_for_workflows() alias, mille vaikeväärtused sobivad agenditulemuste kogumiseks:

  • workflows vaikeväärtus on agent_workflow_ids
  • result_key vaikeväärtus on agent_results
  • name vaikeväärtus on wait_for_agents

wait_for_agent_group() on wait_for_workflow_group() alias, mille vaikeväärtused sobivad agentide partiidele.

PHP
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 ] );