Spaces:
Sleeping
Sleeping
File size: 11,594 Bytes
e76a6b8 66e9b6f e76a6b8 66e9b6f e76a6b8 66e9b6f e76a6b8 66e9b6f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 | ---
title: Clara - Seguros Colsubsidio
emoji: 🛡️
colorFrom: green
colorTo: blue
sdk: docker
app_port: 7860
pinned: false
short_description: Agente conversacional de venta de seguros (Reto 2 - 30X)
---
# Clara — Venta automatizada de seguros 🛡️
**Reto 2 · Venta automatizada de seguros** — [Hackathon Colsubsidio × 30X](https://innovacion.colsubsidio.com/)
· 22–26 de julio de 2026 · Club La Colina, Bogotá.
Repositorio: [github.com/Mariana-Codebase/AgenteSeguros](https://github.com/Mariana-Codebase/AgenteSeguros)
> **El reto:** hoy adquirir un seguro en Colsubsidio depende de un asesor que
> identifique la necesidad, cotice, explique y cierre. Ese modelo no escala, no
> opera 24/7 y depende del equipo comercial. **Clara lleva al afiliado desde
> _"no sé qué seguro necesito"_ hasta _"ya quedé asegurado"_ sin un solo humano
> en el medio.**
---
## Qué es Clara
Clara es una **asesora digital de seguros** que conversa en lenguaje natural, en
español colombiano. En una sola conversación:
1. **Diagnostica** la vida del afiliado con preguntas abiertas (con quién vive, si
tiene carro, moto, mascota, viajes, dependientes…).
2. **Recomienda** el mejor producto de **todo el portafolio Colsubsidio** (14
productos), explicando por qué encaja, qué cubre y **qué NO cubre**.
3. **Contrata**: reúne los datos, genera el **contrato en PDF**, captura la
**firma electrónica** y entrega un **enlace de pago** (checkout tipo Wompi).
4. **Emite** la **póliza en PDF** en el instante en que el pago se aprueba y hace
post-venta (número de póliza, cómo usarla, encuesta de satisfacción).
Todo el recorrido queda en un **registro de auditoría** persistente. La demo web
muestra, en vivo y al lado del chat, **cada decisión, herramienta y escritura en
base de datos** que ocurre detrás — para que un juez vea que no hay magia: hay
arquitectura.
---
## Por qué Clara gana: una arquitectura en la que se puede confiar
Vender seguros con un LLM tiene un riesgo mortal: **que el modelo alucine una
cobertura, un precio o una condición**. En seguros eso no es un bug, es una
**responsabilidad legal y financiera**. Clara está diseñada, de raíz, para que
eso **no pueda pasar**:
| Principio | Cómo lo garantiza Clara |
|-----------|-------------------------|
| **El LLM solo conversa** | Gemini nunca calcula ni inventa. Solo dialoga y **llama herramientas** (function-calling). Toda la lógica dura vive en el backend. |
| **Coberturas ⇒ base de conocimiento (RAG)** | Cada afirmación de amparo/exclusión/condición sale de `consultar_coberturas`, **con cita de la fuente** (cláusula de las condiciones). |
| **Precios ⇒ motor de reglas determinístico** | Ninguna cifra la produce el modelo: salen de un motor auditable (`cotizar`) con factores por edad y dependientes. |
| **Emisión ⇒ backend, no el modelo** | Contrato, firma, pago y póliza los ejecuta el código de forma determinística; el modelo solo confirma en lenguaje natural. |
| **Guardrail de salida** | Una capa basada en reglas revisa cada respuesta: si menciona cobertura o precio sin respaldo en el turno, lo marca en la auditoría. |
| **Cumplimiento por diseño** | Aviso de tratamiento de datos (**Ley 1581 de 2012**) desde el saludo; el prompt rechaza temas fuera de alcance y resiste intentos de jailbreak. |
| **Trazabilidad total** | Cada perfil, cotización, contrato, pago y póliza se registra en SQLite y se muestra en vivo en la interfaz. |
> En una frase: **el modelo pone las palabras, el sistema pone la verdad.**
---
## El recorrido del afiliado
```
Afiliado Clara (Gemini) Backend determinístico
│ │ │
│ "no sé qué necesito" │ │
├────────────────────────▶│ diagnóstico (preguntas │
│ │ abiertas, escucha activa) │
│ ├─ registrar_perfil ──────────▶│ SQLite (perfil)
│ │ │
│ ├─ recomendar ────────────────▶│ RAG + motor de reglas
│◀── opciones con precio │◀─ coberturas + precio real ──┤
│ y exclusiones reales │ │
│ ├─ consultar_coberturas ──────▶│ RAG (cita fuente)
│ "quiero ese" │ │
│ ├─ registrar_datos ───────────▶│ SQLite (contratante)
│ ├─ generar_contrato ──────────▶│ PDF contrato
│ [ firma con botón ] ───┼─────────────────────────────▶│ firma + enlace de pago
│ [ paga en checkout ] ──┼─────────────────────────────▶│ webhook aprobado
│◀── "ya quedaste │◀─ emisión determinística ────┤ PDF póliza + auditoría
│ asegurado 🎉" │ │
```
Estados de la sesión: `DIAGNOSTICO → RECOMENDACION → DUDAS → CIERRE → EMITIDA`.
La conversación soporta un **atajo**: si el afiliado ya sabe lo que quiere
("solo quiero seguro de viaje"), Clara no lo interroga — va directo al producto.
---
## Portafolio cubierto (14 productos reales de Colsubsidio)
Vida · Vida y Ahorro · Plan Complementario de Salud · Asistencias Médicas
Familiares · Accidentes Personales · Exequial · Accidentes + Exequial · Asesorías
Jurídicas · Asistencias Múltiples (hogar, vehículo, salud y mascotas 24/7) ·
Asistencia Médica en Viajes · Hogar · Autos · Moto · Mascotas.
Cada uno con sus amparos, exclusiones, condiciones, fuente citable y prima base
en `app/knowledge.py`. El recomendador **rankea por ajuste al perfil, no por
precio**, y no se limita a vida o mascotas: considera todo el portafolio.
---
## Probar la demo en 2 minutos
```powershell
python -m pip install -r requirements.txt
copy .env.example .env # y pega tu GEMINI_API_KEY (gratis, sin tarjeta)
python server.py
```
→ Abre **http://localhost:8000** y entra a la pestaña **Demo interactiva**.
Guion sugerido para el jurado:
1. *"Hola, no sé qué seguro necesito."* → deja que Clara diagnostique.
2. Cuéntale algo real: *"vivo con mi pareja y tengo un gato"* → mira cómo aparece
el seguro de mascotas en la recomendación.
3. Elige un producto, da tus datos, **firma** con el botón y **paga** con la
tarjeta de prueba `4242 4242 4242 4242` (la `4111…` simula rechazo).
4. Observa cómo se **emite la póliza en PDF** y todo queda en el panel de auditoría.
> **Clave Gemini:** usa una de **Google AI Studio** (`AIza...`,
> [aistudio.google.com/apikey](https://aistudio.google.com/apikey)), gratis y sin
> tarjeta. Evita claves Vertex (`AQ.`) salvo que tengas facturación en Google Cloud.
---
## Estado de ejecución (honestidad de ingeniería)
Esto es un **MVP demostrable** para la hackathon, no un producto en producción.
El flujo principal se recorre completo en local; algunas piezas son
**simulaciones** conscientes que se dejan listas para evolucionar.
| Área | Estado | Notas |
|------|--------|-------|
| **Conversación con Gemini** | ✅ Funcional | Function-calling, escucha activa, manejo de peticiones directas. |
| **Flujo end-to-end** | ✅ Funcional | Diagnóstico → recomendación → contrato → firma → pago → emisión, cableado y recorrible. |
| **Frontend (chat + paneles)** | ✅ Funcional | Chat, estado, perfil y auditoría en vivo. |
| **PDFs (resumen/contrato/póliza)** | ✅ Funcional | Generación real con `fpdf2`, descarga por `/docs/{archivo}`. |
| **Persistencia** | ✅ Funcional | Sesiones y auditoría en SQLite; sobrevive reinicios. |
| **Pago (Wompi)** | 🟡 Simulación | Checkout con tarjetas de prueba y validación Luhn. **No** es la API real de Wompi (webhooks firmados, producción). |
| **Correo / WhatsApp** | 🟡 Simulación | Sin `SMTP_*`/Twilio, la entrega se registra como `[SIMULADO]`. Con credenciales, envía de verdad. |
| **Despliegue** | 🟡 Preparado | Dockerfile + variables de entorno listos; falta hardening cloud. |
---
## Roadmap corto
- **Agente:** pulir tono, consistencia de fases y edge cases de peticiones directas.
- **Pago:** integración real con Wompi (referencias, estados, reintentos, webhook firmado).
- **Entrega:** envío real de PDF por SMTP y WhatsApp (Twilio) con pruebas end-to-end.
- **RAG / catálogo:** enriquecer condiciones desde fuentes oficiales (`data/reference/`).
- **Calidad:** tests automatizados + CI, y observabilidad (métricas de sesión, errores LLM, latencias).
---
## Arquitectura y estructura
```
├── server.py # Punto de entrada (python server.py)
├── app/ # Backend (paquete Python)
│ ├── main.py # API FastAPI + checkout de pago
│ ├── config.py # Configuración central (.env)
│ ├── agent.py # Sesión, herramientas y bucle de tool-calling + guardrail
│ ├── llm.py # Cliente Gemini (AI Studio + Vertex Express)
│ ├── extraction.py # Captura de datos: regex + responseSchema (Gemini)
│ ├── knowledge.py # Catálogo, RAG y motor de cotización (fuente de verdad)
│ ├── payments.py # Pasarela simulada (tarjetas de prueba, Luhn)
│ ├── pdfgen.py # PDFs de resumen, contrato y póliza (fpdf2)
│ ├── notify.py # Entrega por correo SMTP / WhatsApp Twilio (opcional)
│ └── store.py # SQLite (sesiones + auditoría)
├── static/ # Frontend (chat + paneles de estado/perfil/auditoría)
│ ├── index.html · css/styles.css · js/app.js · img/
├── data/reference/ # Documentos de referencia del reto (política de datos, workflow)
├── var/ # Runtime: PDFs y DB (ignorado en git)
├── Dockerfile · requirements.txt
```
**Stack:** Python · FastAPI · Gemini (function-calling) · fpdf2 · SQLite · Docker.
---
## Desplegar (Docker / Hugging Face Space)
```powershell
docker build -t clara .
docker run -p 7860:7860 -e GEMINI_API_KEY=AIza... clara
```
En un **Space** (SDK Docker): define `GEMINI_API_KEY` como *secret*. **Nunca**
subas el `.env` real al repo ni al hosting.
### Variables de entorno
| Variable | Por defecto | Descripción |
|----------|-------------|-------------|
| `GEMINI_API_KEY` | — | **Obligatoria.** Preferir clave AI Studio (`AIza...`). |
| `GEMINI_MODEL` | `gemini-2.0-flash` | Modelo Gemini. |
| `APP_ENV` | `development` | `production` desactiva docs OpenAPI y autoreload. |
| `PORT` | `8000` / `7860` (Docker) | Puerto HTTP. |
| `PUBLIC_BASE_URL` | auto | Base para enlaces de pago y PDFs (en Spaces se autodetecta). |
| `SMTP_*` | — | Correo real con PDF adjunto (opcional). |
| `TWILIO_*` | — | WhatsApp/SMS (opcional). |
---
## Autora
**Mariana Sinisterra** · [@MarianaCodebase](https://github.com/MarianaCodebase)
Prototipo para el **Reto 2 · Venta automatizada de seguros** —
Hackathon [Colsubsidio × 30X](https://innovacion.colsubsidio.com/).
</content>
|