> ## Documentation Index
> Fetch the complete documentation index at: https://pearsdb.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Generative ai tables

MindsDB permite a las organizaciones aprovechar el poder de la IA al abstraer los modelos de IA como Tablas de IA Generativa. Estas tablas son capaces de aprender de los datos de entrada y generar predicciones a partir del modelo subyacente al ser consultadas. Esta abstracción hace que la IA sea altamente accesible, permitiendo a los equipos de desarrollo utilizar sus habilidades SQL existentes para construir aplicaciones impulsadas por IA.

## ¿Qué son las Tablas de IA Generativa?

La IA Generativa es un subcampo de la inteligencia artificial que entrena modelos de IA para crear nuevo contenido, como texto realista, pronósticos, imágenes y más, aprendiendo patrones de datos existentes.

MindsDB revoluciona el aprendizaje automático dentro de las bases de datos empresariales introduciendo el concepto de **tablas de IA Generativa**. Estas esencialmente representan modelos de IA como tablas de base de datos virtuales, capaces de producir salidas realistas dadas ciertas entradas.

```sql theme={null}
-- Example of querying an AI table
-- This AI table is trained to generate customer support responses.

SELECT 
  response   -- AI generated output 
FROM 
  ai_response_model  -- A generative AI model as a virtual table
WHERE 
  customer_message = "Dear Team, I spilled water on the computer I bought on June 1st 2024, order #3418276, and it is no longer working, what should I do?"
```

Las Tablas de IA Generativa simplifican el proceso de hacer predicciones basadas en tus datos, permitiendo así a los desarrolladores aprovechar el ecosistema integral de IA Generativa de última generación utilizando simples declaraciones SQL.

Para entender mejor este concepto, profundicemos en el caso de uso de generar respuestas automatizadas a correos electrónicos provenientes de clientes.

Primero, veamos los datos que tenemos. En este caso, imagina que tienes una tabla con correos electrónicos entrantes.

```sql theme={null}
SELECT message_id, customer_message
FROM postgres_demo_db.customer_messages;
```

Al ejecutar, obtenemos:

```csv theme={null}
+------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
| message_id | customer_message                                                                                                                                  |
+------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
| 1          | "I've been having trouble with my product; it's not working as it should. I would like to request a return. My order number is 12345."            |
| 2          | "My account settings won't update no matter what I try. Can you help?"                                                                            |
| 3          | "My product stopped working after just a week of use. I didn't expect this from your brand. Can I get a refund?"                                  |
| 4          | "I suspect my account has been hacked. I noticed some unusual activity. Please assist me in securing it."                                         |
| 5          | "There seems to be an issue with the settings on my account, they're not saving correctly."                                                       |
| 6          | "I believe my account has been compromised. Please help me regain control and secure my account."                                                 |
| 7          | "I'm not satisfied with the product I received. It's not working as advertised. I'd like to return it, please. My order number is 56789."         |
+------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
```

## Creando una Tabla de IA Generativa

Podemos, por ejemplo, crear un modelo de OpenAI que generará una *respuesta* dado algún *prompt\_template* instrucciones escritas en inglés sencillo.

```sql theme={null}
CREATE MODEL ai_response_model
PREDICT response
USING
    engine = ‘openai’,
    prompt_template = '

Generate a simple customer response depending on the following options:

- If it is a message about returns and there is an order number, the message should be as follows (populate order_id in the URL accordingly):
"We are sorry about the issues with your product. Please follow this link to process your return: http://website.com/returns?order_id=<order_id>."
- If the message is about returns but has no order number, respond by asking for the order number and provide a link to see the list of their orders: http://website.com/my_orders.
- If the message is about the account being compromised, send them a link to immediately change their password: http://website.com/change_password.
- Otherwise, simply respond with [NEEDS_ATTENTION].

	The message is the following: {customer_message}
';
```

Ahora que hemos generado nuestra Tabla de IA, podemos consultar los mensajes y sus respuestas generadas usando **JOIN**s.

```sql theme={null}
SELECT i.message_id,  m.response, i.customer_message
FROM postgres_demo_db.customer_messages AS i
JOIN ai_response_model AS m;
```

Resulta en:

