Урок 02

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 для проверки
  • Улучшение только при необходимости