Pereiti prie turinio

Agentų orkestravimas

Queuety tinka agentų sistemoms, kai reikia adaptyvaus darbo, bet nenorite atsisakyti patvarios būsenos, pakartotinių bandymų, apžiūros ir aiškios laukimo semantikos.

Daugumai agentų srautų nereikia vykdymo metu redaguojamo DAG variklio. Praktikoje daugumą sistemų galima modeliuoti keliais patvariais orkestravimo veiksmais. for_each() išplečia darbą viename darbo eigos vykdyme. start_agents() ir wait_for_agents() perduoda vykdymo metu aptiktą darbą nepriklausomoms aukščiausio lygio darbo eigoms. wait_for_decision() ir wait_for_input() pristabdo darbą, kad jį galėtų valdyti žmogus. wait_for_workflow(), wait_for_workflows() ir wait_for_agent_group() leidžia vienam aukščiausio lygio vykdymui laukti kito arba pradėtos grupės kvorumo.

Naudingas mąstymo modelis

Agentų orkestravimą lengviausia suprasti nagrinėjant jo sluoksnius. Planuotojas nusprendžia, kokį darbą reikia atlikti. Queuety paverčia tą darbą patvariomis užduotimis arba darbo eigomis. Specializuoti vykdymai pateikia rezultatus ir išsaugo artefaktus. Prižiūrintis etapas apibendrina rezultatus ir nusprendžia, kas vyks toliau. Bet kuriuo metu žmogus gali patvirtinti, atmesti arba pataisyti vykdymą prieš jam tęsiantis.

Svarbu tai, kad agentas nusprendžia, kokį darbą atlikti, o Queuety vis tiek nusprendžia, kaip tas darbas išsaugomas, kartojamas, tęsiamas ir apibendrinamas. Jei orkestruojamas ilgalaikis seansas, o ne ribotos trukmės vykdymas, derinkite tai su Būsenų mašinomis.

1 šablonas: planuotojas / vykdytojas su nepriklausomais agentų vykdymais

Naudokite start_agents(), kai planavimo etapas vykdymo metu aptinka užduotis ir kiekviena jų turi tapti atskira aukščiausio lygio darbo eiga.

PHP
use Queuety\Enums\WaitMode;
use Queuety\Queuety;

$agent_run = Queuety::workflow( 'agent_run' )
    ->then( FetchSourcesStep::class )
    ->then( DraftFindingStep::class );

Queuety::workflow( 'brief_research' )
    ->version( 'brief-research.v1' )
    ->idempotency_key( 'brief:42:research' )
    ->max_transitions( 20 )
    ->then( PlanResearchTasksStep::class )
    ->start_agents( 'agent_tasks', $agent_run, group_key: 'researchers' )
    ->wait_for_agent_group( 'researchers', WaitMode::Quorum, 2, 'agent_results' )
    ->then( SynthesizeBriefStep::class )
    ->dispatch( [ 'brief_id' => 42 ] );

Pagal šį šabloną PlanResearchTasksStep įrašo vykdymo metu aptiktus elementus į $state['agent_tasks'], start_agents() išsiunčia po vieną patvarią darbo eigą kiekvienai užduočiai, o wait_for_agent_group() sustabdo pirminę eigą, kol įvykdoma pasirinkta užbaigimo sąlyga. Tada SynthesizeBriefStep gauna užbaigtas antrines būsenas, pateiktas per $state['agent_results'].

Tai aiškiausias pradinis taškas planuotojo / vykdytojo sistemoms, nes kiekvieną agento vykdymą galima atskirai apžiūrėti ir pakartoti.

2 šablonas: žmogaus peržiūra prieš tęsiant vykdymą

Naudokite wait_for_decision(), kai darbo eiga turi sustoti ir laukti tikro „taip“ arba „ne“ sprendimo, o wait_for_input() – kai operatorius turi siųsti struktūrizuotą grįžtamąjį ryšį į vykdymą.

PHP
use Queuety\Queuety;

$workflow_id = Queuety::workflow( 'brief_review' )
    ->then( DraftBriefStep::class )
    ->wait_for_decision( result_key: 'review' )
    ->then( HandleReviewDecisionStep::class )
    ->wait_for_input( result_key: 'revision_notes' )
    ->then( ApplyRevisionNotesStep::class )
    ->dispatch( [ 'brief_id' => 42 ] );

Jei peržiūrintis asmuo patvirtina:

PHP
Queuety::approve_workflow(
    $workflow_id,
    [
        'reviewer' => 'editor@example.com',
        'notes' => 'Looks good, publish after legal check',
    ],
    'approved'
);

