LayaPHP: classificazione di testo self-hosted per PHP e Laravel
Laya è un modello decisionale open-source non autoregressivo pensato per scelte categoriche rapide e verifiche del rischio. Dato un testo, può scegliere un'etichetta, assegnare un punteggio su una scala definita da te oppure restituire una probabilità sì/no senza generare una risposta conversazionale. Il Jev di TypeSafe è costruito per lo stesso tipo di decisioni e supporta quei tre tipi di domanda.
Mentre Jev gira sui server di TypeSafe ed è disponibile tramite l'API di classificazione dell'AI SDK di Laravel, Laya gira sulla tua infrastruttura, dove paghi solo la potenza di calcolo senza un costo API per chiamata. Il suo processo laya-serve accetta richieste in stile Jev su /v1/systemone.
LayaPHP, di Marc Reichel, è un client PHP per Laya. Invia il testo a laya-serve e restituisce risposte PHP tipizzate con punteggi di confidenza. Reichel afferma di non aver ancora testato il client con Jev in hosting, nonostante l'endpoint condiviso.
Classificare una recensione di prodotto
Per un negozio che accetta recensioni di prodotti, LayaPHP potrebbe essere usato per segnalare spam e abusi ai fini della moderazione, registrando al contempo il sentiment di ogni recensione. predict() pone tutte e tre le domande in un'unica richiesta:
use MarcReichel\Laya\Laya;
use MarcReichel\Laya\Question;
function classifyReview(Laya $laya, string $body): array
{
$result = $laya->predict($body, [
'spam' => Question::yesNo('Is this review spam or an advertisement?'),
'abuse' => Question::yesNo('Does this review contain insults, hate speech, or threats?'),
'sentiment' => Question::choice('What is the overall sentiment of this review?', [
'positive' => 'praises the product',
'neutral' => 'describes the product without clear praise or criticism',
'negative' => 'criticises the product',
]),
]);
$spam = $result->yesNo('spam');
$abuse = $result->yesNo('abuse');
$sentiment = $result->choice('sentiment');
$needsReview = $spam->yes()
|| $abuse->yes()
|| min($spam->answerConfidence, $abuse->answerConfidence, $sentiment->answerConfidence) < 0.7;
return [
'queue' => $needsReview ? 'manual-review' : 'publish',
'sentiment' => $sentiment->choice,
];
}yes() usa per impostazione predefinita una soglia di probabilità di 0.5. Il valore separato answerConfidence misura la confidenza in ciascuna risposta. Il codice manda a una persona le recensioni segnalate e le risposte sotto 0.7. Per questo esempio ho scelto io quel numero; tuttavia, prima di lasciare che Laya approvi le recensioni, è una buona idea confrontare le sue decisioni con recensioni già gestite dai tuoi moderatori.
Prendiamo la recensione «Il prodotto funziona, ma la consegna ha richiesto troppo tempo». In un test locale con Laya 0.3.23, il codice l'ha inviata alla revisione manuale: Laya ha scelto un sentiment negativo con una confidenza inferiore a 0.7. Anche una pubblicità e una recensione che insultava lo staff sono finite nella revisione manuale. Un modello Laya più recente potrebbe classificare questi esempi in modo diverso.
Question::score() gestisce scale come «non urgente», «a breve» e «bloccante», con i livelli elencati dal più basso al più alto. La risposta include il livello più probabile e un punteggio numerico. Il metodo decide() del pacchetto mappa le domande definite con gli attributi PHP su proprietà del costruttore di tipo enum, intero e booleano.
Eseguire Laya e testare l'integrazione
LayaPHP richiede PHP 8.4 o superiore e un client HTTP PSR-18 come Guzzle:
composer require marcreichel/laya-php guzzlehttp/guzzleIl repository del pacchetto include un file Docker Compose per laya-serve. Da quel repository, esegui docker compose up -d --wait per avviare il server su http://localhost:8000. La prima richiesta di classificazione scarica circa 1 GB di pesi del modello in un volume Docker.
Con il server in esecuzione, Laravel 13 o superiore individua automaticamente il service provider del pacchetto. Aggiungi LAYA_URL=http://localhost:8000 al file .env e potrai iniettare Laya in un job o in un service. Il comando php artisan laya:health del pacchetto verifica che il server sia raggiungibile. Lo stesso client funziona anche fuori da Laravel: new Laya('http://localhost:8000') si connette direttamente a quel server.
Il metodo integrato Laya::fake() permette ai test di verificare il codice di instradamento delle recensioni senza avviare il modello. Testare se Laya classifica correttamente le recensioni richiede comunque un server in esecuzione.
Il repository LayaPHP contiene le istruzioni complete per la configurazione e esempi eseguibili.
Altri articoli recenti
Laravel AI 1.1 e 1.2: Agent Skills, Cohere e structured output più solidi
Le release 1.1.0 e 1.2.0 di laravel/ai portano gli Agent Skills, l'approvazione obbligatoria per i tool built-in e nuovi provider come Cohere e Laya self-hosted. Sul fronte qualità arrivano i fix allo structured output per Bedrock e il supporto alle provider options. Aggiornati anche i modelli di default, con Claude 4.7+ che ignora i sampling params.
Laravel 13.35.0: scheduler più controllabile, code più flessibili e response Markdown
Laravel 13.35.0 porta Schedule::alwaysOnOneServer(), il supporto a schedule:interrupt per i comandi di lunga durata, --memory in percentuale per queue:work e il nuovo metodo markdown() sulla response factory. Tante piccole migliorie anche a test, view compilate in parallelo e dischi local.
BashBox: un interprete Bash in sandbox per agenti AI in PHP
BashBox è un interprete bash scritto in puro PHP che permette di eseguire gli script generati dagli agenti AI senza mai ricorrere a proc_open, exec o shell_exec. Ogni comando è una classe PHP che lavora su un filesystem virtuale, con limiti di esecuzione, quote disco e accesso di rete configurabili. Ideale per chi sviluppa agenti con il Laravel AI SDK o altre librerie simili.