Skip to content

brayanbasallo/python-rag

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RAG: Retrieval-Augmented Generation con FastAPI, Ollama y PostgreSQL/pgvector

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.

Características

  • 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.

Requisitos

  • 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

Instalación

  1. Clona el repositorio

    git clone git@github.com:brayanbasallo/python-rag.git
    cd python-rag
  2. Crea y activa un entorno virtual

    python3.13 -m venv .venv
    source .venv/bin/activate
  3. Instala las dependencias

    pip install -r requirements.txt
    # O usando poetry/pdm si lo prefieres
    # O usando uv
    uv sync
  4. Levanta la base de datos con pgvector

    docker compose up -d
  5. Carga los datos de ejemplo

    uv run python -m src.scripts.create_data
  6. 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
  7. Configura las variables de entorno (opcional, ver src/utils/config.py para los defaults)

Uso

Ejecutar la API

uvicorn src.main:app --reload

La API estará disponible en http://localhost:8000.

Endpoints principales

  • POST /chat
    Body:

    {
      "messages": "¿Qué cursos de PHP hay?"
    }

    Respuesta:

    {
      "response": "..."
    }
  • POST /search
    Body:

    {
      "query": "php"
    }

    Respuesta:

    {
      "results": ["Curso 1", "Curso 2", ...]
    }

Estructura del proyecto

rag/
├── compose.yml
├── databases/
│   ├── 0-enable-pgvector.sql
│   └── 1-mooc.sql
├── src/
│   ├── api/
│   ├── db/
│   ├── scripts/
│   ├── services/
│   └── utils/
├── pyproject.toml
└── README.md

Notas

  • 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/.

Licencia

MIT

About

learning project for presentation

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages