🐍 Python + Streamlit = MVP en minutos
En este tutorial, construiremos un Producto Mínimo Viable (MVP) para análisis de sentimientos utilizando Streamlit y la API de Gemini, mostrando los resultados de forma visual.
¿Qué es Streamlit?
Sección titulada «¿Qué es Streamlit?»Streamlit es un framework que transforma tus scripts Python aplicaciones web. Cuenta con una galería de widgets que facilita el desarrollo de interfaces.
📋 Requisitos
Sección titulada «📋 Requisitos»⚙ Configuración inicial
Sección titulada «⚙ Configuración inicial»Crea un directorio y dentro del mismo ejecuta los siguientes comandos.
uv inituv add streamlit google-genaiActiva el entorno virtual según tu S.O.
source .venv/bin/activate.venv\Scripts\activate💻 Construyendo la aplicación
Sección titulada «💻 Construyendo la aplicación»1. Hola mundo con Streamlit
Sección titulada «1. Hola mundo con Streamlit»En tu archivo main.py importa Streamlit y agrega un widget de texto.
Puedes ver los widgets disponibles en la documentación de Streamlit
import streamlit as st
def main(): st.text("Hola mundo!")
if __name__ == "__main__" main()Ejecuta el siguiente comando para abrir tu app en el navegador. Asegúrate de tener activado el entorno virtual.
streamlit run main.pyStreamlit abrirá tu navegador en http://localhost:8501.
2. Agrega la API de Gemini
Sección titulada «2. Agrega la API de Gemini»Crea un archivo secrets.toml dentro del directorio .streamlit en la raíz del proyecto.
Directorymi-proyecto
Directory.streamlit
- secrets.toml
- main.py
- …
Agrega la API key de Gemini al archivo.
GEMINI_API_KEY = "AIzaS..."Carga la API key en tu app usando st.secrets, un sistema seguro para manejar secretos.
GEMINI_API_KEY = st.secrets["GEMINI_API_KEY"]3. Respuesta estructurada con Gemini
Sección titulada «3. Respuesta estructurada con Gemini»Para graficar las respuestas necesitamos una estructura manejable, Gemini es capaz de responder en formato JSON.
Primero agregamos un modelo de Pydantic con la estructura para cada sentimiento.
from pydantic import BaseModel
class Sentiment(BaseModel): label: str score: int reason: strLuego, agregamos una función para enviar el texto del usuario a Gemini, obteniendo una lista de resultados para cada sentimiento. Es necesario agregar el esquema y tipo de respuesta para obtener la respuesta estructurada.
def get_gemini_response(text): prompt = f""" Clasifica del 0 al 100 el siguiente texto entre comillas bajo los siguientes sentimientos: - Alegría - Tristeza - Enojo - Miedo - Desagrado
Texto: "{text}" """
return client.models.generate_content( model="gemini-2.0-flash", contents=prompt, config={ "response_mime_type": "application/json", "response_schema": list[Sentiment], }, )4. Interfaz de usuario con Streamlit
Sección titulada «4. Interfaz de usuario con Streamlit»Empezamos con widgets básicos st.title y st.text.
Continuamos con un formulario para obtener el texto del usuario y un botón para enviarlo.
Cuando el texto es enviado, se muestra un spinner mientras se espera la respuesta de Gemini,
la cual se visualiza con el widget st.json.
def main(): st.title("Clasificador de sentimientos") st.text("Introduce un texto para clasificarlo en diferentes sentimientos")
with st.form("form"): text = st.text_area("Introduce un texto") submit = st.form_submit_button("Analizar", type="primary")
if submit: with st.spinner("Clasificando..."): response = get_gemini_response(text)
st.json(response.text)5. Visualización de resultados
Sección titulada «5. Visualización de resultados»Podemos acceder a la lista de modelos Pydantic en response.parsed, necesitamos convertirla
en un dataframe de Pandas para mostrarla en una tabla y un gráfico de barras.
import pandas as pd
...
sentiments: list[Sentiment] = response.parsedsentiments_data = [s.model_dump() for s in sentiments]st.dataframe(sentiments_data)
sentiments_df = pd.DataFrame(sentiments_data)st.bar_chart( sentiments_df, x="label", y="score", color="label", horizontal=True)🚀 Despliegue en Streamlit Cloud
Sección titulada «🚀 Despliegue en Streamlit Cloud»- Crea un repositorio en GitHub y sube el proyecto, asegúrate de no incluir el
archivo
.streamlit/secrets.toml. - Crea una cuenta en share.streamlit.io y conecta tu cuenta de GitHub.
- Selecciona tu repositorio y especifica
main.pycomo archivo principal, también puedes editar la url y validar si está disponible. - En “Advanced settings” copia y pega el contenido de tu archivo
secrets.toml. - Clickea en “Deploy” y tu app estará en internet 🌐.