Neuron Atmiņas un pārskatīšanas stāvokļu mašīna
Šī pieeja noder, ja aģentam jāsaglabā sarunas konteksts vairākās cilvēka veiktās pārskatīšanas kārtās, bet kopējais dzīves cikls joprojām jāorķestrē Queuety.
Queuety pārvalda pārskatīšanas stāvokļu mašīnu, savukārt Neuron uztur aģenta atmiņu melnraksta sarunas pavedienam.
Kāpēc šeit noder Neuron atmiņa
Ja recenzents noraida melnrakstu un lūdz to pārstrādāt, nākamajam aģenta izsaukumam nevajadzētu no jauna rekonstruēt visu kontekstu.
Neuron SQLChatHistory tam ir piemērots, jo aģents var turpināt darbu tajā pašā sarunas pavedienā, kamēr Queuety apstrādā recenzenta lēmumus un pārskatīšanas kārtas.
Aģents Neuron ar SQL uzturētu vēsturi
namespace App\Neuron;
use NeuronAI\Agent\Agent;
use NeuronAI\Chat\History\ChatHistoryInterface;
use NeuronAI\Chat\History\SQLChatHistory;
use NeuronAI\Providers\AIProviderInterface;
use NeuronAI\Providers\Anthropic\Anthropic;
use NeuronAI\SystemPrompt;
final class EditorAgent extends Agent
{
public function __construct(
private readonly string $threadId,
private readonly \PDO $pdo,
) {}
protected function provider(): AIProviderInterface
{
return new Anthropic(
key: $_ENV['ANTHROPIC_API_KEY'],
model: $_ENV['ANTHROPIC_MODEL'],
);
}
protected function chatHistory(): ChatHistoryInterface
{
return new SQLChatHistory(
thread_id: $this->threadId,
pdo: $this->pdo,
table: 'neuron_chat_history',
contextWindow: 50000,
);
}
public function instructions(): string
{
return (string) new SystemPrompt(
background: [
'You are an editorial agent for long-form product briefs.',
'Apply reviewer notes without losing the original intent.',
],
);
}
}
Izveidojiet melnrakstu un pārstrādājiet to ar to pašu atmiņas pavedienu
namespace App\StateMachines\Actions;
use App\Neuron\EditorAgent;
use NeuronAI\Chat\Messages\UserMessage;
use Queuety\Contracts\StateAction;
final class DraftBriefAction implements StateAction
{
public function handle(array $state, ?string $event = null, array $event_payload = [], array $payload = []): array|string
{
// Queuety creates actions with `new DraftBriefAction()`, so build dependencies here.
$pdo = new \PDO($_ENV['NEURON_DB_DSN'], $_ENV['NEURON_DB_USER'], $_ENV['NEURON_DB_PASSWORD']);
$threadId = $state['neuron_thread_id'] ?? sprintf(
'brief:%d:editor',
$state['brief_id'],
);
$prompt = "Write the first draft for brief {$state['brief_id']}.";
if ('reject' === $event) {
$prompt = sprintf(
'Revise the draft using these review notes: %s',
$event_payload['reason'] ?? 'Tighten the draft and address reviewer concerns.',
);
}
$agent = new EditorAgent($threadId, $pdo);
$message = $agent->chat(
new UserMessage($prompt)
)->getMessage();
return [
'neuron_thread_id' => $threadId,
'draft_markdown' => $message->getContent(),
'review_round' => (int) ($state['review_round'] ?? 0) + 1,
'_event' => 'draft_ready',
];
}
}
Queuety stāvokļu mašīna
use Queuety\Enums\StateMachineStatus;
use Queuety\Queuety;
$machine_id = Queuety::machine('brief_review_session')
->version('brief-review-session.v1')
->state('drafting')
->action(DraftBriefAction::class)
->on('draft_ready', 'awaiting_review')
->state('awaiting_review')
->on('approve', 'completed')
->on('reject', 'drafting')
->state('completed', StateMachineStatus::Completed)
->dispatch([
'brief_id' => 42,
]);
// Later, once the draft action has finished and the machine waits in `awaiting_review`:
Queuety::machine_event(
$machine_id,
'reject',
[ 'reason' => 'Tighten the introduction and add pricing context.' ]
);
Queuety::machine_event(
$machine_id,
'approve',
[ 'reviewer' => 'editor@example.com' ]
);
Pirmais mēģinājums nonāk stāvoklī drafting, izpilda rindā ievietoto darbību un pāriet uz awaiting_review.
Ja recenzents noraida melnrakstu, mašīna atgriežas stāvoklī drafting. Tā kā reject notikuma dati tiek nodoti DraftBriefAction, nākamajā melnrakstā var izmantot recenzenta piezīmes, nezaudējot sākotnējo Neuron pavediena vēsturi.
Kāpēc šī pieeja ir vienkāršāka par darbplūsmas atkārtošanu
Šī problēma ir saistīta ar dzīves ciklu. Melnraksts gaida cilvēka pārskatīšanu, recenzents var to apstiprināt vai noraidīt, noraidījums atgriež sesiju pie melnraksta veidošanas, bet apstiprinājums sesiju pabeidz. Tas vairāk atbilst stāvokļu mašīnai nekā lineārai darbplūsmai ar atgriezenisku pāreju.
Darbplūsmas stāvoklis joprojām ir lieliski piemērots orķestrēšanas datiem, piemēram, pārskatīšanas kārtu skaitam, artefaktu ID, darbplūsmu ID un maršrutēšanas lēmumiem. Neuron atmiņa labāk noder sarunas kontekstam, piemēram, iepriekšējām uzvednēm, iteratīvām izmaiņām un modeļa atbildēm, kam jāsaglabājas melnraksta veidošanas pavedienā.
Izmantojot abas sistēmas, katra veic tai vispiemērotāko uzdevumu.
Kad šo labāk veidot kā darbplūsmu
Izvēlieties darbplūsmu, ja pārskatīšanas process ir stingri ierobežots un orientēts uz izpildi, piemēram:
Izveidojiet vienu melnrakstu, gaidiet vienu apstiprinājumu un publicējiet.
Izvēlieties stāvokļu mašīnu, ja sesija var vairākas reizes atgriezties tajos pašos stāvokļos un dzīves ciklu nosaka ārēji notikumi.