Implementación simple de RAG usando python-llama-cpp.
Traducción de la publicación original en inglés.
DISCLAIMER: hice este proyecto para uso personal y con fines de aprendizaje, enfocado en entender RAG básico, modelos de embeddings y ejecución local de IA. Por eso usé código generado por LLM para este proyecto específico: escribir el código no era el objetivo principal. Por la misma razón tiene bastantes asperezas, pero funciona. Como no encontré una forma actualizada y directa de hacerlo en otro lado, decidí publicarlo porque puede ser útil para alguien más.
- Github link: GCaggianese/simple_python-llama-cpp_RAG
- Codeberg link: GCaggianese/simple_python-llama-cpp_RAG
Prerrequisitos
Requisitos del sistema
- Python 3.8+
- Compilador C (GCC, Clang, etc.)
- Ninja
Instalar requirements.txt
pip install -r requirements.txt
Soporte CUDA de Nvidia
La forma más simple de instalar python-llama-cpp con soporte CUDA (12.4) es:
CMAKE_ARGS="-DGGML_CUDA=on" pip install llama-cpp-python \
--extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cu124 \
--force-reinstall --no-cache-dir
Como se explica en Github: llama-cpp-python.
--force-reinstall --no-cache-dir es importante; sin eso es probable que reinstale desde cache sin soporte CUDA.
Este paso debería hacerse después de instalar requirements.txt.
GNU Guix
Si usás GNU Guix, necesitás el canal Nonguix y también guix-hpc-non-free. Con esos canales, nvidia-service-type y cuda-toolkit@12.4.0, se puede correr en GPU.
Directorio docs
Crear un directorio docs para los documentos que querés que la IA use como contexto.
mkdir docs
Uso
Nota: si usás envrc, va a crear un directorio venv y activar el entorno Python. Recomiendo usar ese .envrc sólo con GNU Guix, porque agrega variables de entorno específicas para que funcione ahí.
- Instalar todos los requirements de Python.
- Ejecutar
python rag.py.- Descarga los modelos (
granite-3.3-2b-instruct,all-MiniLM-L6-v2). - Los carga en CPU/GPU.
- Muestra el prompt interactivo.
- IMPORTANTE: puede fallar en tu hardware; uso
n_ctx=8196con 4000 tokens, que puede ser demasiado para algunas máquinas.
- Descarga los modelos (
- Preguntar.
Ejemplo
Probado con GNU Guix, Linux 6.16.12, Intel i7-11800H y NVIDIA RTX 3060 Ti.
Para probarlo con la página de Wikipedia de Simple Linear Regression:
- Instalar
pandocywget. - Descargar la página y convertirla a texto:
wget https://en.wikipedia.org/wiki/Simple_linear_regression
pandoc -f html -i Simple_linear_regression -o slr.txt
mv slr.txt docs
rm Simple_Linear_Regression
- Ejecutar:
python rag.py
El modelo queda cargado y esperando preguntas. El ejemplo original pregunta qué método se usa comúnmente en SLR y responde Ordinary Least Squares usando contexto recuperado del documento.