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
Xvar palaist tagad Xvar gaidītwaiting_for_workflowsXatsāk darbu tikai tad, kadYdarbplū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
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
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
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ē:
Xpastāv jau tagad, bet gaidaY
Tas nenozīmē:
Xtiek izveidots tikai pēcYpabeigš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.