Lección 125 · 10 min · Gratis

Ingeniería de prompts incremental y comparación de modelos

Kaggle   Colab


Pixeltable

Este notebook muestra cómo usar Pixeltable para la ingeniería de prompts iterativa y la comparación de modelos con los modelos de Mistral AI. Demuestra el almacenamiento persistente, las actualizaciones incrementales y cómo comparar fácilmente diferentes prompts y modelos.

Pixeltable es una infraestructura de datos que proporciona un enfoque declarativo e incremental para la IA multimodal.

Categoría: Ingeniería de Prompts y Comparación de Modelos

1. Configuración e Instalación

%pip install -qU pixeltable mistralai textblob nltk
import os
import getpass
import pixeltable as pxt
from pixeltable.functions.mistralai import chat_completions
from textblob import TextBlob
import nltk
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
import re
nltk.download('punkt', quiet=True)
nltk.download('stopwords', quiet=True)
nltk.download('punkt_tab', quiet=True)
True
if 'MISTRAL_API_KEY' not in os.environ:
    os.environ['MISTRAL_API_KEY'] = getpass.getpass('Mistral AI API Key:')
Mistral AI API Key:··········

2. Crea una tabla de Pixeltable e inserta ejemplos

Primero, Pixeltable es persistente. A diferencia de las bibliotecas de Python en memoria como Pandas, Pixeltable es una base de datos. Cuando reinicias un kernel de notebook o inicias una nueva sesión de Python, tendrás acceso a todos los datos que almacenaste previamente en Pixeltable.

# Create a table to store prompts and results
pxt.drop_table('mistral_prompts', ignore_errors=True)
t = pxt.create_table('mistral_prompts', {
    'task': pxt.StringType(),
    'system': pxt.StringType(),
    'input_text': pxt.StringType()
})

# Insert sample data
t.insert([
    {'task': 'summarization',
     'system': 'Summarize the following text:',
     'input_text': 'Mistral AI is a French artificial intelligence (AI) research and development company that focuses on creating and applying AI technologies to various industries.'},
    {'task': 'sentiment',
     'system': 'Analyze the sentiment of this text:',
     'input_text': 'I love using Mistral for my AI projects! They provide great LLMs and it is really easy to work with.'},
    {'task': 'question_answering',
     'system': 'Answer the following question:',
     'input_text': 'What are the main benefits of using Mistral AI over other LLMs providers?'}
])
Creating a Pixeltable instance at: /root/.pixeltable
Connected to Pixeltable database at: postgresql+psycopg://postgres:@/pixeltable?host=/root/.pixeltable/pgdata
Created table `mistral_prompts`.
Inserting rows into `mistral_prompts`: 3 rows [00:00, 391.64 rows/s]
Inserted 3 rows with 0 errors.
UpdateStatus(num_rows=3, num_computed_values=9, num_excs=0, updated_cols=[], cols_with_excs=[])

3. Ejecuta funciones de inferencia de Mistral

Creamos columnas calculadas para indicarle a Pixeltable que ejecute la función chat_completions de Mistral y almacene la salida. Debido a que las columnas calculadas son una parte permanente de la tabla, se actualizarán automáticamente cada vez que se agreguen nuevos datos a la tabla. Para obtener más información, consulta nuestro tutorial.

En este ejemplo particular, estamos ejecutando los modelos open_mistral_nemo y mistral_medium y hacemos que la salida esté disponible en sus respectivas columnas.

# We are referencing columns from the 'mistral_prompts' table to dynamically compose the message for the Inference API.
msgs = [
    {'role': 'system', 'content': t.system},
    {'role': 'user', 'content': t.input_text}
]

# Run inference with open-mistral-nemo model
t['open_mistral_nemo'] = chat_completions(
    messages=msgs,
    model='open-mistral-nemo',
    max_tokens=300,
    top_p=0.9,
    temperature=0.7
)

# Run inference with mistral-medium model
t['mistral_medium'] = chat_completions(
    messages=msgs,
    model='mistral-medium',
    max_tokens=300,
    top_p=0.9,
    temperature=0.7
)
Computing cells: 100%|████████████████████████████████████████████| 3/3 [00:06<00:00,  2.28s/ cells]
Added 3 column values with 0 errors.
Computing cells: 100%|████████████████████████████████████████████| 3/3 [00:09<00:00,  3.31s/ cells]
Added 3 column values with 0 errors.

