Este proyecto implementa un sistema de Retrieval-Augmented Generation (RAG) utilizando:
- OpenAI para embeddings y modelo de lenguaje (LLM)
- Pinecone como base de datos vectorial
- LangChain para orquestar el flujo completo
El objetivo es construir un pipeline donde el modelo no responde solo con su conocimiento interno, sino que primero recupera información relevante desde una base vectorial y luego genera la respuesta utilizando ese contexto.
- Comprender el funcionamiento de los embeddings.
- Crear y configurar un índice en Pinecone.
- Indexar documentos en una base vectorial.
- Implementar un sistema de recuperación (retriever).
- Integrar el contexto recuperado en un prompt.
- Generar respuestas aumentadas mediante un LLM.
Usuario
↓
Embedding (OpenAI)
↓
Pinecone (Vector Database - búsqueda por similitud)
↓
Retriever (LangChain)
↓
Prompt con contexto recuperado
↓
LLM (OpenAI)
↓
Respuesta final
Convierte texto en vectores numéricos de dimensión 1536 utilizando el modelo:
text-embedding-3-small
Estos vectores permiten realizar búsquedas semánticas.
Base de datos vectorial donde se almacenan los embeddings. Configuración utilizada:
- Vector type: Dense
- Dimensión: 1536
- Métrica: cosine
- Deployment: Serverless
Framework que conecta:
- Embeddings
- Vector store (Pinecone)
- Retriever
- LLM
- PromptTemplate
Permite construir el pipeline completo de RAG de forma modular.
- Python 3.11
- LangChain
- OpenAI API
- Pinecone
- python-dotenv
- Entorno virtual (.venv)
rag-openai-pinecone-langchain/
├── data/
│ └── sample.txt
├── src/
│ ├── ingest.py
│ └── ask.py
├── requirements.txt
├── .env.example
├── .gitignore
└── README.md
git clone <URL_DEL_REPO>
cd rag-openai-pinecone-langchainpython -m venv .venvActivar entorno virtual:
En Git Bash (Windows):
source .venv/Scripts/activateEn PowerShell:
.venv\Scripts\activatepip install -r requirements.txtCrear un archivo .env basado en .env.example:
OPENAI_API_KEY=tu_api_key
PINECONE_API_KEY=tu_api_key
PINECONE_INDEX_NAME=rag-lab-index
- No subir el archivo
.enva GitHub. - El índice debe existir previamente en Pinecone.
- El índice debe tener dimensión 1536 y métrica cosine.
Este paso convierte el texto en embeddings y los almacena en Pinecone:
python src/ingest.pySalida esperada:
Ingesta completada. Documentos indexados en Pinecone.
python src/ask.pyEl sistema:
- Convierte la pregunta en embedding.
- Busca documentos similares en Pinecone.
- Inserta el contexto recuperado en el prompt.
- Genera la respuesta usando el modelo OpenAI.
Pregunta:
¿Qué es Pinecone y para qué sirve?
El sistema recupera el contenido relevante desde sample.txt y genera una respuesta contextualizada.
Este proyecto permitió:
- Comprender el funcionamiento interno de un sistema RAG.
- Implementar recuperación semántica mediante embeddings.
- Integrar Pinecone como base vectorial.
- Construir un flujo completo de generación aumentada.
- Diferenciar entre un LLM simple y un sistema RAG.
Este repositorio representa la implementación completa de un sistema RAG utilizando herramientas modernas de IA.