Este proyecto incluye una app Flask con autenticación y un tutor RAG que integra PostgreSQL, Qdrant y Ollama.
- Python 3.11 (recomendado)
- Docker Desktop
- Ollama instalado (para LLM y embeddings)
- PowerShell (Windows)
- Crear/activar venv 3.11 (usando uv):
uv venv --python 3.11 .\.venv\Scripts\activate
- Instalar dependencias:
uv pip install -r .\requirements.txt
-
Levantar contenedor (si no existe):
docker run -d --name pg -e POSTGRES_PASSWORD=postgres -p 5432:5432 postgres:15
-
Bootstrap de base de datos y usuario (opción 1) con script idempotente:
./bootstrap_db.ps1Crea (si no existen):
- usuario:
tutor_user - base:
tutor_db - otorga privilegios
- usuario:
-
Inicializar esquema y poblar datos demo:
python .\db_schema.py python .\populate_db.py
Si no deseas usar bootstrap_db.ps1, puedes ejecutar los mismos pasos con docker exec y psql directamente:
# 1) Crear contenedor de Postgres (si no existe)
docker run -d --name pg -e POSTGRES_PASSWORD=postgres -p 5432:5432 postgres:15
# 2) Crear usuario si no existe (idempotente)
docker exec -i pg psql -U postgres -v ON_ERROR_STOP=1 -c "DO $$
BEGIN
IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = 'tutor_user') THEN
CREATE ROLE tutor_user LOGIN PASSWORD 'tutor_pass';
END IF;
END$$;"
# 3) Crear base de datos si no existe (idempotente)
docker exec -i pg psql -U postgres -v ON_ERROR_STOP=1 -c "DO $$
BEGIN
IF NOT EXISTS (SELECT FROM pg_database WHERE datname = 'tutor_db') THEN
CREATE DATABASE tutor_db OWNER tutor_user;
END IF;
END$$;"
# 4) Conceder privilegios (seguro de repetir)
docker exec -i pg psql -U postgres -v ON_ERROR_STOP=1 -d postgres -c "GRANT ALL PRIVILEGES ON DATABASE \"tutor_db\" TO tutor_user;"
# 5) Inicializar tablas y datos demo desde tu host
python ./db_schema.py
python ./populate_db.pyNotas:
- Las credenciales por defecto que usa la app son
host=localhost,port=5432,db=tutor_db,user=tutor_user,password=tutor_pass. - Asegúrate de que el puerto 5432 no esté ocupado y que el contenedor
pgesté en ejecución (docker ps).
Levantar Qdrant:
docker run -d --name qdrant -p 6333:6333 -p 6334:6334 qdrant/qdrant:latest- URL esperada:
http://localhost:6333 - Colección esperada:
tutor_demo(veragents_rag.py)
- Instalar y ejecutar Ollama.
- Descargar modelos requeridos:
ollama pull gemma3:4b
ollama pull nomic-embed-text- El servicio escucha en
http://localhost:11434.
Con Qdrant y Ollama corriendo y los modelos descargados, ejecutar la ingesta para poblar la colección tutor_demo con embeddings:
python .\ingest_pipeline.pyEsto almacenará los chunks vectorizados en Qdrant con metadata de materias.
- Ejecutar Flask (UI + API):
python .\run_app.py- Iniciar sesión (datos demo desde
populate_db.py):
- Email:
ana.garcia@email.com - Password:
ana123
SECRET_KEY: clave de sesión Flask (por defectoyour-secret-key-here).- Para
db_schema.pypuedes usar:$env:PG_HOST="localhost" $env:PG_PORT="5432" $env:PG_DB="tutor_db" $env:PG_USER="tutor_user" $env:PG_PASSWORD="tutor_pass"
auth_app.pyusa credenciales de DB internas:tutor_user/tutor_passy DBtutor_dbenlocalhost:5432.agents_rag.pyusaQDRANT_URL=http://localhost:6333,QDRANT_COLLECTION=tutor_demo, LLMgemma3:4by embeddingsnomic-embed-textvía Ollama.- Asegúrate de que Postgres, Qdrant y Ollama estén corriendo antes de usar el chat.