Las columnas de respuesta respectivas tienen el tipo de columna JSON y ahora podemos usar expresiones de ruta JSON para extraer las piezas de datos relevantes y hacerlas disponibles como columnas calculadas adicionales.

# Extract the response content as a string (by default JSON)
t['omn_response'] = t.open_mistral_nemo.choices[0].message.content.astype(pxt.StringType())
t['ml_response'] = t.mistral_medium.choices[0].message.content.astype(pxt.StringType())
Computing cells: 100%|███████████████████████████████████████████| 3/3 [00:00<00:00, 120.75 cells/s]
Added 3 column values with 0 errors.
Computing cells: 100%|███████████████████████████████████████████| 3/3 [00:00<00:00, 121.09 cells/s]
Added 3 column values with 0 errors.
# Display the responses
t.select(t.omn_response, t.ml_response).collect()
omn_response  \
0  Mistral AI is a French company specializing in...   
1  The sentiment of the text "I love using Mistra...   
2  Using Mistral AI over other Large Language Mod...   

                                         ml_response  
0  Mistral AI is a French firm specializing in AI...  
1  The sentiment of this text is positive. The au...  
2  Mistral AI is a cutting-edge company based in ...
omn_response ml_response
Mistral AI es una empresa francesa especializada en investigación y desarrollo de IA, con el objetivo de crear y aplicar tecnologías de IA en diversas industrias. Mistral AI es una empresa francesa especializada en investigación y desarrollo de IA, con un enfoque en la implementación de tecnologías de IA en varias industrias.
El sentimiento del texto "¡Me encanta usar Mistral para mis proyectos de IA! Proporcionan excelentes LLM y es muy fácil trabajar con ellos." es abrumadoramente positivo. Aquí tienes un desglose de los indicadores: 1. **Palabras y frases positivas:** - "encanta" (emoción positiva fuerte) - "excelentes" (implica alta calidad o excelencia) - "muy fácil" (implica simplicidad y conveniencia) 2. **Sin palabras o frases negativas:** No hay palabras o frases negativas que puedan contrarrestar el sentimiento positivo. 3. **Signo de exclamación:** El uso de un signo de exclamación al final de la oración enfatiza el sentimiento positivo, haciéndolo más entusiasta. Basado en estos puntos, el sentimiento general del texto es extremadamente positivo. El hablante expresa una fuerte aprobación y satisfacción al usar Mistral para sus proyectos de IA. El sentimiento de este texto es positivo. El autor expresa su amor por usar Mistral para sus proyectos de IA y destaca la calidad de los grandes modelos de lenguaje (LLM) proporcionados por Mistral, así como la facilidad de trabajar con ellos.
Usar Mistral AI sobre otros proveedores de Grandes Modelos de Lenguaje (LLM) ofrece varios beneficios principales: 1. **Modelos de Lenguaje Avanzados**: Mistral AI ofrece modelos de lenguaje de última generación como Mixtral 8x7B y Codestral, que están diseñados para comprender y generar texto similar al humano de manera más efectiva que muchos otros LLM. 2. **Ventana de Contexto**: Los modelos de Mistral AI tienen una ventana de contexto más grande, lo que les permite mantener el contexto sobre secuencias de texto más largas. Esto es particularmente útil para tareas como ...... énfasis en la seguridad y la moderación. Sus modelos están diseñados para minimizar las salidas dañinas, sesgadas u ofensivas, haciéndolos más seguros de usar. 6. **Transparencia y Documentación**: Mistral AI proporciona documentación clara y es transparente sobre las capacidades y limitaciones de sus modelos, lo que facilita a los desarrolladores la integración y el uso de sus modelos. 7. **Precios y Accesibilidad**: Si bien los precios pueden variar, Mistral AI tiene como objetivo proporcionar precios competitivos y ofrece niveles gratuitos, lo que los hace Mistral AI es una empresa de vanguardia con sede en París, Francia, que desarrolla grandes modelos de lenguaje (LLM). Aunque no tengo acceso en tiempo real a detalles específicos sobre Mistral AI, puedo compartir algunos beneficios potenciales basados en la información disponible en su sitio web y las tendencias generales de la industria. Ten en cuenta que estos beneficios no están garantizados y pueden variar según tus necesidades y caso de uso específicos. 1. Personalización y Adaptabilidad: Mistral AI enfatiza la importancia de la personalización y ...... Perspectiva Europea: Como empresa europea, Mistral AI puede tener una mejor comprensión de las regulaciones europeas de privacidad de datos, como el GDPR, y los matices culturales, proporcionando soluciones más relevantes y conformes para las empresas europeas. 4. Investigación y Desarrollo: Mistral AI invierte fuertemente en investigación y desarrollo para mantenerse a la vanguardia de la tecnología de IA y procesamiento de lenguaje. Este compromiso con la innovación puede resultar en LLM más avanzados y capaces en comparación con otros proveedores. 5. Colaboración

