Prompt Chaining: цепочка агентов
Выход одного агента — вход следующего. Каждый шаг делает одно хорошо.
Пример: холодное письмо
Три шага: черновик → проверка → улучшение.
use Laravel\Ai\Pipeline;
$result = Pipeline::send([
'company' => $company,
'role' => $role,
'email' => '',
'review' => [],
])
->through([
fn ($payload, $next) => $next([...$payload, 'email' => $this->draftAgent($payload)]),
fn ($payload, $next) => $next([...$payload, 'review' => $this->reviewAgent($payload)]),
fn ($payload, $next) => $next($this->improveAgent($payload)),
])
->thenReturn();
Агент 1: черновик
use function Laravel\Ai\agent;
private function draftAgent(array $payload): string
{
return agent(instructions: 'Expert B2B copywriter. Write a concise, personalised cold email.')
->prompt("Draft a cold email targeting the {$payload['role']} at {$payload['company']}.");
}
Агент 2: проверка (structured output)
private function reviewAgent(array $payload): mixed
{
return agent(
instructions: 'Cold email quality analyst. Be strict.',
schema: fn (JsonSchema $schema) => [
'hasPersonalisation' => $schema->boolean()->required(),
'toneScore' => $schema->integer()->min(1)->max(10)->required(),
'callToActionStrength' => $schema->integer()->min(1)->max(10)->required(),
],
)->prompt($payload['email']);
}
Агент 3: улучшение
private function improveAgent(array $payload): array
{
$review = $payload['review'];
if ($review['hasPersonalisation'] && $review['toneScore'] >= 7 && $review['callToActionStrength'] >= 7) {
return $payload;
}
return [...$payload, 'email' => agent(instructions: 'Expert copywriter.')
->prompt("Rewrite with better personalisation and CTA:\n{$payload['email']}")];
}
Когда использовать
- Чёткая последовательность: генерация → проверка → улучшение
- Каждый шаг делает одну работу хорошо
Итоги
Pipeline::send()->through()->thenReturn()- Каждый шаг — отдельный агент
- Structured output для проверки
- Улучшение только при необходимости