Neuron Függő munkafolyamatok
Ez a példa egy gyakori, ügynökalapú kérdésre ad választ:
Dönthet úgy egy munkafolyamat, hogy egy másik csak egy korábbi munkafolyamat befejeződése után folytatódjon?
Igen. Fontos tudni, hogy a Queuety ezt már támogatja a wait_for_workflow() és a wait_for_workflows() segítségével.
Ez azt jelenti, hogy:
- a
Xmunkafolyamat most indítható - a
Xvárakozhat awaiting_for_workflowsállapotban - a
Xcsak akkor folytatódik, amikor aYmunkafolyamat befejeződik
Példa: előbb kutatás, aztán írás
Használj egy felső szintű munkafolyamatot a kutatási anyag összeállításához, egy másikat pedig a végleges szöveg megírásához.
Kutatási munkafolyamat
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',
]);
Írási munkafolyamat
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',
]);
Amikor az írási munkafolyamat elindul, azonnal szüneteltetett állapotba kerül a waiting_for_workflows ponton, amíg a kutatási munkafolyamat sikeresen be nem fejeződik.
A Neuron írási lépés
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 [];
}
}
A $state['research'] azért érhető el, mert a wait_for_workflow() a függőségi munkafolyamat befejezett nyilvános állapotát a research kulcs alatt átmásolta az aktuális munkafolyamatba.
Mikor válaszd ezt egyetlen óriási munkafolyamat helyett
Válassz külön felső szintű munkafolyamatokat, ha:
- a szakaszoknak más a felelőse vagy az üzemeltetési életciklusa
- külön szeretnéd megvizsgálni és újraindítani őket
- a későbbi szakaszt már az előző befejezése előtt el kell tudni indítani
Egyetlen munkafolyamatot válassz, ha:
- a szakaszok szorosan összekapcsolódnak
- közös életciklusuk és állapotuk van
Hogyan illeszkedik ide az állapotgép
Ha ez az írási folyamat egy hosszabb életű szerkesztőségi munkamenet része, bízd a állapotgépre a külső életciklus kezelését, és használd ezeket a munkafolyamatokat a körülhatárolt végrehajtási szakaszokhoz. Így az olyan életciklus-állapotok, mint a awaiting_brief, researching, awaiting_review és completed egyértelműek maradnak, miközben az egyes fázisokban megőrzöd a munkafolyamat tartósságát.
Egy fontos különbség
Ez a minta azt jelenti, hogy:
- a
Xmár létezik, de aYértékre vár
Ez nem azt jelenti, hogy:
- a
Xcsak aYbefejeződése után jön létre
Ha a második viselkedést szeretnéd, egy szülő munkafolyamat várjon a Y értékre, és csak ezután hívja meg a start_workflows() vagy a start_agents() elemet a X céljából.