Pasou un tempo desde que escribín un artigo. Quero dicir, por que? vostede solicita a IA sobre un tema, e expulsa todo o que precisa. Que o neno matou a alegría para min, acabei redactando como 10 artigos pero nunca publicando ningún deles. Aínda así, parte de min cre que a xente goza de ler algo feito por humanos. Como, unha IA non faría que se sentase a través desta introdución aburrida, pero hej, é humana, crappy, pero humana. Grazas, por certo. De todos os xeitos, estou escribindo sobre AI hoxe (a ironía ha). acaba de lanzar un novo paquete, Laravel Boost, que basicamente fai que a IA suxeite menos. Fai que sexa máis determinista dándolle regras e contexto adicional para seguir. Porque si, os principais obstáculos dos LLM (polo menos do meu uso diario) son o rápido e . Laravel O contexto WTF son MCPs Non vou ensinarche sobre enxeñaría rápida; xa hai toneladas de recursos alí. . context Os LLM son adestrados en conxuntos de datos masivos, e eses conxuntos de datos son o seu punto de referencia. Por exemplo, se os datos de adestramento só van ata 2023 e pregunta sobre o tempo de hoxe, non terá unha pista. Nós capacitamos os LLM, dándolles un contexto actualizado, a través de ferramentas. Probablemente usaches isto sen nin sequera darte conta. Pregunta a un LLM sobre as últimas noticias, e verás "buscar a web". Pero "searching web" é só unha ferramenta incorporada. Se lle preguntou sobre o seu último billete Jira, non sabería. E pensar sobre iso, provedores como OpenAI ou Anthropic non poden construír ferramentas para cada necesidade posible. Por exemplo, pode querer que o seu LLM pregunte datos internos da empresa. É onde vén a idea de traer a súa propia ferramenta. O LLM pode chamar a súa ferramenta, recoller os datos que necesita e, a continuación, responder. Tan limpo que Anthropic introduciu o Protocolo de Contexto Modelo (MCP) para documentalo. Estandariza como os LLM chaman ferramentas, como conectan ferramentas a elas e como incorporan máis contexto. Entón, se nunca escoitou de MCPs, ben, só os cubrimos. No núcleo, son só unha capa delgada que permite que os LLMs utilicen ferramentas (como a ferramenta de "busca web") para incorporarse máis contexto. O PP tamén fai un pouco máis. O PP tamén fai un pouco máis. E estas ferramentas poden ser calquera cousa: chamadas de API, chamadas de sistema, chamadas de método, calquera cousa. mentres poidan proporcionar unha resposta de volta ao LLM, o modelo pode usalo para completar a tarefa. Agora xa sabes máis sobre os MCPs, podes ler máis sobre eles . aquí ¿Que é Laravel Boost? Así que Laravel Boost é basicamente un servidor MCP que expón un conxunto de ferramentas. Estas ferramentas xiran ao redor do ecosistema de Laravel, cousas como ler rutas, comprobar rexistros ou buscar os documentos de Laravel. Entón, cando solicita un LLM para corrixir o seu SaaS codificado por vibe, pode decidir que ferramenta usar. Aínda que, nada está garantido, un LLM pode ser unha puta e simplemente ignorar as ferramentas, formando un método que nunca existiu 🏽. E entón anula o cambio, se enfada, promete de novo, e trata cun "desculpe, ten absolutamente razón"... E entón anula o cambio, se enfada, promete de novo, e trata cun "desculpe, ten absolutamente razón"... Non vou cubrir como instalalo; xa hai un oficial , a , e unha morea de guías comunitarios.Ademais, estou un pouco atrasado para a festa. Vídeo de Youtube Episodios de Laracas Quero amosarvos como Laravel máis forte. Boas Por que ¿Laravel Boost? impulso impulso Boost permítelle darlle á súa aplicación un "obxectivo", basicamente unha descrición do seu produto para que a AI coñeza o contexto. Esta aplicación é un SaaS que ofrece servizos X, etc. Esta aplicación é un SaaS que ofrece servizos X, etc. Coñece o teu produto mellor amigo. Primeiro, asegúrese de publicar a configuración de Boost: php artisan vendor:publish --tag=boost-config No momento de escribir, o ficheiro config parece así: <?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), ]; Para engadir o propósito da aplicación que acabamos de falar, descargue unha nova entrada na configuración: // omitted for breivety 'purpose' => 'Describe your application purpose' Para que isto entre en vigor, necesitará re-xerar as directrices: php artisan boost:install Nas directrices publicadas, por exemplo, se estás a usar Cursor, atoparás o teu propósito (espero que todos o fagamos) en , na sección “Contexto fundamental”. .cursor/rules/laravel-boost.mdc Menos é máis Boost naves con máis de 15 ferramentas, pero dependendo da súa aplicación pode que non precisa de todos eles. ferramenta, estás aforrado do frontend inferno. persoalmente, eu tamén atopei e Parece inútil, o LLM pode simplemente ler as configuracións directamente sen saltar a través deses hoops. BrowserLogs GetConfig ListAvailableConfigKeys Tweak os Confío en: 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 ferramentas desapareceron. E así como excluír ferramentas, podes engadir as túas propias. Por exemplo, gústame ter unha ferramenta que enumere todos os eventos rexistrados na aplicación. Se estás a arrastrar paquetes de terceiros, isto fai que sexa máis doado para o LLM localizar eventos que poida conectar en lugar de construír lóxica extra ou ampliar as clases. Baixo o capó, Boost usa un novo paquete de primeira parte, , que xestiona a creación de ferramentas e todas as cousas divertidas. Pode crear unha nova ferramenta con: laravel/mcp php artisan make:mcp-tool ListEvents O código de ferramenta para o evento de listaxe é algo así: <?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()); } } Entón rexístralo, xa o adiviñaches, o ficheiro config: <?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 ], ], E como tal, engadiches unha ferramenta personalizada. Consello de bonos: O servidor MCP Boost usa un inspector, para que poida probar novas ferramentas inmediatamente. Consello de bonos: O servidor MCP Boost usa un inspector, para que poida probar novas ferramentas inmediatamente. php artisan mcp:inspector laravel-boost Verás todas as ferramentas dispoñibles, probalas, etc. Non me chames, non veñas pola miña casa Se está a utilizar unha arquitectura monolítica modular cunha directorio... malas noticias: Boost só comproba enums, modelos e controladores dentro . modules/ app/ Sería bo se houbese unha forma nativa de personalizar isto, pero ata entón, facémolo nós mesmos. Todo o que tes que facer é recoller a túa propia costume que escanean ou en calquera lugar). Laravel\Boost\Install\GuidelineAssist GuidelineAssist modules/ A túa guía personalizada podería parecer: <?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; } } É principalmente o descubrimento parental() con modificacións menores. É principalmente o descubrimento parental() con modificacións menores. Non se esqueza de conectalo a un provedor de servizos.Uma vez que o faga, a proba da ferramenta "aplicación-información" do inspector debe mostrar todos os seus modelos listados correctamente. Esa é a AI sucos? Quizais. Pero sucos moito menos coa ferramenta correcta, algo como Boost. Hai MCPs para todo: GitHub, Sentry e Linear. engaden toneladas de valor. Pode incluso construír o seu propio MCP para divertirse. (Si, cociñaba patacas), e outro que xogaba unha lista de reprodución de Spotify baseada en como o código era feo. Volvendo ao meu frigorífico https://x.com/OussamaMater/status/1954648925320655213?embedable=true Facto divertido: aínda que estou a botar un pouco de AI aquí, usei AI para corrixir a miña mala gramática. Fixando a gramática mentres se insulta, cool lol. Facto divertido: aínda que estou a botar un pouco de AI aquí, usei AI para corrixir a miña mala gramática. Fixando a gramática mentres se insulta, cool lol.