Metaprompting con O1: Optimizando Rutinas Basadas en LLMs
En este artículo exploraremos cómo usar el modelo O1-mini para generar y mejorar rutinas basadas en modelos de lenguaje grande (LLMs). Este enfoque permite optimizar tareas como la generación de políticas de servicio al cliente, el ajuste de instrucciones y la evaluación iterativa para mejorar resultados en contextos dinámicos.
Introducción a Metaprompting
El metaprompting consiste en el uso de un modelo de lenguaje para analizar y mejorar iterativamente un conjunto de instrucciones o políticas, utilizando evaluaciones previas como guía. Esta técnica es particularmente útil cuando se trabaja con rutinas de alta complejidad, como políticas de cancelación de vuelos, donde múltiples herramientas y pasos deben coordinarse eficientemente.
¿Por qué usar O1?
- Optimización iterativa: Permite ajustar rutinas basadas en evaluaciones previas.
- Compatibilidad: Diseñado para trabajar con herramientas específicas definidas por el usuario.
- Flexibilidad: Admite cambios en el formato y enfoque de las instrucciones.
Caso Práctico: Política de Cancelación de Vuelos
Paso 1: Generar la Rutina
Comenzamos con una política de servicio al cliente escrita en texto plano y la convertimos en una rutina estructurada usando O1-mini.
Código para Generar la Rutina
from openai import OpenAI
client = OpenAI(api_key=openai_api_key)
CONVERSION_PROMPT = """
You are a helpful assistant tasked with taking an external-facing help center policy and converting it into a structured routine.
... (instrucciones detalladas para el formato y condiciones específicas)
"""
with open('originalPolicy/flightCancellationsPolicy.md', 'r') as file:
flight_cancellation_policy = file.read()
messages = [
{
"role": "user",
"content": f"""{CONVERSION_PROMPT}\nPOLICY:\n{flight_cancellation_policy}"""
}
]
response = client.chat.completions.create(
model='o1-mini',
messages=messages
)
print(response.choices[0].message.content)
El resultado es una rutina en formato estructurado que incluye pasos numerados, subpasos y condiciones específicas.
Paso 2: Verificar la Calidad de la Rutina
Una vez generada, verificamos que la rutina utilice exclusivamente las herramientas definidas en nuestra lista de TOOLS
.
Código para Verificación
import re
from collections import Counter
def extract_function_names(text):
pattern = r'`(.*?)`'
return re.findall(pattern, text)
# Funciones utilizadas en la rutina
function_names_from_routine = set(extract_function_names(response.choices[0].message.content))
# Funciones definidas en TOOLS
function_names_defined = [tool["function"]["name"] for tool in TOOLS]
# Diferencias
unused_functions = set(function_names_defined) - function_names_from_routine
extra_functions = function_names_from_routine - set(function_names_defined)
print("Funciones no utilizadas:", unused_functions)
print("Funciones adicionales requeridas:", extra_functions)
Este proceso asegura que la rutina generada esté alineada con las herramientas disponibles.
Paso 3: Evaluar y Mejorar la Rutina
Evaluación
Corremos la rutina contra un conjunto de datos de prueba para medir su precisión y determinar áreas de mejora.
Código para Evaluación
from concurrent.futures import ThreadPoolExecutor
import pandas as pd
# Evaluar llamadas a funciones
def evaluate_function_calls(df, policy, model):
records = []
with ThreadPoolExecutor() as executor:
futures = {executor.submit(process_row, row_number, row, policy, model): row_number for row_number, row in df.iterrows()}
for future in futures:
records.append(future.result())
eval_df = pd.DataFrame(records)
accuracy = eval_df['is_correct'].mean()
return eval_df, accuracy
# Resultados iniciales
eval_df = pd.read_csv('evals/policyEvals.csv')
eval_results, initial_accuracy = evaluate_function_calls(eval_df, flight_cancellation_policy, 'gpt-4o-mini')
print("Precisión inicial:", initial_accuracy)
Mejora de la Rutina
Iteramos sobre la rutina usando un bucle de metaprompting para incorporar cambios basados en los resultados de evaluación.
for i in range(3):
messages = [
{
"role": "user",
"content": f"""# Data\nRoutine: {current_routine}\nResults: {eval_results.to_json()}"""
}
]
response = client.chat.completions.create(
model='o1-mini',
messages=messages
)
updated_routine = response.choices[0].message.content
current_routine = updated_routine
eval_results, accuracy = evaluate_function_calls(eval_df, current_routine, 'gpt-4o-mini')
print(f"Iteración {i+1}, Precisión: {accuracy}")
El objetivo es maximizar la precisión del modelo mientras se mantiene la consistencia con la política original.
Conclusión
El metaprompting con O1 es una herramienta poderosa para optimizar rutinas basadas en LLMs. Desde la generación inicial hasta la mejora iterativa, este enfoque asegura que las rutinas sean precisas, consistentes y adaptadas a herramientas específicas.