Podemos ver cómo se calculan los datos en las diferentes columnas de nuestra tabla.

t
table 'mistral_prompts'

      Column Name   Type                                                                                                                                                             Computed With
             task string                                                                                                                                                                          
           system string                                                                                                                                                                          
       input_text string                                                                                                                                                                          
open_mistral_nemo   json chat_completions([{'role': 'system', 'content': system}, {'role': 'user', 'content': input_text}], top_p=0.9, model='open-mistral-nemo', temperature=0.7, max_tokens=300)
   mistral_medium   json    chat_completions([{'role': 'system', 'content': system}, {'role': 'user', 'content': input_text}], top_p=0.9, model='mistral-medium', temperature=0.7, max_tokens=300)
     omn_response string                                                                                                               open_mistral_nemo.choices[0].message.content.astype(string)
      ml_response string                                                                                                                  mistral_medium.choices[0].message.content.astype(string)
Column Name Type Computed With
task string
system string
input_text string
open_mistral_nemo json chat_completions([{'role': 'system', 'content': system}, {'role': 'user', 'content': input_text}], top_p=0.9, model='open-mistral-nemo', temperature=0.7, max_tokens=300)
mistral_medium json chat_completions([{'role': 'system', 'content': system}, {'role': 'user', 'content': input_text}], top_p=0.9, model='mistral-medium', temperature=0.7, max_tokens=300)
omn_response string open_mistral_nemo.choices[0].message.content.astype(string)
ml_response string mistral_medium.choices[0].message.content.astype(string)

4. Aprovechando las funciones definidas por el usuario (UDFs) para un análisis posterior

Las UDFs te permiten extender Pixeltable con código Python personalizado, lo que te permite integrar cualquier cálculo o análisis en tu flujo de trabajo. Consulta nuestro tutorial sobre UDFs para obtener más información.

Definimos tres UDFs para calcular dos métricas (sentimiento y puntuaciones de legibilidad) que nos dan información sobre la calidad de las salidas de los LLM.

@pxt.udf
def get_sentiment_score(text: str) -> float:
    return TextBlob(text).sentiment.polarity

@pxt.udf
def extract_keywords(text: str, num_keywords: int = 5) -> list:
    stop_words = set(stopwords.words('english'))
    words = word_tokenize(text.lower())
    keywords = [word for word in words if word.isalnum() and word not in stop_words]
    return sorted(set(keywords), key=keywords.count, reverse=True)[:num_keywords]

@pxt.udf
def calculate_readability(text: str) -> float:
    words = len(re.findall(r'\w+', text))
    sentences = len(re.findall(r'\w+[.!?]', text)) or 1
    average_words_per_sentence = words / sentences
    return 206.835 - 1.015 * average_words_per_sentence

Para cada modelo que queremos comparar, agregamos las métricas como nuevas columnas calculadas, utilizando las UDFs que creamos.

t['large_sentiment_score'] = get_sentiment_score(t.ml_response)
t['large_keywords'] = extract_keywords(t.ml_response)
t['large_readability_score'] = calculate_readability(t.ml_response)

t['open_sentiment_score'] = get_sentiment_score(t.omn_response)
t['open_keywords'] = extract_keywords(t.omn_response)
t['open_readability_score'] = calculate_readability(t.omn_response)
Computing cells: 100%|████████████████████████████████████████████| 3/3 [00:00<00:00, 23.99 cells/s]
Added 3 column values with 0 errors.
Computing cells: 100%|████████████████████████████████████████████| 3/3 [00:00<00:00, 22.87 cells/s]
Added 3 column values with 0 errors.
Computing cells: 100%|████████████████████████████████████████████| 3/3 [00:00<00:00, 68.75 cells/s]
Added 3 column values with 0 errors.
Computing cells: 100%|████████████████████████████████████████████| 3/3 [00:00<00:00, 93.24 cells/s]
Added 3 column values with 0 errors.
Computing cells: 100%|████████████████████████████████████████████| 3/3 [00:00<00:00, 46.49 cells/s]
Added 3 column values with 0 errors.
Computing cells: 100%|████████████████████████████████████████████| 3/3 [00:00<00:00, 61.91 cells/s]
Added 3 column values with 0 errors.

