Пройшло деякий час з тих пір, як я написав статтю. Я маю на увазі, чому б я? Ви закликаєте AI про тему, і він вип'є все, що вам потрібно. Це кінда вбило радість для мене, я в кінцевому підсумку написав як 10 статей, але ніколи не публікуючи жодної з них. Сьогодні я говорю про це (іронія). Я тільки що випустив новий пакет, Laravel Boost, який, в основному, робить AI менше. Це робить його більш детерміністичним, надаючи йому правила та додатковий контекст, щоб слідувати. Тому що так, основні бар'єри LLM (принаймні з мого повсякденного використання) - це швидкість і . Ларавель Контекст WTF є MCP Я не буду викладати вам про швидку інженерію; там вже є тонни ресурсів. . context LLM навчаються на масивних наборах даних, і ці набори даних є їх орієнтовним пунктом. Наприклад, якщо дані навчання йдуть тільки до 2023 року, і ви запитуєте про сьогоднішню погоду, у нього не буде підказки. Ми посилюємо LLM, даючи їм сучасний контекст, через інструменти. Ви, ймовірно, використовували це, навіть не усвідомлюючи цього. Запитайте LLM про останні новини, і ви побачите "пошук в Інтернеті". Це інструмент в дії, що годує AI свіжими даними, щоб він міг відповісти вам. Але "пошук в Інтернеті" - це тільки вбудований інструмент. Якщо ви запитали його про свій останній квиток Jira, він не знав би. І подумайте про це, провайдери, такі як OpenAI або Anthropic, не можуть створювати інструменти для кожної можливої потреби. Наприклад, ви можете захотіти, щоб ваш LLM запитував внутрішні дані компанії. Це те, де приходить ідея принести свій власний інструмент. LLM може викликати ваш інструмент, отримати дані, які йому потрібні, і потім відповісти. Настільки чисто, що Anthropic запровадив протокол модельного контексту (MCP), щоб задокументувати це. Він стандартизує, як LLM називають інструменти, як ви вставляєте інструменти в них, і як вони отримують більше контексту. Так, якщо ви ніколи не чули про MCP, добре, ми просто охопили їх. На основі, вони просто тонкий шар, який дозволяє LLM використовувати інструменти (наприклад, інструмент "пошук веб") для захоплення більше контексту. МЗС також робить трохи більше. МЗС також робить трохи більше. І ці інструменти можуть бути будь-якими: виклики API, виклики системи, виклики методу, що завгодно. до тих пір, поки вони можуть дати відповідь назад до LLM, модель може використовувати його для завершення завдання. Тепер ви знаєте про MCP. Ви можете прочитати більше про них . Тут Що таке Laravel Boost? Таким чином, Laravel Boost в основному є MCP-сервером, який викриває набір інструментів. Ці інструменти обертаються навколо екосистеми Laravel, такі речі, як читання маршрутів, перевірка журналів або пошук доксів Laravel. Таким чином, коли ви просите LLM виправити вашу коду SaaS, вона може вирішити, який інструмент використовувати.Хоча ніщо не гарантовано, LLM може бути куркою і просто ігнорувати інструменти, створюючи метод, який ніколи не існував 🏽. І тоді ви скасуєте зміну, здивуєтеся, знову поспішайте, і справляєтеся з "вибачте, ви абсолютно праві"... І тоді ви скасуєте зміну, здивуєтеся, знову поспішайте, і справляєтеся з "вибачте, ви абсолютно праві"... Я не буду розкривати, як його встановити; вже є офіційний , а До речі, у нас є багато спільнот, і я трохи запізнився на вечірку. YouTube Відео Епізод Laracasts Хочу показати вам, як Ларавель Буст Підвищення Чому Ларавель Буст? Підвищення Підвищення Boost дозволяє надати вашій програмі "ціль", в основному опис вашого продукту, щоб AI знав контекст. Це програма SaaS, яка надає X-послуги і т.д. Це програма SaaS, яка надає X-послуги і т.д. Ви знаєте свою продукцію найкращий друг. Для початку переконайтеся, що ви опублікували Config Boost: php artisan vendor:publish --tag=boost-config На момент написання конфіг-файл виглядає так: <?php declare(strict_types=1); return [ /* |-------------------------------------------------------------------------- | Boost Master Switch |-------------------------------------------------------------------------- | | This option may be used to disable all Boost functionality, which | simply provides a single and convenient way to enable or disable | Boost's AI development tools. | */ 'enabled' => env('BOOST_ENABLED', true), /* |-------------------------------------------------------------------------- | Boost Browser Logs Watcher |-------------------------------------------------------------------------- | | The following option may be used to enable or disable the browser logs | watcher feature within Laravel Boost. The log watcher will read any | errors within the browser's console to give Boost better context. */ 'browser_logs_watcher' => env('BOOST_BROWSER_LOGS_WATCHER', true), ]; Щоб додати мету застосування, про яку ми тільки що говорили, відкиньте новий запис в конфігурації: // omitted for breivety 'purpose' => 'Describe your application purpose' Для того, щоб це набуло чинності, вам потрібно буде перегенерувати рекомендації: php artisan boost:install У опублікованих рекомендаціях, наприклад, якщо ви використовуєте курсор, ви знайдете свою мету (я сподіваюся, що ми всі робимо lol) в в розділі «Фундаментальний контекст». .cursor/rules/laravel-boost.mdc Менше є більше Підсиліть кораблі за допомогою 15+ інструментів, але залежно від вашого додатка вам можуть не знадобитися всі вони. За допомогою інструменту, ви врятуєтеся від фронтового пекла. та LLM може просто читати конфігурації безпосередньо, не стрибаючи через ці гайки. BrowserLogs GetConfig ListAvailableConfigKeys Tweak на Конфігурація : boost.php <?php use Laravel\Boost\Mcp\Tools\GetConfig; use Laravel\Boost\Mcp\Tools\BrowserLogs; use Laravel\Boost\Mcp\Tools\ListAvailableConfigKeys; // omitted for breivety 'mcp' => [ 'tools' => [ 'exclude' => [BrowserLogs::class, GetConfig::class, ListAvailableConfigKeys::class], ], ], Бум, 3 інструменти зникли І так само, як виключаючи інструменти, ви можете додати свої власні. Наприклад, мені подобається мати інструмент, який перераховує всі зареєстровані події в додатку. Якщо ви тягнете в пакети третіх сторін, це полегшує LLM виявляти події, в які він може зв'язатися, замість того, щоб будувати додаткову логіку або розширювати класи. Під капотом, Boost використовує новий пакет першої сторони, , який обробляє створення інструментів і всі цікаві речі. Ви можете створити новий інструмент з: laravel/mcp php artisan make:mcp-tool ListEvents Код інструменту для переліку подій виглядає так: <?php namespace App\Mcp\Tools; use Illuminate\Support\Facades\Artisan; use Laravel\Mcp\Server\Tool; use Laravel\Mcp\Server\Tools\Annotations\IsReadOnly; use Laravel\Mcp\Server\Tools\ToolInputSchema; use Laravel\Mcp\Server\Tools\ToolResult; use Symfony\Component\Console\Command\Command as CommandAlias; use Symfony\Component\Console\Output\BufferedOutput; #[IsReadOnly] class ListEvents extends Tool { public function description(): string { return 'List all available events defined in the application'; } public function schema(ToolInputSchema $schema): ToolInputSchema { return $schema; } /** * @param array<string> $arguments */ public function handle(array $arguments): ToolResult { $eventsOutput = $this->artisan('event:list'); return ToolResult::text($eventsOutput); } /** * @param array<string|bool> $options */ private function artisan(string $command, array $options = []): string { $output = new BufferedOutput; $result = Artisan::call($command, $options, $output); if ($result !== CommandAlias::SUCCESS) { return 'Failed to list routes: '.$output->fetch(); } return trim($output->fetch()); } } Потім зареєструйте його, ви гадаєте, в конфіг файлі: <?php use App\Mcp\Tools\ListEvents; use Laravel\Boost\Mcp\Tools\GetConfig; use Laravel\Boost\Mcp\Tools\BrowserLogs; use Laravel\Boost\Mcp\Tools\ListAvailableConfigKeys; // omitted for breivty 'mcp' => [ 'tools' => [ 'exclude' => [BrowserLogs::class, GetConfig::class, ListAvailableConfigKeys::class], 'include' => [ListEvents::class], // include the tool ], ], І саме так, ви додали спеціальний інструмент. Порада: MCP-сервер Boost використовується з інспектором, так що ви можете випробувати нові інструменти відразу. Порада: MCP-сервер Boost використовується з інспектором, так що ви можете випробувати нові інструменти відразу. php artisan mcp:inspector laravel-boost Ви побачите всі доступні інструменти, випробуєте їх і т.д. Не дзвони мені, не приходь до мене додому Якщо ви використовуєте модульну монолітну архітектуру з каталог... погані новини: Boost тільки перевіряє енуми, моделі та контролери всередині . modules/ app/ Було б добре, якби був рідний спосіб налаштувати це, але до того часу ми робимо це самі. Все, що вам потрібно зробити, це закріпити За своїм звичаєм Що таке сканування або в будь-якому місці Laravel\Boost\Install\GuidelineAssist GuidelineAssist modules/ Ваші звичні рекомендації можуть виглядати так: <?php declare(strict_types=1); namespace App\Support; use Illuminate\Database\Eloquent\Model; use Laravel\Boost\Install\GuidelineAssist; use ReflectionClass; use Symfony\Component\Finder\Finder; class CustomGuidelineAssist extends GuidelineAssist { public function __construct() { $this->modelPaths = $this->discover(fn ($reflection) => ($reflection->isSubclassOf(Model::class) && ! $reflection->isAbstract())); $this->controllerPaths = $this->discover(fn (ReflectionClass $reflection) => (stripos($reflection->getName(), 'controller') !== false || stripos($reflection->getNamespaceName(), 'controller') !== false)); $this->enumPaths = $this->discover(fn ($reflection) => $reflection->isEnum()); } private function discover(callable $cb): array { $classes = []; if (empty(self::$classes)) { $finder = Finder::create() ->in([app_path(), base_path('modules')]) ->files() ->name('/[A-Z].*\.php$/'); foreach ($finder as $file) { $relativePath = $file->getRelativePathname(); $isModule = str_starts_with($file->getRealPath(), base_path('modules')); $className = $isModule ? 'Modules\\'.str_replace(['/', '.php'], ['\\', ''], $relativePath) : app()->getNamespace().str_replace(['/', '.php'], ['\\', ''], $relativePath); try { if ($this->fileHasClassLike($file->getRealPath()) && class_exists($className)) { self::$classes[$className] = $file->getRealPath(); } } catch (\Throwable) { // Ignore exceptions from class loading } } } foreach (self::$classes as $className => $path) { if ($cb(new ReflectionClass($className))) { $classes[$className] = $path; } } return $classes; } } Це в основному батьківський відкриття() з невеликими настройками. Найчастіше це батьки З невеликими тріщинами. discover() Не забудьте перев'язати його в постачальника послуг. Після того, як ви зробите, тестування інструменту "додаток-інфо" від інспектора повинно показати всі ваші моделі, перераховані правильно. Ось що це Може бути, але це сидить набагато менше з правильним інструментом, щось на зразок Boost. Але не зупиняйтеся там. Є MCP для всього: GitHub, Sentry і Linear. Вони додають тонну вартості. Ви навіть можете побудувати свій власний MCP для веселощів. (Так, він готував фрі), а інший, який грав у списку відтворення Spotify на основі того, наскільки ганебним був код. Відгуки про My Air Fryer https://x.com/OussamaMater/status/1954648925320655213?embedable=true Цікавий факт: навіть якщо я трохи занурююся в AI тут, я використав AI, щоб виправити мою погану граматику. Цікавий факт: навіть якщо я трохи занурююся в AI тут, я використав AI, щоб виправити мою погану граматику.