Conectar un modelo personalizado de OpenAI con Telegram te permite crear un bot conversacional que responde con el conocimiento que tú elegiste durante el fine tuning. Aquí verás cómo estructurar las funciones en Python para que Platzi Bot consulte tu modelo y responda en chat.
Cómo configurar la API key de OpenAI y el token de Telegram
Antes de escribir las funciones del bot, necesitas dos credenciales: la API key de OpenAI y el token del bot de Telegram. Sin estos datos, no hay conexión posible entre Telegram y tu modelo personalizado.
En el código asignas openai.api_key = OPENAI_API_KEY y luego creas la variable token = TELEGRAM_TOKEN. Recuerda reemplazar estos valores con los tuyos, porque son únicos por cuenta y por bot.
¿Dónde encuentro el token de mi bot de Telegram? Lo obtienes al crear el bot con BotFather dentro de Telegram. Te entrega una cadena única que sirve para autenticar cada petición a la API.
Cómo construir la función getUpdates para leer mensajes
La función get_updates se conecta a la API de Telegram para traer los mensajes que los usuarios han enviado al bot. Recibe un parámetro offset que ayuda a controlar qué mensajes ya se procesaron.
La estructura básica es:
- URL:
https://api.telegram.org/bot{token}/getUpdates.
- Parámetros:
timeout = 100 y offset = offset.
- Petición:
requests.get(url, params=params).
- Retorno:
response.json()['result'].
El timeout de 100 segundos mantiene la conexión abierta esperando nuevos mensajes, lo que reduce peticiones innecesarias [02:00].
Cómo enviar respuestas al usuario con sendMessage
Una vez procesado el mensaje, el bot necesita responder. Para eso creas la función send_messages, que recibe el chat_id del usuario y el text que quieres enviar.
La URL cambia el endpoint a sendMessage y la petición ahora es un POST. Los parámetros incluyen el chat_id para identificar a quién responder y el text con el contenido del mensaje. Al final retornas la respuesta del request para verificar que llegó.
¿Por qué se usa POST en sendMessage y GET en getUpdates? Porque GET sirve para leer información del servidor de Telegram, mientras que POST envía datos nuevos, en este caso el mensaje que el bot publica en el chat.
Cómo conectar el modelo fine-tuned con get_openai_response
Esta es la función que da vida a Platzi Bot. Recibe un prompt (la pregunta del usuario) y devuelve la respuesta generada por tu modelo personalizado en OpenAI.
Dentro de la función defines:
model_engine: el nombre único del modelo después del fine tuning, que aparece en el playground de OpenAI.
engine = model_engine dentro de openai.Completion.create().
prompt = prompt para pasar la pregunta.
max_tokens = 200, valor elegido durante la configuración de hiperparámetros.
n = 1 y stop = None para una sola respuesta sin condición de corte.
temperature = 0.5 para equilibrar creatividad y precisión.
El retorno es response.choices[0].text.strip(), que extrae el texto limpio de la primera opción generada [05:30].
Por qué importan los hiperparámetros en la respuesta
La temperatura controla qué tan determinista o creativa es la respuesta. Un valor de 0.5 entrega resultados balanceados, ni demasiado rígidos ni demasiado aleatorios.
El max_tokens define el largo máximo de la respuesta. Si lo dejas muy bajo, el bot corta frases; si lo subes mucho, gastas más en cada llamada.
Qué pasa al ejecutar Platzi Bot por primera vez
Al correr el código y abrir Telegram, puedes hacer la primera pregunta. Por ejemplo: ¿qué curso me recomiendas para aprender HTML?
El modelo responde algo como Te recomiendo el curso de HTML y CSS básico junto con un enlace. Hasta aquí, la integración funciona.
Sin embargo, aparece un detalle: la respuesta se repite con varios \n al final porque no configuraste un stop claro. Y como el bot consulta Telegram cada cierto tiempo, sigue leyendo la última pregunta una y otra vez, generando respuestas duplicadas [08:15].
Detalles de orden y typos en Python
Durante la programación es común olvidar una s en requests o escribir mal el nombre de una función como send_message cuando en realidad la definiste como send_messages. Python es estricto con la coherencia de nombres, así que revisa cada llamada.
Una coma faltante después del prompt o un strip mal escrito basta para romper la ejecución.
Cuéntame en los comentarios cómo te ha ido configurando tu bot y qué preguntas le estás haciendo a tu modelo.