Explorar Verba, the Golden RAGtriever
Verba es una aplicación de código abierto con una interfaz de generación mejorada por búsqueda (RAG) fácil de usar. En unos sencillos pasos puedes explorar tus datos y extraer de ellos perspectivas útiles, tanto a nivel local a través de HuggingFace y Ollama, como a través de OpenAI, Cohere y Google.

Verba es una nueva herramienta impulsada por IA que ayuda a los usuarios a crear contenido atractivo y significativo. Diseñada para asistir en todas las fases, desde la lluvia de ideas hasta el borrador, mejora la productividad y la creatividad. Ya seas escritor o creador de contenido, Verba ofrece nuevas posibilidades para optimizar tu proceso creativo.
Introducción
¡Bienvenido al apasionante mundo de la búsqueda vectorial con Verba!
Tanto si estás empezando y quieres aprender una nueva herramienta, como si eres un desarrollador experimentado que busca ampliar su conjunto de herramientas, este artículo es para ti. Te explicará qué es Verba, dónde y para qué se utiliza, cómo usarlo en Python y qué alternativas existen.
Así que, ¡saca el ☕️ y vámonos!
¿Por qué necesito la búsqueda vectorial?
Antes de sumergirnos en los detalles de Verba, entendamos qué es la vectorización y qué es la búsqueda vectorial.
La vectorización es la transformación de los datos de entrada (texto o imagen) en vectores de números reales comprensibles para los modelos de aprendizaje automático. Existen muchas técnicas de vectorización, desde el simple recuento de la frecuencia de un término hasta el uso de características que tienen en cuenta contextos complejos.
Búsqueda de vectores es un método para encontrar objetos similares en función de sus vectores (representaciones numéricas). Es particularmente eficaz para tareas como buscar grandes conjuntos de datos de texto, encontrar imágenes similares o incluso recomendar productos.
¿Por qué es importante la búsqueda vectorial? He aquí algunas razones:
- Escalabilidad: Los métodos de búsqueda tradicionales pueden no ser capaces de manejar grandes conjuntos de datos. La búsqueda vectorial se adapta bien a grandes cantidades de datos.
- Precisión: Mediante el uso de incrustaciones, la búsqueda vectorial puede captar el significado semántico, lo que se traduce en resultados de búsqueda más precisos.
- Universalidad: La búsqueda vectorial puede utilizarse para imágenes, audio y cualquier otro dato que pueda representarse como vectores.
¿Qué es Verba?
Verba es una herramienta de código abierto desarrollada por Weaviate para facilitar y hacer más eficiente la búsqueda vectorial. Verba aprovecha las características de Weaviate, una base de datos vectorial de código abierto capaz de almacenar tanto objetos de datos como incrustaciones vectoriales.
Esta característica permite realizar búsquedas sofisticadas, fluidas y eficientes. Verba combina la potencia de los modelos de aprendizaje automático para crear incrustaciones (vectores) y la solidez de Weaviate para realizar búsquedas rápidas y precisas.
Modelos
Verba le permite seleccionar diferentes proveedores de LLM (Large Language Models) en función de su caso de uso específico:
- Ollama: Modelos locales de incrustación y generación, p.ej., Llama3
- HuggingFace: Modelos locales de incrustación y generación, p.ej., MiniLMEmbedder
- Cohere: Modelos de incrustación y generación, p.ej., Command R+
- Google: Modelos de incrustación y generación, p.ej., Gemini
- OpenAI: Modelos de incrustación y generación, p.ej., GPT-4o
Datos
Verba permite trabajar con los siguientes tipos de datos:
- PDF: Importar archivos PDF en Verba
- CSV/XLSX: Importación de datos tabulares a Verba
- Desestructurado: Importación de datos a través de Unstructured.io
- Multimodal: Planes para importar datos multimodales en Verba.
Ejemplos de uso de Verba
Búsqueda de documentos. Uno de los usos más comunes de Weaviate Verba es la recuperación de documentos. Si tiene una colección de trabajos de investigación, artículos de noticias o entradas de blog, Verba puede ayudarle a encontrar documentos relevantes basados en una consulta.
Búsqueda por similitud de imágenes. Si dispone de un conjunto de datos de imágenes, puede utilizar Verba para buscar imágenes visualmente similares. Esto es especialmente útil para aplicaciones como la recomendación basada en imágenes o la detección de imágenes duplicadas.
Búsqueda semántica de texto. Verba hace un gran trabajo con la búsqueda semántica de texto, que tiene como objetivo encontrar documentos que son semánticamente similares a una consulta dada. Esto va más allá de la concordancia de palabras clave para comprender el contexto y el significado de la consulta.
Primeros pasos con Verba
Vamos a entender como empezar con Weaviate Verba y usarlo en un proyecto Python. Cubriremos la instalación, los fundamentos de uso y un ejemplo práctico.
Instalación
Primero que nada, necesitas instalar Weaviate y la libreria Verba. Esto se puede hacer usando pip:
1pip install weaviate-client
2pip install weaviate-verba
Configuración
Para utilizar Weaviate Verba, debe tener una instancia de Weaviate en ejecución. El despliegue local es la forma más fácil de ejecutar la base de datos Weaviate para la creación de prototipos y pruebas. Puedes ejecutar Weaviate localmente usando Docker:
1docker run -p 8080:8080 -p 50051:50051 semitechnologies/weaviate:latest
Puede encontrar instrucciones detalladas sobre cómo desplegar Weaviate con Docker en su Weaviate Docker Guide.
Si prefieres soluciones en la nube, Weaviate Cloud Service (WCS) ofrece un entorno escalable y gestionado. Lee sobre como configurar un cluster en la nube y obtener claves API en Weaviate Cluster Setup Guide.
Usando Verba
Antes de ejecutar Verba, necesitas configurar el acceso a diferentes componentes dependiendo de las tecnologías seleccionadas, como OpenAI, Cohere o HuggingFace, usando el archivo .env
. Créalo en el mismo directorio donde vayas a ejecutar Verba. 👉 Ejemplo .env.
Ahora veamos cómo usar Weaviate Verba con código Python. Empecemos con un ejemplo sencillo de indexación y búsqueda de datos de texto.
Indización de datos:
1import weaviate
2from weaviate_verba import Verba
3
4# Conexión a Weaviate
5client = weaviate.Client("http://localhost:8080")
6
7# Inicialización de Verba
8verba = Verba(client)
9
10# Definir un esquema
11schema = {
12 "classes": [
13 {
14 "class": "Article",
15 "properties": [
16 {
17 "name": "title",
18 "dataType": ["string"]
19 },
20 {
21 "name": "content",
22 "dataType": ["text"]
23 }
24 ]
25 }
26 ]
27}
28
29# Crear un esquema
30client.schema.create(schema)
31
32# Indexación de los datos
33articles = [
34 {"title": "Introduction to Machine Learning", "content": "Machine learning is a field of AI..."},
35 {"title": "Deep Learning Basics", "content": "Deep learning is a subset of machine learning..."},
36]
37
38for article in articles:
39 client.data_object.create(article, "Article")
Buscando datos:
1# Buscar artículos similares
2query = "Basics of AI"
3result = verba.search("Article", query)
4
5for item in result:
6 print(f"Title: {item['title']}, Content: {item['content']}")
Documentos locales
Echemos un vistazo más de cerca a cómo utilizar Weaviate Verba para indexar y buscar documentos almacenados localmente. Veremos el proceso de cargar documentos desde el sistema de archivos local, indexarlos usando Weaviate Verba, y luego realizar una búsqueda.
Asegurate de tener Weaviate y Verba instalados y una instancia de Weaviate corriendo.
Carga e indexación
Supongamos que tienes un directorio con ficheros de texto que quieres indexar. Escribamos código que cargue estos archivos, cree un esquema en Weaviate, e indexe los documentos.
1import os
2import weaviate
3from weaviate_verba import Verba
4
5# Conexión a Weaviate
6client = weaviate.Client("http://localhost:8080")
7
8# Inicialización de Verba
9verba = Verba(client)
10
11# Definir un esquema
12schema = {
13 "classes": [
14 {
15 "class": "Document",
16 "properties": [
17 {
18 "name": "title",
19 "dataType": ["string"]
20 },
21 {
22 "name": "content",
23 "dataType": ["text"]
24 }
25 ]
26 }
27 ]
28}
29
30# Crear un esquema
31client.schema.create(schema)
32
33# Función de descarga de documentos del catálogo
34def load_documents_from_directory(directory_path):
35 documents = []
36 for filename in os.listdir(directory_path):
37 if filename.endswith(".txt"):
38 file_path = os.path.join(directory_path, filename)
39 with open(file_path, 'r', encoding='utf-8') as file:
40 content = file.read()
41 documents.append({
42 "title": filename,
43 "content": content
44 })
45 return documents
46
47# Cargar documentos
48directory_path = "/path/to/your/documents" # Cámbialo por la ruta de tu directorio
49documents = load_documents_from_directory(directory_path)
50
51# Indexar documentos
52for doc in documents:
53 client.data_object.create(doc, "Document")
Búsqueda de documentos
Ahora que hemos indexado nuestros documentos locales, podemos realizar búsquedas con Verba.
1# Definición de la consulta de búsqueda
2query = "Machine learning concepts"
3
4# Realizar la búsqueda
5results = verba.search("Document", query)
6
7# Mostrar resultados
8for result in results:
9 # Imprimir los primeros 200 caracteres del contenido
10 print(f"Title: {result['title']}, Content: {result['content'][:200]}...")
Ejemplo de escenario completo
He aquí un script completo que combina descarga, indexación y búsqueda:
1import os
2import weaviate
3from weaviate_verba import Verba
4
5# Conexión a Weaviate
6client = weaviate.Client("http://localhost:8080")
7
8# Inicialización de Verba
9verba = Verba(client)
10
11# Definir un esquema
12schema = {
13 "classes": [
14 {
15 "class": "Document",
16 "properties": [
17 {
18 "name": "title",
19 "dataType": ["string"]
20 },
21 {
22 "name": "content",
23 "dataType": ["text"]
24 }
25 ]
26 }
27 ]
28}
29
30# Crear un esquema
31client.schema.create(schema)
32
33# Función de descarga de documentos del catálogo
34def load_documents_from_directory(directory_path):
35 documents = []
36 for filename in os.listdir(directory_path):
37 if filename.endswith(".txt"):
38 file_path = os.path.join(directory_path, filename)
39 with open(file_path, 'r', encoding='utf-8') as file:
40 content = file.read()
41 documents.append({
42 "title": filename,
43 "content": content
44 })
45 return documents
46
47# Cargar documentos
48directory_path = "/path/to/your/documents" # Cámbialo por la ruta de tu directorio
49documents = load_documents_from_directory(directory_path)
50
51# Indexar documentos
52for doc in documents:
53 client.data_object.create(doc, "Document")
54
55# Definición de la consulta de búsqueda
56query = "Machine learning concepts"
57
58# Realizar la búsqueda
59results = verba.search("Document", query)
60
61# Mostrar resultados
62for result in results:
63 # Imprimir los primeros 200 caracteres del contenido
64 print(f"Title: {result['title']}, Content: {result['content'][:200]}...")
Explicación
Cargar documentos: La función
load_documents_from_directory
lee archivos de texto del directorio especificado y carga su contenido en la lista del diccionario.Indización de documentos: Cada documento se indexa en Weaviate con el nombre de clase “Documento”.
Búsqueda: Se procesa la consulta de búsqueda y se imprimen los resultados, mostrando el título y los 200 primeros caracteres del contenido de cada documento.
Siguiendo estos pasos, podrá indexar y buscar eficientemente documentos guardados localmente utilizando Weaviate Verba. Este método puede adaptarse a diferentes tipos de datos de texto, proporcionando capacidades de búsqueda potentes y escalables para sus proyectos.
Pros y contras de Verba
Entonces, ¿cuáles son las cosas buenas y qué se puede mejorar de esta herramienta?
Pros del Verba
- Facilidad de uso: Verba proporciona una API de alto nivel que facilita la integración de la búsqueda vectorial en tus aplicaciones.
- Flexibilidad: Una variedad de tipos de datos son soportados, incluyendo texto, imágenes y más.
- Rendimiento: Construido sobre Weaviate, Verba proporciona una búsqueda rápida y eficiente incluso en grandes conjuntos de datos.
- Código abierto: El código abierto le permite contribuir a su desarrollo y adaptarlo a sus necesidades.
Desventajas de Verba
- Dificultad de instalación: La instalación inicial, especialmente la configuración de Weaviate, puede ser difícil para los principiantes.
- Consumo intensivo de recursos: Ejecutar Weaviate y realizar operaciones vectoriales puede consumir muchos recursos y requerir una potencia de cálculo significativa.
- Curva de aprendizaje: Puede ser necesaria formación para comprender los conceptos de búsqueda vectorial y utilizar Verba de forma eficaz.
👉 ¿Quieres ver Verba en acción? Verba live demo.
👉 El artículo sobre Verba oficial de Weaviate.
👉 Vídeo de YouTube con una visión general de las características de Verba.
Soluciones alternativas
Faiss
Faiss (Facebook AI Similarity Search) es una popular biblioteca para la búsqueda eficiente de similitudes y la agrupación de vectores densos.
Ventajas de Faiss:
- Altamente optimizado: Faiss está optimizado para el rendimiento y maneja grandes conjuntos de datos de manera eficiente.
- Versatilidad: Admite diversos métodos de indexación y estrategias de búsqueda.
Desventajas de Faiss:.
- Complejidad: Faiss puede ser difícil de configurar y utilizar, especialmente para los principiantes.
- Alcance limitado: Está orientado principalmente a la búsqueda vectorial y no ofrece un motor de búsqueda completo como Weaviate.
Elasticsearch
Elasticsearch es un motor de búsqueda ampliamente utilizado que puede ampliarse con el plugin k-NN para soportar la búsqueda vectorial.
Ventajas de Elasticsearch con k-NN:.
- Escalabilidad: Elasticsearch es altamente escalable y puede manejar aplicaciones de búsqueda a gran escala.
- Características: Además de la búsqueda vectorial, ofrece una amplia gama de funciones de búsqueda y análisis.
Ventajas de Elasticsearch con k-NN:.
- Complejidad: Instalar y configurar Elasticsearch con el plugin k-NN puede ser complicado.
- Rendimiento: A pesar de su potencia, no puede igualar el rendimiento de herramientas de búsqueda vectorial especializadas como Faiss o Weaviate.
Conclusión
Verba es una potente herramienta que pone toda la potencia de la búsqueda vectorial al alcance de tu mano. Su facilidad de uso, flexibilidad y rendimiento la convierten en una gran elección para una gran variedad de aplicaciones. A pesar de cierta complejidad en la configuración y los requisitos de recursos, los beneficios que ofrece merecen la pena.
Para usuarios novatos, Weaviate Verba puede ser una gran introducción al mundo de la búsqueda vectorial. Los ejemplos de código en este post le ayudarán a empezar su camino. A medida que te familiarices con la herramienta, descubrirás todo su potencial y la amplia gama de aplicaciones que puede soportar.
Si estás pensando en otras alternativas, Faiss y Elasticsearch con el plugin k-NN también son buenas opciones, cada una con sus propios puntos fuertes y débiles. En última instancia, la elección de la mejor herramienta para sus necesidades dependerá de su caso de uso específico, sus requisitos de rendimiento y su familiaridad con la tecnología.
Diviértete codificando, ¡y que tu búsqueda sea siempre eficiente y precisa!
😎