<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: winchi</title>
    <description>The latest articles on DEV Community by winchi (@fwinchi).</description>
    <link>https://dev.to/fwinchi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4074733%2Fc8809986-35c7-4327-b945-c50e46efbf13.jpg</url>
      <title>DEV Community: winchi</title>
      <link>https://dev.to/fwinchi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fwinchi"/>
    <language>en</language>
    <item>
      <title>Construí una Capa de IA Local para Mis Documentos y Fotos — Esto es lo que Aprendí</title>
      <dc:creator>winchi</dc:creator>
      <pubDate>Wed, 12 Aug 2026 15:59:26 +0000</pubDate>
      <link>https://dev.to/fwinchi/construi-una-capa-de-ia-local-para-mis-documentos-y-fotos-esto-es-lo-que-aprendi-cnm</link>
      <guid>https://dev.to/fwinchi/construi-una-capa-de-ia-local-para-mis-documentos-y-fotos-esto-es-lo-que-aprendi-cnm</guid>
      <description>&lt;h2&gt;
  
  
  El Problema
&lt;/h2&gt;

&lt;p&gt;Quería hacer preguntas sobre mi propia documentación y fotos sin enviarlas a un servicio de IA en la nube. Cosas simples como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"¿Cuánto gasté en electricidad el año pasado?"&lt;/li&gt;
&lt;li&gt;"¿Qué documentos tengo sobre el seguro del coche?"&lt;/li&gt;
&lt;li&gt;"¿Cuántas fotos hice en España en 2023?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pero no quería que mis facturas, contratos y fotos familiares acabaran en los datos de entrenamiento de otra persona.&lt;/p&gt;

&lt;h2&gt;
  
  
  El Stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Componente&lt;/th&gt;
&lt;th&gt;Propósito&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Paperless-ngx&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Archivo de documentos, OCR, metadatos estructurados&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Immich&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Copia de seguridad de fotos y vídeo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ChromaDB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Índice de búsqueda semántica&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ollama&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Inferencia local de LLM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Open WebUI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Interfaz de chat unificada&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MCP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Herramientas deterministas para datos estructurados&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LiteLLM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Enrutamiento de modelos&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Todo se ejecuta en una sola máquina Windows 11 con una RTX 5080 16GB. Una Orange Pi 5 Plus se encarga de los backups.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dos Lecciones Difíciles
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Las herramientas deterministas ganan al razonamiento de LLM para cualquier cosa contable
&lt;/h3&gt;

&lt;p&gt;Empecé pidiéndole al modelo que sumara mis facturas. Daba respuestas erróneas. Cada vez.&lt;/p&gt;

&lt;p&gt;La solución fue una herramienta MCP de 20 líneas que consulta la API de Paperless y devuelve un número. Sin razonamiento, sin alucinación — solo el conteo correcto.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. La disciplina de routing importa
&lt;/h3&gt;

&lt;p&gt;Para campos estructurados de facturas (proveedor, total, IVA, número de factura), añadí una regla estricta al prompt del sistema:&lt;/p&gt;

&lt;p&gt;&amp;gt; "Consulta siempre a Paperless para estos campos. Nunca uses el índice semántico."&lt;/p&gt;

&lt;p&gt;Esto eliminó la mayoría de respuestas erróneas que estaba obteniendo. El índice semántico es genial para "encuéntrame algo sobre el seguro del coche." Es terrible para "¿cuál es el total exacto de la factura #1234?"&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Por Qué No Usar Directamente la IA Nativa de Paperless 3.0?
&lt;/h2&gt;

&lt;p&gt;Estoy en Paperless 3.0.3, así que tengo las funciones nativas de IA incluyendo chat con documentos. Esta configuración no las reemplaza — las complementa:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Alcance más amplio:&lt;/strong&gt; La misma interfaz cubre documentos, fotos y vídeo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operaciones deterministas:&lt;/strong&gt; Las herramientas MCP garantizan precisión para consultas estructuradas&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Experiencia unificada:&lt;/strong&gt; Una interfaz de chat para todo&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lo Que No Funcionó
&lt;/h2&gt;

