Neuron Priklausomos darbo eigos
Šiame pavyzdyje nagrinėjamas dažnas agentų naudojimo klausimas:
Ar viena darbo eiga gali nuspręsti, kad kita turėtų tęstis tik pasibaigus ankstesnei?
Taip. Svarbu tai, kad Queuety tai jau palaiko naudodama wait_for_workflow() ir wait_for_workflows().
Tai reiškia:
- darbo eigą
Xgalima paleisti dabar Xgali lauktiwaiting_for_workflowsXtęsiama tik pasibaigus darbo eigaiY
Pavyzdys: pirma tyrimas, tada rašymas
Vienoje aukščiausio lygio darbo eigoje parenkite tyrimo medžiagą, o kitoje – galutinio teksto juodraštį.
Tyrimo darbo eiga
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',
]);
Rašymo darbo eiga
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',
]);
Prasidėjusi rašymo darbo eiga iškart pristabdoma waiting_for_workflows, kol tyrimo darbo eiga sėkmingai baigiama.
Rašymo žingsnis 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'] pasiekiamas, nes wait_for_workflow() nukopijavo užbaigtą viešąją būseną iš priklausomos darbo eigos į dabartinę darbo eigą, naudodama raktą research.
Kada rinktis šį būdą, o ne vieną didžiulę darbo eigą
Atskiras aukščiausio lygio darbo eigas rinkitės, kai:
- etapai turi skirtingus savininkus arba veiklos gyvavimo ciklus
- norite juos tikrinti ir bandyti dar kartą nepriklausomai
- vėlesnį etapą turėtų būti galima paleisti dar nepasibaigus ankstesniam
Vieną darbo eigą rinkitės, kai:
- etapai glaudžiai susiję
- jiems bendri gyvavimo ciklas ir būsenos duomenys
Kur tinka būsenų mašina
Jei šis rašymo procesas yra ilgesnės redagavimo sesijos dalis, išorinį gyvavimo ciklą patikėkite būsenų mašinai, o šias darbo eigas naudokite ribotos trukmės vykdymo etapams. Taip gyvavimo ciklo būsenos, tokios kaip awaiting_brief, researching, awaiting_review ir completed, lieka aiškios, o kiekviename etape išsaugomas darbo eigos patikimumas.
Vienas svarbus skirtumas
Šis šablonas reiškia:
Xjau egzistuoja, bet laukiaY
Tai nereiškia:
Xsukuriama tik užbaigusY
Jei reikia antrojo elgesio, nustatykite, kad tėvinė darbo eiga lauktų Y, ir tik tada iškviestų start_workflows() arba start_agents(), skirtą X.