Portia: Un harness de agentes de código abierto para la ingeniería de datos verificable
Portia es una nueva herramienta de código abierto que perfila datos, genera SQL y valida resultados sin que el modelo de IA lea nunca los registros brutos.
Traducido automáticamente del original en inglés.
Lanzado el 7 de octubre de 2026, Portia es un harness de agentes de código abierto diseñado para asistir en tareas reales de ingeniería de datos. Creado por Jad1908 y alojado en GitHub, esta herramienta se conecta a principales almacenes de datos y sistemas de archivos locales para perfilar tablas, responder preguntas y generar pipelines de SQL. A diferencia de muchos asistentes de IA que procesan datos brutos directamente, Portia garantiza que el modelo de lenguaje subyacente nunca acceda al conjunto de datos real, confiando en su lugar en código determinista para todas las afirmaciones numéricas.
Qué ha ocurrido
El proyecto introduce un copiloto para el trabajo con datos que se integra con Snowflake, BigQuery, PostgreSQL o carpetas locales que contienen archivos CSV y Parquet. Una vez conectado, Portia perfila cada tabla que encuentra, midiendo tasas de valores nulos, conteos distintos, cobertura de claves y fan-out antes de ejecutar cualquier operación de unión (join). Permite a los usuarios hacer preguntas en lenguaje natural sobre la estructura y el contenido de sus datos, como verificar si un identificador específico es único o solicitar desgloses de ingresos por mes. El sistema luego construye las tablas solicitadas una decisión a la vez, registrando cada paso en una especificación YAML.
Una elección arquitectónica crítica en Portia es la separación del razonamiento del acceso a los datos. El modelo de lenguaje utilizado para la interacción no tiene acceso al sistema de archivos ni capacidades de shell. Cada número o estadística presentada al usuario es calculada por código determinista en lugar de ser generada por la predicción probabilística del siguiente token del modelo. Este diseño asegura que la herramienta pueda manejar tablas demasiado grandes para caber en memoria mientras mantiene cada afirmación verificable. La salida final se compila en archivos SQL con formato dbt que pueden ejecutarse independientemente de Portia, asegurando que el pipeline generado no quede bloqueado en la propia herramienta.
El sistema también incluye un grafo de conocimiento impulsado por Neo4j, que almacena el linaje de columnas y las superposiciones medidas entre conjuntos de datos. Este grafo ayuda al copiloto a determinar qué tablas son relevantes para la consulta de un usuario. Los usuarios pueden navegar este grafo localmente para entender cómo se relacionan las columnas a través del pipeline. Además, Portia soporta gráficos visuales dentro de la interfaz de conversación. Si el modelo subyacente admite entrada de imágenes, el copiloto puede inspeccionar visualmente un gráfico renderizado en el navegador del usuario para verificar su precisión antes de reportar hallazgos, aunque la imagen en sí misma nunca se guarda ni se utiliza para decisiones numéricas.
Cómo funciona
Portia opera indexando fuentes de datos y construyendo un catálogo de metadatos. Cuando un usuario hace una pregunta, el copiloto consulta el grafo de conocimiento para identificar tablas y columnas relevantes. Luego formula consultas que se ejecutan contra la fuente de datos utilizando las credenciales propias del usuario. Para conexiones de bases de datos, las consultas se ejecutan bajo el rol del usuario, lo que significa que nada se descarga al servidor de aplicaciones y cualquier nueva tabla se crea directamente en el almacén de datos. Para archivos locales, los datos permanecen en disco y no se copian. El modelo solo ve el esquema, las estadísticas resumidas y los resultados de estas consultas deterministas.
La herramienta se ejecuta sobre el Claude Agent SDK y puede controlar Claude Code sin modificaciones. Requiere Python 3.11 o superior, uv y Docker. La instalación implica clonar el repositorio, sincronizar dependencias e iniciar un contenedor de Neo4j. Los usuarios deben proporcionar su propia clave API de Anthropic o configurar un proveedor de modelos local como Ollama o llama.cpp. Dado que las instrucciones para el agente tienen aproximadamente 15.000 tokens de longitud, los modelos locales deben soportar una ventana de contexto de al menos 32K tokens. El sistema verifica este requisito antes de enviar prompts y se niega a proceder si el contexto es insuficiente.
Detalles clave
- Privacidad de Datos: El modelo de lenguaje nunca lee datos brutos, no tiene acceso al sistema de archivos y carece de capacidades de shell.
- Fuentes Soportadas: Se conecta a Snowflake, BigQuery, PostgreSQL y carpetas locales con archivos CSV o Parquet.
- Verificación: Cada afirmación numérica es calculada por código determinista, permitiendo a los usuarios verificar los resultados de forma independiente.
- Formato de Salida: Genera archivos SQL con formato dbt almacenados en un directorio
models/, que pueden ejecutarse sin Portia. - Grafo de Conocimiento: Usa Neo4j para almacenar el linaje de columnas y medir superposiciones entre columnas a través del pipeline.
- Soporte de Modelos Locales: Compatible con Ollama y llama.cpp, requiriendo una ventana de contexto mínima de 32K para inferencia local.
Por qué importa
Para ingenieros de software y equipos de datos, el valor principal de Portia radica en su verificabilidad. Las herramientas tradicionales de codificación asistida por IA a menudo alucinan sintaxis o lógica, requiriendo una revisión manual significativa. En la ingeniería de datos, un SQL incorrecto puede llevar a la corrupción silenciosa de datos o a análisis engañosos. Al forzar al modelo a depender de código determinista para todas las mediciones y evitar que vea datos brutos, Portia reduce el riesgo de estadísticas alucinadas. La función "gate on zeros" protege aún más contra errores comunes negándose a escribir resultados si una consulta devuelve conjuntos vacíos, granularidades no únicas o columnas totalmente nulas.
La capacidad de compilar especificaciones en SQL estándar también mitiga el bloqueo del proveedor (vendor lock-in). Los equipos pueden usar Portia para acelerar el desarrollo inicial de pipelines de datos pero desplegar los archivos SQL resultantes en sus entornos de producción existentes. Esto significa que la herramienta sirve como un acelerador de desarrollo en lugar de una dependencia de tiempo de ejecución. La integración con pipelines de CI mediante el comando build --check asegura que si un archivo SQL se desvía de su especificación original, la compilación falle, manteniendo la consistencia entre la intención y la implementación.
Qué puedes hacer
- Instala Portia usando uv y Docker, asegurándote de tener Python 3.11+ disponible.
- Conecta la herramienta a una base de datos de prueba o una carpeta de archivos CSV de muestra para explorar sus capacidades de perfilado.
- Usa el módulo
devtools.demodatapara generar un proyecto demo de cinco tablas con problemas conocidos para pruebas. - Configura un modelo local como Qwen 3 8B vía Ollama si prefieres no usar APIs basadas en la nube.
- Revisa las especificaciones YAML generadas y los archivos SQL compilados para entender cómo el agente estructura sus decisiones.
- Navega el grafo de conocimiento de Neo4j en localhost:7474 para visualizar el linaje de columnas y las superposiciones.