&lt;p&gt;También documenté los fracasos. Algunos destacados:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Los intentos iniciales de dejar que el modelo razonara sobre totales de facturas&lt;/li&gt;
&lt;li&gt;Intentar usar el índice semántico para extracción exacta de campos&lt;/li&gt;
&lt;li&gt;La confusión inicial sobre qué fuente de datos consultar para cada tarea&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Write-up completo (español e inglés): &lt;a href="https://github.com/fwinchi/ia-local-casa" rel="noopener noreferrer"&gt;github.com/fwinchi/ia-local-casa&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Para Quién Es Esto
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Personas que quieren consultar sus propios datos sin IA en la nube&lt;/li&gt;
&lt;li&gt;Entusiastas del autoalojamiento&lt;/li&gt;
&lt;li&gt;Cualquiera curioso sobre MCP como herramienta práctica para precisión de datos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;No soy desarrollador.&lt;/strong&gt; Construido con asistencia de IA, verificación cruzada de sugerencias, y testing antes de aplicar.&lt;/p&gt;

&lt;p&gt;Feedback bienvenido — especialmente sobre qué tengo mal.&lt;/p&gt;

</description>
      <category>ia</category>
      <category>autoalojamiento</category>
      <category>privacidad</category>
      <category>mcp</category>
    </item>
    <item>
      <title>I Built a Local AI Layer for My Documents and Photos — Here's What I Learned</title>
      <dc:creator>winchi</dc:creator>
      <pubDate>Wed, 12 Aug 2026 11:56:47 +0000</pubDate>
      <link>https://dev.to/fwinchi/i-built-a-local-ai-layer-for-my-documents-and-photos-heres-what-i-learned-3ido</link>
      <guid>https://dev.to/fwinchi/i-built-a-local-ai-layer-for-my-documents-and-photos-heres-what-i-learned-3ido</guid>
      <description>&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;I wanted to ask questions about my own paperwork and photos without sending them to a cloud AI service. Simple things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"How much did I spend on electricity last year?"&lt;/li&gt;
&lt;li&gt;"What documents do I have about my car insurance?"&lt;/li&gt;
&lt;li&gt;"How many photos did I take in Spain in 2023?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But I didn't want my invoices, contracts, and family photos ending up in someone else's training data.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Paperless-ngx&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Document archive, OCR, structured metadata&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Immich&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Photos and video backup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ChromaDB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Semantic search index&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ollama&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Local LLM inference&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Open WebUI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unified chat interface&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MCP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Deterministic tools for structured data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LiteLLM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Model routing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Everything runs on a single Windows 11 machine with an RTX 5080 16GB. An Orange Pi 5 Plus handles backups.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two Hard Lessons
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Deterministic tools beat LLM reasoning for anything countable
&lt;/h3&gt;

&lt;p&gt;I started by asking the model to tally my invoices. It gave wrong answers. Every time.&lt;/p&gt;

&lt;p&gt;The fix was a 20-line MCP tool that queries the Paperless API and returns a number. No reasoning, no hallucination — just the correct count.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Routing discipline matters
&lt;/h3&gt;

&lt;p&gt;For structured invoice fields (supplier, total, VAT, invoice number), I added a strict rule to the system prompt:&lt;/p&gt;

&lt;p&gt;&amp;gt; "Always query Paperless for these fields. Never use the semantic index."&lt;/p&gt;

&lt;p&gt;This eliminated most of the wrong answers I was getting. The semantic index is great for "find me something about car insurance." It's terrible for "what's the exact total of invoice #1234?"&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Not Just Use Paperless 3.0's Native AI?
&lt;/h2&gt;

&lt;p&gt;I'm on Paperless 3.0.3, so I do have the native AI features including document chat. This setup doesn't replace them — it complements them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Broader scope:&lt;/strong&gt; Same interface covers documents, photos, and video&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic operations:&lt;/strong&gt; MCP tools guarantee accuracy for structured queries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unified experience:&lt;/strong&gt; One chat interface for everything&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Didn't Work
&lt;/h2&gt;

&lt;p&gt;I documented the failures too. Some highlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Early attempts at letting the model reason about invoice totals&lt;/li&gt;
&lt;li&gt;Trying to use the semantic index for exact field extraction&lt;/li&gt;
&lt;li&gt;Initial confusion about which data source to query for which task&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Full write-up (Spanish and English): &lt;a href="https://github.com/fwinchi/ia-local-casa" rel="noopener noreferrer"&gt;github.com/fwinchi/ia-local-casa&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Who This Is For
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;People who want to query their own data without cloud AI&lt;/li&gt;
&lt;li&gt;Self-hosting enthusiasts&lt;/li&gt;
&lt;li&gt;Anyone curious about MCP as a practical tool for data accuracy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Not a developer.&lt;/strong&gt; Built with AI assistance, cross-checking suggestions, and testing before applying.&lt;/p&gt;

&lt;p&gt;Feedback welcome — especially on what I've got wrong.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>selfhosted</category>
      <category>privacy</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
