12 KiB
Prompt para Claude Code — AR-House Location Intelligence Agent
Contexto del proyecto
Proyecto: AR-House
Ruta: D:\Proyectos Software\AR-House
Stack existente: Python, Streamlit, Ollama, SQLite, Firecrawl
Nuevo módulo: location_agent — Agente de Investigación de Ubicación
Instrucción para Claude Code
Eres Claude Code trabajando en el proyecto AR-House ubicado en D:\Proyectos Software\AR-House.
Antes de escribir cualquier código:
- Lee
docs/LOGBOOK.mdpara entender el estado actual del proyecto - Si no existe, créalo siguiendo el skill app-organizer
Tu tarea es implementar un nuevo módulo llamado location_agent que investiga una dirección o ubicación y genera un reporte completo de inteligencia de ubicación para decisiones de inversión inmobiliaria.
Arquitectura del módulo
Estructura de archivos a crear
D:\Proyectos Software\AR-House\
├── location_agent/
│ ├── __init__.py
│ ├── agent.py ← Orquestador principal
│ ├── sub_agents/
│ │ ├── __init__.py
│ │ ├── crime_agent.py ← Criminalidad
│ │ ├── property_agent.py ← Valoración y apreciación
│ │ ├── schools_agent.py ← Escuelas
│ │ ├── amenities_agent.py ← Amenities cercanos
│ │ ├── demographics_agent.py ← Demografía y etnias
│ │ ├── maritime_agent.py ← Mercado laboral marítimo
│ │ └── lifestyle_agent.py ← Marinas, playas, supermercados
│ ├── scrapers/
│ │ ├── __init__.py
│ │ ├── crime_scraper.py ← CrimeMapping, SpotCrime
│ │ ├── property_scraper.py ← Zillow, Redfin, County Appraiser
│ │ ├── schools_scraper.py ← GreatSchools
│ │ └── census_scraper.py ← Census.gov ACS
│ ├── report/
│ │ ├── __init__.py
│ │ ├── report_generator.py ← Generador reporte completo
│ │ └── pdf_generator.py ← Export a PDF
│ └── utils/
│ ├── __init__.py
│ ├── geocoder.py ← Conversión dirección → coordenadas
│ └── ollama_client.py ← Cliente Ollama local
Implementación detallada
1. agent.py — Orquestador principal
"""
LocationAgent — Orquestador principal del agente de investigación de ubicación
Usa Ollama local para síntesis y análisis de datos recopilados por sub-agentes
"""
El agente debe:
- Recibir una dirección o ciudad/estado como input
- Geocodificar la dirección usando Nominatim (OpenStreetMap, gratuito)
- Ejecutar todos los sub-agentes en paralelo usando
asynciooconcurrent.futures - Consolidar los resultados
- Calcular un Score General de 0-100 basado en los datos objetivos
- Generar el reporte completo via Ollama
- Exportar PDF
2. Sub-agentes — Cada uno debe
- Recibir coordenadas (lat/lon) y dirección como input
- Hacer scraping o consultar APIs gratuitas
- Retornar un diccionario estructurado con los datos
- Incluir fuente y fecha de los datos
- Manejar errores gracefully — si falla, retornar datos vacíos con mensaje de error
3. Fuentes de datos gratuitas por sub-agente
crime_agent.py
- CrimeMapping.com — scraping de mapa de crímenes por radio de 1 milla
- SpotCrime.com — scraping de reportes recientes
- FBI UCR API — https://api.usa.gov/crime/fbi/cde/ (gratuita con key)
- Datos a recopilar: tipos de crimen, frecuencia, tendencia 12 meses, comparación con promedio del condado
property_agent.py
- Zillow — scraping de Zestimate y histórico de precios del vecindario
- Redfin — scraping de precios por sqft y tendencias
- County Property Appraiser — buscar el sitio del condado correspondiente (e.g. bcpa.net para Broward)
- Datos: valor estimado, apreciación 1/3/5 años, precio/sqft, días en mercado promedio, inventory
schools_agent.py
- GreatSchools.org — scraping de ratings de escuelas en radio de 3 millas
- NCES (National Center for Education Statistics) — datos oficiales
- Datos: escuelas primarias/secundarias/high school más cercanas, rating 1-10, distancia
amenities_agent.py
- Nominatim/Overpass API (OpenStreetMap) — gratuita, sin límites razonables
- Query: supermercados, hospitales, restaurantes, parques, gimnasios en radio de 2 millas
- Datos: cantidad por categoría, distancia al más cercano, score de walkability
demographics_agent.py
- Census.gov American Community Survey (ACS) API — https://api.census.gov/data.html Key gratuita en https://api.census.gov/data/key_signup.html
- Datos: distribución étnica %, ingreso mediano del hogar, edad mediana, nivel educativo, desempleo, población total del ZIP code o tract
maritime_agent.py
- BLS.gov API — Bureau of Labor Statistics, gratuita
- Census.gov — datos de empleo por industria
- NOAA — puertos y facilities cercanas
- Datos: % de empleos en sector marítimo/portuario en el área metropolitana, compañías navieras cercanas, astilleros, marinas con empleos
lifestyle_agent.py
- Nominatim/Overpass API — marinas, boat ramps, acceso a playa
- NOAA Nautical Charts API — calado, acceso por agua
- Google Maps Static API — opcional, free tier $200/mes
- Datos: marinas en radio de 10 millas (nombre, distancia, facilidades), acceso a playa más cercano, boat ramps, distancia al océano/bahía
4. Score General 0-100
Calcular como promedio ponderado de scores parciales:
SCORE_WEIGHTS = {
'crime': 0.20, # Criminalidad (inverso — menos crimen = más score)
'property': 0.20, # Valoración y apreciación
'schools': 0.10, # Escuelas
'amenities': 0.15, # Amenities y walkability
'demographics': 0.10, # Demografía (ingreso mediano, empleo)
'maritime': 0.15, # Mercado laboral marítimo
'lifestyle': 0.10, # Marinas, playa, calidad de vida náutica
}
Cada sub-score debe calcularse objetivamente con reglas claras y documentadas.
5. Integración con Ollama
Usar Ollama local con modelo configurable (default: llama3.1:8b o mixtral).
Ollama se usa para:
- Síntesis narrativa — convertir datos crudos en párrafos de análisis legibles
- Identificación de red flags — detectar patrones preocupantes en los datos
- Resumen ejecutivo — 3-5 párrafos de conclusión para el reporte
NO usar Ollama para calcular scores — esos deben ser determinísticos basados en datos.
# Ejemplo de uso de Ollama
def analyze_with_ollama(data_dict: dict, section: str) -> str:
prompt = f"""
Analiza los siguientes datos de {section} para una propiedad inmobiliaria.
Sé objetivo y conciso. Presenta los puntos clave en 2-3 párrafos.
No hagas recomendaciones de compra — solo presenta los hechos.
Datos: {json.dumps(data_dict, indent=2)}
"""
# Llamada a Ollama local
response = ollama.chat(model='llama3.1:8b', messages=[...])
return response
6. Reporte completo — Estructura
El reporte debe tener estas secciones en orden:
1. RESUMEN EJECUTIVO
- Score General: XX/100
- Dirección analizada
- Fecha del análisis
- 3-5 párrafos de síntesis (Ollama)
- Top 3 fortalezas
- Top 3 debilidades
2. CRIMINALIDAD
- Score parcial: XX/100
- Mapa de calor de crímenes (si es posible)
- Tabla: tipos de crimen últimos 12 meses
- Comparación con promedio del condado
- Tendencia (mejorando/empeorando)
- Análisis narrativo (Ollama)
3. VALORACIÓN Y MERCADO INMOBILIARIO
- Score parcial: XX/100
- Valor estimado del área ($/sqft)
- Apreciación 1 año / 3 años / 5 años (%)
- Días promedio en mercado
- Inventory actual
- Análisis narrativo (Ollama)
4. ESCUELAS
- Score parcial: XX/100
- Tabla de escuelas cercanas (nombre, nivel, rating, distancia)
- Rating promedio del área
- Análisis narrativo (Ollama)
5. AMENITIES Y WALKABILITY
- Score parcial: XX/100
- Supermercados más cercanos (nombre, distancia)
- Hospitales/clínicas cercanas
- Restaurantes, parques, gimnasios
- Walk Score estimado
- Análisis narrativo (Ollama)
6. DEMOGRAFÍA
- Score parcial: XX/100
- Distribución étnica (gráfico de pie)
- Ingreso mediano del hogar
- Edad mediana
- Nivel educativo
- Tasa de desempleo
- Análisis narrativo (Ollama)
7. MERCADO LABORAL MARÍTIMO
- Score parcial: XX/100
- % empleos sector marítimo/portuario en área metropolitana
- Principales empleadores marítimos cercanos
- Astilleros y marinas con empleos
- Tendencia del sector en la región
- Análisis narrativo (Ollama)
8. ESTILO DE VIDA NÁUTICO
- Score parcial: XX/100
- Marinas cercanas (tabla: nombre, distancia, facilidades, calado)
- Boat ramps en radio de 10 millas
- Acceso a playa más cercano (distancia, tipo)
- Distancia al océano/bahía/ICW
- Análisis narrativo (Ollama)
9. DATOS TÉCNICOS
- Fuentes consultadas
- Fecha y hora del análisis
- Modelos y metodología de scoring
7. Interfaz Streamlit
Integrar en la UI existente de AR-House como nueva sección:
# Página nueva: pages/location_intelligence.py
# - Input: campo de dirección o ciudad/estado
# - Botón "Investigar Ubicación"
# - Progress bar mientras los sub-agentes trabajan en paralelo
# - Mostrar resultados sección por sección con expanders
# - Score General destacado al inicio con gauge chart (plotly)
# - Botón "Exportar PDF"
# - Guardar reporte en SQLite para consultas futuras
8. PDF Export
Usar reportlab o weasyprint para generar PDF profesional:
- Logo AR-House en header
- Fecha y dirección en header
- Score General prominente en primera página
- Cada sección en página separada
- Tablas y datos bien formateados
- Footer con fuentes de datos
9. Base de datos SQLite
Guardar cada análisis en la base de datos existente de AR-House:
CREATE TABLE location_reports (
id INTEGER PRIMARY KEY AUTOINCREMENT,
address TEXT NOT NULL,
lat REAL,
lon REAL,
score_general INTEGER,
score_crime INTEGER,
score_property INTEGER,
score_schools INTEGER,
score_amenities INTEGER,
score_demographics INTEGER,
score_maritime INTEGER,
score_lifestyle INTEGER,
raw_data JSON,
report_text TEXT,
pdf_path TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
10. Manejo de errores y rate limiting
- Cada scraper debe tener retry logic con backoff exponencial
- Si una fuente falla, continuar con las demás y marcar como "Datos no disponibles"
- Respetar rate limits — agregar delays entre requests
- Cachear resultados por 24 horas para no re-scraper la misma dirección
Librerías nuevas a instalar
pip install requests beautifulsoup4 selenium playwright
pip install geopy nominatim
pip install ollama
pip install reportlab weasyprint
pip install plotly
pip install asyncio aiohttp
pip install python-dotenv
Al finalizar la implementación
Siguiendo el skill app-organizer:
- Crear
docs/modules/location_agent_log.mdcon el log de esta sesión - Actualizar
docs/LOGBOOK.mdcon entrada de esta sesión - Documentar todas las librerías nuevas en
docs/LIBRARIES.md - Actualizar
D:\Proyectos Software\_docs_global\GLOBAL_LIBRARIES.md - Confirmar: "Log actualizado. Módulo location_agent implementado. Librerías documentadas."
Notas importantes
- Los datos de Census.gov requieren una API key gratuita — solicitar en https://api.census.gov/data/key_signup.html y guardar en
.env - FBI UCR API también requiere key gratuita — solicitar en https://api.usa.gov/crime/fbi/cde/
- Para el scraping de Zillow/Redfin usar delays generosos (3-5 segundos entre requests) para evitar bloqueos
- Nominatim/Overpass API es completamente gratuita pero requiere User-Agent identificado en los headers
- El modelo Ollama por defecto es configurable via variable de entorno
OLLAMA_MODEL