IA RAG con Ollama y Vector DB

Roni Bandini
3 min readJan 31, 2025

El problema

Un cliente de la industria automotriz recibe leads con datos inconsistentes, los cuales requieren trabajo manual de filtrado, reubicación y programación frecuente de queries.

Por ejemplo: en el campo Modelo a veces se indica la cuota de financiación, en el campo OBS se vuelca sin criterio uniforme mucha información vital, etc

Inconsistencias en los campos

Solución #1 Crear un RAG con Ollama, Pandas y LanceDB

Python code snippet
  • Importar el CSV a un Vector Database
  • Montar un LLM local con RAG (Retrieval-Augmented Generation)
  • Escribir un script Python para chatear usando el contexto del Vector Database

Ahora, en lugar de analizar cada fila manualmente, reubicar datos y escribir consultas SQL, es posible interactuar en lenguaje natural solicitando, por ejemplo:

“Listar los mejores contactos de condición autónomo que buscan X modelo de auto”

¿Por qué un Vector Database?

LanceDB

Un Vector Database utiliza algoritmos de búsqueda de similitud, como nearest neighbor search, para recuperar los vectores más cercanos a una consulta dada y permite generar fácilmente el contexto — ordenado y estructurado -para el LLM.

Demo del RAG con Vector Database

IA RAG con Vector Database en Python

Tecnologías utilizadas

  • Ollama
  • LanceDB
  • Modelos qwen2.5 y bge-m3

Detalles a tener en cuenta

Es preciso usar un modelo capaz de usar embeddings. En la página de Ollama es posible filtrar los modelos embeddings con este link

Otras opciones de RAG

PandasAI con gpt-40-mini

Otra opción analizada fue PandasAI “una plataforma que simplifica realizar preguntas a tus datos en lenguaje natural”

Dicho esto, la instalación de PandasAI da error a menos que se haga un downgrade a Python 3.11 Luego, es preciso un API Key https://app.pandabi.ai o bien configurar la API de OpenAI.

Es posible agregar semántica explicando qué es cada planilla y columna, por medio de

pai.create(path=”…” description=”Base de datos de call center con leads para planes de compra de autos 0KM”,
df = file_df,
columns=[
{
“name”: “ID”,
“type”: “integer”,
“description”: “ID del lead”
},
{
“name”: “FECHA_ALTA”,
“type”: “string”,
“description”: “Fecha del contacto con el lead”
},

Funcionó relativamente bien para datos estructurados, pero tuvo dificultades para operar con datos desordenados e inconsistentes en un campo de texto Obs.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Roni Bandini
Roni Bandini

Written by Roni Bandini

Contracultura maker 🛠️ Artes electrónicas 💡Inteligencia Artificial: LLM y Machine Learning 🚀 Embedded System developer

No responses yet

Write a response