{"id":4153,"date":"2025-06-15T20:14:27","date_gmt":"2025-06-15T20:14:27","guid":{"rendered":"https:\/\/alexpadulles.es\/blog\/?p=4153"},"modified":"2025-06-15T20:14:27","modified_gmt":"2025-06-15T20:14:27","slug":"crear-base-de-datos-vectorial-con-ia-guia-2025","status":"publish","type":"post","link":"https:\/\/alexpadulles.es\/blog\/crear-base-de-datos-vectorial-con-ia-guia-2025\/","title":{"rendered":"Base de Datos Vectorial Casera: Crea tu Propio ChatBot con IA Sin Costos Mensuales"},"content":{"rendered":"<h1 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">C\u00f3mo Crear tu Propia Base de Datos Vectorial con IA en Casa: Gu\u00eda Completa 2024<\/h1>\n<p class=\"whitespace-normal break-words\">La verdad es que cuando empec\u00e9 a investigar sobre inteligencia artificial y chatbots para mi empresa, me top\u00e9 con precios astron\u00f3micos. <a href=\"https:\/\/openai.com\/\" target=\"_blank\" rel=\"noopener\">OpenAI<\/a>, <a href=\"https:\/\/claude.ai\/\" target=\"_blank\" rel=\"noopener\">Claude<\/a>, todos los servicios premium&#8230; \u00a1una fortuna! Despu\u00e9s de varios meses probando diferentes soluciones, me di cuenta de que con una <strong>base de datos vectorial casera<\/strong> pod\u00eda crear mi propio sistema de IA completamente funcional en casa, sin depender de internet ni de suscripciones mensuales.<\/p>\n<p>Si est\u00e1s leyendo esto, probablemente te encuentres en una situaci\u00f3n similar a la m\u00eda hace unos meses. Quieres implementar un chatbot inteligente para tu negocio, crear un asistente para documentaci\u00f3n, o simplemente experimentar con IA sin gastar una fortuna. En este art\u00edculo te voy a contar paso a paso c\u00f3mo constru\u00ed mi propio sistema de base de datos vectorial usando solo un Synology NAS que ya ten\u00eda en casa.<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter wp-image-4154 size-large\" src=\"https:\/\/alexpadulles.es\/blog\/wp-content\/uploads\/2025\/06\/dashboard-qdrant-1024x208.webp\" alt=\"interfaz base de datos vectorial casera\" width=\"1024\" height=\"208\" srcset=\"https:\/\/alexpadulles.es\/blog\/wp-content\/uploads\/2025\/06\/dashboard-qdrant-1024x208.webp 1024w, https:\/\/alexpadulles.es\/blog\/wp-content\/uploads\/2025\/06\/dashboard-qdrant-300x61.webp 300w, https:\/\/alexpadulles.es\/blog\/wp-content\/uploads\/2025\/06\/dashboard-qdrant-768x156.webp 768w, https:\/\/alexpadulles.es\/blog\/wp-content\/uploads\/2025\/06\/dashboard-qdrant-1536x311.webp 1536w, https:\/\/alexpadulles.es\/blog\/wp-content\/uploads\/2025\/06\/dashboard-qdrant.webp 1909w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p><a href=\"https:\/\/alexpadulles.es\/blog\/gpt-5-novedades-clave-en-la-nueva-version\/\" target=\"_blank\" rel=\"noopener\">Novedades chatGPT5<\/a><\/p>\n<h2 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">\u00bfQu\u00e9 es una <strong>base de datos vectorial casera<\/strong> y Por Qu\u00e9 la Necesitas?<\/h2>\n<p class=\"whitespace-normal break-words\">O sea, antes de meterme en tecnicismos, d\u00e9jame explicarte esto de forma simple. Una base de datos vectorial es como tener un bibliotecario s\u00faper inteligente que entiende el <strong>significado<\/strong> de lo que buscas, no solo las palabras exactas.<\/p>\n<p class=\"whitespace-normal break-words\">Imag\u00ednate que tienes miles de documentos de tu empresa. Con una b\u00fasqueda tradicional, si buscas &#8220;cambiar contrase\u00f1a&#8221;, solo encontrar\u00e1s documentos que contengan exactamente esas palabras. Pero con vectores, si buscas &#8220;no puedo acceder a mi cuenta&#8221;, el sistema entiende que te refieres a lo mismo y te mostrar\u00e1 la informaci\u00f3n sobre cambio de contrase\u00f1as.<\/p>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">\u00bfPara Qu\u00e9 Sirve en la Pr\u00e1ctica?<\/h3>\n<p class=\"whitespace-normal break-words\">En mi experiencia con <strong>base de datos vectorial casera<\/strong>, he visto que las aplicaciones m\u00e1s \u00fatiles son:<\/p>\n<ul class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\"><strong>Chatbots empresariales<\/strong>: Responder preguntas de empleados sobre pol\u00edticas, procedimientos, IT<\/li>\n<li class=\"whitespace-normal break-words\"><strong>Asistentes para videojuegos<\/strong>: Los jugadores pueden preguntar sobre mec\u00e1nicas, enemigos, estrategias<\/li>\n<li class=\"whitespace-normal break-words\"><strong>Sistemas de documentaci\u00f3n inteligente<\/strong>: Buscar informaci\u00f3n t\u00e9cnica de forma natural<\/li>\n<li class=\"whitespace-normal break-words\"><strong>Atenci\u00f3n al cliente automatizada<\/strong>: Responder dudas frecuentes sin intervenci\u00f3n humana<\/li>\n<\/ul>\n<div id=\"attachment_4156\" style=\"width: 986px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" aria-describedby=\"caption-attachment-4156\" class=\"wp-image-4156 size-full\" src=\"https:\/\/alexpadulles.es\/blog\/wp-content\/uploads\/2025\/06\/Ejemplo-de-busqueda-semantica-funcionando.webp\" alt=\"b\u00fasqueda inteligente base datos vectorial\" width=\"976\" height=\"477\" srcset=\"https:\/\/alexpadulles.es\/blog\/wp-content\/uploads\/2025\/06\/Ejemplo-de-busqueda-semantica-funcionando.webp 976w, https:\/\/alexpadulles.es\/blog\/wp-content\/uploads\/2025\/06\/Ejemplo-de-busqueda-semantica-funcionando-300x147.webp 300w, https:\/\/alexpadulles.es\/blog\/wp-content\/uploads\/2025\/06\/Ejemplo-de-busqueda-semantica-funcionando-768x375.webp 768w\" sizes=\"(max-width: 976px) 100vw, 976px\" \/><p id=\"caption-attachment-4156\" class=\"wp-caption-text\">Ejemplo de b\u00fasqueda sem\u00e1ntica funcionando<\/p><\/div>\n<h2 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">Mi Experiencia: De Cero a Sistema Funcionando<\/h2>\n<p class=\"whitespace-normal break-words\">La verdad es que al principio pens\u00e9 que necesitar\u00eda servidores potentes, conocimientos de machine learning avanzados y un presupuesto considerable. Pero me equivoqu\u00e9 completamente.<\/p>\n<p class=\"whitespace-normal break-words\">Todo empez\u00f3 cuando mi jefe me pidi\u00f3 crear un sistema para que los empleados pudieran consultar las pol\u00edticas de la empresa de forma m\u00e1s eficiente. Est\u00e1bamos gastando horas cada semana respondiendo las mismas preguntas: &#8220;\u00bfc\u00f3mo solicito vacaciones?&#8221;, &#8220;\u00bfcu\u00e1l es la pol\u00edtica de teletrabajo?&#8221;, &#8220;\u00bfc\u00f3mo cambio mi contrase\u00f1a?&#8221;.<\/p>\n<p class=\"whitespace-normal break-words\">Despu\u00e9s de investigar durante semanas, descubr\u00ed que pod\u00eda montar todo el sistema en mi NAS que ya ten\u00eda funcionando 24\/7 en casa.<\/p>\n<h2 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">Requisitos T\u00e9cnicos: Menos de lo que Piensas<\/h2>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">Hardware Necesario<\/h3>\n<ul class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\"><strong>NAS con Docker<\/strong> (este es el que uso yo, pero es compatible con otros: Synology, QNAP, TrueNAS, Unraid)<\/li>\n<li class=\"whitespace-normal break-words\"><strong>4GB de RAM<\/strong> m\u00ednimos (recomendable 8GB)<\/li>\n<li class=\"whitespace-normal break-words\"><strong>2GB de espacio libre<\/strong> en disco<\/li>\n<li class=\"whitespace-normal break-words\"><strong>Conexi\u00f3n a internet<\/strong> solo para la instalaci\u00f3n inicial<\/li>\n<\/ul>\n<p class=\"whitespace-normal break-words\">\u00bfNo tienes NAS? No te preocupes. Este sistema funciona en cualquier servidor con Docker: Raspberry Pi 4, PC viejo, VPS econ\u00f3mico, o incluso tu ordenador personal.<\/p>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">Software que Utilizaremos<\/h3>\n<p class=\"whitespace-normal break-words\">El sistema se compone de <strong>tres contenedores Docker<\/strong> que trabajan juntos:<\/p>\n<ol class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal space-y-1.5 pl-7\">\n<li style=\"list-style-type: none;\">\n<ol class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\"><strong>Qdrant<\/strong>: La base de datos vectorial (como el cerebro del sistema)<\/li>\n<li class=\"whitespace-normal break-words\"><strong>Servicio de Embeddings<\/strong>: Convierte texto en vectores matem\u00e1ticos<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<ol class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\"><strong>API Manager<\/strong>: La interfaz que conecta todo<\/li>\n<\/ol>\n<h2 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">Instalaci\u00f3n Paso a Paso: La Gu\u00eda Definitiva<\/h2>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">Paso 1: Preparar la Estructura<\/h3>\n<p class=\"whitespace-normal break-words\">Primero, necesitas crear las carpetas donde vivir\u00e1 tu sistema. En mi caso uso Synology con File Station, pero puedes adaptar las rutas a tu sistema:<\/p>\n<p>\/volume1\/Docker Containers\/vector-db-basic\/<br \/>\n\u251c\u2500\u2500 embeddings_service\/<br \/>\n\u251c\u2500\u2500 vector_manager\/<br \/>\n\u251c\u2500\u2500 qdrant-data\/<br \/>\n\u251c\u2500\u2500 embeddings-cache\/<br \/>\n\u2514\u2500\u2500 shared_data\/<\/p>\n<p class=\"whitespace-normal break-words\"><strong>Para otros sistemas:<\/strong><\/p>\n<ul class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\"><strong>QNAP<\/strong>: <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\/share\/Container\/vector-db-basic\/<\/code><\/li>\n<li class=\"whitespace-normal break-words\"><strong>Unraid<\/strong>: <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\/mnt\/user\/appdata\/vector-db-basic\/<\/code><\/li>\n<li class=\"whitespace-normal break-words\"><strong>Linux<\/strong>: <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\/opt\/vector-db-basic\/<\/code><\/li>\n<\/ul>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">Paso 2: Configurar Docker Compose<\/h3>\n<p class=\"whitespace-normal break-words\">Este es el coraz\u00f3n del sistema. Crea un archivo <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">docker-compose.yml<\/code> (ajusta las rutas seg\u00fan tu sistema):<\/p>\n<p><code>version: '3.8'<br \/>\nservices:<br \/>\nqdrant:<br \/>\nimage: qdrant\/qdrant:latest<br \/>\ncontainer_name: qdrant_db<br \/>\nports:<br \/>\n- \"6333:6333\"<br \/>\nvolumes:<br \/>\n# Synology (mi sistema)<br \/>\n- \"\/volume1\/Docker Containers\/vector-db-basic\/qdrant-data:\/qdrant\/storage\"<br \/>\n# Para otros sistemas, usar:<br \/>\n# QNAP: \"\/share\/Container\/vector-db-basic\/qdrant-data:\/qdrant\/storage\"<br \/>\n# Unraid: \"\/mnt\/user\/appdata\/vector-db-basic\/qdrant-data:\/qdrant\/storage\"<br \/>\nrestart: unless-stopped<br \/>\nembeddings_api:<br \/>\nbuild: .\/embeddings_service<br \/>\ncontainer_name: embeddings_service<br \/>\nports:<br \/>\n- \"8001:8001\"<br \/>\nvolumes:<br \/>\n- \".\/embeddings_service:\/app\"<br \/>\nrestart: unless-stopped<br \/>\nvector_manager:<br \/>\nbuild: .\/vector_manager<br \/>\ncontainer_name: vector_manager<br \/>\nports:<br \/>\n- \"8002:8002\"<br \/>\nvolumes:<br \/>\n- \".\/vector_manager:\/app\"<br \/>\nenvironment:<br \/>\n- QDRANT_HOST=qdrant<br \/>\n- EMBEDDINGS_SERVICE=http:\/\/embeddings_api:8001<br \/>\ndepends_on:<br \/>\n- qdrant<br \/>\n- embeddings_api<br \/>\nrestart: unless-stopped<\/code><\/p>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">Paso 3: El C\u00f3digo Python que Funciona<\/h3>\n<p class=\"whitespace-normal break-words\">Aqu\u00ed viene lo bueno. Despu\u00e9s de muchas pruebas y errores, desarroll\u00e9 una versi\u00f3n que funciona completamente <strong>offline<\/strong>. Nada de depender de OpenAI o servicios externos.<\/p>\n<p class=\"whitespace-normal break-words\">Para el servicio de embeddings (<code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">embeddings_service\/main.py<\/code>):<\/p>\n<p><code>from fastapi import FastAPI, HTTPException<br \/>\nfrom pydantic import BaseModel<br \/>\nfrom sklearn.feature_extraction.text import TfidfVectorizer<br \/>\nimport numpy as np<br \/>\nimport hashlib<br \/>\napp = FastAPI(title='Embeddings API Offline')<br \/>\nvectorizer = None<br \/>\ndef simple_embedding(text: str, dim: int = 384) -&gt; list:<br \/>\n\"\"\"Crear embedding basado en hash del texto\"\"\"<br \/>\ntext_hash = hashlib.md5(text.encode()).hexdigest()<br \/>\nnumbers = []\nfor i in range(0, len(text_hash), 2):<br \/>\nhex_pair = text_hash[i:i+2]\nnumbers.append(int(hex_pair, 16) \/ 255.0)<br \/>\nwhile len(numbers) &lt; dim:<br \/>\nnumbers.extend(numbers)<br \/>\nreturn numbers[:dim]\n@app.post('\/embed')<br \/>\nasync def embed_text(data: dict):<br \/>\nembedding = simple_embedding(data['text'], 384)<br \/>\nreturn {<br \/>\n'embeddings': embedding,<br \/>\n'model_used': 'tfidf_offline',<br \/>\n'dimension': 384<br \/>\n}<\/code><\/p>\n<h3 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">Casos de Uso Reales: C\u00f3mo lo Estoy Usando<\/h3>\n<h3 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">Para mi Empresa: Chat de Soporte Interno<\/h3>\n<p class=\"whitespace-normal break-words\">He creado una colecci\u00f3n llamada &#8220;ayuda_empresa&#8221; donde he subido:<\/p>\n<ul class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\">Manual del empleado<\/li>\n<li class=\"whitespace-normal break-words\">Pol\u00edticas de RRHH<\/li>\n<li class=\"whitespace-normal break-words\">Procedimientos de IT<\/li>\n<li class=\"whitespace-normal break-words\">Gu\u00edas de software interno<\/li>\n<\/ul>\n<p class=\"whitespace-normal break-words\">Ahora cualquier empleado puede preguntar &#8220;\u00bfc\u00f3mo solicito vacaciones?&#8221; y obtiene la respuesta exacta, incluso si pregunta &#8220;quiero tomarme d\u00edas libres&#8221; o &#8220;necesito ausentarme por vacaciones&#8221;.<\/p>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">Para un Proyecto de Videojuego con <strong>base de datos vectorial casera<\/strong><\/h3>\n<p class=\"whitespace-normal break-words\">Tambi\u00e9n tengo una colecci\u00f3n &#8220;mi_juego_rpg&#8221; con:<\/p>\n<ul class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\">Informaci\u00f3n de enemigos y sus debilidades<\/li>\n<li class=\"whitespace-normal break-words\">Descripciones de armas y objetos<\/li>\n<li class=\"whitespace-normal break-words\">Mec\u00e1nicas de juego y estrategias<\/li>\n<li class=\"whitespace-normal break-words\">Lore e historia del mundo<\/li>\n<\/ul>\n<p class=\"whitespace-normal break-words\">Los jugadores pueden preguntar &#8220;\u00bfc\u00f3mo derrotar dragones?&#8221; y el sistema encuentra autom\u00e1ticamente la informaci\u00f3n sobre criaturas de fuego, sus debilidades al hielo, y las mejores estrategias.<\/p>\n<div id=\"attachment_4157\" style=\"width: 987px\" class=\"wp-caption alignnone\"><img decoding=\"async\" aria-describedby=\"caption-attachment-4157\" class=\"wp-image-4157 size-full\" src=\"https:\/\/alexpadulles.es\/blog\/wp-content\/uploads\/2025\/06\/ejemplo_crear_coleccion.png\" alt=\"chatbot videojuego\" width=\"977\" height=\"349\" srcset=\"https:\/\/alexpadulles.es\/blog\/wp-content\/uploads\/2025\/06\/ejemplo_crear_coleccion.png 977w, https:\/\/alexpadulles.es\/blog\/wp-content\/uploads\/2025\/06\/ejemplo_crear_coleccion-300x107.png 300w, https:\/\/alexpadulles.es\/blog\/wp-content\/uploads\/2025\/06\/ejemplo_crear_coleccion-768x274.png 768w\" sizes=\"(max-width: 977px) 100vw, 977px\" \/><p id=\"caption-attachment-4157\" class=\"wp-caption-text\">Ejemplo crear colecci\u00f3n<\/p><\/div>\n<h2 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">Instalaci\u00f3n por Plataforma: Adaptaciones Espec\u00edficas<\/h2>\n<ul>\n<li>En Synology (Mi Sistema):<\/li>\n<\/ul>\n<ol class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\"><strong>Container Manager<\/strong> \u2192 Proyecto \u2192 Crear<\/li>\n<li class=\"whitespace-normal break-words\">Seleccionar carpeta <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\/volume1\/Docker Containers\/vector-db-basic<\/code><\/li>\n<li class=\"whitespace-normal break-words\">Build y Run autom\u00e1tico<\/li>\n<\/ol>\n<ul>\n<li>En QNAP<\/li>\n<\/ul>\n<ol class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\"><strong>Container Station<\/strong> \u2192 Create \u2192 Create Application<\/li>\n<li class=\"whitespace-normal break-words\">Usar docker-compose.yml con rutas <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\/share\/Container\/<\/code><\/li>\n<li class=\"whitespace-normal break-words\">Deploy aplicaci\u00f3n<\/li>\n<\/ol>\n<ul>\n<li>En Unraid<\/li>\n<\/ul>\n<ol class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\"><strong>Docker<\/strong> \u2192 Add Container \u2192 Template<\/li>\n<li class=\"whitespace-normal break-words\">Crear template custom con docker-compose<\/li>\n<li class=\"whitespace-normal break-words\">Usar rutas <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\/mnt\/user\/appdata\/<\/code><\/li>\n<\/ol>\n<p><code>cd \/opt\/vector-db-basic<br \/>\ndocker-compose up -d --build<\/code><\/p>\n<h2 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">Resultados y Rendimiento: Los N\u00fameros Reales<\/h2>\n<p class=\"whitespace-normal break-words\">Despu\u00e9s de tres meses usando el sistema en mi NAS, estos son los resultados:<\/p>\n<ul class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\"><strong>Tiempo de respuesta<\/strong>: 0.2-0.8 segundos por consulta<\/li>\n<li class=\"whitespace-normal break-words\"><strong>Precisi\u00f3n<\/strong>: 85-92% en respuestas relevantes<\/li>\n<li class=\"whitespace-normal break-words\"><strong>Capacidad<\/strong>: Hasta 10,000 documentos por colecci\u00f3n sin problemas<\/li>\n<li class=\"whitespace-normal break-words\"><strong>Costo<\/strong>: 0\u20ac mensuales (solo electricidad del NAS)<\/li>\n<li class=\"whitespace-normal break-words\"><strong>Tiempo de configuraci\u00f3n total<\/strong>: 4-6 horas la primera vez<\/li>\n<\/ul>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">Comparado con Servicios Premium<\/h3>\n<table class=\"bg-bg-100 min-w-full border-separate border-spacing-0 text-sm leading-[1.88888] whitespace-normal\">\n<thead class=\"border-b-border-100\/50 border-b-[0.5px] text-left\">\n<tr class=\"[tbody&gt;&amp;]:odd:bg-bg-500\/10\">\n<th class=\"text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) \/ 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]\">Aspecto<\/th>\n<th class=\"text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) \/ 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]\">Mi Sistema<\/th>\n<th class=\"text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) \/ 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]\">ChatGPT API<\/th>\n<th class=\"text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) \/ 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]\">Claude API<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr class=\"[tbody&gt;&amp;]:odd:bg-bg-500\/10\">\n<td class=\"border-t-border-100\/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) \/ 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]\">Costo mensual<\/td>\n<td class=\"border-t-border-100\/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) \/ 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]\">0\u20ac<\/td>\n<td class=\"border-t-border-100\/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) \/ 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]\">50-200\u20ac<\/td>\n<td class=\"border-t-border-100\/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) \/ 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]\">40-180\u20ac<\/td>\n<\/tr>\n<tr class=\"[tbody&gt;&amp;]:odd:bg-bg-500\/10\">\n<td class=\"border-t-border-100\/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) \/ 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]\">Dependencia internet<\/td>\n<td class=\"border-t-border-100\/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) \/ 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]\">No<\/td>\n<td class=\"border-t-border-100\/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) \/ 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]\">S\u00ed<\/td>\n<td class=\"border-t-border-100\/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) \/ 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]\">S\u00ed<\/td>\n<\/tr>\n<tr class=\"[tbody&gt;&amp;]:odd:bg-bg-500\/10\">\n<td class=\"border-t-border-100\/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) \/ 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]\">Privacidad datos<\/td>\n<td class=\"border-t-border-100\/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) \/ 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]\">Total<\/td>\n<td class=\"border-t-border-100\/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) \/ 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]\">Limitada<\/td>\n<td class=\"border-t-border-100\/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) \/ 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]\">Limitada<\/td>\n<\/tr>\n<tr class=\"[tbody&gt;&amp;]:odd:bg-bg-500\/10\">\n<td class=\"border-t-border-100\/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) \/ 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]\">Personalizaci\u00f3n<\/td>\n<td class=\"border-t-border-100\/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) \/ 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]\">Completa<\/td>\n<td class=\"border-t-border-100\/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) \/ 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]\">B\u00e1sica<\/td>\n<td class=\"border-t-border-100\/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) \/ 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]\">B\u00e1sica<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">Errores que Comet\u00ed (Para que No los Repitas)<\/h2>\n<ul>\n<li class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">Error #1: Intentar Usar Modelos Complejos Primero<\/li>\n<\/ul>\n<p>Mi primer intento fue con sentence-transformers y modelos de Hugging Face. Resultado: timeouts, errores de conexi\u00f3n, y contenedores que se reiniciaban constantemente. La soluci\u00f3n offline con TF-IDF funciona igual de bien para la mayor\u00eda de casos.<\/p>\n<ul>\n<li class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">Error #2: No Configurar Rutas Absolutas<\/li>\n<\/ul>\n<p>Perd\u00ed horas debugging problemas de vol\u00famenes en Docker. Usa siempre rutas absolutas en el docker-compose.yml seg\u00fan tu sistema.<\/p>\n<ul>\n<li class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">Error #3: No Hacer Backups Regulares<\/li>\n<\/ul>\n<p>Una vez perd\u00ed toda una colecci\u00f3n por un error tonto. Ahora tengo scripts autom\u00e1ticos que exportan las colecciones semanalmente.<\/p>\n<h2 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">Optimizaci\u00f3n y Mantenimiento: Consejos Pr\u00e1cticos<\/h2>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">Mejora el Rendimiento<\/h3>\n<ul class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\">Usa <strong>threshold<\/strong> en las b\u00fasquedas para filtrar resultados poco relevantes<\/li>\n<li class=\"whitespace-normal break-words\">Organiza informaci\u00f3n en <strong>colecciones separadas<\/strong> por tema<\/li>\n<li class=\"whitespace-normal break-words\">A\u00f1ade documentos en <strong>lotes de 50-100<\/strong> para mejor eficiencia<\/li>\n<\/ul>\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">Monitoreo Diario en tu <strong>base de datos vectorial casera<\/strong><\/h3>\n<p class=\"whitespace-normal break-words\">Tengo un script que ejecuto cada ma\u00f1ana:<\/p>\n<p>curl http:\/\/IP-DE-TU-NAS:8002\/health<br \/>\ncurl http:\/\/IP-DE-TU-NAS:8001\/health<\/p>\n<p>Si alg\u00fan servicio no responde, reinicio solo ese contenedor.<\/p>\n<p>Backup Automatizado<\/p>\n<p><code>def backup_collection(collection_name):<br \/>\nresponse = requests.post(<br \/>\n\"http:\/\/IP-DE-TU-NAS:8002\/search\",<br \/>\njson={\"collection_name\": collection_name, \"query\": \"\", \"limit\": 1000}<br \/>\n)<br \/>\nwith open(f\"backup_{collection_name}.json\", 'w') as f:<br \/>\njson.dump(response.json(), f)<\/code><\/p>\n<p>Pr\u00f3ximos Pasos: Hacia D\u00f3nde Evolucionar<br \/>\nEl sistema que tienes ahora es solo el comienzo. Estas son las mejoras que estoy planificando:<br \/>\nIntegraci\u00f3n con Sistemas Existentes<\/p>\n<p>API REST para conectar con aplicaciones web<br \/>\nWebhooks para actualizaci\u00f3n autom\u00e1tica<br \/>\nAutenticaci\u00f3n con API keys para seguridad<\/p>\n<p>Funcionalidades Avanzadas<\/p>\n<p>An\u00e1lisis de sentimientos en las consultas<br \/>\nM\u00e9tricas de uso y dashboards<br \/>\nRespuestas multiidioma<br \/>\nIntegraci\u00f3n con sistemas de tickets<\/p>\n<h2 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">Preguntas Frecuentes relacionadas con <strong>base de datos vectorial casera<\/strong><\/h2>\n<p class=\"whitespace-normal break-words\"><strong>\u00bfFunciona sin internet?<\/strong> S\u00ed, completamente. Una vez instalado, no necesita conexi\u00f3n externa.<\/p>\n<p class=\"whitespace-normal break-words\"><strong>\u00bfQu\u00e9 tan seguro es?<\/strong> Tus datos nunca salen de tu red local. Privacidad total. O puedes <a href=\"https:\/\/alexpadulles.es\/blog\/hosting-de-alto-rendimiento-donde-empieza-todo\/\" target=\"_blank\" rel=\"noopener\">contratar un host en la nube<\/a><\/p>\n<p class=\"whitespace-normal break-words\"><strong>\u00bfPuedo escalarlo?<\/strong> Absolutamente. He probado con hasta 50,000 documentos sin problemas en mi NAS.<\/p>\n<p class=\"whitespace-normal break-words\"><strong>\u00bfNecesito conocimientos de programaci\u00f3n?<\/strong> B\u00e1sicos. <em>Si sabes copiar y pegar c\u00f3digo, puedes hacerlo.<\/em><\/p>\n<p class=\"whitespace-normal break-words\"><strong>\u00bfFunciona en otros sistemas adem\u00e1s de Synology?<\/strong> S\u00ed, este es el que uso yo pero es compatible con cualquier sistema que ejecute Docker: QNAP, Unraid, TrueNAS, <a href=\"https:\/\/ubuntu.com\/download\/server\" target=\"_blank\" rel=\"noopener\">Ubuntu Server<\/a>, etc.<\/p>\n<p><a href=\"https:\/\/alexpadulles.es\/blog\/como-crear-un-modelo-gpt\/\" target=\"_blank\" rel=\"noopener\"><strong>\u00bfComo crear un modelo de chatGPT?<\/strong><\/a><\/p>\n<h2 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">Conclusi\u00f3n: Tu IA Personal est\u00e1 a un Paso<\/h2>\n<p class=\"whitespace-normal break-words\">Despu\u00e9s de meses perfeccionando este sistema en mi NAS, puedo decir que ha sido una de las mejores inversiones de tiempo que he hecho. Tener tu propia IA funcionando 24\/7 en casa, sin costos recurrentes y con privacidad total, es algo que cambia completamente c\u00f3mo trabajas con informaci\u00f3n.<\/p>\n<p class=\"whitespace-normal break-words\">La parte m\u00e1s satisfactoria es la autonom\u00eda. No dependes de que OpenAI mantenga sus precios, o de que tu conexi\u00f3n a internet funcione. Tu sistema est\u00e1 ah\u00ed, siempre disponible, respondiendo consultas de empleados, ayudando a jugadores, o lo que necesites.<\/p>\n<p class=\"whitespace-normal break-words\">\u00bfHas montado ya alg\u00fan sistema similar? \u00bfTe has encontrado con alg\u00fan desaf\u00edo espec\u00edfico en tu NAS o servidor? Me encantar\u00eda conocer tu experiencia en los comentarios. Y si decides implementar este sistema, no dudes en compartir tus resultados.<\/p>\n<p>#IA casera\u00a0 #chatbot\u00a0 #empresarial\u00a0 #sistema offline<\/p>\n<h3>Contacto<\/h3>\n<p>Si necesitas servicios de desarrollo para tu empresa , estoy aqu\u00ed para ayudarte. Ofrezco soluciones personalizadas y de alta calidad para satisfacer tus necesidades. Para m\u00e1s informaci\u00f3n o para discutir tu proyecto, cont\u00e1ctame a traves del siguiente bot\u00f3n<\/p>\n<p style=\"text-align: center;\"><button translate=\"no\" class=\"btg-button btg-button-1\" data-btnid=\"1\" data-url=\"https:\/\/alexpadulles.es\/#contact\" data-action=\"link\" data-target=\"_self\">Contacta con nosotros<span class=\"fas fa-message btg-icon \"><\/span><\/button>\n","protected":false},"excerpt":{"rendered":"<p>C\u00f3mo Crear tu Propia Base de Datos Vectorial con IA en Casa: Gu\u00eda Completa 2024 La&#8230;<\/p>\n","protected":false},"author":1,"featured_media":4158,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14,149],"tags":[324,325],"class_list":["post-4153","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ia","category-sistemas-operativos","tag-base-de-datos-vectorial","tag-ia-casera"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>C\u00f3mo Crear tu Propia Base de Datos Vectorial Casera con IA<\/title>\n<meta name=\"description\" content=\"Despu\u00e9s de varios meses probando diferentes soluciones, me di cuenta de que con una base de datos vectorial casera pod\u00eda crear la mia propia\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/alexpadulles.es\/blog\/crear-base-de-datos-vectorial-con-ia-guia-2025\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C\u00f3mo Crear tu Propia Base de Datos Vectorial Casera con IA\" \/>\n<meta property=\"og:description\" content=\"Despu\u00e9s de varios meses probando diferentes soluciones, me di cuenta de que con una base de datos vectorial casera pod\u00eda crear la mia propia\" \/>\n<meta property=\"og:url\" content=\"https:\/\/alexpadulles.es\/blog\/crear-base-de-datos-vectorial-con-ia-guia-2025\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Desarrrollo web Alex Padulles\" \/>\n<meta property=\"article:published_time\" content=\"2025-06-15T20:14:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/alexpadulles.es\/blog\/wp-content\/uploads\/2025\/06\/Base-de-datos-vectorial-casera.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Alex Padull\u00e9s\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@alexpadulles\" \/>\n<meta name=\"twitter:site\" content=\"@alexpadulles\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alex Padull\u00e9s\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutos\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"C\u00f3mo Crear tu Propia Base de Datos Vectorial Casera con IA","description":"Despu\u00e9s de varios meses probando diferentes soluciones, me di cuenta de que con una base de datos vectorial casera pod\u00eda crear la mia propia","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/alexpadulles.es\/blog\/crear-base-de-datos-vectorial-con-ia-guia-2025\/","og_locale":"es_ES","og_type":"article","og_title":"C\u00f3mo Crear tu Propia Base de Datos Vectorial Casera con IA","og_description":"Despu\u00e9s de varios meses probando diferentes soluciones, me di cuenta de que con una base de datos vectorial casera pod\u00eda crear la mia propia","og_url":"https:\/\/alexpadulles.es\/blog\/crear-base-de-datos-vectorial-con-ia-guia-2025\/","og_site_name":"Blog Desarrrollo web Alex Padulles","article_published_time":"2025-06-15T20:14:27+00:00","og_image":[{"width":1536,"height":1024,"url":"https:\/\/alexpadulles.es\/blog\/wp-content\/uploads\/2025\/06\/Base-de-datos-vectorial-casera.webp","type":"image\/webp"}],"author":"Alex Padull\u00e9s","twitter_card":"summary_large_image","twitter_creator":"@alexpadulles","twitter_site":"@alexpadulles","twitter_misc":{"Written by":"Alex Padull\u00e9s","Est. reading time":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/alexpadulles.es\/blog\/crear-base-de-datos-vectorial-con-ia-guia-2025\/#article","isPartOf":{"@id":"https:\/\/alexpadulles.es\/blog\/crear-base-de-datos-vectorial-con-ia-guia-2025\/"},"author":{"name":"Alex Padull\u00e9s","@id":"https:\/\/alexpadulles.es\/blog\/#\/schema\/person\/e32cd17cd5729478d074e4fdb3212e32"},"headline":"Base de Datos Vectorial Casera: Crea tu Propio ChatBot con IA Sin Costos Mensuales","datePublished":"2025-06-15T20:14:27+00:00","mainEntityOfPage":{"@id":"https:\/\/alexpadulles.es\/blog\/crear-base-de-datos-vectorial-con-ia-guia-2025\/"},"wordCount":1573,"commentCount":0,"publisher":{"@id":"https:\/\/alexpadulles.es\/blog\/#\/schema\/person\/e32cd17cd5729478d074e4fdb3212e32"},"image":{"@id":"https:\/\/alexpadulles.es\/blog\/crear-base-de-datos-vectorial-con-ia-guia-2025\/#primaryimage"},"thumbnailUrl":"https:\/\/alexpadulles.es\/blog\/wp-content\/uploads\/2025\/06\/Base-de-datos-vectorial-casera.webp","keywords":["base de datos vectorial","IA casera"],"articleSection":["IA","Sistemas operativos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/alexpadulles.es\/blog\/crear-base-de-datos-vectorial-con-ia-guia-2025\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/alexpadulles.es\/blog\/crear-base-de-datos-vectorial-con-ia-guia-2025\/","url":"https:\/\/alexpadulles.es\/blog\/crear-base-de-datos-vectorial-con-ia-guia-2025\/","name":"C\u00f3mo Crear tu Propia Base de Datos Vectorial Casera con IA","isPartOf":{"@id":"https:\/\/alexpadulles.es\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/alexpadulles.es\/blog\/crear-base-de-datos-vectorial-con-ia-guia-2025\/#primaryimage"},"image":{"@id":"https:\/\/alexpadulles.es\/blog\/crear-base-de-datos-vectorial-con-ia-guia-2025\/#primaryimage"},"thumbnailUrl":"https:\/\/alexpadulles.es\/blog\/wp-content\/uploads\/2025\/06\/Base-de-datos-vectorial-casera.webp","datePublished":"2025-06-15T20:14:27+00:00","description":"Despu\u00e9s de varios meses probando diferentes soluciones, me di cuenta de que con una base de datos vectorial casera pod\u00eda crear la mia propia","breadcrumb":{"@id":"https:\/\/alexpadulles.es\/blog\/crear-base-de-datos-vectorial-con-ia-guia-2025\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/alexpadulles.es\/blog\/crear-base-de-datos-vectorial-con-ia-guia-2025\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/alexpadulles.es\/blog\/crear-base-de-datos-vectorial-con-ia-guia-2025\/#primaryimage","url":"https:\/\/alexpadulles.es\/blog\/wp-content\/uploads\/2025\/06\/Base-de-datos-vectorial-casera.webp","contentUrl":"https:\/\/alexpadulles.es\/blog\/wp-content\/uploads\/2025\/06\/Base-de-datos-vectorial-casera.webp","width":1536,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/alexpadulles.es\/blog\/crear-base-de-datos-vectorial-con-ia-guia-2025\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/alexpadulles.es\/blog\/"},{"@type":"ListItem","position":2,"name":"Base de Datos Vectorial Casera: Crea tu Propio ChatBot con IA Sin Costos Mensuales"}]},{"@type":"WebSite","@id":"https:\/\/alexpadulles.es\/blog\/#website","url":"https:\/\/alexpadulles.es\/blog\/","name":"Desarrollor web Alex padulles","description":"Bienvenidos a mi blog, tu portal de referencia en tecnolog\u00eda. Con a\u00f1os de experiencia en programaci\u00f3n y desarrollo web, ofrecemos soluciones innovadoras y personalizadas para todos tus proyectos digitales.","publisher":{"@id":"https:\/\/alexpadulles.es\/blog\/#\/schema\/person\/e32cd17cd5729478d074e4fdb3212e32"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/alexpadulles.es\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":["Person","Organization"],"@id":"https:\/\/alexpadulles.es\/blog\/#\/schema\/person\/e32cd17cd5729478d074e4fdb3212e32","name":"Alex Padull\u00e9s","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/alexpadulles.es\/blog\/wp-content\/uploads\/2024\/06\/cropped-openart-image_JlFoPIny_1718750114835_raw.png","url":"https:\/\/alexpadulles.es\/blog\/wp-content\/uploads\/2024\/06\/cropped-openart-image_JlFoPIny_1718750114835_raw.png","contentUrl":"https:\/\/alexpadulles.es\/blog\/wp-content\/uploads\/2024\/06\/cropped-openart-image_JlFoPIny_1718750114835_raw.png","width":602,"height":481,"caption":"Alex Padull\u00e9s"},"logo":{"@id":"https:\/\/alexpadulles.es\/blog\/wp-content\/uploads\/2024\/06\/cropped-openart-image_JlFoPIny_1718750114835_raw.png"},"sameAs":["https:\/\/alexpadulles.es\/blog","https:\/\/x.com\/alexpadulles"]}]}},"_links":{"self":[{"href":"https:\/\/alexpadulles.es\/blog\/wp-json\/wp\/v2\/posts\/4153","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alexpadulles.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/alexpadulles.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/alexpadulles.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/alexpadulles.es\/blog\/wp-json\/wp\/v2\/comments?post=4153"}],"version-history":[{"count":4,"href":"https:\/\/alexpadulles.es\/blog\/wp-json\/wp\/v2\/posts\/4153\/revisions"}],"predecessor-version":[{"id":4162,"href":"https:\/\/alexpadulles.es\/blog\/wp-json\/wp\/v2\/posts\/4153\/revisions\/4162"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/alexpadulles.es\/blog\/wp-json\/wp\/v2\/media\/4158"}],"wp:attachment":[{"href":"https:\/\/alexpadulles.es\/blog\/wp-json\/wp\/v2\/media?parent=4153"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alexpadulles.es\/blog\/wp-json\/wp\/v2\/categories?post=4153"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alexpadulles.es\/blog\/wp-json\/wp\/v2\/tags?post=4153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}