Jei peržiūrintis asmuo atmeta:

PHP
Queuety::reject_workflow(
    $workflow_id,
    [
        'reviewer' => 'editor@example.com',
        'reason' => 'Needs citations and a stronger conclusion',
    ],
    'rejected'
);

Po wait_for_decision() darbo eiga gauna struktūrizuotą duomenų rinkinį su galutiniu rezultatu, signalu, kuris tęsė vykdymą, ir visais kartu pateiktais peržiūrėtojo duomenimis. Taip sukuriamas tikras žmogaus įtraukimo į ciklą kontrolinis taškas, nelaikant atviro PHP proceso, kol vykdymas laukia.

3 šablonas: viena aukščiausio lygio darbo eiga laukia kitos

Kartais aiškiausias modelis yra ne viena milžiniška darbo eiga. Viena darbo eiga gali užbaigti tyrimą, o kita – laukti jos prieš pradėdama kitą etapą.

PHP
use Queuety\Enums\WaitMode;
use Queuety\Queuety;

$research_id = Queuety::workflow( 'research_brief' )
    ->then( PlanResearchTasksStep::class )
    ->start_agents( 'agent_tasks', $agent_run )
    ->wait_for_agents( mode: WaitMode::All, result_key: 'agent_results' )
    ->then( SynthesizeBriefStep::class )
    ->dispatch( [ 'brief_id' => 42 ] );

Queuety::workflow( 'publish_brief' )
    ->wait_for_workflow( $research_id, 'research' )
    ->wait_for_decision( result_key: 'editor_review' )
    ->then( PublishBriefStep::class )
    ->dispatch( [ 'brief_id' => 42 ] );

Taip tarp tyrimo ir publikavimo etapų sukuriama patvari riba. Kiekvienas vykdymas turi atskirą operacinį gyvavimo ciklą, o antroji darbo eiga vis tiek automatiškai tęsiama užbaigus priklausomą darbą.

Tinkamo primityvo pasirinkimas

for_each() yra tinkamas įrankis, kai darbas priklauso vienam darbo eigos vykdymui, o šakos iš tiesų tėra lygiagretus atskirų žingsnių vykdymas naudojant vieną bendrą būsenos rinkinį.

start_agents() geriau tinka, kai kiekviena aptikta užduotis turi tapti atskiru patvariu aukščiausio lygio vykdymu, kurį norite atskirai apžiūrėti, pakartoti arba eksportuoti.

wait_for_workflow() ir wait_for_workflows() tinka, kai viena aukščiausio lygio darbo eiga priklauso nuo kitos aukščiausio lygio darbo eigos ir reikia patvaraus asinchroninio šių orkestravimo sluoksnių koordinavimo.

wait_for_decision() ir wait_for_input() naudokite ten, kur žmogus turi patvirtinti, atmesti arba nukreipti vykdymą, kol darbo eiga lieka pristabdyta ir nenaudoja darbuotojų pajėgumų.

Siūlomos būsenų konvencijos

Agentų sistemas lengviau derinti, kai būsenų raktai yra nuspėjami. Praktikoje agent_tasks tinka planuotojo išvesčiai, agent_workflow_ids – pradėtiems aukščiausio lygio vykdymams, agent_results – užbaigtoms antrinės darbo eigos būsenoms, o review arba decision – patvirtinimo ar atmetimo duomenims. Didesnius išvesties duomenis, pavyzdžiui, juodraščius, citatas ar tyrimų aprašus, paprastai geriau saugoti artefaktų saugykloje, o ne pagrindiniame darbo eigos būsenos rinkinyje.

Agentų darbo eigoms apsaugos priemonės naudingesnės nei beveik bet kuriam kitam naudojimo atvejui, nes jos iš prigimties yra dinamiškos.

PHP
Queuety::workflow( 'agent_research' )
    ->version( 'agent-research.v2' )
    ->idempotency_key( 'brief:42:agent-research' )
    ->max_transitions( 20 )
    ->max_for_each_items( 12 )
    ->max_state_bytes( 32768 );

Šie valdikliai atsako į gamybinėje aplinkoje svarbius praktinius klausimus: kuri aprašo versija sukūrė vykdymą, ar pasikartojančios išorinės užklausos gali jį išsiųsti du kartus, ar planuotojas gali sukurti per daug šakų ir ar darbo eigos būsena gali neribotai augti. Daugumoje agentų sistemų pirmiausia įdiekite šias apsaugos priemones, o tik tada derinkite darbuotojų skaičių ar eilių topologiją.

Taip pat žr.