utilizar IA para análisis y extracción de texto con PHP y Laravel

by Admin
98 minutos
utilizar IA para análisis y extracción de texto con PHP y Laravel

Ante la explosión de los modelos de IA y Lenguaje (LLM) en la vida cotidiana de los desarrolladores, a veces es difícil encontrar un uso que realmente destaque.

Hoy en día, nos proponemos descubrir uno de estos paquetes innovadores: vamos a explorar el paquete cognesy/instructor-php que le permitirá analizar y luego extraer información de un texto plano directamente en una clase PHP.

Instalación

El paquete requerirá al menos una versión 8.2 de PHP, 11 de Laravel y simplemente se instalará con composer::

composer require cognesy/instructor-php

De forma predeterminada, el paquete utilizará las API de OpenAI, será necesario crearlo y colocarlo en su .envla siguiente tecla API:

OPENAI_API_KEY=

Muchos otros LLM también son apoyados

Está bien, estás listo para usar el paquete.

Uso básico

Para empezar, vamos a definir una clase que representará la estructura de datos que vamos a buscar, en nuestro caso, vamos a tratar de identificar a las personas con un nombre y una edad:

class Person
{
public string $name;
public int $age;
}

Ahora, vamos a crear una frase simple que vamos a analizar para extraer a la gente de ella:

$text = "His name is Jason and he is 28 years old.";

Sólo tenemos que usar el servicio. Instructordel envase transmitiéndolo el texto y la estructura de datos que se extraerán:

$instructor = new Instructor();
2 
3$person = $instructor->request(
4 messages: $text,
5 responseModel: Person::class,
6)->get();
7 
8$person->name; // Jason
9$person->age; // 28

En este ejemplo, sólo analizamos y extraemos una sola instancia de la clase. Persones totalmente posible informar al instructor de que debe extraerse una lista de personas. Para ello, enmenderemos nuestro texto para añadir a varios individuos:

$text = <<<TEXT
2Jason is 25 years old. Jane is 18 yo. John is 30 years old
3and Anna is 2 years younger than him.
4TEXT;

Este texto es interesante porque requiere una comprensión más profunda para deducir de ella cierta información. La edad de Anna no está escrita explícitamente, debe deducirse de la edad de John. Este ejemplo, aunque trivial, demuestra la capacidad del modelo para entender cuando se minera.

$instructor = new Instructor();
2 
3$sequence = $instructor->request(
4 messages: $text,
5 responseModel: Sequence::of(Person::class),
6)->get();
7 
8$persons = $sequence->list;
9 
10count($persons); // 4
11 
12$persons[3]->name; // Anna
13$persons[3]->age; // 28

El instructor identificó correctamente a las cuatro personas así como a la edad de Anna.

Con el fin de ayudar y maximizar la extracción de información, el paquete también ofrece la posibilidad de anotar las diferentes propiedades de nuestra clase de destino proporcionando contexto adicional o instrucciones de procesamiento al instructor.

Tal vez la propiedad "en la era" podría ser confusa para la LLM? En este caso, le expliquemos la intención de la propiedad utilizando la anotación. Description.

También podemos aplicar una regla de formato a una propiedad usando la anotación Instructions, por ejemplo, queremos que el nombre extraído esté siempre en mayúsculas:

use Cognesy\Instructor\Schema\Attributes\Description;
2use Cognesy\Instructor\Schema\Attributes\Instructions;
3 
4#[Description("Information about Person")]
5class Person {
6 #[Instructions("Make person name ALL CAPS")]
7 public string $name;
8 #[Description("Person's age")]
9 public int $age;
10}

Estas instrucciones adicionales se hacen en lenguaje natural y será extremadamente fácil para usted añadir contexto para mejorar la extracción por el instructor.

Los ejemplos que les presentamos en este artículo son relativamente simplicísticos, pero el paquete también es capaz de analizar complejas cadenas de texto que contienen elementos en cascada que se pueden extraer.

class Person {
2 public string $name;
3 /** @var Skill[] */
4 public array $skills;
5}
6 
7class Skill {
8 public string $name;
9 public SkillType $type;
10}
11 
12enum SkillType : string {
13 case Technical = 'technical';
14 case Other = 'other';
15}

Muchas otras características más avanzadas también están disponibles, usted será capaz de configurar el prompt utilizado por el instructor para especificar el origen del texto o el resultado esperado.

También puede definir la estructura de datos que el LLM tendrá que analizar en su texto antes de asignar las diferentes propiedades de la clase de destino, esta opción será útil para sus textos más verbós.

Las búsquedas en archivos grandes también podrían llevar mucho tiempo y llevar mucho tiempo, un modo de streaming le permitirá transmitir los resultados extraídos antes del final del análisis.

Encontrará en la documentación, en la sección de ejemplos, un conjunto de casos de uso, desde lo más sencillo hasta lo más complejo, lo que le dará un rango de posibilidades del paquete.

Conclusión

Para concluir, cognesy/instructor-php es una herramienta extremadamente poderosa que ya es rica en muchas características a pesar de su juventud relativa.

La herramienta no siempre es fácil de entender y las anomalías causadas por los modelos LLM a veces pueden generar resultados inconsistentes o impredecibles.

Sin embargo, la velocidad con la que obtendrá las primeras extracciones relevantes es relativamente desconcertante y debe motivarle a explorar más la documentación.

Fuente: https://github.com/cognesy/instructor-php
WhatsApp