Neuron Riippuvaiset työnkulut
Tässä esimerkissä käsitellään yleistä agenttijärjestelmiin liittyvää kysymystä:
Voiko yksi työnkulku päättää, että toinen saa jatkaa vasta aiemman työnkulun valmistuttua?
Kyllä. Keskeinen huomio on, että Queuety tukee tätä jo valmiiksi wait_for_workflow()- ja wait_for_workflows()-toiminnoilla.
Tämä tarkoittaa, että:
- työnkulku
Xvoidaan käynnistää nyt Xvoi jäädä odottamaan tilaanwaiting_for_workflowsXjatkuu vasta, kun työnkulkuYon valmis
Esimerkki: ensin tutkimus, sitten kirjoittaminen
Käytä yhtä ylimmän tason työnkulkua tutkimuspaketin kokoamiseen ja toista lopullisen tekstin luonnosteluun.
Tutkimuksen työnkulku
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',
]);
Kirjoittamisen työnkulku
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',
]);
Kun kirjoittamisen työnkulku käynnistyy, se keskeytyy heti tilaan waiting_for_workflows, kunnes tutkimuksen työnkulku on suoritettu onnistuneesti.
Neuron kirjoitusvaihe
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 käytettävissä, koska wait_for_workflow() kopioi riippuvuustyönkulun valmiin julkisen tilan nykyiseen työnkulkuun avaimella research.
Milloin tämä kannattaa valita yhden suuren työnkulun sijaan
Suosi erillisiä ylimmän tason työnkulkuja, kun:
- vaiheilla on eri omistajat tai operatiiviset elinkaaret
- haluat tarkastella ja yrittää niitä uudelleen itsenäisesti
- myöhempi vaihe voidaan käynnistää jo ennen aiemman valmistumista
Suosi yhtä työnkulkua, kun:
- vaiheet liittyvät tiiviisti toisiinsa
- niillä on yhteinen elinkaari ja tilakokonaisuus
Tilakoneen rooli
Jos tämä kirjoitusprosessi kuuluu pitkäikäisempään toimitukselliseen istuntoon, anna tilakoneen hallita ulompaa elinkaarta ja käytä näitä työnkulkuja rajattuihin suoritusvaiheisiin. Näin elinkaaren tilat, kuten awaiting_brief, researching, awaiting_review ja completed, pysyvät selkeinä ja työnkulun kestävyys säilyy kussakin vaiheessa.
Yksi tärkeä ero
Tämä toimintamalli tarkoittaa, että:
Xon jo olemassa, mutta odottaa kohdettaY
Se ei tarkoita, että:
Xluodaan vasta, kunYon valmis
Jos haluat jälkimmäisen toimintatavan, määritä ylätyönkulku odottamaan kohdetta Y ja kutsumaan vasta sen jälkeen kohdetta start_workflows() tai start_agents() kohteelle X.