Liigu sisu juurde

Neuron sõltuvad töövood

See näide vastab levinud agentpõhise süsteemi küsimusele:

Kas üks töövoog saab otsustada, et teine töövoog jätkab alles pärast varasema töövoo lõppemist?

Jah. Oluline nüanss on see, et Queuety toetab seda juba valikutega wait_for_workflow() ja wait_for_workflows().

See tähendab, et:

  • töövoo X saab kohe käivitada
  • X saab jääda olekusse waiting_for_workflows
  • X jätkub alles siis, kui töövoog Y on lõppenud

Näide: kõigepealt uurimine, seejärel kirjutamine

Kasutage üht tipptaseme töövoogu uurimismaterjalide koostamiseks ja teist lõpliku teksti mustandi kirjutamiseks.

Uurimistöövoog

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',
    ]);

Kirjutamistöövoog

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',
    ]);

Kirjutamistöövoo käivitumisel peatub see kohe olekus waiting_for_workflows, kuni uurimistöövoog on edukalt lõppenud.

Neuron kirjutamisetapp

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'] on saadaval, sest wait_for_workflow() kopeeris sõltuvustöövoo lõpetatud avaliku oleku praegusesse töövoogu võtme research alla.

Millal kasutada seda ühe suure töövoo asemel

Eelistage eraldi tipptaseme töövooge, kui:

  • etappidel on erinevad omanikud või käitustsüklid
  • soovite neid eraldi kontrollida ja uuesti käivitada
  • hilisema etapi saab käivitada juba enne varasema lõppemist

Eelistage üht töövoogu, kui:

  • etapid on tihedalt seotud
  • neil on ühine elutsükkel ja olekukomplekt

Kuhu sobitub olekumasin

Kui see kirjutamisvoog kuulub pikemaajalisse toimetamisseanssi, laske olekumasinal hallata välist elutsüklit ning kasutage neid töövooge piiritletud täitmisetappideks. Nii jäävad elutsükli olekud, nagu awaiting_brief, researching, awaiting_review ja completed, selgesõnaliseks, säilitades samal ajal iga etapi töövoo vastupidavuse.

Üks oluline eristus

See muster tähendab järgmist:

  • X on juba olemas, kuid ootab Y-i

See ei tähenda järgmist:

  • X luuakse alles pärast Y-i lõpetamist

Kui soovite teist käitumist, pange ematöövoog ootama Y-i ning kutsuge alles seejärel X jaoks start_workflows() või start_agents().