095_sammo_introduction - IUGO-Studio/tech-ia GitHub Wiki
Resumen general:
El video presenta SAMMO, una biblioteca de Microsoft para la creación, prueba y optimización de prompts. Se explica cómo usar SAMMO para interactuar con la API de OpenAI, manejar el historial de conversaciones, visualizar el flujo de ejecución de los prompts ("plot trace"), ejecutar prompts en bucle y en paralelo (utilizando ForEach
y DataTable
), y extraer información de las respuestas utilizando expresiones regulares (RegEx). Se enfatiza la capacidad de SAMMO para ejecutar tareas de forma asíncrona, lo que acelera el procesamiento.
Conceptos clave:
- SAMMO: Una biblioteca de Microsoft para la creación, prueba y optimización de prompts.
-
Runner: En SAMMO, un objeto que se utiliza para ejecutar un modelo de lenguaje (ej:
OpenAIChat
para la API de OpenAI). -
Component: En SAMMO, un bloque de construcción básico para crear prompts y procesar respuestas (ej:
GenerateText
,Output
,ForEach
,DataTable
,ExtractRegex
). - Plot Trace: Una visualización que muestra el flujo de ejecución de un prompt, incluyendo las entradas, las salidas y los componentes intermedios.
- Plot Program: Una visualización de la estructura de un programa/pipeline, sin ejecutarlo.
- ForEach: Un componente de SAMMO que permite iterar sobre una lista de elementos y aplicar un prompt a cada elemento.
- DataTable: Un componente de SAMMO que permite ejecutar un prompt en paralelo sobre un conjunto de datos, similar a un DataFrame de Pandas.
- Expresiones regulares (RegEx): Patrones que se utilizan para buscar y extraer información específica de texto.
- Asíncrono (Async): Una técnica de programación que permite ejecutar múltiples tareas simultáneamente.
- Cache: Almacena resultados para evitar repetir llamadas a la API.
- Prompt Engineering: El arte de diseñar prompts.
- LLM: Modelo de lenguaje extenso.
Ejemplos prácticos:
-
Interacción básica con la API de OpenAI:
- Se crea un "runner" para la API de OpenAI (
OpenAIChat
). - Se define un prompt y un "system prompt".
- Se utiliza el componente
GenerateText
para generar una respuesta a partir del prompt. - Se utiliza el componente
Output
para mostrar la respuesta.
- Se crea un "runner" para la API de OpenAI (
-
Manejo del historial de conversaciones:
- Se utiliza el parámetro
history
enGenerateText
para pasar el historial de conversaciones al modelo.
- Se utiliza el parámetro
-
Visualización del flujo de ejecución ("plot trace"):
- Se utiliza el método
plot_trace()
en la salida de un programa SAMMO para visualizar el flujo de ejecución del prompt.
- Se utiliza el método
-
Ejecución de prompts en bucle:
- Se utiliza un bucle
for
para ejecutar el mismo prompt varias veces, cambiando una variable (ej:seed
para controlar la aleatoriedad). - Se utiliza el componente
Union
para combinar las salidas de las diferentes ejecuciones.
- Se utiliza un bucle
-
Ejecución de prompts en paralelo con
ForEach
:- Se utiliza el componente
ForEach
para iterar sobre una lista de modelos generados por un prompt previo y aplicar un nuevo prompt a cada modelo. - Se utiliza el componente
ExtractRegex
para extraer los nombres de los modelos de la respuesta del primer prompt.
- Se utiliza el componente
-
Ejecución de prompts en paralelo con
DataTable
:- Se crea un
DataTable
con una lista de números. - Se utiliza el
DataTable
como entrada para un prompt que genera la letra griega correspondiente a cada número. - Se muestra cómo SAMMO ejecuta el prompt en paralelo para cada número.
- Se crea un
Consejos y buenas prácticas:
- Utiliza SAMMO para simplificar la interacción con la API de OpenAI: SAMMO proporciona una interfaz más sencilla y funcionalidades adicionales como el manejo del historial de conversaciones y la ejecución asíncrona.
- Utiliza "plot trace" para depurar tus prompts: Esta visualización te permite ver el flujo de ejecución y entender cómo se generan las respuestas.
- Utiliza "plot program" para entender la estructura: Te permite ver la estructura del programa sin necesidad de ejecutarlo.
-
Utiliza
ForEach
yDataTable
para ejecutar prompts en paralelo: Esto puede acelerar significativamente el procesamiento, especialmente cuando se trabaja con grandes cantidades de datos. -
Utiliza
ExtractRegex
para extraer información específica de las respuestas: Esto te permite procesar las respuestas del modelo de forma más estructurada. - Aprovecha la capacidad de SAMMO para manejar la asincronía: Esto te permite ejecutar múltiples tareas simultáneamente y mejorar la eficiencia de tus programas.
- "Port Union": Es un componente de SAMMO. Su función principal es combinar las salidas de múltiples ejecuciones de un prompt (o de varios prompts) en una única salida.
- "Seed": Controla la aleatoriedad del LLM. Al fijar el seed, se obtienen resultados reproducibles. Al variar el seed, se obtienen resultados diferentes (dentro de lo que permite la temperatura).
Dudas o preguntas:
-
¿Cómo se puede adaptar SAMMO para utilizar otros modelos de lenguaje, además de los de OpenAI? Investigación: SAMMO tiene soporte integrado para varios modelos, no solo los de OpenAI. Se pueden usar otros "runners" (como
HuggingFacePipelineRunner
para modelos de Hugging Face). -
¿Cómo se pueden combinar diferentes componentes de SAMMO para crear flujos de trabajo más complejos? Investigación: Se pueden anidar componentes
ForEach
dentro de otros componentes, o se pueden utilizar componentes personalizados para implementar lógicas más complejas. -
¿Cuáles son las ventajas y desventajas de utilizar SAMMO en comparación con otras bibliotecas o frameworks para la interacción con modelos de lenguaje, como LangChain?
-
Ventajas de SAMMO (según el video y la documentación):
- Simplicidad: SAMMO se enfoca en simplificar la creación de prompts y la interacción con la API de OpenAI.
- Asincronía: Maneja la ejecución asíncrona de forma nativa, lo que facilita el procesamiento en paralelo.
- Visualización: Ofrece herramientas de visualización (plot_trace, plot_program) que ayudan a entender el flujo de ejecución y la estructura de los prompts.
- Extracción con Regex: Facilita la extracción de información de las respuestas.
- Tipado: Utiliza tipado estático (static typing), lo que puede ayudar a prevenir errores.
-
Desventajas de SAMMO (en comparación con LangChain):
- Menos flexible: LangChain ofrece más componentes y mayor flexibilidad para construir flujos de trabajo complejos.
- Menos popular: LangChain tiene una comunidad más grande y más recursos disponibles.
- Menos integraciones: LangChain tiene más integraciones con otras herramientas y servicios.
SAMMO parece ser una buena opción para tareas relativamente simples donde la simplicidad y la facilidad de uso son prioritarias, y donde se necesita ejecución asíncrona y visualización. LangChain es una opción más adecuada para tareas más complejas que requieren mayor flexibilidad y más componentes.
-
Ventajas de SAMMO (según el video y la documentación):