Una vez que se define una UDF y se usa en una columna calculada, Pixeltable la aplica automáticamente a todas las filas relevantes.

No necesitas escribir bucles ni preocuparte por aplicar la función a cada fila manualmente.

t.head(1)
task                         system  \
0  summarization  Summarize the following text:   

                                          input_text  \
0  Mistral AI is a French artificial intelligence...   

                                   open_mistral_nemo  \
0  {'id': '3ba3f2ae28094f5fb29240423f26cd1b', 'mo...   

                                      mistral_medium  \
0  {'id': 'ecc5e83f1d364b36b6cf342752b44a45', 'mo...   

                                        omn_response  \
0  Mistral AI is a French company specializing in...   

                                         ml_response  large_sentiment_score  \
0  Mistral AI is a French firm specializing in AI...              -0.066667   

                                    large_keywords  large_readability_score  \
0  [ai, implementing, industries, french, mistral]                  184.505   

   open_sentiment_score                              open_keywords  \
0                   0.0  [ai, company, industries, aiming, french]   

   open_readability_score  
0                 184.505
task system input_text open_mistral_nemo mistral_medium omn_response ml_response large_sentiment_score large_keywords large_readability_score open_sentiment_score open_keywords open_readability_score
summarization Resume el siguiente texto: Mistral AI es una empresa francesa de investigación y desarrollo de inteligencia artificial (IA) que se enfoca en crear y aplicar tecnologías de IA a diversas industrias. {"id": "3ba3f2ae28094f5fb29240423f26cd1b", "model": "open-mistral-nemo", "usage": {"total_tokens": 65, "prompt_tokens": 38, "completion_tokens": 27}, "object": "chat.completion", "choices": [{"index": 0, "message": {"role": "assistant", "prefix": false, "content": "Mistral AI es una empresa francesa especializada en investigación y desarrollo de IA, con el objetivo de crear y aplicar tecnologías de IA en diversas industrias.", "tool_calls": null}, "finish_reason": "stop"}], "created": 1728587238} {"id": "ecc5e83f1d364b36b6cf342752b44a45", "model": "mistral-medium", "usage": {"total_tokens": 82, "prompt_tokens": 50, "completion_tokens": 32}, "object": "chat.completion", "choices": [{"index": 0, "message": {"role": "assistant", "prefix": false, "content": "Mistral AI es una empresa francesa especializada en investigación y desarrollo de IA, con un enfoque en la implementación de tecnologías de IA en varias industrias.", "tool_calls": null}, "finish_reason": "stop"}], "created": 1728587244} Mistral AI es una empresa francesa especializada en investigación y desarrollo de IA, con el objetivo de crear y aplicar tecnologías de IA en diversas industrias. Mistral AI es una empresa francesa especializada en investigación y desarrollo de IA, con un enfoque en la implementación de tecnologías de IA en varias industrias. -0.067 ["ai", "implementing", "industries", "french", "mistral"] 184.505 0. ["ai", "company", "industries", "aiming", "french"] 184.505

5. Experimenta con diferentes prompts

Insertamos dos filas adicionales, y Pixeltable poblará automáticamente las columnas calculadas.

t.insert([
    {
        'task': 'summarization',
        'system': 'Provide a concise summary of the following text in one sentence:',
        'input_text': 'Mistral AI is a company that develops AI models and has been in the news for its partnerships and latest models.'
    },
    {
        'task': 'translation',
        'system': 'Translate the following English text to French:',
        'input_text': 'Hello, how are you today?'
    }
])
Computing cells: 100%|██████████████████████████████████████████| 30/30 [00:05<00:00,  5.17 cells/s]
Inserting rows into `mistral_prompts`: 2 rows [00:00, 95.14 rows/s]
Computing cells: 100%|██████████████████████████████████████████| 30/30 [00:05<00:00,  5.12 cells/s]
Inserted 2 rows with 0 errors.
UpdateStatus(num_rows=2, num_computed_values=30, num_excs=0, updated_cols=[], cols_with_excs=[])

A menudo, querrás seleccionar solo ciertas filas y/o ciertas columnas en una tabla. Puedes hacerlo con where().

Puedes aprender más sobre las operaciones de tabla y datos disponibles aquí.

t.select(t.task, t.omn_response, t.ml_response, t.large_readability_score, t.open_readability_score).where(t.task == 'summarization').collect()
task                                       omn_response  \
0  summarization  Mistral AI is a French company specializing in...   
1  summarization  Mistral AI is a prominent developer of AI mode...   

                                         ml_response  large_readability_score  \
0  Mistral AI is a French firm specializing in AI...                  184.505   
1  Mistral AI is a company known for creating adv...                  183.490   

   open_readability_score  
0                 184.505  
1                 188.565
task omn_response ml_response large_readability_score open_readability_score
summarization Mistral AI es una empresa francesa especializada en investigación y desarrollo de IA, con el objetivo de crear y aplicar tecnologías de IA en diversas industrias. Mistral AI es una empresa francesa especializada en investigación y desarrollo de IA, con un enfoque en la implementación de tecnologías de IA en varias industrias. 184.505 184.505
summarization Mistral AI es un desarrollador prominente de modelos de IA, conocido por sus asociaciones estratégicas y lanzamientos recientes de modelos. Mistral AI es una empresa conocida por crear modelos avanzados de IA y recientemente ha ganado atención por sus colaboraciones y nuevos lanzamientos de modelos. 183.49 188.565

El esquema de Pixeltable proporciona una vista holística de la ingesta de datos, las llamadas a la API de inferencia y el cálculo de métricas, lo que refleja todo tu flujo de trabajo.

t
table 'mistral_prompts'

            Column Name   Type                                                                                                                                                             Computed With
                   task string                                                                                                                                                                          
                 system string                                                                                                                                                                          
             input_text string                                                                                                                                                                          
      open_mistral_nemo   json chat_completions([{'role': 'system', 'content': system}, {'role': 'user', 'content': input_text}], top_p=0.9, model='open-mistral-nemo', temperature=0.7, max_tokens=300)
         mistral_medium   json    chat_completions([{'role': 'system', 'content': system}, {'role': 'user', 'content': input_text}], top_p=0.9, model='mistral-medium', temperature=0.7, max_tokens=300)
           omn_response string                                                                                                               open_mistral_nemo.choices[0].message.content.astype(string)
            ml_response string                                                                                                                  mistral_medium.choices[0].message.content.astype(string)
  large_sentiment_score  float                                                                                                                                          get_sentiment_score(ml_response)
         large_keywords   json                                                                                                                                             extract_keywords(ml_response)
large_readability_score  float                                                                                                                                        calculate_readability(ml_response)
   open_sentiment_score  float                                                                                                                                         get_sentiment_score(omn_response)
          open_keywords   json                                                                                                                                            extract_keywords(omn_response)
 open_readability_score  float                                                                                                                                       calculate_readability(omn_response)
Column Name Type Computed With
task string
system string
input_text string
open_mistral_nemo json chat_completions([{'role': 'system', 'content': system}, {'role': 'user', 'content': input_text}], top_p=0.9, model='open-mistral-nemo', temperature=0.7, max_tokens=300)
mistral_medium json chat_completions([{'role': 'system', 'content': system}, {'role': 'user', 'content': input_text}], top_p=0.9, model='mistral-medium', temperature=0.7, max_tokens=300)
omn_response string open_mistral_nemo.choices[0].message.content.astype(string)
ml_response string mistral_medium.choices[0].message.content.astype(string)
large_sentiment_score float get_sentiment_score(ml_response)
large_keywords json extract_keywords(ml_response)
large_readability_score float calculate_readability(ml_response)
open_sentiment_score float get_sentiment_score(omn_response)
open_keywords json extract_keywords(omn_response)
open_readability_score float calculate_readability(omn_response)
Lección del curso «Mistral Cookbook» de Mistral AI, publicado con licencia MIT. Traducción y adaptación al español de IA con Clase. IA con Clase no está afiliado a Mistral AI. Ver el original · Licencia
Esta lección es gratuita. El resto del curso se abre con la Membresía de IA con Clase, que incluye todos los cursos del catálogo. Ver precios
← AnteriorSiguiente: Agente de soporte bancario con Mistral AI y PydanticAI →