Asynkroniset siirrot
Käytä start_workflows()-toimintoa, kun työnkulun pitää siirtää löydetty työ riippumattomiin ylätason työnkulkuihin sen sijaan, että kaikki pidettäisiin yhdessä suorituksessa.
Jos mallinnat nimenomaan agenttien suorituksia, start_agents() ja wait_for_agents() ovat semanttisia aliaksia, joissa on agenteille sopivat oletukset.
Laajemmat päästä päähän -esimerkit ovat sivulla Agenttien orkestrointi.
Tästä on hyötyä agenttityyppisessä orkestroinnissa:
- suunnittelijan työnkulku löytää tehtäviä suorituksen aikana
- jokaisesta tehtävästä tulee oma pysyvä työnkulku
- ylätason työnkulku tallentaa näiden työnkulkujen tunnisteet tilaansa
- ylätason työnkulku voi myöhemmin odottaa tunnisteita
all,any,quorumtai nimetyn aloitettujen ryhmän valmistumista
->start_workflows()-menetelmä
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 ] );
Tässä esimerkissä:
PlanTopicsStepkirjoittaa aihetietosisältöjen taulukon kohteeseen$state['topics']start_workflows()käynnistää yhdenagent_task-työnkulun aihetta kohden- Aloitettujen työnkulkujen tunnisteet kirjoitetaan kohteeseen
$state['child_workflow_ids'] wait_for_workflow_group()keskeyttää suorituksen, kunnes aloitettu ryhmä täyttää valitun valmistumisehdonSynthesizeBriefStepsaa valmiiden alityönkulkujen tilat kohteesta$state['child_results']
Alityönkulkujen tietosisällöt
Jokaisesta kohteen items_key kohteesta tulee yhden aloitetun työnkulun alkutietosisältö.
Jos kohde on taulukko, sen julkiset avaimet yhdistetään alityönkulun tietosisältöön:
[
[ 'topic' => 'pricing', 'source' => 'competitors' ],
[ 'topic' => 'reviews', 'source' => 'customers' ],
]
Jos kohde on skalaarinen arvo, Queuety tallentaa sen kohteeseen payload_key:
->start_workflows(
items_key: 'topic_names',
workflow_builder: $agent_task,
payload_key: 'topic',
)
Ylätason tilan periminen
Oletusarvoisesti start_workflows() yhdistää ylätason työnkulun julkisen tilan jokaisen alityönkulun tietosisältöön.
Tämä tarkoittaa, että yhteinen asiayhteys, kuten brief_id, account_id tai campaign, on automaattisesti käytettävissä jokaisessa aloitetussa työnkulussa.
Lähde items_key ja result_key jätetään perimisen ulkopuolelle, jotta kukin alityönkulku ei saa koko tehtäväluetteloa tai työnkulun lopullisten tunnisteiden taulukkoa.
Aseta inherit_state: false, kun kunkin alityönkulun pitäisi saada vain oman kohteensa tietosisältö.
Miksi ei run_workflow()?
run_workflow() luo ylätason työnkulun ja alityönkulun välisen suhteen, jossa ylätason työnkulku jää kyseiseen vaiheeseen, kunnes alityönkulku valmistuu.
start_workflows() on väljempi vaihtoehto:
- Aloitetut työnkulut ovat itsenäisiä ylätason työnkulkuja
- Jokaisen aloitetun työnkulun voi tarkastella, yrittää uudelleen tai viedä erikseen
- Ylätason työnkulku päättää myöhemmin, odottaako se niitä ja miten
Siksi start_workflows() sopii paremmin agenttitehtävien asynkroniseen siirtämiseen, kun taas run_workflow() sopii paremmin sisäkkäiseen koostamiseen yhdessä orkestrointipuussa.
Odottaminen myöhemmin
start_workflows() on suunniteltu toimimaan yhdessä Työnkulkujen riippuvuuksien kanssa:
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::Allkerää kaikkien valmiiden alityönkulkujen tilatWaitMode::Anyjatkaa ensimmäisen onnistuneen alityönkulun valmistuessa
Tämän avulla voit toteuttaa suunnittelija-suorittaja-orkestroinnin ilman kokonaan suorituksen aikana muokattavaa DAG-moottoria.
Agenteille sopivat aliakset
start_agents() on start_workflows()-toiminnon alias, jonka oletukset on mukautettu suunnittelija-suorittaja-työnkulkuihin:
result_key-oletusarvona onagent_workflow_idspayload_key-oletusarvona onagent_taskname-oletusarvona onstart_agents
wait_for_agents() on wait_for_workflows()-toiminnon alias, jonka oletukset on mukautettu agenttitulosten keräämiseen:
workflows-oletusarvona onagent_workflow_idsresult_key-oletusarvona onagent_resultsname-oletusarvona onwait_for_agents
wait_for_agent_group() on wait_for_workflow_group()-toiminnon alias, jonka oletukset on mukautettu agenttien eräajoihin.
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 ] );