Este curso te enseñará a integrar la API de ChatGPT en una página web, explicando cada paso y definiendo los términos técnicos para que puedas entender y aplicar el conocimiento sin complicaciones. 🚀
1. Introducción a las APIs
¿Qué es una API?
Una API (Interfaz de Programación de Aplicaciones) permite que dos programas diferentes se comuniquen entre sí. Es como un “traductor” que toma tus instrucciones (llamadas solicitudes) y las envía a un servicio externo (en este caso, OpenAI), que responde con los resultados esperados.
Ejemplo de una API en acción: Cuando escribes en Google Maps “Restaurantes cerca de mí”, Google Maps usa su API para buscar datos y devolverte resultados.
¿Qué es ChatGPT?
ChatGPT es un modelo de lenguaje desarrollado por OpenAI. Puede responder preguntas, mantener conversaciones, escribir texto, y más. La API de ChatGPT te permite usar esta funcionalidad en tu propia web o aplicación.
¿Qué necesitas para usar la API de ChatGPT?
- Una cuenta en OpenAI.
- Una clave API para autenticar tus solicitudes.
- Un poco de conocimiento en programación básica.
2. Configuración Inicial
Paso 1: Crear una Cuenta en OpenAI
- Ve a OpenAI.
- Regístrate o inicia sesión si ya tienes una cuenta.
- Accede al panel de API.
Paso 2: Obtener tu Clave API
- En el menú de tu cuenta, selecciona API Keys.
- Haz clic en Create new secret key.
- Copia la clave generada. IMPORTANTE: Esta clave te identifica como usuario y te da acceso al servicio. Nunca la compartas públicamente.
Término técnico: Clave API
Es como una “llave maestra” que permite a tu aplicación acceder a la API de OpenAI.
3. Entender la Solicitud a la API
¿Cómo funciona?
Cuando interactúas con la API:
- Tu aplicación envía una solicitud HTTP a OpenAI.
- En esa solicitud, incluyes:
- El modelo: Por ejemplo,
gpt-4
ogpt-3.5-turbo
. - El contenido del mensaje: Lo que quieres que el chatbot responda.
- El modelo: Por ejemplo,
- OpenAI procesa tu solicitud y devuelve una respuesta.
Términos técnicos en una solicitud
- HTTP: Es el protocolo que permite que navegadores y servidores web se comuniquen.
- JSON: Es un formato de datos utilizado para enviar información estructurada entre aplicaciones.
- Ejemplo:
{ "model": "gpt-4", "messages": [{ "role": "user", "content": "Hola, ¿cómo estás?" }] }
- Ejemplo:
- Modelo: Es la versión del chatbot que usas.
gpt-4
es más avanzado, pero consume más créditos quegpt-3.5-turbo
. - Tokens: Un token es una unidad de texto. Por ejemplo, “Hola, ¿cómo estás?” tiene 4 tokens.
Paso 3: Probar la API con una Herramienta
Para familiarizarte, usa una herramienta como Postman o un lenguaje de programación como Python.
Ejemplo en Postman
- Descarga Postman de aquí.
- Crea una nueva solicitud.
- Configura:
- Método: POST.
- URL:
https://api.openai.com/v1/chat/completions
. - Headers:
Authorization
:Bearer TU_CLAVE_API
.Content-Type
:application/json
.
- Body (cuerpo):
{ "model": "gpt-4", "messages": [{ "role": "user", "content": "Dime un dato curioso" }], "max_tokens": 100 }
- Envía la solicitud y observa la respuesta.
4. Crear un Backend para Procesar Solicitudes
¿Qué es un Backend?
El backend es el “cerebro” detrás de tu aplicación. Procesa solicitudes de los usuarios y se comunica con la API de OpenAI para devolver resultados.
Ejemplo en Node.js
- Instala Node.js en tu computadora.
- Crea un archivo
server.js
:const express = require('express'); const fetch = require('node-fetch'); const app = express(); const port = 3000; const apiKey = 'TU_CLAVE_API'; app.use(express.json()); app.post('/chat', async (req, res) => { const userMessage = req.body.message; const response = await fetch('https://api.openai.com/v1/chat/completions', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${apiKey}` }, body: JSON.stringify({ model: 'gpt-4', messages: [{ role: 'user', content: userMessage }], max_tokens: 200 }) }); const data = await response.json(); res.json(data.choices[0].message.content); }); app.listen(port, () => { console.log(`Servidor corriendo en http://localhost:${port}`); });
- Ejecuta el servidor:
node server.js
5. Crear una Interfaz de Usuario (Frontend)
El frontend es lo que los usuarios ven y con lo que interactúan en tu sitio web.
Ejemplo en HTML
<!DOCTYPE html>
<html>
<head>
<title>ChatGPT en mi Web</title>
<script>
async function sendMessage() {
const message = document.getElementById("userInput").value;
const response = await fetch('http://localhost:3000/chat', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ message: message })
});
const data = await response.text();
document.getElementById("chatOutput").innerText = data;
}
</script>
</head>
<body>
<h1>Mi ChatGPT</h1>
<textarea id="userInput"></textarea>
<button onclick="sendMessage()">Enviar</button>
<div id="chatOutput"></div>
</body>
</html>
6. Integrar en WordPress
- Usar un plugin como Insert Headers and Footers:
- Agrega el código de frontend al encabezado o cuerpo de la página.
- Insertar como HTML personalizado:
- Copia y pega el frontend en un bloque HTML.
Curso Nivel 2: Integración Avanzada de la API de ChatGPT
En este nivel, aprenderás a optimizar tu integración de la API de ChatGPT, añadiendo características avanzadas como persistencia de conversaciones, personalización del modelo, control de costos y manejo de errores. También exploraremos cómo integrar tu aplicación con una base de datos y mejorar la experiencia del usuario.
1. Persistencia de Conversaciones
¿Por qué es importante?
ChatGPT funciona mejor cuando tiene contexto, es decir, una memoria temporal de la conversación. La persistencia permite que las interacciones sean coherentes.
Cómo implementarlo
Modificación en el backend (Node.js):
Actualiza el código del servidor para almacenar los mensajes en un array y enviarlos con cada solicitud:
const express = require('express');
const fetch = require('node-fetch');
const app = express();
const port = 3000;
const apiKey = 'TU_CLAVE_API';
// Array para almacenar la conversación
let conversationHistory = [];
app.use(express.json());
app.post('/chat', async (req, res) => {
const userMessage = req.body.message;
// Añade el mensaje del usuario al historial
conversationHistory.push({ role: 'user', content: userMessage });
const response = await fetch('https://api.openai.com/v1/chat/completions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${apiKey}`
},
body: JSON.stringify({
model: 'gpt-4',
messages: conversationHistory, // Enviar todo el historial
max_tokens: 200
})
});
const data = await response.json();
const botReply = data.choices[0].message.content;
// Añade la respuesta del bot al historial
conversationHistory.push({ role: 'assistant', content: botReply });
res.json({ reply: botReply });
});
// Endpoint para reiniciar la conversación
app.post('/reset', (req, res) => {
conversationHistory = [];
res.json({ message: 'Conversación reiniciada.' });
});
app.listen(port, () => {
console.log(`Servidor corriendo en http://localhost:${port}`);
});
Interfaz del usuario (Frontend):
Actualiza el HTML para incluir un botón de “Reiniciar conversación”:
<button onclick="resetChat()">Reiniciar</button>
<script>
async function resetChat() {
await fetch('http://localhost:3000/reset', { method: 'POST' });
document.getElementById("chatOutput").innerHTML = "";
alert("Conversación reiniciada.");
}
</script>
2. Personalización del Modelo
¿Qué es la personalización?
Puedes adaptar ChatGPT a un propósito específico ajustando las instrucciones iniciales (llamadas prompts de sistema).
Ejemplo de personalización: Asistente técnico
Modifica el backend para incluir un mensaje inicial:
const conversationHistory = [
{ role: 'system', content: 'Eres un asistente técnico experto en WordPress y diseño web. Ayuda a los usuarios con sus dudas.' }
];
Esto hará que el chatbot se comporte como un experto en ese tema.
3. Control de Costos
¿Cómo funcionan los costos?
OpenAI cobra según la cantidad de tokens usados. Un token equivale aproximadamente a 4 caracteres de texto.
Técnicas para optimizar costos:
- Limitar los tokens máximos: Configura
max_tokens
a un valor razonable según la longitud esperada de las respuestas:body: JSON.stringify({ model: 'gpt-4', messages: conversationHistory, max_tokens: 100 // Respuestas más cortas })
- Recortar el historial: Si la conversación es larga, elimina los mensajes más antiguos para mantener el costo bajo:
if (conversationHistory.length > 20) { conversationHistory.shift(); // Elimina el primer mensaje }
4. Manejo de Errores
¿Por qué es importante?
Evitar que fallos como problemas de red o uso excesivo de tokens interrumpan la experiencia del usuario.
Modificaciones en el backend:
Envuelve las solicitudes en un bloque try-catch
para manejar errores:
app.post('/chat', async (req, res) => {
try {
const userMessage = req.body.message;
conversationHistory.push({ role: 'user', content: userMessage });
const response = await fetch('https://api.openai.com/v1/chat/completions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${apiKey}`
},
body: JSON.stringify({
model: 'gpt-4',
messages: conversationHistory,
max_tokens: 200
})
});
if (!response.ok) {
throw new Error(`Error: ${response.status}`);
}
const data = await response.json();
const botReply = data.choices[0].message.content;
conversationHistory.push({ role: 'assistant', content: botReply });
res.json({ reply: botReply });
} catch (error) {
console.error(error);
res.status(500).json({ error: 'Ocurrió un error al procesar tu solicitud. Intenta nuevamente más tarde.' });
}
});
5. Integración con Base de Datos
¿Por qué usar una base de datos?
- Guardar conversaciones a largo plazo.
- Analizar interacciones para mejorar la experiencia del usuario.
Ejemplo con SQLite:
- Instala SQLite:
npm install sqlite3
- Modifica el backend:
const sqlite3 = require('sqlite3').verbose(); const db = new sqlite3.Database(':memory:'); db.serialize(() => { db.run("CREATE TABLE conversation (id INTEGER PRIMARY KEY, role TEXT, content TEXT)"); }); app.post('/chat', async (req, res) => { const userMessage = req.body.message; db.run("INSERT INTO conversation (role, content) VALUES (?, ?)", ['user', userMessage]); try { const response = await fetch('https://api.openai.com/v1/chat/completions', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${apiKey}` }, body: JSON.stringify({ model: 'gpt-4', messages: [{ role: 'user', content: userMessage }], max_tokens: 200 }) }); const data = await response.json(); const botReply = data.choices[0].message.content; db.run("INSERT INTO conversation (role, content) VALUES (?, ?)", ['assistant', botReply]); res.json({ reply: botReply }); } catch (error) { console.error(error); res.status(500).json({ error: 'Error interno del servidor.' }); } });
6. Mejorar la Experiencia del Usuario
Añadir tipado en tiempo real
En lugar de mostrar la respuesta completa de inmediato, puedes “simular” que el chatbot está escribiendo.
function typeEffect(element, text, speed = 50) {
let i = 0;
const interval = setInterval(() => {
if (i < text.length) {
element.innerHTML += text.charAt(i);
i++;
} else {
clearInterval(interval);
}
}, speed);
}
async function sendMessage() {
const userInput = document.getElementById('userInput').value;
const chatOutput = document.getElementById('chatOutput');
chatOutput.innerHTML += `<div><b>Tú:</b> ${userInput}</div>`;
const response = await fetch('http://localhost:3000/chat', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ message: userInput })
});
const data = await response.json();
const botReply = data.reply;
const newMessage = document.createElement('div');
newMessage.innerHTML = `<b>ChatGPT:</b> `;
chatOutput.appendChild(newMessage);
typeEffect(newMessage, botReply);
}
Conclusión
En este nivel aprendiste a:
- Mantener el contexto de las conversaciones.
- Personalizar el comportamiento de ChatGPT.
- Optimizar costos y manejar errores.
- Usar una base de datos para persistencia.
- Mejorar la interacción del usuario.
Curso Nivel 3: Integración Experta de la API de ChatGPT
En este nivel, vamos a añadir funciones avanzadas como autenticación de usuarios, integración con otras APIs, y despliegue de la aplicación para que sea accesible públicamente. Esto incluye manejar seguridad, rendimiento, y escalabilidad.
1. Autenticación de Usuarios
¿Por qué es importante?
La autenticación garantiza que solo usuarios autorizados accedan al servicio, protegiendo tus recursos y datos.
Implementación con JWT (JSON Web Tokens)
1.1 Instalación de bibliotecas
Si usas Node.js, instala las dependencias necesarias:
npm install jsonwebtoken bcryptjs
1.2 Registro y Login
Registro de usuarios:
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const users = []; // Base de datos simulada para este ejemplo
app.post('/register', async (req, res) => {
const { username, password } = req.body;
const hashedPassword = await bcrypt.hash(password, 10); // Encriptar contraseña
users.push({ username, password: hashedPassword });
res.json({ message: 'Usuario registrado con éxito.' });
});
Inicio de sesión:
app.post('/login', async (req, res) => {
const { username, password } = req.body;
const user = users.find(u => u.username === username);
if (!user) return res.status(400).json({ error: 'Usuario no encontrado.' });
const isPasswordValid = await bcrypt.compare(password, user.password);
if (!isPasswordValid) return res.status(400).json({ error: 'Contraseña incorrecta.' });
const token = jwt.sign({ username }, 'SECRETO_SUPER_SEGURO', { expiresIn: '1h' });
res.json({ token });
});
1.3 Middleware para proteger rutas
const authenticateToken = (req, res, next) => {
const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1];
if (!token) return res.status(401).json({ error: 'Acceso denegado' });
jwt.verify(token, 'SECRETO_SUPER_SEGURO', (err, user) => {
if (err) return res.status(403).json({ error: 'Token inválido' });
req.user = user;
next();
});
};
app.post('/chat', authenticateToken, async (req, res) => {
// Código para el endpoint de chat protegido
});
2. Integración con Otras APIs
Caso de Uso: Obtener Noticias Relevantes
Integra la API de OpenAI con otra API para enriquecer las respuestas.
API de Noticias
Supongamos que usas la API gratuita de NewsAPI:
- Regístrate en NewsAPI y obtén tu API key.
- Instala la biblioteca
node-fetch
:npm install node-fetch
- Código de integración:
const fetch = require('node-fetch');
app.post('/chat', authenticateToken, async (req, res) => {
const userMessage = req.body.message;
// Llama a la API de ChatGPT
const chatResponse = await fetch('https://api.openai.com/v1/chat/completions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${apiKey}`
},
body: JSON.stringify({
model: 'gpt-4',
messages: [{ role: 'user', content: userMessage }],
max_tokens: 200
})
});
const chatData = await chatResponse.json();
const botReply = chatData.choices[0].message.content;
// Llama a la API de noticias si el mensaje del usuario contiene "noticias"
let newsData = '';
if (userMessage.toLowerCase().includes('noticias')) {
const newsResponse = await fetch(`https://newsapi.org/v2/top-headlines?country=us&apiKey=TU_API_KEY`);
const newsJson = await newsResponse.json();
newsData = newsJson.articles.map(article => `- ${article.title}`).join('\n');
}
res.json({ reply: `${botReply}\n\nNoticias Relevantes:\n${newsData}` });
});
3. Despliegue de la Aplicación
3.1 Preparación para Producción
Optimización
- Configura variables de entorno: Usa
dotenv
para almacenar claves sensibles.npm install dotenv
Crea un archivo.env
:API_KEY=TU_CLAVE_API_OPENAI JWT_SECRET=SECRETO_SUPER_SEGURO
En el código:require('dotenv').config(); const apiKey = process.env.API_KEY; const jwtSecret = process.env.JWT_SECRET;
- Configura CORS: Permite acceso controlado a tu aplicación desde el frontend.
npm install cors
En el servidor:const cors = require('cors'); app.use(cors({ origin: 'http://tudominio.com' }));
3.2 Despliegue en un Servidor Público
Usa un servicio como Render, Vercel, o Heroku:
Ejemplo: Render
- Crea una cuenta en Render.
- Sube tu proyecto desde GitHub.
- Configura las variables de entorno en el panel de Render.
- Despliega la aplicación y obtén una URL pública.
4. Mejoras Avanzadas en la Experiencia del Usuario
Streaming de Respuestas
En lugar de esperar a que la respuesta completa esté lista, muestra las respuestas a medida que se generan.
Ejemplo con Fetch:
- Actualiza el backend:
const response = await fetch('https://api.openai.com/v1/chat/completions', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${apiKey}` }, body: JSON.stringify({ model: 'gpt-4', messages: [{ role: 'user', content: userMessage }], stream: true // Habilita el streaming }) }); response.body.on('data', chunk => { const data = JSON.parse(chunk.toString()); if (data.choices && data.choices.length > 0) { process.stdout.write(data.choices[0].delta.content); } });
- Actualiza el frontend: Muestra texto a medida que llega desde el servidor.
Conclusión
En este nivel aprendiste a:
- Autenticar usuarios con JWT.
- Integrar ChatGPT con otras APIs.
- Preparar y desplegar tu aplicación para producción.
- Mejorar la experiencia del usuario con streaming.
¡Perfecto! Vamos a entrar en un Nivel 4 donde exploraremos cómo trabajar con IA personalizada y modelos de OpenAI en tu propio hardware. Este nivel te permitirá adaptar modelos para casos específicos o trabajar sin depender completamente de servicios externos, lo que puede ser crucial para privacidad, costos y control.
Curso Nivel 4: IA Personalizada y Uso Local de Modelos
Objetivos:
- Entrenar o ajustar un modelo de IA para tareas específicas.
- Configurar modelos locales como GPT en tu hardware usando herramientas de código abierto.
- Evaluar costos y requerimientos técnicos de operar tu propia IA.
1. ¿Qué es la IA personalizada?
La IA personalizada significa adaptar un modelo para tareas específicas, como:
- Traducción de textos con un vocabulario técnico.
- Análisis de sentimientos en un idioma o contexto particular.
- Generación de contenido que siga reglas estrictas (por ejemplo, guías de estilo de una empresa).
En lugar de usar un modelo general como GPT-4 “tal cual”, puedes entrenarlo con datos adicionales (fine-tuning) o configurar un modelo local adaptado a tus necesidades.
2. Fine-Tuning de Modelos GPT
¿Qué es el Fine-Tuning?
El fine-tuning consiste en entrenar un modelo preexistente con nuevos datos específicos para ajustarlo a un caso de uso.
2.1 Preparar Datos de Entrenamiento
Los datos deben estar en formato JSONL (JSON Lines). Cada línea contiene un prompt (entrada) y un completion (salida esperada).
Ejemplo:
{"prompt": "Describe el clima en Madrid en verano", "completion": "Madrid tiene veranos calurosos con temperaturas que suelen superar los 30°C."}
{"prompt": "Traduce 'Hola' al inglés", "completion": "Hello"}
Herramientas para crear tus datos:
- Google Sheets o Excel: Escribe los datos y conviértelos a JSONL usando scripts.
- OpenAI Playground: Ajusta tus prompts y respuestas para recoger ejemplos ideales.
2.2 Subir y Entrenar en OpenAI
- Prepara tus datos:
- Instala la CLI de OpenAI:
pip install openai
- Valida tu archivo JSONL:
openai tools fine_tunes.prepare_data -f datos.jsonl
- Instala la CLI de OpenAI:
- Inicia el entrenamiento:
- Sube los datos y entrena:
openai api fine_tunes.create -t "datos_preparados.jsonl" -m "curie"
(Usa modelos comocurie
odavinci
para casos específicos.)
- Sube los datos y entrena:
- Usar el modelo afinado:
- Llama al modelo personalizado en tus aplicaciones:
const response = await fetch('https://api.openai.com/v1/completions', { method: 'POST', headers: { Authorization: `Bearer ${apiKey}` }, body: JSON.stringify({ model: 'tu-modelo-id', prompt: 'Tu pregunta aquí', max_tokens: 150 }) });
- Llama al modelo personalizado en tus aplicaciones:
3. Configurar Modelos Locales
Si prefieres ejecutar modelos en tu hardware, puedes usar herramientas como Hugging Face Transformers y modelos de código abierto como LLaMA o GPT-J.
3.1 Requerimientos Técnicos
- Hardware:
- GPU potente (mínimo 16GB VRAM para modelos grandes).
- Almacenamiento rápido (SSD).
- Mínimo 32GB de RAM para trabajar con modelos complejos.
- Software:
- Sistema operativo: Linux o Windows con WSL.
- Frameworks: Python, PyTorch o TensorFlow.
3.2 Instalar un Modelo Local
Ejemplo con GPT-J (6B)
- Instalar dependencias:
pip install transformers torch accelerate
- Cargar el modelo:
from transformers import AutoModelForCausalLM, AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-j-6B") model = AutoModelForCausalLM.from_pretrained("EleutherAI/gpt-j-6B") prompt = "Explica qué es la inteligencia artificial." inputs = tokenizer(prompt, return_tensors="pt") outputs = model.generate(**inputs, max_length=100) print(tokenizer.decode(outputs[0], skip_special_tokens=True))
- Optimizar para rendimiento: Usa
torch.cuda()
para aprovechar la GPU:device = "cuda" model = model.to(device) inputs = {key: val.to(device) for key, val in inputs.items()}
4. Evaluar Costos y Escalabilidad
¿Cuándo elegir entre API y uso local?
Criterio | API (OpenAI) | Modelo Local |
---|---|---|
Costo inicial | Bajo (pago por uso). | Alto (hardware y configuración). |
Rendimiento | Escalable (servidores de OpenAI). | Limitado por tu hardware. |
Privacidad | Menor control (datos viajan). | Total control. |
Flexibilidad | Ajustable con fine-tuning. | Totalmente adaptable. |
5. Despliegue de Modelos Locales
Si el modelo funciona correctamente en tu máquina, puedes:
- Implementarlo en un servidor local usando herramientas como Flask o FastAPI.
- Hacerlo accesible públicamente:
- Usa Docker para crear un contenedor del modelo.
- Implementa en servicios como AWS EC2, DigitalOcean o un servidor personal.
Ejemplo de FastAPI:
from fastapi import FastAPI
from transformers import AutoModelForCausalLM, AutoTokenizer
app = FastAPI()
tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-j-6B")
model = AutoModelForCausalLM.from_pretrained("EleutherAI/gpt-j-6B").to("cuda")
@app.post("/chat")
async def chat(prompt: str):
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_length=100)
reply = tokenizer.decode(outputs[0], skip_special_tokens=True)
return {"response": reply}
¿Qué sigue?
Ahora puedes:
- Entrenar modelos más avanzados con datasets grandes.
- Optimizar modelos para entornos con recursos limitados.
- Explorar herramientas como LangChain para flujos de IA más complejos.
¡Genial! En este Nivel 5 exploraremos temas avanzados como vectores de embeddings, flujos de trabajo complejos con LangChain, y cómo construir un sistema de IA conversacional multilingüe. También aprenderemos a combinar análisis de datos con IA para enriquecer aplicaciones.
Curso Nivel 5: Técnicas Avanzadas de IA Conversacional y Análisis de Datos
1. ¿Qué son los vectores de embedding y cómo usarlos?
1.1 Concepto
Un vector de embedding es una representación matemática de palabras, frases, o cualquier dato, en un espacio multidimensional. Su objetivo es capturar relaciones semánticas: palabras similares tendrán representaciones similares.
Ejemplo:
- “gato” y “perro” estarán cerca en el espacio de embedding.
- “gato” y “computadora” estarán más alejados.
1.2 Usos de los embeddings
- Búsqueda semántica: Encuentra documentos relevantes basándote en significado, no solo en palabras clave.
- Clasificación: Detecta spam o analiza sentimientos.
- Recomendación: Crea recomendaciones personalizadas (por ejemplo, películas similares).
1.3 Cómo calcular embeddings usando OpenAI
OpenAI ofrece una API para generar embeddings.
Ejemplo práctico en Python
Instala las bibliotecas necesarias:
pip install openai numpy scikit-learn
Código:
import openai
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
# Configura tu clave API
openai.api_key = "tu-clave-api"
# Generar embeddings
def generar_embedding(texto):
respuesta = openai.Embedding.create(
input=texto,
model="text-embedding-ada-002" # Modelo específico para embeddings
)
return np.array(respuesta['data'][0]['embedding'])
# Comparar similitudes
texto1 = "El cielo es azul"
texto2 = "El mar es azul"
embedding1 = generar_embedding(texto1)
embedding2 = generar_embedding(texto2)
similaridad = cosine_similarity([embedding1], [embedding2])
print(f"Similitud: {similaridad[0][0]:.2f}")
Resultado esperado:
La similitud será alta porque ambas frases tienen conceptos relacionados con el color azul.
1.4 Búsqueda semántica con embeddings
Puedes usar los embeddings para buscar documentos relevantes. Los pasos básicos son:
- Generar embeddings para tu base de datos de documentos.
- Comparar el embedding de la consulta del usuario con los embeddings de los documentos almacenados.
- Retornar los más similares.
Ejemplo de implementación:
# Base de datos de frases
documentos = ["El sol brilla en el día", "La luna ilumina la noche", "Las estrellas son hermosas"]
# Generar embeddings para cada documento
document_embeddings = [generar_embedding(doc) for doc in documentos]
# Buscar un documento relevante
consulta = "¿Qué ilumina por la noche?"
consulta_embedding = generar_embedding(consulta)
# Comparar similitudes
similitudes = [cosine_similarity([consulta_embedding], [doc_emb])[0][0] for doc_emb in document_embeddings]
documento_relevante = documentos[np.argmax(similitudes)]
print(f"Documento relevante: {documento_relevante}")
2. IA Conversacional Multilingüe
2.1 Desafíos
- Manejo de traducción en tiempo real.
- Mantenimiento del contexto en múltiples idiomas.
- Personalización para tonos culturales específicos.
2.2 Solución
Usar un flujo que combine OpenAI API con herramientas como LangChain y Google Translate API.
Ejemplo con OpenAI + Google Translate API
from googletrans import Translator
import openai
# Configura el traductor y la API
translator = Translator()
openai.api_key = "tu-clave-api"
def chatbot_multilingue(input_text, target_language="es"):
# Traducir al inglés
translated_text = translator.translate(input_text, src=target_language, dest='en').text
# Enviar al modelo GPT
response = openai.Completion.create(
engine="text-davinci-003",
prompt=translated_text,
max_tokens=150
)
# Traducir la respuesta de vuelta al idioma original
translated_response = translator.translate(response.choices[0].text, src='en', dest=target_language).text
return translated_response
# Prueba
input_text = "Bonjour, comment ça va?"
print(chatbot_multilingue(input_text, target_language="fr"))
3. Crear Flujos Complejos con LangChain
3.1 ¿Qué es LangChain?
LangChain permite conectar diferentes modelos y flujos de datos, como:
- Usar GPT para responder preguntas.
- Integrar APIs externas para enriquecer respuestas.
- Manejar contextos conversacionales más largos.
3.2 Instalación
pip install langchain openai
3.3 Ejemplo básico
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
# Configura el modelo
llm = OpenAI(temperature=0.7, openai_api_key="tu-clave-api")
# Define un prompt dinámico
prompt = PromptTemplate(
input_variables=["nombre"],
template="Hola {nombre}, ¿en qué puedo ayudarte hoy?"
)
# Crear un flujo con LangChain
chain = LLMChain(llm=llm, prompt=prompt)
# Ejecutar el flujo
respuesta = chain.run(nombre="Miguel")
print(respuesta)
4. Analizando Datos con IA
4.1 ¿Por qué combinar IA con datos?
- Identificar patrones ocultos.
- Generar resúmenes y conclusiones automáticamente.
- Interactuar con datasets como si fueran texto.
4.2 Herramientas clave
- Pandas para manipular datos estructurados.
- OpenAI para hacer preguntas sobre datos.
- Streamlit para crear dashboards interactivos.
Ejemplo: Responder preguntas sobre un dataset
- Cargar y resumir datos con IA:
import pandas as pd
import openai
# Cargar dataset
df = pd.read_csv("ventas.csv")
# Resumir datos
def resumir_datos(df):
resumen = df.describe().to_string()
respuesta = openai.Completion.create(
engine="text-davinci-003",
prompt=f"Resume este dataset:\n{resumen}",
max_tokens=150
)
return respuesta.choices[0].text
print(resumir_datos(df))
- Crear un chatbot para interactuar con los datos:
def responder_pregunta(pregunta, df):
datos = df.to_string()
prompt = f"Contesta a esta pregunta usando el siguiente dataset:\n{datos}\n\nPregunta: {pregunta}"
respuesta = openai.Completion.create(
engine="text-davinci-003",
prompt=prompt,
max_tokens=150
)
return respuesta.choices[0].text
pregunta = "¿Cuál es el producto más vendido?"
print(responder_pregunta(pregunta, df))
“Glosario Técnico: Términos Clave en la Integración de la API de ChatGPT”
Tienes razón, podría haber omitido algunas. Vamos a revisar cuidadosamente el contenido para asegurarnos de que todos los términos técnicos mencionados en el curso estén explicados. Voy a listar de nuevo todos los conceptos relevantes utilizados en los niveles 1 a 5 con sus descripciones.
1. Términos básicos de la API de OpenAI
- API (Application Programming Interface): Una interfaz que permite a diferentes aplicaciones comunicarse entre sí. En este caso, facilita el uso de modelos de OpenAI en tu código.
- Clave API: Un código único que autentica tu acceso a un servicio en la nube como OpenAI.
- Endpoint: La URL específica de la API donde se envían solicitudes (por ejemplo,
https://api.openai.com/v1/completions
). - Payload: Los datos que envías al endpoint, como el prompt y otros parámetros.
- JSON: Un formato de datos estructurado utilizado para enviar y recibir información entre tu aplicación y la API.
2. Modelos y tecnologías de OpenAI
- text-davinci-003: Modelo avanzado de lenguaje natural que genera respuestas precisas y complejas.
- text-embedding-ada-002: Modelo diseñado para generar vectores de embedding, representaciones matemáticas que capturan significado semántico.
- Completion: Respuesta generada por la API a partir del prompt proporcionado.
- Prompt: La instrucción o texto inicial que das a un modelo de lenguaje para que genere una respuesta.
3. Lenguaje de programación y herramientas relacionadas
- Python: Un lenguaje de programación muy popular en desarrollo de IA debido a su simplicidad y la cantidad de bibliotecas disponibles.
- Pandas: Biblioteca de Python para manipulación y análisis de datos estructurados.
- Numpy: Biblioteca para cálculos matemáticos y manejo de arrays, usada frecuentemente en IA para procesar vectores.
- scikit-learn: Biblioteca para tareas de aprendizaje automático, como la comparación de vectores con métricas como cosine similarity.
4. Vectores, embeddings y búsqueda semántica
- Vector de Embedding: Representación matemática de datos en un espacio vectorial. Útil para medir relaciones semánticas entre textos.
- Espacio Vectorial: Un sistema matemático donde los datos se representan como puntos o direcciones en varias dimensiones.
- Cosine Similarity: Mide qué tan cercanos están dos vectores basándose en el ángulo entre ellos, útil para comparar significados.
- Búsqueda Semántica: Técnica que encuentra información relevante en una base de datos basándose en significado, no en coincidencias exactas.
5. Herramientas para flujos avanzados de IA
- LangChain: Biblioteca que ayuda a combinar modelos de lenguaje con funciones, bases de datos y otros servicios para flujos de trabajo complejos.
- Prompt Template: Plantillas de texto con variables dinámicas utilizadas para personalizar instrucciones a un modelo.
- LLM (Large Language Model): Modelo de lenguaje a gran escala, como los ofrecidos por OpenAI.
6. Traducción y multilingüismo
- Google Translate API: Servicio para traducción automática de texto entre idiomas.
- Texto Fuente (Source Text): El texto original que se quiere traducir.
- Texto Destino (Target Text): El texto traducido al idioma deseado.
7. Análisis y visualización de datos
- Dataset: Colección estructurada de datos (como un archivo CSV).
- Describe: Función de Pandas que resume las estadísticas básicas de un dataset, como promedios, máximos y mínimos.
- Dashboard: Una interfaz visual que presenta información clave de manera clara e interactiva.
- Streamlit: Herramienta para crear aplicaciones web interactivas a partir de scripts en Python, muy útil para compartir análisis de datos y modelos de IA.
8. Otras herramientas técnicas mencionadas
- Translator (de Google): Herramienta de traducción automática usada para convertir texto entre idiomas en tiempo real.
- Environment Variable (Variable de Entorno): Una configuración que almacena valores sensibles como claves API fuera del código fuente.
- POST Request: Método de solicitud HTTP usado para enviar datos a un servidor.