Neuron Εξαρτημένες ροές εργασιών
Αυτό το παράδειγμα απαντά σε ένα συνηθισμένο ερώτημα σχετικά με agent:
Μπορεί μια ροή εργασιών να αποφασίσει ότι μια άλλη θα συνεχίσει μόνο αφού ολοκληρωθεί μια προηγούμενη;
Ναι. Η σημαντική λεπτομέρεια είναι ότι το Queuety το υποστηρίζει ήδη με τα wait_for_workflow() και wait_for_workflows().
Αυτό σημαίνει ότι:
- Η ροή εργασιών
Xμπορεί να αποσταλεί τώρα - Η
Xμπορεί να περιμένει στοwaiting_for_workflows - Η
Xσυνεχίζει μόνο όταν ολοκληρωθεί η ροή εργασιώνY
Παράδειγμα: πρώτα έρευνα, μετά σύνταξη
Χρησιμοποιήστε μία ροή εργασιών ανώτατου επιπέδου για να δημιουργήσετε ένα πακέτο έρευνας και μια δεύτερη για να συντάξετε το τελικό κείμενο.
Ροή εργασιών έρευνας
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',
]);
Ροή εργασιών σύνταξης
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',
]);
Όταν ξεκινά η ροή εργασιών σύνταξης, διακόπτεται αμέσως στο waiting_for_workflows έως ότου ολοκληρωθεί επιτυχώς η ροή εργασιών έρευνας.
Το βήμα σύνταξης 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'] είναι διαθέσιμο επειδή το wait_for_workflow() αντέγραψε την ολοκληρωμένη δημόσια κατάσταση από την εξαρτώμενη ροή εργασιών στην τρέχουσα ροή εργασιών, με το κλειδί research.
Πότε να το χρησιμοποιήσετε αντί για μία τεράστια ροή εργασιών
Προτιμήστε ξεχωριστές ροές εργασιών ανώτατου επιπέδου όταν:
- τα στάδια έχουν διαφορετικούς υπευθύνους ή λειτουργικούς κύκλους ζωής
- θέλετε να τα επιθεωρείτε και να επαναλαμβάνετε την εκτέλεσή τους ανεξάρτητα
- ένα μεταγενέστερο στάδιο πρέπει να μπορεί να αποσταλεί πριν ολοκληρωθεί το προηγούμενο
Προτιμήστε μία ροή εργασιών όταν:
- τα στάδια συνδέονται στενά
- μοιράζονται έναν κύκλο ζωής και ένα σύνολο κατάστασης
Ο ρόλος μιας μηχανής καταστάσεων
Αν αυτή η ροή σύνταξης ανήκει σε μια συνεδρία σύνταξης μεγάλης διάρκειας, αφήστε μια μηχανή καταστάσεων να διαχειρίζεται τον εξωτερικό κύκλο ζωής και χρησιμοποιήστε αυτές τις ροές εργασιών για τα στάδια εκτέλεσης με σαφή όρια. Έτσι, καταστάσεις κύκλου ζωής όπως οι awaiting_brief, researching, awaiting_review και completed παραμένουν σαφείς, διατηρώντας παράλληλα την ανθεκτικότητα των ροών εργασιών σε κάθε φάση.
Μια σημαντική διάκριση
Αυτό το μοτίβο σημαίνει ότι:
- Το
Xυπάρχει ήδη, αλλά περιμένει τοY
Δεν σημαίνει ότι:
- Το
Xδημιουργείται μόνο αφού ολοκληρωθεί τοY
Αν θέλετε τη δεύτερη συμπεριφορά, βάλτε μια γονική ροή εργασιών να περιμένει το Y και μόνο τότε να καλεί το start_workflows() ή το start_agents() για το X.