Agente de Documentos: Procesa documentos con IA
Qué abarca este artículo sobre agentes de documentos
- Qué es un agente de documentos y cómo funciona.
- Cómo el agente analiza, extrae y transforma documentos.
- Cómo equipar el agente con herramientas y RAG.
- Casos prácticos para facturas, contratos, reportes y formularios.
- Mejores prácticas para precisión, seguridad y escalabilidad.
Introducción: Agente de documentos explicado
Un agente de documentos es un agente de IA que procesa documentos de forma autónoma: lee, comprende, extrae datos y ejecuta acciones. No solo “extrae texto”, sino “comprende el documento y reacciona ante él”.
Este artículo está dirigido a usuarios que desean construir agentes de IA para procesamiento de documentos. Encontrarás los conceptos fundamentales en Agentes de IA y Automatización de documentos.
¿Por qué necesito un agente de documentos?
Imagina que recibes 50 facturas diarias. Un sistema clásico extrae texto. Un agente de documentos: “Factura RE-2024-1234, empresa X, 1.234 €, vencimiento 15.03., artículos: 3x asesoría a 400 € cada una. Riesgo: sin condiciones de pago claras. Acción: mover a carpeta Facturas, recordatorio de pago para el 10.03.” El agente comprende y actúa.
Agente de documentos en pocas palabras
Documento → Agente analiza (LLM) → Ejecuta herramientas (extrae, transforma, almacena) → Realiza acciones (archiva, notifica, reenvía). Con RAG para preguntas sobre documentos.
La idea central es: no solo leer, sino comprender y actuar.
Para quién es este artículo
- Empresas que procesan documentos automáticamente.
- Desarrolladores que crean agentes de documentos.
- Trabajadores de oficina que reducen tareas rutinarias.
- Self-hosters que operan agentes localmente.
Términos importantes
- Agente de IA - Actor autónomo. Cuándo es útil: el concepto.
- Tool-Calling - Invoca herramientas. Cuándo es útil: para acciones.
- RAG - Preguntas sobre documentos. Cuándo es útil: para consultas.
- Ollama - Servidor de modelos local. Cuándo es útil: el backend.
- n8n - Herramienta de flujos de trabajo. Cuándo es útil: orquestación.
Arquitectura
Documento llega (correo, carga, escaneo)
│
▼
Agente de Documentos (Ollama + Herramientas)
│
├─ Observar: Leer documento
├─ Comprender: ¿Qué es? ¿Qué quiere el remitente?
├─ Planificar: ¿Qué herramientas? ¿Qué acciones?
├─ Actuar: Invocar herramientas
│ ├─ extract_text: Extrae texto
│ ├─ extract_metadata: Extrae metadatos
│ ├─ classify: Clasifica
│ ├─ summarize: Resume
│ └─ store: Almacena
└─ Verificar: ¿Funcionó?
│
▼
Acciones
├─ Mover a carpeta
├─ Almacenar en base de datos
├─ Enviar notificación
└─ Activar flujo de trabajo
Caso práctico 1: Agente de facturas
class InvoiceAgent:
"""Agent para procesamiento de facturas"""
async def process(self, pdf_path):
"""Procesa la factura"""
# 1. Extrae texto
text = await self.extract_text(pdf_path)
# 2. LLM analiza
analysis = await self.analyze(text)
# 3. Invoca herramientas
invoice = await self.extract_invoice_data(text)
risks = await self.check_risks(text)
# 4. Acciones
await self.store(invoice)
await self.move_to_folder(pdf_path, "facturas")
if risks:
await self.notify(f"Riesgos en factura {invoice['number']}: {risks}")
return invoice
async def analyze(self, text):
"""LLM analiza la factura"""
return await ollama.generate(f"""
Analiza esta factura:
{text[:4000]}
Extrae como JSON:
- numero_factura
- fecha
- monto
- moneda
- remitente
- fecha_vencimiento
- lineas (Array)
- riesgos (Array)""", format="json")
Caso práctico 2: Agente de contratos
class ContractAgent:
"""Agente para análisis de contratos"""
async def process(self, contract_text):
"""Analiza el contrato"""
# Análisis en múltiples etapas
summary = await self.summarize(contract_text)
clauses = await self.extract_clauses(contract_text)
risks = await self.assess_risks(contract_text)
# Recomendación
recommendation = await self.recommend(
summary, clauses, risks
)
return {
"summary": summary,
"clauses": clauses,
"risks": risks,
"recommendation": recommendation
}
async def assess_risks(self, text):
"""Evalúa los riesgos"""
return await ollama.generate(f"""
Evalúa los riesgos en este contrato:
{text[:5000]}
Responde como JSON:
{{"risks": [{{"type": "...", "severity": "low|medium|high", "description": "..."}}],
"recommendation": "firmar|modificar|rechazar"}}""", format="json")
Caso práctico 3: Agente RAG para preguntas sobre documentos
class DocumentQAAgent:
"""Agente para responder preguntas sobre documentos"""
def __init__(self):
self.vectorstore = QdrantClient("http://qdrant:6333")
self.collection = "documentos"
async def ask(self, question):
"""Responde preguntas sobre documentos"""
# RAG: Encuentra documentos relevantes
results = await self.vectorstore.search(
collection=self.collection,
query_vector=await self.embed(question),
limit=5
)
context = "\n".join([r.payload["text"] for r in results])
# LLM responde
answer = await ollama.generate(f"""
Responde la pregunta basándote en los documentos.
Documentos: {context}
Pregunta: {question}
Responde citando las fuentes.""")
return {
"answer": answer,
"sources": [r.payload["source"] for r in results]
}
Herramientas para agentes de documentos
tools = [
{
"name": "extract_text",
"description": "Extrae texto del documento (PDF, DOCX, imagen)",
"function": extract_text
},
{
"name": "extract_metadata",
"description": "Extrae metadatos (fecha, autor, monto, ...)",
"function": extract_metadata
},
{
"name": "classify_document",
"description": "Clasifica el documento (factura, contrato, ...)",
"function": classify_document
},
{
"name": "summarize",
"description": "Resume el documento",
"function": summarize
},
{
"name": "store_document",
"description": "Almacena documento en base de datos",
"function": store_document
},
{
"name": "search_documents",
"description": "Busca documentos (RAG)",
"function": search_documents
}
]
Recomendaciones de seguridad
- Documentos confidenciales: Todos los datos permanecen locales. Consulta Protección de datos.
- Inyección de prompts: Los documentos pueden contener inyecciones. Consulta Inyección de prompts.
- Validación: Las extracciones críticas deben validarse.
- Permisos: El agente solo debe tener los permisos necesarios. Consulta Permisos de herramientas.
Obstáculos típicos
- Errores de OCR: Escaneos de mala calidad generan mala extracción. Verifica la calidad.
- Límite de contexto: Los documentos grandes necesitan fragmentación.
- Clasificación incorrecta: La IA puede clasificar mal. Para documentos críticos, verifica.
- Demasiadas herramientas: Más de 5-7 herramientas sobrecargan el modelo.
- Sin alternativa manual: Cuando el agente falla, debe haber un proceso manual disponible.
Enlaces relacionados
- Agentes de IA - Conceptos fundamentales.
- Automatización de documentos - Versión con flujos de trabajo.
- Análisis de documentos - Técnicas.
- RAG local - Preguntas sobre documentos.
- Permisos de herramientas - Seguridad.
- Ollama - Servidor de modelos.
Puntos clave:
- Agente de documentos: Lee, comprende, extrae, actúa, autónomamente.
- Herramientas: extract_text, extract_metadata, classify, summarize, store, search.
- Para facturas, contratos, reportes, formularios.
- Con RAG para preguntas sobre documentos.
- Local con Ollama: tus datos se mantienen privados.
Preguntas frecuentes
¿Qué es un agente de documentos?
¿Qué puede hacer el agente?
¿Qué herramientas necesita el agente?
¿Qué tan precisa es la extracción?
¿Mis documentos están seguros?
¿Cuál es el costo?
¿Puedo procesar muchos documentos?
Fuentes y lecturas adicionales
- Ollama - Servidor de modelos local.
- LangChain Agents - Conceptos de agentes.
- Qdrant - Base de datos vectorial.


