1. Fundamentos de los Modelos de Generación de Texto
El modelo de generación de texto de OpenAI, comúnmente conocido como Generative Pre-trained Transformer (GPT), se basa en el mecanismo de auto-atención en el aprendizaje profundo para comprender y procesar el lenguaje natural. El entrenamiento del modelo GPT consta de dos etapas: pre-entrenamiento y ajuste fino.
Pre-entrenamiento
Durante la etapa de pre-entrenamiento, el modelo se somete a aprendizaje no supervisado utilizando un conjunto de datos de texto a gran escala. En este proceso, el modelo se entrena prediciendo la siguiente palabra. Por ejemplo, dada la frase "Tengo un bolígrafo", después de ver las primeras palabras, intenta predecir la palabra "bolígrafo". El objetivo principal del pre-entrenamiento es permitir que el modelo comprenda la estructura y semántica del lenguaje.
Ajuste Fino
La etapa de ajuste fino implica el aprendizaje supervisado en tareas específicas. En esta etapa, el modelo se ajusta para adaptarse a aplicaciones particulares como sistemas de pregunta-respuesta y resúmenes de documentos. El ajuste fino implica entrenar aún más el modelo con conjuntos de datos anotados basados en el modelo pre-entrenado, lo que le permite adaptarse mejor a tareas específicas.
2. Escenarios de Aplicación
El modelo de generación de texto de OpenAI se puede aplicar a una amplia gama de escenarios. Aquí hay algunas aplicaciones específicas:
- Redacción de Documentos: Ayudando a los usuarios a redactar y editar documentos rápidamente.
- Escritura de Código Informático: Generando fragmentos de código para ayudar en la programación.
- Responder Preguntas sobre una Base de Conocimientos: Proporcionar respuestas basadas en conocimiento almacenado.
- Análisis de Texto: Extraer información textual, analizar el sentimiento y más.
- Proporcionar una Interfaz de Lenguaje Natural para el Software: Permitir a los usuarios interactuar con el software utilizando lenguaje natural.
- Tutoría en una Variedad de Materias: Proporcionar orientación educativa en múltiples materias.
- Traducción de Idiomas: Traducir texto entre diferentes idiomas.
- Simulación de Personajes para Juegos: Generar diálogos e historias de fondo para juegos o escenarios de juegos de rol.
3. Introducción al Modelo de Diálogo
Un modelo de diálogo es un tipo especial de modelo de generación de texto que comprende y genera conversaciones naturales a través del pre-entrenamiento. Este modelo puede simular una conversación entre un usuario y un asistente virtual, adecuado para aplicaciones interactivas en tiempo real.
El uso de un modelo de diálogo generalmente implica conversaciones interactivas de múltiples turnos. Por ejemplo, cuando un usuario hace una pregunta, el modelo puede generar respuestas apropiadas basadas en datos de entrenamiento previos. Además, el modelo de diálogo puede mantener información contextual, considerando el contenido de la conversación anterior para generar respuestas más coherentes y naturales.
Escenarios de aplicación del modelo de diálogo:
- Asistentes de Servicio al Cliente: Responder automáticamente preguntas frecuentes de los usuarios, brindar asistencia y consejos.
- Chatbots: Participar en interacciones conversacionales naturales con los usuarios.
- Asistentes Virtuales: Ejecutar comandos de voz de los usuarios, como programar reuniones, establecer recordatorios y más.
- Juegos de Rol: Enriquecer la experiencia de juego dando a los personajes del juego diálogos y personalidades únicas.
4. API del Modelo de Diálogo
La API del Modelo de Diálogo permite a los desarrolladores interactuar con el modelo GPT mediante solicitudes HTTP. Esta sección introducirá cómo utilizar curl para construir solicitudes y analizar las respuestas devueltas por el modelo.
Construcción de Solicitudes
Antes de comenzar, debes registrarte y obtener una clave de API de OpenAI, que debe ser autenticada a través de encabezados HTTP al enviar solicitudes.
Aquí tienes un ejemplo de cómo usar curl para enviar una solicitud a la API del Modelo de Diálogo:
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "system",
"content": "Eres un asistente útil."
},
{
"role": "user",
"content": "¿Qué equipo ganó la Serie Mundial de 2020?"
}
]
}'
Significado de los Parámetros del Modelo de Diálogo
Al utilizar la API del Modelo de Diálogo de OpenAI, los parámetros principales incluyen "model" y "messages", cada uno con significados específicos que influyen en los resultados producidos.
Parámetros del Modelo
El parámetro del modelo se utiliza para especificar la versión del modelo que se va a utilizar. Por ejemplo, "modelo": "gpt-3.5-turbo"
indica que estás solicitando el modelo GPT-3.5-Turbo. La versión del modelo seleccionada aquí responderá a la entrada del usuario en función de sus capacidades, datos de entrenamiento y características de la interfaz.
Aquí están los modelos actualmente soportados:
Modelos Soportados | Máximo Contexto | Descripción del Modelo |
---|---|---|
gpt-4-0125-preview | 128,000 tokens | Modelo de previsualización GPT-4 Turbo diseñado para reducir los casos "perezosos", donde el modelo falla en completar tareas. |
gpt-4-turbo-preview | 128,000 tokens | Actualmente apunta al modelo gpt-4-0125-preview . |
gpt-4-1106-preview | 128,000 tokens | Modelo GPT-4 Turbo con capacidades mejoradas de ejecución de instrucciones, modo JSON, salida reproducible y llamadas de función paralelas. |
gpt-4-vision-preview | 128,000 tokens | Modelo GPT-4 con la capacidad de entender imágenes, además de todas las demás características de GPT-4 Turbo. |
gpt-4 | 8,192 tokens | Actualmente apunta a gpt-4-0613 . |
gpt-4-0613 | 8,192 tokens | Instantánea de GPT-4 del 13 de junio de 2023, que proporciona un soporte mejorado para llamadas de función. |
gpt-4-32k | 32,768 tokens | Actualmente apunta a gpt-4-32k-0613 . Este modelo no está ampliamente promocionado y prefiere el uso de GPT-4 Turbo. |
gpt-4-32k-0613 | 32,768 tokens | Versión de GPT-4 32k instantánea del 13 de junio de 2023. Este modelo no está ampliamente promocionado y prefiere el uso de GPT-4 Turbo. |
gpt-3.5-turbo-1106 | 16,385 tokens | El último modelo GPT-3.5 Turbo con una ejecución de instrucciones mejorada, modo JSON, salida reproducible y llamadas de función paralelas. |
gpt-3.5-turbo | 4,096 tokens | Actualmente apunta a gpt-3.5-turbo-0613 . |
gpt-3.5-turbo-16k | 16,385 tokens | Actualmente apunta a gpt-3.5-turbo-16k-0613 . |
gpt-3.5-turbo-instruct | 4,096 tokens | Funcionalmente similar a los modelos de la era GPT-3. Compatible con puntos finales de completado tradicionales, no adecuado para completado de chat. |
gpt-3.5-turbo-0613 | 4,096 tokens | Instantánea de gpt-3.5-turbo del 13 de junio de 2023. Será obsoleta el 13 de junio de 2024. |
gpt-3.5-turbo-16k-0613 | 16,385 tokens | Instantánea de gpt-3.5-16k-turbo del 13 de junio de 2023. Será obsoleta el 13 de junio de 2024. |
gpt-3.5-turbo-0301 | 4,096 tokens | Instantánea de gpt-3.5-turbo del 1 de marzo de 2023. Será obsoleta el 13 de junio de 2024. |
Parámetro de Mensajes
El parámetro de mensajes es una matriz, donde cada elemento representa un mensaje en la conversación. Cada mensaje es un objeto que contiene dos propiedades: rol (el rol del remitente) y contenido (el contenido específico del mensaje).
- rol: Especifica el rol del remitente para el mensaje. Los valores opcionales incluyen "sistema", "usuario" y "asistente".
- contenido: El contenido específico del mensaje.
Tipos y Funciones del Rol
El valor del parámetro de rol define el tipo y función del mensaje. La API de Diálogo cambiará la respuesta del modelo en función de diferentes roles.
Rol 'sistema'
Los mensajes del sistema se utilizan para indicar globalmente el comportamiento del modelo. Por ejemplo, puede especificar explícitamente el papel que desempeña el modelo (como asistente, traductor, etc.) o proporcionar instrucciones específicas a seguir en la conversación. Los mensajes del sistema tienen un impacto a largo plazo en el comportamiento del modelo a lo largo de la conversación, pero normalmente son opcionales.
Por ejemplo, si quieres que el modelo participe en la conversación como un asistente de servicio al cliente, puedes especificar en el mensaje del sistema:
{
"role": "system",
"content": "Eres un asistente de servicio al cliente."
}
Rol 'usuario'
Los mensajes de usuario representan las preguntas introducidas por el usuario. El modelo responde a estos mensajes y proporciona información, respuestas u otras formas de salida. Estos mensajes son una parte crucial del flujo de trabajo de la API de Diálogo y normalmente corresponden a consultas reales de los usuarios en la aplicación.
Por ejemplo, en la solicitud del usuario en el ejemplo de curl anterior:
{
"role": "user",
"content": "¿Qué equipo ganó la Serie Mundial de 2020?"
}
Rol 'asistente'
Los mensajes del asistente generalmente se refieren a las respuestas generadas por el modelo y también pueden formar parte de los mensajes de historial de conversación proporcionados por el desarrollador, utilizados para simular el formato de los mensajes de retorno de IA. En las solicitudes de API, los mensajes de rol de asistente generalmente no se proporcionan a menos que sea necesario preestablecer el formato en el que el modelo responde preguntas en el historial de conversación para proporcionar ejemplos de salida para el modelo.
Analizar la respuesta
La respuesta del modelo se devuelve en formato JSON. Aquí tienes un ejemplo de cómo analizar la respuesta:
{
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "El campeón de la Serie Mundial de 2020 es Los Angeles Dodgers.",
"role": "assistant"
},
"logprobs": null
}
],
"created": 1677664795,
"id": "chatcmpl-7QyqpwdfhqwajicIEznoc6Q47XAyW",
"model": "gpt-3.5-turbo-0613",
"object": "chat.completion",
"usage": {
"completion_tokens": 17,
"prompt_tokens": 57,
"total_tokens": 74
}
}
En la respuesta anterior, puedes obtener la respuesta del modelo desde choices[0].message.content
.
Cómo implementar la función de memoria en el modelo de diálogo
A continuación se muestra un ejemplo de cómo usar la API de Completado de Chat de OpenAI para implementar la función de memoria del modelo GPT, que demuestra cómo guardar el contexto de la conversación histórica (es decir, el contenido de la memoria) en una nueva solicitud API para lograr un diálogo continuo.
import requests
api_url = "https://api.openai.com/v1/chat/completions"
api_key = "Tu clave de API de OpenAI"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}
data = {
"model": "gpt-3.5-turbo", # Se puede reemplazar con gpt-4 u otros modelos disponibles
"messages": [
{
"role": "system", # Mensaje del sistema, utilizado para configurar el comportamiento del modelo de diálogo
"content": "Eres un asistente de ayuda."
},
{
"role": "user", # Mensaje del usuario, el modelo responderá a esto
"content": "¿Puedes decirme las principales razones del cambio climático?"
},
{
"role": "assistant", # Respuesta del modelo
"content": "Las principales razones del cambio climático incluyen emisiones de gases de efecto invernadero, combustión de combustibles fósiles y deforestación, etc."
},
{
"role": "user", # Nueva pregunta basada en la explicación del modelo
"content": "¿Cómo podemos reducir las emisiones de gases de efecto invernadero?"
}
]
}
response = requests.post(api_url, headers=headers, json=data)
if response.status_code == 200:
reply_content = response.json()['choices'][0]['message']['content']
print(f"Respuesta del modelo => {reply_content}")
else:
print(f"Error de solicitud: {response.status_code}")
En este ejemplo, simulamos que un usuario primero pregunta sobre las principales razones del cambio climático, y luego plantea otra pregunta basada en la explicación del modelo. En las solicitudes posteriores, mantenemos el contenido de la conversación anterior para asegurarnos de que el modelo pueda recordar la historia de la conversación anterior y generar una respuesta basada en ella. Este método logra la transmisión y memoria del estado del diálogo utilizando la entrada y salida de la ronda de conversación anterior como los mensajes de historial de la nueva solicitud.
Consejo: Para implementar la función de memoria del diálogo, debido a que el modelo tiene un límite máximo de tokens, no es factible ingresar todos los mensajes de conversación históricos para cada solicitud. Por lo general, se introducen mensajes relevantes relacionados con las preguntas actuales como mensajes históricos en el modelo, y las secciones posteriores presentarán cómo la función de Embeddings logra la búsqueda de similitud de texto.
5. Esquema JSON
El Esquema JSON es una característica de la API del modelo de diálogo que permite a los usuarios instruir al modelo para que devuelva siempre un objeto JSON, adecuado para escenarios que requieren recibir respuestas en formato JSON.
Uso del Esquema JSON
Para usar el Esquema JSON, necesitas establecer el campo response_format
en { "type": "json_object" }
en el cuerpo de la solicitud HTTP y asegurarte de que el mensaje del sistema indique que la salida del modelo está en formato JSON. A continuación se muestra un ejemplo de solicitud curl para habilitar el Esquema JSON:
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-3.5-turbo-1106",
"response_format": { "type": "json_object" },
"messages": [
{
"role": "system",
"content": "Eres un asistente útil diseñado para producir JSON."
},
{
"role": "user",
"content": "¿Qué equipo ganó la Serie Mundial de 2020?"
}
]
}'
Análisis de la respuesta del esquema JSON
En el modo de esquema JSON, la respuesta contendrá un objeto JSON completo y perfectamente analizado. Este modo garantiza que la salida del modelo sea un objeto JSON válido que se puede analizar y utilizar directamente. A continuación se muestra un ejemplo de una respuesta que podría devolverse utilizando JSON Schema:
{
"choices": [
{
"finish_reason": "stop",
"message": {
"content": "{\"winner\": \"Los Angeles Dodgers\"}"
}
}
]
}
En Python, puedes usar el siguiente código para extraer el contenido de la respuesta:
import json
response = {
"choices": [
{
"finish_reason": "stop",
"message": {
"content": "{\"winner\": \"Los Angeles Dodgers\"}"
}
}
]
}
response_content = json.loads(response['choices'][0]['message']['content'])
print(response_content)
La salida será:
{'winner': 'Los Angeles Dodgers'}
El esquema JSON proporciona un método fiable para garantizar el formato correcto de las respuestas para casos de uso específicos. Por lo tanto, se recomienda habilitar JSON Schema en escenarios donde hay requisitos específicos para el formato de la respuesta de la API.