Laravel AI Tasks — це пакет, побудований над Laravel AI SDK. Він використовує SDK як транспортний рівень, додаючи інструменти для зручного керування операційними процесами.
Ви описуєте роботу ШІ як класи завдань, що можна використовувати повторно. Їх можна виконувати синхронно, надсилати в чергу або отримувати відповідь у форматі стрімінгу. Пакет забезпечує аудит, бюджетування для кожного tenant та зручний Dashboard для моніторингу кожного запиту.
Основні можливості:
- Багаторазові класи завдань, що об’єднують промпт, системне повідомлення та постобробку в один об’єкт.
- Три режими виконання — синхронний, через чергу (queued) та стрімінг із callback-функціями для чанків.
- Дашборд за адресою
/ai-tasksіз переліком запусків, підрахунком токенів, вартістю та деталями запитів і відповідей. - Підтримка багатьох провайдерів: OpenAI, Anthropic, Gemini, DeepSeek, Groq, Mistral, xAI та Ollama з можливістю перемикання в runtime та ланцюжками fallback.
- Трекінг витрат та бюджети з ціноутворенням для кожного провайдера та лімітами витрат для мультитенентних систем.
- Ідемпотентні завдання в черзі, що запобігають дублюванню за унікальним ключем.
- Інтеграція з Tools та MCP, кешування промптів Anthropic та підтримка JSON mode для структурованого виводу.
/ai-tasks відображає детальну статистику кожного запуску: токени, вартість, тривалість та статус.# Опис завдання
Клас завдання успадковує AiTask і визначає логіку запиту. Метод toPayload() формує повідомлення та опції для провайдера, а postprocess() дозволяє обробити відповідь перед її поверненням:
namespace App\Ai\Tasks;
use Laravel\Ai\Messages\UserMessage;
use Fomvasss\AiTasks\DTO\AiPayload;
use Fomvasss\AiTasks\DTO\AiResponse;
use Fomvasss\AiTasks\Tasks\AiTask;
class SummarizeTask extends AiTask
{
public function __construct(private readonly string $text) {}
public function modality(): string { return 'text'; }
public function toPayload(): AiPayload
{
return new AiPayload(
modality: $this->modality(),
messages: [new UserMessage("Summarize: {$this->text}")],
systemPrompt: 'Reply in 3 sentences max.',
options: ['temperature' => 0.3],
);
}
public function postprocess(AiResponse $response): AiResponse|array
{
return $response;
}
}
# Три способи запуску
Фасад AI дозволяє запускати одне й те саме завдання синхронно, через чергу або як стрімінг. Синхронне виконання повертає об’єкт відповіді безпосередньо:
use Fomvasss\AiTasks\Facades\AI;
$response = AI::send(new SummarizeTask($text));
echo $response->content;
Метод queue() повертає ID запуску для відстеження в дашборді, а stream() викликає callback для кожного нового фрагмента тексту:
$runId = AI::queue(new SummarizeTask($text));
$response = AI::stream(new SummarizeTask($text), function (string $chunk) {
echo $chunk;
});
Завдання в черзі підтримують ключі ідемпотентності, тому повторний запуск із тим самим ключем буде проігнорований.
# Контроль витрат і ліміти
Вартість налаштовується для кожного провайдера та моделі окремо. Пакет автоматично розраховує ціну кожного виклику після його завершення. Ці дані використовуються для контролю бюджетів, що дозволяє обмежувати місячні витрати для кожного tenant. Історія запитів, використання токенів та фінансові показники доступні в інтерфейсі /ai-tasks.
Вихідний код та повна документація доступні на GitHub.