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
Xsaab kohe käivitada Xsaab jääda olekussewaiting_for_workflowsXjätkub alles siis, kui töövoogYon 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
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
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
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:
Xon juba olemas, kuid ootabY-i
See ei tähenda järgmist:
Xluuakse alles pärastY-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().