Una aplicación simple construida con Streamlit y LangChain que permite hacer preguntas sobre un archivo de texto cargado, utilizando un modelo de lenguaje de OpenAI para responder de forma contextual.
Una aplicación simple construida con Streamlit y LangChain que permite hacer preguntas sobre un archivo de texto cargado, utilizando un modelo de lenguaje de OpenAI para responder de forma contextual.
- Carga archivos
.txt - Divide el texto en fragmentos manejables
- Utiliza embeddings de OpenAI
- Construye un vectorstore con FAISS para recuperación de contexto
- Permite hacer preguntas en lenguaje natural sobre el documento cargado
pip install -r requirements.txtstreamlit
openai
tiktoken
langchain-community
langchain-openai
protobuf==3.20.3
faiss-cpu
langchain>=0.1.0project-llm-app/
├── streamlit_app.py
├── requirements.txt
└── README.md
Para proteger tu clave API de OpenAI y evitar exponerla en el frontend o en el repositorio, este proyecto utiliza el sistema de secrets de Streamlit Cloud.
-
Usar variable de entorno en el código
En
streamlit_app.py, reemplaza:openai_api_key = st.text_input('OpenAI API Key', type='password')
por:
import os openai_api_key = os.getenv("OPENAI_API_KEY")
-
Agregar secreto en Streamlit Cloud
-
Ve a tu app en https://streamlit.io/cloud
-
Click en "Manage app" > "Secrets"
-
Pega el siguiente contenido:
OPENAI_API_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
-
-
Guardar y reiniciar la app
streamlit run streamlit_app.pyAbre tu navegador en: http://localhost:8501
Este proyecto está bajo la licencia MIT. Libre de usar, modificar y distribuir con fines educativos o comerciales.
Hecho con 💡 para explorar el poder de los LLMs sobre documentos propios.
- Carga archivos
.txt - Divide el texto en fragmentos manejables
- Utiliza embeddings de OpenAI
- Construye un vectorstore con FAISS para recuperación de contexto
- Permite hacer preguntas en lenguaje natural sobre el documento cargado
pip install -r requirements.txtstreamlit
openai
tiktoken
langchain-community
langchain-openai
protobuf==3.20.3
faiss-cpu
langchain>=0.1.0project-llm-app/
├── streamlit_app.py
├── requirements.txt
└── README.md
Para proteger tu clave API de OpenAI y evitar exponerla en el frontend o en el repositorio, este proyecto utiliza el sistema de secrets de Streamlit Cloud.
-
Usar variable de entorno en el código
En
streamlit_app.py, reemplaza:openai_api_key = st.text_input('OpenAI API Key', type='password')
por:
import os openai_api_key = os.getenv("OPENAI_API_KEY")
-
Agregar secreto en Streamlit Cloud
-
Ve a tu app en https://streamlit.io/cloud
-
Click en "Manage app" > "Secrets"
-
Pega el siguiente contenido:
OPENAI_API_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
-
-
Guardar y reiniciar la app
streamlit run streamlit_app.pyAbre tu navegador en: http://localhost:8501
Este proyecto está bajo la licencia MIT. Libre de usar, modificar y distribuir con fines educativos o comerciales.
Hecho con 💡 para explorar el poder de los LLMs sobre documentos propios.
- Elige Amazon Linux 2023 o Ubuntu 22.04 como AMI.
- Tipo de instancia recomendado:
t2.micro(gratis primer año) ot2.medium. - Crea un par de claves (.pem) y descárgalo.
- Abre los siguientes puertos en el grupo de seguridad:
- 22 (SSH) — solo tu IP si es posible.
- 8501 (Streamlit) — 0.0.0.0/0 para acceso público.
- (Opcional) 80/443 si usarás Nginx o HTTPS.
ssh -i streamlit.pem ec2-user@<IP_PUBLICA>
# Para Ubuntu, usa: ssh -i streamlit.pem ubuntu@<IP_PUBLICA>sudo yum update -y
sudo yum install -y python3 python3-pip git
sudo yum groupinstall -y "Development Tools"
sudo yum install -y python3-devel# Si tienes el proyecto en GitHub:
git clone https://github.com/tu-usuario/tu-repo.git
cd tu-repo
# O sube los archivos con SCP:
# scp -i streamlit.pem -r /ruta/a/tu/Project-LLM-app ec2-user@<IP_PUBLICA>:~/python3 -m venv venv
source venv/bin/activatepip install --upgrade pip
pip install -r requirements.txtmkdir -p .streamlit
nano .streamlit/secrets.tomlAgrega tu clave de OpenAI:
OPENAI_API_KEY = "tu-api-key"streamlit run streamlit_app.py --server.port 8501 --server.address 0.0.0.0- Deja la terminal abierta mientras la app esté en uso.
- Accede desde tu navegador a:
http://<IP_PUBLICA>:8501
nohup streamlit run streamlit_app.py --server.port 8501 --server.address 0.0.0.0 &¡Listo! Tu aplicación Streamlit estará disponible públicamente en AWS EC2.
- Crea un archivo
Dockerfileen la raíz del proyecto:
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --upgrade pip && pip install -r requirements.txt
COPY . .
EXPOSE 8501
CMD ["streamlit", "run", "streamlit_app.py", "--server.port=8501", "--server.address=0.0.0.0"]- (Opcional) Crea un
.dockerignorepara evitar copiar archivos innecesarios:
__pycache__/
*.pyc
*.pyo
*.pyd
.venv/
venv/
.env
*.db
*.sqlite3
.DS_Store
.git
docker build -t my-streamlit-app .
docker run -p 8501:8501 my-streamlit-app- Crea un repositorio en ECR (ej:
my-streamlit-app). - Haz login en ECR:
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 116981772459.dkr.ecr.us-east-1.amazonaws.com- Etiqueta y sube tu imagen:
docker tag my-streamlit-app:latest 116981772459.dkr.ecr.us-east-1.amazonaws.com/my-streamlit-app:latest
docker push 116981772459.dkr.ecr.us-east-1.amazonaws.com/my-streamlit-app:latest- Ve a ECS → Clústeres → Crear clúster → "Networking only (Fargate)".
- Ponle un nombre (ej:
streamlit-cluster).
- Ve a ECS → Definiciones de tareas → Crear nueva definición de tarea → Fargate.
- Agrega un contenedor:
- Nombre: streamlit
- Imagen:
116981772459.dkr.ecr.us-east-1.amazonaws.com/my-streamlit-app:latest - Puerto: 8501 (TCP)
- Variables de entorno: Agrega
OPENAI_API_KEYcon tu clave de OpenAI.
- Asigna memoria y CPU según lo requiera tu app.
- Ve a tu clúster → Crear servicio.
- Tipo de lanzamiento: Fargate
- Task Definition: la que creaste
- Número de tareas: 1
- Selecciona una VPC y subred pública
- Grupo de seguridad: permite el puerto 8501 (TCP, 0.0.0.0/0)
- (Opcional) Configura un Load Balancer si quieres acceso por HTTP estándar
- Ve a la pestaña de tareas en tu servicio.
- Copia la IP pública de la tarea (o el DNS del Load Balancer si usaste uno).
- Accede en tu navegador a:
o
http://<IP_PUBLICA>:8501http://<DNS_DEL_ALB>
¡Listo! Tu aplicación Streamlit estará disponible públicamente en AWS ECS usando Docker y Fargate.
