Metaprompting con O1: Optimizando Rutinas Basadas en LLMs

Jaime Hernández
3 min readDec 29, 2024

--

https://www.kdnuggets.com/getting-started-with-openai-o1-reasoning-models

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.

Recursos Relacionados

--

--

No responses yet