Neuron Odvisni poteki dela
Ta primer odgovarja na pogosto vprašanje o agentih:
Ali lahko en potek dela določi, da se drugi nadaljuje šele, ko se prvi konča?
Da. Pomembno je, da Queuety to že podpira z wait_for_workflow() in wait_for_workflows().
To pomeni:
- potek dela
Xje mogoče zagnati takoj Xlahko počaka vwaiting_for_workflowsXse nadaljuje šele, ko se potek delaYkonča
Primer: najprej raziskava, nato pisanje
Z enim nadrejenim potekom dela pripravite paket gradiva, z drugim pa osnutek končnega besedila.
Potek raziskave
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',
]);
Potek pisanja
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',
]);
Ko se potek pisanja začne, se takoj ustavi v waiting_for_workflows in počaka, da se potek raziskave uspešno konča.
Korak pisanja 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'] je na voljo, ker je wait_for_workflow() kopiral dokončano javno stanje iz odvisnega poteka dela v trenutni potek dela pod ključem research.
Kdaj izbrati to možnost namesto enega ogromnega poteka dela
Ločene nadrejene poteke dela izberite, kadar:
- imajo faze različne lastnike ali operativne življenjske cikle
- jih želite pregledovati in ponavljati neodvisno
- želite poznejšo fazo zagnati, še preden se prejšnja konča
En potek dela izberite, kadar:
- so faze tesno povezane
- si delijo en življenjski cikel in eno zbirko stanja
Vloga stroja stanj
Če je ta potek pisanja del dolgotrajnejše uredniške seje, naj zunanjemu življenjskemu ciklu upravlja stroj stanj, te poteke dela pa uporabite za omejene faze izvajanja. Tako bodo stanja življenjskega cikla, kot so awaiting_brief, researching, awaiting_review in completed, izrecno določena, trajnost potekov dela pa bo ohranjena znotraj posamezne faze.
Pomembna razlika
Ta vzorec pomeni:
Xobstaja že zdaj, vendar čaka naY
To ne pomeni:
Xse ustvari šele, ko jeYkončan
Če želite drugo vedenje, naj nadrejeni potek dela počaka na Y in šele nato pokliče start_workflows() ali start_agents() za X.