Laravel AI Tasks - це пакет, який розташовується поверх Laravel AI SDK, використовуючи його як транспортний рівень і додаючи навколо нього операційні компоненти. Ви визначаєте AI-роботу як багаторазові класи завдань, а потім виконуєте їх синхронно, відправляєте у чергу або стрімите відповідь - з аудит-логуванням, бюджетами на рівні орендарів і дашбордом, що відстежує кожен запуск.
Ключові можливості пакету
Пакет охоплює наступний функціонал:
- Багаторазові класи завдань, які об'єднують промпт, системне повідомлення та постобробку в єдиний об'єкт
- Три режими виконання - синхронний, черговий та потоковий з callback-функціями для фрагментів
- Дашборд за адресою
/ai-tasks, що відображає список запусків з кількістю токенів, вартістю та деталями запиту/відповіді
- Підтримка кількох провайдерів: OpenAI, Anthropic, Gemini, DeepSeek, Groq, Mistral, xAI та Ollama, з можливістю перемикання під час виконання та ланцюгами резервних варіантів
- Відстеження витрат та бюджети з цінами для кожного провайдера та лімітами витрат для мультиорендарних систем
- Ідемпотентні чергові завдання, що дедуплікуються за унікальним ключем
- Інтеграція з інструментами та MCP, кешування промптів Anthropic та JSON-режим для структурованого виводу
Дашборд Laravel AI Tasks за адресою /ai-tasks відображає кожен запуск з використанням токенів, вартістю, тривалістю та статусом, включаючи загальну кількість за сьогодні, успішні виконання, помилки та щомісячні витрати.
Визначення завдання
Завдання розширює клас AiTask і описує свій payload. Метод toPayload() будує повідомлення та опції, що надсилаються провайдеру, а postprocess() надає hook для формування відповіді перед її поверненням:
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;
Постановка в чергу повертає ідентифікатор запуску, який можна відстежити через дашборд, а потокове виконання викликає callback для кожного фрагмента в міру його надходження:
$runId = AI::queue(new SummarizeTask($text));
$response = AI::stream(new SummarizeTask($text), function (string $chunk) {
echo $chunk;
});
Чергові завдання підтримують ключі ідемпотентності, тому дублікат відправлення дедуплікується, а не виконується двічі.
Відстеження витрат та бюджети
Ціноутворення налаштовується для кожного провайдера та моделі, і пакет обчислює вартість кожного виклику після його завершення. Ці дані живлять мультиорендарні бюджетні ліміти, тому ви можете встановити щомісячний ліміт витрат на організацію та моніторити використання по облікових записах. Кожен запуск - запит, відповідь, використання токенів та вартість - записується і доступний для перегляду за адресою /ai-tasks.
Ви можете знайти вихідний код та повну документацію на GitHub.