Ha passat un temps des que vaig escriure un article. vull dir, per què ho faria? Demaneu AI sobre un tema, i es bufa tot el que necessiteu. Que el nen va matar l'alegria per a mi, vaig acabar redactant com 10 articles però mai publicant cap d'ells. Tot i així, part de mi creu que la gent gaudeix llegint alguna cosa feta per l'home. De totes maneres, avui estic escrivint sobre AI (la ironia ha). Acabo de llançar un nou paquet, Laravel Boost, que bàsicament fa que l'IA succi menys. Es fa més determinista donant-li regles i context addicional per seguir. Perquè sí, les principals barreres de les LLM (almenys del meu ús diari) són la promptitud i . Llàtzer El context WTF són MCPs No us parlaré de l'enginyeria ràpida; ja hi ha tones de recursos. . context Els LLMs estan entrenats en grans conjunts de dades, i aquests conjunts de dades són el seu punt de referència. Per exemple, si les dades de formació només van fins al 2023 i es pregunta sobre el temps d'avui, no tindrà una pista. Enfortim els LLM, els donem un context actualitzat, a través d'eines. Probablement l'has utilitzat sense adonar-te'n. Pregunta a un LLM sobre les últimes notícies, i veuràs "buscar la web". Però "recerca web" és només una eina integrada. Si li preguntes sobre el teu últim bitllet Jira, no ho sabria. I pensa en això, proveïdors com OpenAI o Anthropic no poden construir eines per a cada necessitat possible. Per exemple, potser vols que el teu LLM interrogui dades internes de l'empresa. És aquí on entra la idea de portar la teva pròpia eina. El LLM pot trucar a la teva eina, recollir les dades que necessita i després respondre. Tan net que Anthropic va introduir el Model Context Protocol (MCP) per documentar això. Estandarditza com els LLM criden eines, com s'hi connecten eines i com agafen més context. Així que, si mai no heu sentit a parlar de MCP, bé, només els hem cobert. En el nucli, són només una capa prima que permet als LLM utilitzar eines (com l'eina de "recerca web") per agafar més context. El PSC també fa una mica més. El PSC també fa una mica més. I aquestes eines poden ser qualsevol cosa: trucades d'API, trucades de sistema, trucades de mètode, qualsevol cosa. Mentre puguin proporcionar una resposta al LLM, el model pot utilitzar-la per completar la tasca. Ara ja saps què són els MCP.Pots llegir més sobre ells . Aquí Què és Laravel Boost? Així que Laravel Boost és bàsicament un servidor MCP que exposa un conjunt d'eines. Aquestes eines giren al voltant de l'ecosistema de Laravel, coses com llegir rutes, comprovar els registres o cercar els documents de Laravel. Així que quan vostè demana a un LLM per corregir el seu SaaS codificat amb vibe, pot decidir quina eina utilitzar. Tot i que, res està garantit, un LLM pot ser una puta i simplement ignorar les eines, fent un mètode que mai va existir 🏽. I llavors anul·les el canvi, t’enfades, tornes a demanar, i s’enfronta a un “disculpa, tens tota la raó”... I llavors anul·les el canvi, t’enfades, tornes a demanar, i s’enfronta a un “disculpa, tens tota la raó”... No vaig a cobrir com instal·lar-lo; ja hi ha un oficial , a A més a més, hi ha una gran quantitat de guia de la comunitat.A més, estic una mica tard a la festa. Vídeo de Youtube Esdeveniments de Laracas No obstant això, volem mostrar-vos com El Laravel impulsa. Boost Per què Laravel va augmentar? Boost Boost Boost li permet donar a la seva aplicació un "objecte", bàsicament una descripció del seu producte perquè la IA conegui el context. Aquesta aplicació és un SaaS que proporciona serveis X, etc. Aquesta aplicació és un SaaS que proporciona serveis X, etc. Coneix el teu producte millor amic. Primer, assegureu-vos que heu publicat la configuració de Boost: php artisan vendor:publish --tag=boost-config En el moment d'escriure, l'arxiu config es veu així: <?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), ]; Per afegir l'objectiu de l'aplicació que acabem de parlar, descarrega una nova entrada a la configuració: // omitted for breivety 'purpose' => 'Describe your application purpose' Perquè això entri en vigor, haureu de re-generar les directrius: php artisan boost:install En les directrius publicades, per exemple, si estàs utilitzant Cursor, trobaràs el teu propòsit (esperem que tots ho fem) en , en la secció “Context fonamental”. .cursor/rules/laravel-boost.mdc Menys és més Augmentar els vaixells amb més de 15 eines, però depenent de la seva aplicació, pot ser que no els necessiti tots. l'eina, estàs estalviat de l'infern frontal. personalment, també he trobat i Sembla inútil, el LLM només pot llegir els configs directament sense saltar a través d'aquests hoops. BrowserLogs GetConfig ListAvailableConfigKeys Tweak el Configuració : 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], ], ], Boom, 3 eines desaparegudes. I igual que l'exclusió d'eines, podeu afegir les vostres pròpies. per exemple, m'agrada tenir una eina que enumeri tots els esdeveniments registrats a l'aplicació. Si esteu tirant en paquets de tercers, això fa que sigui més fàcil per al LLM detectar esdeveniments en què es pot connectar en lloc de construir lògica addicional o ampliar classes. Sota el capó, Boost utilitza un nou paquet de primera part, , que gestiona la creació d'eines i totes les coses divertides. Pots crear una nova eina amb: laravel/mcp php artisan make:mcp-tool ListEvents El codi d'eina per a l'esdeveniment de llista és una cosa com: <?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()); } } A continuació, registreu-ho, ho heu endevinat, el fitxer de configuració: <?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 ], ], Igual que això, heu afegit una eina custom. Consell de bonificació: L'ús de MCP Server Boost ve amb un inspector, de manera que podeu provar noves eines immediatament. Consell de bonificació: L'ús de MCP Server Boost ve amb un inspector, de manera que podeu provar noves eines immediatament. php artisan mcp:inspector laravel-boost Veuràs totes les eines disponibles, les provaràs, etc. No em truquis, no vinguis a casa meva Si utilitzeu una arquitectura monolítica modular amb una Directori... notícies dolentes: Boost només comprova enums, models i controladors dins . modules/ app/ Seria bo si hi hagués una manera nativa de personalitzar això, però fins llavors, ho fem nosaltres mateixos. Tot el que has de fer és tornar a la seva pròpia costum El que escaneja (O en qualsevol lloc) Laravel\Boost\Install\GuidelineAssist GuidelineAssist modules/ La seva guia personal podria semblar: <?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; } } És majoritàriament el descobriment parental() amb ajustos menors. La majoria són els pares Amb petits tweaks. discover() Un cop fet, la prova de l'eina "aplicació-informació" de l'inspector ha de mostrar tots els models enumerats correctament. Això és Potser, però succiona molt menys amb l'eina adequada, alguna cosa com Boost. Hi ha MCP per a tot: GitHub, Sentry i Linear. Afegeixen tones de valor. Fins i tot pots construir el teu propi MCP per divertir-te. (Sí, va cuinar patates frites), i un altre que va jugar una llista de reproducció de Spotify basada en com de ximple era el codi. Es va convertir en el meu Air Fryer https://x.com/OussamaMater/status/1954648925320655213?embedable=true Facte divertit: tot i que estic trencant una mica sobre la IA aquí, vaig utilitzar la IA per corregir la meva pobra gramàtica. Fixar la gramàtica mentre s'insulta, cool lol. Facte divertit: tot i que estic trencant una mica sobre la IA aquí, vaig utilitzar la IA per corregir la meva pobra gramàtica. Fixar la gramàtica mentre s'insulta, cool lol.