040_advanced_list_generation_coding - IUGO-Studio/tech-ia GitHub Wiki
Resumen general:
El video se enfoca en la generación de listas jerárquicas (anidadas) con GPT-4 y cómo obtenerlas en diferentes formatos, específicamente JSON y YAML. Se muestra cómo, a través de un ejemplo claro en el prompt (in-context learning), se puede guiar al modelo para que genere la estructura de lista deseada. Luego, se exploran dos enfoques: 1) usar expresiones regulares (RegEx) para extraer la estructura de la lista generada en texto plano y convertirla a JSON, y 2) solicitar directamente al modelo que genere la respuesta en formato JSON, proporcionando un ejemplo de la estructura JSON deseada. Finalmente, se demuestra la capacidad de GPT-4 como "traductor universal de datos" al generar la lista en formato YAML, simplemente cambiando el ejemplo en el prompt.
Conceptos clave:
- Listas jerárquicas (anidadas): Listas que contienen sublistas, creando una estructura de árbol.
- JSON (JavaScript Object Notation): Un formato ligero de intercambio de datos, comúnmente utilizado en aplicaciones web.
- YAML (YAML Ain't Markup Language): Otro formato de serialización de datos, conocido por su legibilidad.
- Expresiones regulares (RegEx): Secuencias de caracteres que definen un patrón de búsqueda. Se utilizan para extraer información específica de texto.
- In-Context Learning: Dar ejemplos al modelo en el prompt, para influir en el resultado.
- Mensaje del sistema (System Message): Un tipo de mensaje en la API de OpenAI que proporciona instrucciones generales al modelo, como "Siempre devuelve JSON válido".
- Pip install: Comando para instalar paquetes de Python.
- Prompt Engineering: El arte de crear prompts para obtener lo deseado por parte de los LLM.
- LLM: Modelo de lenguaje extenso.
Ejemplos prácticos:
-
Generación de lista anidada en texto plano:
- Prompt: Se proporciona un ejemplo de la estructura de lista anidada deseada.
- Respuesta: El modelo genera una lista anidada en texto plano, siguiendo el ejemplo.
-
Extracción de la estructura de lista con RegEx y conversión a JSON:
- Se utiliza una expresión regular (creada con ayuda de ChatGPT) para extraer los elementos de la lista (títulos de sección, subsecciones) del texto plano.
- Se construye un objeto JSON a partir de la información extraída.
- Este enfoque se presenta como más propenso a errores, ya que depende de la precisión de la RegEx y de que el modelo haya generado el texto plano en un formato consistente.
-
Generación directa de JSON:
- Prompt: Se modifica el prompt para solicitar explícitamente que la respuesta sea en formato JSON válido, y se proporciona un ejemplo de la estructura JSON deseada.
- Respuesta: El modelo genera directamente la lista anidada en formato JSON.
- Este enfoque se considera más robusto y eficiente, ya que elimina la necesidad de un paso intermedio de procesamiento con RegEx.
-
Generación de YAML:
- Prompt: Se modifica el prompt para proporcionar un ejemplo de la estructura de lista en formato YAML.
- Respuesta: El modelo genera la lista anidada en formato YAML.
- Se demuestra la flexibilidad de GPT-4 para generar diferentes formatos de datos.
Consejos y buenas prácticas:
- Proporciona ejemplos claros: La clave para obtener la estructura de lista deseada (ya sea en texto plano, JSON o YAML) es proporcionar un ejemplo claro en el prompt.
- Solicita directamente el formato deseado: En lugar de generar texto plano y luego procesarlo, es más eficiente y confiable solicitar directamente al modelo que genere la respuesta en el formato deseado (JSON, YAML, etc.).
- Utiliza el mensaje del sistema para instrucciones generales: Si necesitas que el modelo siempre siga una instrucción específica (como "Siempre devuelve JSON válido"), utiliza el mensaje del sistema.
-
Valida el JSON/YAML generado: Utiliza las funciones
json.loads()
(para JSON) oyaml.safe_load()
(para YAML) para verificar que el modelo ha generado un formato válido y para convertirlo en un objeto de Python. - Si el modelo falla, reintenta: En el video se menciona que si la respuesta no es un JSON/YAML válido, se puede intentar de nuevo, dado que a veces los LLMs pueden cometer errores.
Dudas o preguntas:
-
¿Cómo se puede adaptar esta técnica para generar listas con estructuras más complejas, como listas con diferentes tipos de datos o niveles de anidamiento variables? Investigación: Se pueden proporcionar ejemplos más complejos en el prompt, que reflejen la estructura deseada. También se puede explorar el uso de esquemas (schemas) para definir la estructura de datos de forma más precisa.
-
¿Qué otras técnicas de prompting se pueden combinar con esta para mejorar la calidad y la consistencia de las listas generadas? Investigación: Se pueden combinar con técnicas como "Chain of Thought" (para guiar al modelo en la generación de la estructura paso a paso) o "Self-Consistency Sampling" (para generar múltiples listas y seleccionar la mejor).
-
¿El uso de mensajes del sistema siempre garantiza que el modelo siga la instrucción? Investigación: No siempre, pero aumenta significativamente la probabilidad de que el modelo siga la instrucción, especialmente con modelos como GPT-4. Sin embargo, siempre es recomendable validar la salida del modelo.
-
En el video se menciona "GPT-4 is a universal translator of data", ¿qué tan universal es? Investigación: GPT-4 ha demostrado una gran capacidad para comprender y generar una amplia variedad de formatos de datos, incluyendo JSON, YAML, XML, CSV, HTML, Markdown, e incluso código en diferentes lenguajes de programación. Sin embargo, su capacidad no es ilimitada y puede tener dificultades con formatos muy especializados o con estructuras de datos extremadamente complejas. La clave, como se muestra en el video, es proporcionarle ejemplos claros del formato que se desea.
-
¿Cuál es la diferencia entre usar expresiones regulares y pedirle directamente el formato deseado al LLM? La principal diferencia radica en la eficiencia, la confiabilidad y la complejidad del código.
-
Expresiones regulares:
- Menos eficiente: Implica un paso adicional de procesamiento (extraer la información del texto generado).
- Menos confiable: La expresión regular debe ser muy precisa para capturar todos los casos posibles, y puede fallar si el modelo genera texto en un formato ligeramente diferente al esperado.
- Más complejo: Requiere escribir y mantener una expresión regular, lo que puede ser complicado, especialmente para estructuras de datos complejas.
-
Pedir directamente el formato (JSON, YAML, etc.):
- Más eficiente: Elimina el paso adicional de procesamiento.
- Más confiable: El modelo está optimizado para generar formatos estructurados como JSON y YAML.
- Menos complejo: No requiere escribir expresiones regulares. Simplemente se proporciona un ejemplo del formato deseado en el prompt.
-