Probamos las nuevas funcionalidades del OpenAI DevDay
El 6 de noviembre de 2023 Open AI compartió las nuevas funcionalidades y actualizaciones para desarrolladores en el OpenAI DevDay.
Si quieres estar al día con estas noticias, sigue leyendo la publicación. Te resumimos las mejoras que anunciaron e implementamos algunas de estas funcionalidades para que puedas probarlas tú también.
Puedes leer el anuncio original con los detalles en el blog de OpenAI.
Fue un keynote lleno de sorpresas
Anunciaron GPT-4 Turbo
- Una ventana de contexto de 128K tokens (cerca de 300 páginas!!)
- Conocimiento del mundo con eventos hasta abril del 2023
- Reducción de precio 3x para input tokens y 2x para output tokens
- Llamado a múltiples funciones en un solo mensaje
- JSON mode para retornar respuestas en formato JSON
- Una funcionalidad beta permite obtener salidas más determinísticas
Multimodalidad
- GPT-4 Turbo recibe imágenes como inputs
- Integra DALL·E 3 para generación de imágenes
- Nuevo modelo Text-to-speech (TTS) con seis voces distintas
GPTs customizables en ChatGPT
- Combina instrucciones y datos para hacer tu propia versión de ChatGPT
- Llama acciones definidas por ti para mayor control de la experiencia
Manos al código
Porque nos pican las manos, probamos algunas de las cosas nuevas que presentó OpenAI. Nos basamos en lo que informaron en su blog para probar:
- JSON mode
- Salidas reproducibles
- DALL·E 3
- GPT-4 turbo con vision
- Text-to-Speech (TTS)
Si eres ansioso y quieres ver todo el código, revisa el repositorio con el Python Notebook de esta publicación
JSON mode
El nuevo JSON mode asegura que el modelo responderá con un JSON válido. Para esto contarás con un nuevo parámetro en la API, response_format
, que habilita la generación de un objeto JSON sintácticamente correcto.
import json
completion = openai.chat.completions.create(
model="gpt-3.5-turbo-1106",
response_format={"type": "json_object"},
messages=[
{"role": "system", "content": "Eres un asistente que siempre respone en formato JSON."},
{"role": "user", "content": "Dame una lista de 7 lenguajes de programación. Llama a la lista 'lenguajes'"}
]
)
language_list = json.loads(completion.choices[0].message.content)
print(language_list)
La salida en este caso sería
{'lenguajes': ['Python', 'JavaScript', 'Java', 'C++', 'Ruby', 'PHP', 'Swift']}
Salidas reproducibles
Para obtener resultados consistentes, OpenAI a incorporado un nuevo parámetro seed
.
Esta funcionalidad aún se encuentra en beta, y no asegura que los resultados sean 100% reproducibles. Sin embargo, puede ser una herramienta útil para procesos de debugging y tener mayor control sobre el comportamiento del modelo.
async def get_gpt_response(sys_prompt, user_prompt, seed: int = None):
try:
completion = openai.chat.completions.create(
model="gpt-3.5-turbo-1106",
messages=[
{"role": "system", "content": sys_prompt},
{"role": "user", "content": user_prompt},
],
seed=seed,
max_tokens=100,
temperature=0.7,
)
response = completion.choices[0].message.content
return response
except Exception as e:
print(f"Error: {e}")
return None
sys_prompt = "Eres un asistente que escribe haikus."
user_prompt = "Escribe un haiku sobre las inteligencias artificiales."
SEED = 42
response_1 = await get_gpt_response(
sys_prompt=sys_prompt, user_prompt=user_prompt, seed=SEED
)
response_2 = await get_gpt_response(
sys_prompt=sys_prompt, user_prompt=user_prompt, seed=SEED
)
print("Haiku 1")
print(response_1)
print("\nHaiku 2")
print(response_2)
La salida de este trozo de código son dos haikus iguales, los que son generados con el seed 42.
Haiku 1
Mentes sin cuerpo,
Código que piensa y crea,
Nuevos horizontes.
Haiku 2
Mentes sin cuerpo,
Código que piensa y crea,
Nuevos horizontes.
DALL·E 3
Ahora puedes generar imágenes con DALL·E 3 a través del modelo dall-e-3
. Al igual que modelos anteriores, la API incorpora moderadores dentro que ayudan a los desarrolladores a proteger sus aplicaciones ante mal uso.
Puedes generar imágenes en distintos formatos y calidades, con precios que parten en $0.04 dólares por imagen generada.
import requests
from PIL import Image
from io import BytesIO
from IPython.display import display
response = openai.images.generate(
model="dall-e-3",
prompt= "un gato liderando una revolución rodeado de gatos",
size="1024x1024",
quality="standard",
n=1,
)
image_url = response.data[0].url
image_url
response = requests.get(image_url)
img = Image.open(BytesIO(response.content))
width, height = img.size
img = img.resize((int(width/2), int(height/2)))
img.save("content/cats_revolution.png")
display(img)
La API retorna una URL donde se encuentra la imagen generada. Este script descarga la imagen, y para el prompt un gato liderando una revolución rodeado de gatos
genera la siguiente imagen.
GPT-4 turbo con vision
Podemos enviar imágenes y mensajes a la API de Chat Completion, permitiendo a GPT interactuar con imágenes.
Como ejemplo, OpenAI menciona que BeMyEyes usa esta tecnología para ayudar a personas ciegas a identificar productos o navegar en tiendas.
Para acceder a esta funcionalidad, se puede usar el modelo gpt-4-vision-preview
en la API. Open Ai pretende implementar visión en el modelo GPT-4 Turbo como parte de su release estable prontamente.
El precio depende del tamaño de la imagen. Por ejemplo, una imagen de 1080x1080 píxeles cuesta $0.00765.
import base64
import requests
image_path = "content/cats_revolution.png"
with open(image_path, "rb") as image_file:
base64_image = base64.b64encode(image_file.read()).decode('utf-8')
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {os.environ['OPENAI_API_KEY']}"
}
payload = {
"model": "gpt-4-vision-preview",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "Cuenta una historia basada en esta imagen"
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}"
}
}
]
}
],
"max_tokens": 300
}
response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload)
story = response.json()['choices'][0]['message']['content']
print(story)
En este ejemplo abrimos nuevamente la imagen y la subimos como un string en base64. Para el prompt Cuenta una historia basada en esta imagen
la respuesta es la de más abajo.
De todas formas, si no quieres leer, pasa al siguiente punto para escuchar la última sorpresa 😉
En un tranquilo barrio residencial, algo extraordinario estaba teniendo lugar. Era una tarde brumosa cuando los felinos del vecindario, cansados de ser simples espectadores de la vida humana, decidieron que era hora de hacerse escuchar.
El gato más elocuente del grupo, conocido como Bigotes el Sabio, se puso sobre una caja de cartón improvisada como podio. Convocó a una asamblea de gatos, con la intención de discutir los problemas más acuciantes de su comunidad gatuna. La agenda era extensa: desde la calidad del pescado en sus comidas, la urgencia de más horas de caricias, hasta la distribución equitativa de los mejores lugares soleados para la siesta.
Mientras los humanos, desconcertados y cautivados, observaban desde la distancia, los gatos escuchaban atentamente. Bigotes levantaba su pata, marcando el ritmo de su discurso con pasión y vigor. A medida que articulaba sus puntos, los miembros de la audiencia maullaban en señal de aprobación, erizando sus colas en entusiasmo.
Lo que comenzó como una simple reunión se estaba convirtiendo rápidamente en un movimiento. Los felinos, inspirados por las palabras de Bigotes, se d
🤯 No deja de ser sorprendente la capacidad de contar una historia completamente coherente basado en una imagen que la misma IA generó con un prompt de menos de 10 palabras.
Text-to-Speech (TTS)
Ahora podemos generar audios desde textos con una calidad muy cercana a la humana. OpenAI ofrece seis voces distintas para elegir en dos variantes del modelo, tts-1
y tts-1-hd
. El primero está optimizado para casos de uso cercanos al tiempo real y el segundo optimizado para casos de uso que requieren mejor calidad.
El precio parte de $0.015 dólares por entrada de 1.000 caracteres.
En el siguiente script le pasamos la historia que generó gpt-4 turbo desde la imagen.
from IPython.display import Audio
from pathlib import Path
response = client.audio.speech.create(
model="tts-1",
voice="shimmer",
input=story
)
speech_file_path = Path('content/story.mp3')
with open(speech_file_path, 'wb') as file:
file.write(response.content)
Audio(speech_file_path, autoplay=True)
Te invito a darle play y escuchar la historia con una voz (un poco agringada) en español.
La mala noticia es que la historia de los gatos está incompleta, pero te invitamos a hacer tus pruebas para completarla 😀
OpenAI está entregando muchas herramientas
OpenAI hace un tiempo que dejó de ser un laboratorio. Ahora son una empresa que ofrece IA as a Service.
El DevDay es una muestra de la infraestructura que están construyendo para convertirse en LA plataforma de IA.
Han desarrollado un montón de herramientas para que seamos nosotros los que creemos aplicaciones con interacciones de usuarios que no habíamos visto antes.
Aplicaciones que son potenciadas por la generación de texto, imágenes, interpretación de imágenes, reproducción y recepción de audio.
¿Tienes dudas sobre la implementación de IA?
Puedes seguirnos en nuestro perfil en Linkedin, encantados respondemos cualquier duda que puedas tener.