Este proyecto implementa un sistema de chat y búsqueda de cursos usando RAG (Retrieval-Augmented Generation), combinando FastAPI, Ollama (modelos LLM locales) y PostgreSQL con la extensión pgvector para búsquedas semánticas.
- Chat inteligente: Responde preguntas usando contexto relevante de una base de datos de cursos.
- Búsqueda semántica: Encuentra cursos similares usando embeddings y pgvector.
- Embeddings locales: Generación de embeddings y respuestas usando Ollama.
- API REST: Endpoints para chat y búsqueda.
- Base de datos PostgreSQL: Almacena cursos y sus embeddings vectoriales.
- Python 3.13+
- Docker y Docker Compose (para la base de datos)
- Ollama instalado y corriendo localmente (ver documentación oficial)
- PostgreSQL con extensión pgvector
-
Clona el repositorio
git clone git@github.com:brayanbasallo/python-rag.git cd python-rag
-
Crea y activa un entorno virtual
python3.13 -m venv .venv source .venv/bin/activate
-
Instala las dependencias
pip install -r requirements.txt # O usando poetry/pdm si lo prefieres # O usando uv uv sync
-
Levanta la base de datos con pgvector
docker compose up -d
-
Carga los datos de ejemplo
uv run python -m src.scripts.create_data
-
Asegúrate de que Ollama esté corriendo
ollama serve # Y que tengas el modelo necesario descargado, por ejemplo: ollama pull gemma3n:e4b # ollama pull nomic-embed-text
-
Configura las variables de entorno (opcional, ver
src/utils/config.py
para los defaults)
uvicorn src.main:app --reload
La API estará disponible en http://localhost:8000.
-
POST /chat
Body:{ "messages": "¿Qué cursos de PHP hay?" }
Respuesta:
{ "response": "..." }
-
POST /search
Body:{ "query": "php" }
Respuesta:
{ "results": ["Curso 1", "Curso 2", ...] }
rag/
├── compose.yml
├── databases/
│ ├── 0-enable-pgvector.sql
│ └── 1-mooc.sql
├── src/
│ ├── api/
│ ├── db/
│ ├── scripts/
│ ├── services/
│ └── utils/
├── pyproject.toml
└── README.md
- El modelo y la URL de Ollama se pueden parametrizar en
src/services/chat_service.py
. - Los cursos de ejemplo están en
src/scripts/cources.json
. - La base de datos se inicializa automáticamente con Docker Compose y los scripts SQL en
databases/
.
MIT