```csv theme={null}
+--------------+-------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
| i.message_id | m.response                                                                                                                                | i.customer_message                                                                                                                     |
+--------------+-------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
| 1            | We are sorry about the issues with your product. Please follow this link to process your return http://website.com/returns?order_id=12345 | "I've been having trouble with my product; it's not working as it should. I would like to request a return. My order number is 12345." |
| 2            | [NEEDS_ATTENTION]                                                                                                                         | "My account settings won't update no matter what I try. Can you help?"                                                                 |
| 3            | Please provide an order number, follow this link: http://website.com/my_orders                                                            | "My product stopped working after just a week of use. I didn't expect this from your brand. Can I get a refund?"                       |
| 4            | We understand your concern. Please change your password immediately using this link http://website.com/change_password                    | "I suspect my account has been hacked. I noticed some unusual activity. Please assist me in securing it."                              |
| 5            | [NEEDS_ATTENTION]                                                                                                                         | "There seems to be an issue with the settings on my account, they're not saving correctly."                                            |
| 6            | We understand your concern. Please change your password immediately using this link http://website.com/change_password                    | "I believe my account has been compromised. Please help me regain control and secure my account."                                      |
| 7            | We are sorry about the issues with your product. Please follow this link to process your return http://website.com/returns?order_id=56789 | "I'm not satisfied with the product I received. It's not working. I'd like to return it, please. My order number is 56789."           |
+--------------+---------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
```

## Diferencia entre Tablas de IA y Tablas Estándar

Para entender la diferencia, podemos revisar un ejemplo mucho más simple, aquí veremos cómo las tablas de base de datos tradicionales están diseñadas para darte una respuesta determinista dado algún input, y las Tablas Generativas de IA están diseñadas para generar una respuesta aproximada dado algún input.

Consideremos la siguiente `income_table` tabla que almacena los `income` y `debt` valores.

```sql theme={null}
SELECT income, debt
FROM income_table;
```

Al ejecutar, obtenemos:

```sql theme={null}
+------+-----+
|income|debt |
+------+-----+
|60000 |20000|
|80000 |25100|
|100000|30040|
|120000|36010|
+------+-----+
```

Una visualización simple de los datos presentes en la `income_table` tabla es como
sigue:

<img src="https://mintlify.s3.us-west-1.amazonaws.com/pearsdb/assets/sql/income_vs_debt.png" alt="Income vs Debt" />

Consultando la tabla de ingresos para obtener el `debt` valor para un `income`
valor particular resulta en lo siguiente:

```sql theme={null}
SELECT income, debt
FROM income_table
WHERE income = 80000;
```

Al ejecutar, obtenemos:

```sql theme={null}
+------+-----+
|income|debt |
+------+-----+
|80000 |25100|
+------+-----+
```

Y esto es lo que obtenemos:

<img src="https://mintlify.s3.us-west-1.amazonaws.com/pearsdb/assets/sql/income_vs_debt_known_value.png" alt="Income vs Debt chart" />

Pero ¿qué sucede cuando consultamos la tabla para un `income` valor que no está
presente allí?

```sql theme={null}
SELECT income, debt
FROM income_table
WHERE income = 90000;
```

Al ejecutar, obtenemos:

```sql theme={null}
Empty set (0.00 sec)
```

Cuando la `WHERE` cláusula de condición no se cumple para ninguna de las filas, no se
devuelve ningún valor.

<img src="https://mintlify.s3.us-west-1.amazonaws.com/pearsdb/assets/sql/income_vs_debt_unknown_value.png" alt="Income vs Debt query" />

Cuando una tabla no tiene una coincidencia exacta, la consulta devuelve un conjunto vacío o un
valor nulo. ¡Aquí es donde entran en juego las Tablas de IA!

Vamos a crear un `debt_model` modelo que nos permita aproximar el `debt` valor
para cualquier `income` valor. Entrenamos el `debt_model` modelo usando los datos de la

`income_table` tabla.

```sql theme={null}
CREATE MODEL mindsdb.debt_model
FROM income_table
PREDICT debt;
```

Al ejecutar, obtenemos:

```sql theme={null}
Query OK, 0 rows affected (x.xxx sec)
```

MindsDB proporciona la [`CREATE MODEL`](/sql/create/model/) declaración. Al ejecutar esta declaración, el modelo predictivo trabaja en segundo plano, creando automáticamente una representación vectorial de los datos que puede visualizarse de la siguiente manera:

<img src="https://mintlify.s3.us-west-1.amazonaws.com/pearsdb/assets/sql/income_vs_debt_predictor.png" alt="Income vs Debt model" />

Ahora busquemos el `debt` valor de algún `income` valor aleatorio. Para obtener el `debt` valor aproximado, consultamos el `mindsdb.debt_model` modelo en lugar de la `income_table` tabla.

```sql theme={null}
SELECT income, debt
FROM mindsdb.debt_model
WHERE income = 90000;
```

Al ejecutar, obtenemos:

```sql theme={null}
+------+-----+
|income|debt |
+------+-----+
|90000 |27820|
+------+-----+
```

Y así es como se ve:

<img src="https://mintlify.s3.us-west-1.amazonaws.com/pearsdb/assets/sql/income_vs_debt_prediction.png" alt="Income vs Debt model" />
