Neuron Workflow Bergantung
Contoh ini menjawab pertanyaan umum tentang agen:
Bisakah satu workflow memutuskan bahwa workflow lain hanya boleh melanjutkan setelah workflow sebelumnya selesai?
Bisa. Nuansa pentingnya, Queuety sudah mendukung hal ini dengan wait_for_workflow() dan wait_for_workflows().
Artinya:
- workflow
Xdapat dikirim sekarang Xdapat menunggu diwaiting_for_workflowsXhanya dilanjutkan kembali setelah workflowYselesai
Contoh: riset terlebih dahulu, penulisan berikutnya
Gunakan satu workflow tingkat atas untuk menyusun paket riset, dan workflow tingkat atas kedua untuk membuat draf akhir.
Workflow riset
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',
]);
Workflow penulisan
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',
]);
Saat workflow penulisan dimulai, workflow tersebut langsung dijeda di waiting_for_workflows hingga workflow riset berhasil diselesaikan.
Langkah penulisan 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'] tersedia karena wait_for_workflow() menyalin status publik yang telah selesai dari workflow dependensi ke workflow saat ini di bawah kunci research.
Kapan memilih ini daripada satu workflow besar
Pilih workflow tingkat atas terpisah jika:
- tahap-tahapnya memiliki pemilik atau siklus operasional yang berbeda
- Anda ingin memeriksa dan mencoba ulang tiap tahap secara terpisah
- tahap berikutnya perlu dapat dikirim sebelum tahap sebelumnya selesai
Pilih satu workflow jika:
- tahap-tahapnya saling terkait erat
- tahap-tahapnya berbagi satu siklus hidup dan satu wadah status
Peran mesin status
Jika alur penulisan ini merupakan bagian dari sesi editorial yang berumur panjang, biarkan mesin status mengelola siklus hidup di lapisan luar dan gunakan workflow ini untuk tahap eksekusi yang terbatas. Dengan begitu, status siklus hidup seperti awaiting_brief, researching, awaiting_review, dan completed tetap eksplisit, sementara ketahanan workflow di setiap fase tetap terjaga.
Satu perbedaan penting
Pola ini berarti:
Xsekarang sudah ada, tetapi menungguY
Ini tidak berarti:
Xbaru dibuat setelahYselesai
Jika Anda menginginkan perilaku kedua, buat workflow induk menunggu Y, lalu panggil start_workflows() atau start_agents() untuk X.