Qué puede responder el conjunto guardado
El asistente combina Gemini, herramientas MCP, PostGIS y pgRouting. Calcula rutas sobre un grafo almacenado. El feed documentado es de octubre de 2022 y los archivos de afluencia llegan a marzo de 2026. Un camino calculado no establece cierres actuales, frecuencia ni tiempo real de viaje.
La muestra guardada contiene el viaje B_02300LB000_1 de la ruta B_CMX0200LB: 21 estaciones ordenadas de Ciudad Azteca a Buenavista. Incluye revisión de origen y hash de gtfs/stop_times.txt. Es una secuencia guardada, no una conversación con el modelo ni una ruta recién solicitada.
Arquitectura y límites de interpretación
Estaciones, viajes, horarios y formas GTFS → PostGIS → grafo
Pregunta → Gemini → búsqueda MCP de lugares y estaciones → pgRouting
→ nodos, aristas, geometría y totales → respuesta y traza
Una petición entre estaciones necesita resolver nodos. Un punto de interés exige ubicar el lugar, buscar estaciones candidatas y comparar trayectos con caminata en ambos extremos. La estación más cercana no siempre minimiza el recorrido completo. Una ambigüedad debe permanecer visible antes de calcular una ruta precisa hacia el lugar equivocado.
El agente inspeccionado permite ocho iteraciones y 30 segundos por herramienta. Son límites de ejecución, no una tasa medida de éxito. La traza permite separar errores de ubicación, cálculo y descripción del resultado.
Qué minimiza el camino más corto
v_routing_graph expone origen, destino, costo y costo inverso. La llamada inspeccionada a pgr_dijkstra usa directed := false. Minimiza segundos modelados en una representación no dirigida; no demuestra servicio en ambos sentidos a una hora determinada.
Un ejemplo ilustrativo compara un viaje directo de 900 segundos con otro de 300 + 240 + 300 = 840. El segundo gana aunque el pasajero prefiera evitar el transbordo. Escaleras, tarifa o saturación necesitan objetivos o restricciones explícitas. Esos números explican el cálculo y no son tiempos medidos de CDMX.
Transbordos y geometría
El filtro por modo conserva aristas de transbordo y filtra viajes por agencia. Quitar las primeras puede desconectar servicios permitidos. El conteo agrupa tramos consecutivos cuyos conjuntos de rutas se solapan, termina el segmento al caminar y devuelve max(0, ride_segments - 1).
Un recorrido inverso debe invertir las coordenadas de su LineString antes de unirlo. La salida usa longitud, latitud y calcula distancia con ST_Length(e.geom::geography). Una línea convincente no basta: hay que revisar orden de nodos, continuidad, totales y transbordos fuera de la explicación del modelo.
La afluencia también tiene granularidad. El mapa de calor por estación se limita a Metro, donde existen esos registros. Repartir un total de línea entre estaciones produciría valores sintéticos.
Secuencia de reproducción
Comienza por el viaje guardado y el orden de estaciones. Reproduce el grafo completo en una base aislada con PostGIS y pgRouting siguiendo la ingesta del repositorio. Prueba viajes de una línea, recorridos inversos, transbordos, IDs desconocidos, extremos desconectados y restricciones de modo directamente en el motor.
Agrega MCP después y compara sus objetos con las respuestas directas. Finalmente ejecuta preguntas con nombres duplicados, puntos de interés, origen ausente y lugares no encontrados. Conserva peticiones, IDs resueltos, resultados, configuración del modelo y respuestas. Así puedes localizar el fallo.
El manifiesto identifica agente, servidor MCP y motor inspeccionados. El artículo técnico documenta su comportamiento. Permiten revisar la implementación, pero no ofrecen garantía de servicio actual ni un benchmark del lenguaje natural.