El diseño e ingeniería de instrucciones se destaca como uno de los métodos más accesibles para generar resultados significativos a partir de un modelo de lenguaje grande (LLM). Sin embargo, crear instrucciones para modelos de lenguaje grandes puede ser como navegar por un laberinto complejo.
Diseñar una instrucción es una disciplina relativamente nueva y hay varias técnicas que deben explorarse. Para tener una idea general, consulta la guía de ingeniería rápida. Además, para obtener el mejor rendimiento de un LLM, debes experimentar con varias combinaciones de instrucciones y ejemplos a fin de lograr el resultado deseado. Además, incluso si encuentras la plantilla de instrucción ideal, no hay garantía de que la instrucción obtenga el mismo resultado con un LLM diferente. En consecuencia, terminas pasando más tiempo migrando o traduciendo una plantilla de instrucción de un modelo a otro.
Para mitigar la “fatiga relacionada con instrucciones” que uno podría experimentar al crear apps basadas en LLM, presentamos Vertex AI Prompt Optimizer en versión preliminar pública. En este blog, descubrirás cómo puedes comenzar a usar Vertex AI Prompt Optimizer con el SDK de Vertex AI para Python. Al final de este artículo, comprenderás mejor la esencia de Vertex AI Prompt Optimizer y cómo te ayudará a ahorrar tiempo y esfuerzo en la ingeniería de instrucciones, al tiempo que garantizará que las instrucciones de alto rendimiento estén listas para tus apps de IA generativa.
Vertex AI Prompt Optimizer es un servicio de optimización de instrucciones que ayuda a los usuarios a encontrar la mejor instrucción (indicaciones y demostraciones) para el modelo preferido en Vertex AI, donde las instrucciones incluyen la instrucción del sistema, el contexto y la tarea de tu plantilla de instrucciones, y las demostraciones son los ejemplos de pocos disparos que proporcionas en tu instrucción para obtener un estilo o un tono específico de la respuesta del modelo. Vertex AI Prompt Optimizer se basa en el documento de Google Research sobre métodos de optimización automática de instrucciones (APO) (aceptado por NeurIPS 2024).
Imagina que quieres resolver un problema matemático como el siguiente. Necesitas instrucciones y ejemplos claros que te ayuden a resolverlo. Las instrucciones nos dicen las reglas para resolver los problemas (por ejemplo, cómo tratar los números negativos). Los ejemplos demuestran cómo aplicar las reglas. Esa es la idea sobre la que se basa Vertex AI Prompt Optimizer.
Para encontrar las mejores instrucciones y ejemplos, Vertex AI Prompt Optimizer utiliza un algoritmo de optimización iterativo basado en LLM, donde el modelo optimizador y el modelo evaluador trabajan en conjunto para generar y evaluar las indicaciones candidatas y, posteriormente, selecciona las mejores instrucciones y demostraciones en función de las métricas de evaluación que el usuario desea optimizar. A continuación, puedes ver una ilustración de cómo funciona Vertex AI Prompt Optimizer.
Con solo unos pocos ejemplos etiquetados (par de entrada y salida de datos objetivos) y configuración de optimización, Vertex AI Prompt Optimizer encuentra la mejor instrucción (indicación y demostraciones) para el modelo de destino, lo que permite ahorrar mucho tiempo y esfuerzo a los usuarios. En última instancia, el producto agiliza el proceso de diseño e ingeniería de instrucciones, y mejora la calidad general de las apps basadas en LLM. Los usuarios ahora pueden crear una nueva instrucción para una tarea en particular o traducir una instrucción de un modelo a otro en Vertex AI con facilidad.
Ahora que comprendes mejor cómo funciona Vertex AI Prompt Optimizer, veamos cómo mejorar una instrucción para usarla con un modelo de Google en Vertex AI.
Imagina que estás creando un simple asistente de cocina con IA que proporciona sugerencias sobre cómo cocinar platos más saludables. Por ejemplo, preguntas “¿Cómo se crean postres saludables que sigan siendo deliciosos y satisfactorios, que tengan el mínimo de azúcar agregado y grasas no saludables?”. Y el asistente de cocina de IA responde: “Aquí hay algunos consejos sobre cómo lograr este equilibrio en tu receta, con el mínimo de azúcar agregado y grasas no saludables:...”. A continuación, tienes un ejemplo de una respuesta generada.
La versión inicial del asistente de cocina de IA utiliza un LLM con la siguiente plantilla de instrucción simple:
Dada una pregunta con algo de contexto, proporciona la respuesta correcta a la pregunta. \nPregunta:{{question}}\nContexto:{{context}}\nRespuesta: {{target}}
Con base en el conjunto de datos de evaluación de preguntas y respuestas que recopilaste y las métricas de evaluación de preguntas y respuestas calculadas utilizando el servicio de evaluación de IA generativa de Vertex AI, la versión inicial de tu asistente de cocina de IA puede generar respuestas de alta calidad y contextualmente relevantes. Este es un resumen del informe de métricas de evaluación.
No está mal, pero hay margen de mejora en la calidad de las respuestas generadas con respecto a las preguntas asociadas. Imaginemos que quieres utilizar modelos de Gemini 1.5 Flash como LLM más eficaces para tu asistente, pero no tienes experiencia previa con la familia de modelos de Gemini y no puedes encontrar una plantilla de instrucción de mayor rendimiento para completar la tarea con Gemini 1.5 Flash. Aquí es donde entra en juego Vertex AI Prompt Optimizer.
Si deseas utilizar Vertex AI Prompt Optimizer para mejorar tu plantilla de instrucción, sigue estos pasos:
Para empezar, prepara la plantilla de instrucción que deseas optimizar. Vertex AI Prompt Optimizer espera una instrucción con la plantilla de instrucción, que es una parte fija de la plantilla de instrucción compartida en todas las consultas para una tarea determinada, y el contexto y la plantilla del trabajo, que es la parte dinámica de la plantilla de instrucción y cambia en función del trabajo. A continuación, puedes ver la plantilla original que preparas para usar con Vertex AI Prompt Optimizer en un trabajo de preguntas y respuestas.
INSTRUCTION_TEMPLATE = """
Given a question with some context, provide the correct answer to the question.
"""
CONTEXT_TASK_TEMPLATE = """
Question: {{question}}
Answer: {{target}}
"""
A continuación, Vertex AI Prompt Optimizer solicita un archivo CSV o JSONL que contenga muestras etiquetadas (pares de entrada y salida de datos objetivos) que se utilizarán durante el proceso de optimización. En este caso de uso, se recomienda etiquetar ejemplos de los modelos de origen con los que el modelo de destino tiene dificultades. Así, se ayudaría a identificar áreas de mejora. Aquí puedes ver un ejemplo del ejemplo etiquetado que cargas al bucket de Google Cloud.
{"target":"Here\'s how to tackle those delicious red meats and pork while keeping things healthy:\\n\\n**Prioritize Low and Slow:**\\n\\n* **Braising and Stewing:** These techniques involve gently simmering meat in liquid over low heat for an extended period. This breaks down tough collagen, resulting in incredibly tender and flavorful meat. Plus, since the cooking temperature is lower, it minimizes the formation of potentially harmful compounds associated with high-heat cooking. \\n\\n* **Sous Vide:** This method involves sealing meat in a vacuum bag and immersing it in a precisely temperature-controlled water bath...","question":"What are some techniques for cooking red meat and pork that maximize flavor and tenderness while minimizing the formation of unhealthy compounds? \\n\\nnContext:\\nRed meat and pork should be cooked to an internal temperature of 145\\u00b0F (63\\u00b0C) to ensure safety. \\nMarinating meat in acidic ingredients like lemon juice or vinegar can help tenderize it by breaking down tough muscle fibers. \\nHigh-heat cooking methods like grilling and pan-searing can create delicious browning and caramelization, but it\'s important to avoid charring, which can produce harmful compounds. \\n"}
Para ejecutar el trabajo de optimización de la instrucción, Vertex AI Prompt Optimizer también exige configurar los ajustes de optimización. El trabajo de Vertex AI Prompt Optimizer se ejecuta como trabajo personalizado de entrenamiento de Vertex AI. Admite cualquier modelo de Google compatible con la API de LLM de Vertex y una amplia gama de métricas de evaluación, basadas en computación o en LLM, o incluso las definidas por los usuarios. Esto se debe a que Vertex AI Prompt Optimizer está integrado con Vertex Rapid Evaluation Service. Para pasar estas configuraciones, Vertex AI Prompt Optimizer acepta una lista de argumentos o la ruta de archivo del bucket de Google Cloud de un archivo de configuración JSON. Estos son algunos ejemplos de configuraciones básicas en Vertex AI Prompt Optimizer.
params = {
'num_steps': OPTIMIZATION_STEPS,
'system_instruction': SYSTEM_INSTRUCTION,
'prompt_template': PROMPT_TEMPLATE,
'target_model': TARGET_MODEL,
'eval_metrics_types': EVALUATION_METRICS,
'optimization_mode': OPTIMIZATION_MODE,
'num_template_eval_per_step': OPTIMIZATION_PROMPT_PER_STEPS,
'num_demo_set_candidates': DEMO_OPTIMIZATION_STEPS,
'demo_set_size': DEMO_OPTIMIZATION_PROMPT_PER_STEPS,
'input_data_path': INPUT_DATA_FILE_URI,
'output_data_path': OUTPUT_DATA_FILE_URI,
}
Vertex AI Prompt Optimizer te permite optimizar las instrucciones optimizando solo las indicaciones, solo la demostración o ambas (optimization_mode
), y después de configurar la indicación del sistema, las plantillas de instrucción que se optimizarán (system_instruction
, prompt_template
) y el modelo para el que deseas realizar la optimización (target_model
), te permite condicionar el proceso de optimización estableciendo las métricas de evaluación, el número de iteraciones utilizadas para mejorar la instrucción y mucho más. Consulta la documentación para obtener más información sobre los parámetros de optimización admitidos.
Una vez que tengas tanto los ejemplos como la configuración, cárgalos en el bucket de Google Cloud, como se muestra a continuación.
from etils import epath
# upload configuration
with epath.Path(CONFIG_FILE_URI).open('w') as config_file:
json.dump(args, config_file)
config_file.close()
# upload prompt opt dataset
prepared_prompt_df.to_json(INPUT_DATA_FILE_URI, orient="records", lines=True)
A esta altura, tienes todo listo para ejecutar tu primer trabajo de Vertex AI Prompt Optimizer utilizando el SDK de Vertex AI para Python.
WORKER_POOL_SPECS = [{
'machine_spec': {
'machine_type': 'n1-standard-4',
},
'replica_count': 1,
'container_spec': {
'image_uri' : APD_CONTAINER_URI,
'args': ["--config=" + CONFIG_FILE_URI]
}}]
custom_job = aiplatform.CustomJob(
display_name=PROMPT_OPTIMIZATION_JOB,
worker_pool_specs=WORKER_POOL_SPECS,
)
custom_job.run()
Observa cómo Vertex AI Prompt Optimizer se ejecuta como un trabajo personalizado de entrenamiento de Vertex AI utilizando el contenedor de Vertex AI Prompt Optimizer. El hecho de que este servicio aproveche tanto el entrenamiento de Vertex AI como el servicio de evaluación de IA generativa de Vertex es una prueba de cómo Vertex AI proporciona una plataforma para ejecutar IA generativa, incluso en los casos que provienen directamente de la investigación, como este.
Después de enviar el trabajo de Vertex AI Prompt Optimizer, puedes supervisarlo desde la vista de trabajos personalizados de entrenamiento de Vertex AI, como se muestra aquí.
Después de que el trabajo de optimización se ejecute correctamente, puedes encontrar indicaciones o demostraciones optimizadas, o ambas, como archivos JSON en el bucket de salida de Cloud Storage. Gracias a algunas funciones auxiliares, puedes obtener el siguiente resultado, que indica el paso de optimización cuando obtienes la mejor instrucción de acuerdo con las métricas que defines.
El mismo resultado se obtiene para las demostraciones optimizadas.
Finalmente, puedes generar las nuevas respuestas con el resultado optimizado. Aquí puedes ver un ejemplo de una respuesta generada utilizando la plantilla de instrucciones del sistema optimizada.
Y si las usas para ejecutar una nueva ronda de evaluación con el servicio de evaluación de IA generativa de Vertex AI, es posible que obtengas un resultado como el que se muestra a continuación, donde la instrucción optimizada supera al modelo anterior con la plantilla de instrucción anterior correspondiente a las métricas de evaluación que seleccionaste.
La ingeniería de instrucciones es uno de los pasos más importantes y desafiantes del proceso de puesta en funcionamiento de las apps basadas en LLM. Para ayudarte a elaborar tu plantilla de instrucción, Vertex AI Prompt Optimizer encuentra la mejor instrucción (indicaciones y demostraciones) para cualquier modelo preferido en Vertex AI.
En este artículo, se incluyó un ejemplo de cómo puedes usar Vertex AI Prompt Optimizer a fin de mejorar tu plantilla de instrucción para un modelo de Gemini usando el SDK de Vertex AI para Python. También puedes usar Vertex AI Prompt Optimizer a través del bloc de notas de la IU aquí.
En resumen, Vertex AI Prompt Optimizer puede hacerte ahorrar tiempo y esfuerzo en la ingeniería de instrucciones, al tiempo que te garantiza obtener instrucciones de alto rendimiento para tus aplicaciones de IA generativa.
¡Gracias por leer!
¿Quieres obtener más información sobre Vertex AI Prompt Optimizer y cómo usarlo? Consulta los siguientes recursos: