Pāriet uz saturu

Neuron Atkarīgās darbplūsmas

Šis piemērs atbild uz bieži uzdotu jautājumu par aģentu darbību:

Vai viena darbplūsma var noteikt, ka cita darbplūsma drīkst turpināties tikai pēc iepriekšējās darbplūsmas pabeigšanas?

Jā. Būtiskā nianse ir tā, ka Queuety to jau nodrošina ar wait_for_workflow() un wait_for_workflows().

Tas nozīmē, ka:

  • darbplūsmu X var palaist tagad
  • X var gaidīt waiting_for_workflows
  • X atsāk darbu tikai tad, kad Y darbplūsma ir pabeigta

Piemērs: vispirms izpēte, pēc tam rakstīšana

Izmantojiet vienu augstākā līmeņa darbplūsmu izpētes materiālu kopas sagatavošanai un otru augstākā līmeņa darbplūsmu galīgā teksta melnraksta izveidei.

Izpētes darbplūsma

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

$research_agent = Queuety::workflow('research_agent')
    ->then(ResearchTopicStep::class);

$research_id = Queuety::workflow('research_packet')
    ->then(PlanResearchTasksStep::class)
    ->start_agents('agent_tasks', $research_agent)
    ->wait_for_agents(mode: WaitMode::All, result_key: 'agent_results')
    ->then(SynthesizeResearchPacketStep::class)
    ->dispatch([
        'brief_id' => 42,
        'provider' => 'anthropic',
    ]);

Rakstīšanas darbplūsma

PHP
Queuety::workflow('write_brief')
    ->wait_for_workflow('research_workflow_id', 'research')
    ->then(WriteBriefWithNeuronStep::class)
    ->wait_for_decision(result_key: 'editor_review')
    ->then(PublishBriefStep::class)
    ->dispatch([
        'brief_id' => 42,
        'research_workflow_id' => $research_id,
        'provider' => 'openai',
    ]);

Kad sākas rakstīšanas darbplūsma, tā uzreiz tiek apturēta stāvoklī waiting_for_workflows, līdz izpētes darbplūsma ir sekmīgi pabeigta.

Rakstīšanas darbība Neuron

PHP
namespace App\Workflow\Steps;

use App\Neuron\WriterAgent;
use NeuronAI\Chat\Messages\UserMessage;
use Queuety\Step;

final class WriteBriefWithNeuronStep implements Step
{
    public function handle(array $state): array
    {
        $agent = new WriterAgent(
            providerName: $state['provider'] ?? 'openai',
        );

        $message = $agent->chat(
            new UserMessage(sprintf(
                "Write the final brief for brief %d using this research packet:\n\n%s",
                $state['brief_id'],
                json_encode($state['research'], JSON_PRETTY_PRINT),
            ))
        )->getMessage();

        return [
            'draft_markdown' => $message->getContent(),
        ];
    }

    public function config(): array
    {
        return [];
    }
}

$state['research'] ir pieejams, jo wait_for_workflow() nokopēja pabeigto publisko stāvokli no atkarīgās darbplūsmas pašreizējā darbplūsmā, izmantojot atslēgu research.

Kad izmantot šo pieeju vienas lielas darbplūsmas vietā

Izvēlieties atsevišķas augstākā līmeņa darbplūsmas, ja:

  • posmiem ir atšķirīgi atbildīgie vai darbības cikli
  • vēlaties tos pārbaudīt un mēģināt vēlreiz neatkarīgi
  • nākamo posmu jāvar palaist, pirms iepriekšējais ir pabeigts

Izvēlieties vienu darbplūsmu, ja:

  • posmi ir cieši saistīti
  • tiem ir viens darbības cikls un viens stāvokļa kopums

Kā šeit iederas stāvokļu mašīna

Ja šī rakstīšanas plūsma ir daļa no ilgstošas redakcionālas sesijas, ļaujiet stāvokļu mašīnai pārvaldīt ārējo dzīves ciklu, bet izmantojiet šīs darbplūsmas ierobežotas izpildes posmiem. Tā dzīves cikla stāvokļi, piemēram, awaiting_brief, researching, awaiting_review un completed, paliek skaidri norādīti, vienlaikus saglabājot darbplūsmas noturību katrā posmā.

Viena svarīga atšķirība

Šī pieeja nozīmē:

  • X pastāv jau tagad, bet gaida Y

Tas nenozīmē:

  • X tiek izveidots tikai pēc Y pabeigšanas

Ja vēlaties otro variantu, lieciet vecākdarbplūsmai gaidīt Y un tikai pēc tam izsaukt start_workflows() vai start_agents(), lai veiktu X.