Spaces:
Sleeping
Sleeping
Upload 7 files
Browse files- .dockerignore +6 -0
- .gitignore +12 -0
- .python-version +1 -0
- Dockerfile +30 -0
- README.md +56 -9
- pyproject.toml +90 -0
- uv.lock +0 -0
.dockerignore
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
.git
|
| 2 |
+
.venv
|
| 3 |
+
__pycache__
|
| 4 |
+
*.pyc
|
| 5 |
+
.DS_Store
|
| 6 |
+
.env
|
.gitignore
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Python-generated files
|
| 2 |
+
__pycache__/
|
| 3 |
+
*.py[oc]
|
| 4 |
+
build/
|
| 5 |
+
dist/
|
| 6 |
+
wheels/
|
| 7 |
+
*.egg-info
|
| 8 |
+
|
| 9 |
+
# Virtual environments
|
| 10 |
+
.venv
|
| 11 |
+
.env
|
| 12 |
+
|
.python-version
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
3.12
|
Dockerfile
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
FROM python:3.12-slim
|
| 2 |
+
|
| 3 |
+
# Install uv
|
| 4 |
+
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
|
| 5 |
+
|
| 6 |
+
WORKDIR /underwriting_insurance
|
| 7 |
+
|
| 8 |
+
ENV UV_COMPILE_BYTECODE=1
|
| 9 |
+
ENV UV_LINK_MODE=copy
|
| 10 |
+
|
| 11 |
+
RUN apt-get update && apt-get install -y \
|
| 12 |
+
build-essential \
|
| 13 |
+
&& rm -rf /var/lib/apt/lists/*
|
| 14 |
+
|
| 15 |
+
COPY pyproject.toml uv.lock ./
|
| 16 |
+
|
| 17 |
+
RUN uv sync --no-install-project
|
| 18 |
+
|
| 19 |
+
ENV PATH="/underwriting_insurance/.venv/bin:$PATH"
|
| 20 |
+
|
| 21 |
+
COPY . .
|
| 22 |
+
|
| 23 |
+
RUN uv sync
|
| 24 |
+
|
| 25 |
+
EXPOSE 8501
|
| 26 |
+
|
| 27 |
+
# REMOVED: ENV OPENAI_API_KEY=...
|
| 28 |
+
# (Docker will inject the variable from the .env file automatically)
|
| 29 |
+
|
| 30 |
+
CMD ["streamlit", "run", "src/infrastructure/app.py", "--server.port=8501", "--server.address=0.0.0.0"]
|
README.md
CHANGED
|
@@ -1,12 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
---
|
| 11 |
|
| 12 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Proyecto: Asistente de Seguros (Underwriting Insurance App)
|
| 2 |
+
|
| 3 |
+
## Planteamiento del Problema
|
| 4 |
+
|
| 5 |
+
### Negocio
|
| 6 |
+
El sector de seguros enfrenta desafíos operativos relacionados con la gestión eficiente de la información y la atención al cliente, específicamente en la oferta corporativa y la consulta de pólizas.
|
| 7 |
+
|
| 8 |
+
### Objetivos
|
| 9 |
+
1. **Gestionar oferta corporativa:** Administrar eficientemente planes, coberturas y pricing.
|
| 10 |
+
2. **Automatizar consultas:** Facilitar la consulta automatizada de información de pólizas de seguros para reducir tiempos de respuesta.
|
| 11 |
+
3. **Mejorar acceso a información:** Solucionar la dificultad y el tiempo excesivo que toma recuperar y juntar información relevante atrapada en documentos no estructurados (PDFs).
|
| 12 |
+
|
| 13 |
+
### Hipótesis
|
| 14 |
+
La implementación de un asistente virtual inteligente (Chatbot), capaz de clasificar intenciones de usuario y extraer información de fuentes estructuradas y no estructuradas, optimizará la recuperación de datos, reduciendo el tiempo de atención al cliente y mejorando la precisión en la gestión de ofertas corporativas.
|
| 15 |
+
|
| 16 |
+
### Acciones con Entregables
|
| 17 |
+
* Desarrollo de un pipeline de clasificación de intenciones (NLP).
|
| 18 |
+
* Implementación de módulos para consulta de reglas de negocio y precios.
|
| 19 |
+
* Creación de una interfaz o API para interactuar con el asistente.
|
| 20 |
+
* Documentó de análisis y reporte de resultados.
|
| 21 |
+
|
| 22 |
+
---
|
| 23 |
+
|
| 24 |
+
## Acceso a Datos
|
| 25 |
+
|
| 26 |
+
### Tipo de Datos
|
| 27 |
+
* **Estructurados:**
|
| 28 |
+
* Información transaccional simulada (bases de datos de clientes, estados de pólizas, historial de pagos).
|
| 29 |
+
* Reglas de negocio definidas en código (pricing, coberturas).
|
| 30 |
+
* Datasets sintéticos para entrenamiento del modelo de clasificación (`crear_dataset_rules`).
|
| 31 |
+
* **No Estructurados:**
|
| 32 |
+
* Documentos de pólizas y condiciones generales en formato PDF (fuente de información para consultas complejas).
|
| 33 |
+
|
| 34 |
---
|
| 35 |
+
|
| 36 |
+
## Tipo de Solución a Elaborar
|
| 37 |
+
|
| 38 |
+
Se desarrollará una solución basada en **Inteligencia Artificial y Automatización** que consiste en:
|
| 39 |
+
|
| 40 |
+
1. **Chatbot de Asistencia:**
|
| 41 |
+
* Modelo de Machine Learning (Pipeline `TfidfVectorizer` + `RandomForestClassifier`) para entender la intención del usuario (ej. cotizar, consultar pagos, reportar emergencias).
|
| 42 |
+
* Lógica de negocio (`core.py` e `infrastructure`) para ejecutar acciones específicas basadas en la intención detectada.
|
| 43 |
+
|
| 44 |
+
2. **Infraestructura de Datos:**
|
| 45 |
+
* Integración de reglas de negocio para validar coberturas y calcular precios.
|
| 46 |
+
* Simulación de consultas a sistemas externos (bancos, bases de datos de pólizas).
|
| 47 |
+
|
| 48 |
---
|
| 49 |
|
| 50 |
+
## Cronograma de Trabajo
|
| 51 |
+
|
| 52 |
+
| Fase | Actividad | Descripción |
|
| 53 |
+
| :--- | :--- | :--- |
|
| 54 |
+
| **1** | **Planteamiento y Diseño** | Definición del alcance, objetivos y arquitectura de la solución. (Completado) |
|
| 55 |
+
| **2** | **Acceso y Preparación de Datos** | Generación de datasets sintéticos y configuración de acceso a documentos. |
|
| 56 |
+
| **3** | **Desarrollo de Modelos** | Entrenamiento del modelo de clasificación de intenciones y ajuste de reglas. |
|
| 57 |
+
| **4** | **Implementación de Lógica** | Desarrollo del `core` del chatbot y funciones de `infrastructure` (pagos, cotizaciones, etc.). |
|
| 58 |
+
| **5** | **Integración y Pruebas** | Unificación de componentes en el flujo principal (`main.py`) y validación de casos de uso. |
|
| 59 |
+
| **6** | **Documentación y Entrega** | Finalización del README y reporte de resultados. |
|
pyproject.toml
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[project]
|
| 2 |
+
name = "underwriting-insurance"
|
| 3 |
+
version = "0.1.0"
|
| 4 |
+
description = "Add your description here"
|
| 5 |
+
readme = "README.md"
|
| 6 |
+
requires-python = ">=3.12"
|
| 7 |
+
dependencies = [
|
| 8 |
+
"aiohappyeyeballs>=2.6.1",
|
| 9 |
+
"aiohttp>=3.13.3",
|
| 10 |
+
"aiosignal>=1.4.0",
|
| 11 |
+
"annotated-types>=0.7.0",
|
| 12 |
+
"anyio>=4.12.0",
|
| 13 |
+
"async-timeout>=5.0.1",
|
| 14 |
+
"attrs>=25.4.0",
|
| 15 |
+
"certifi>=2025.11.12",
|
| 16 |
+
"charset-normalizer>=3.4.4",
|
| 17 |
+
"colorama>=0.4.6",
|
| 18 |
+
"dataclasses-json>=0.6.7",
|
| 19 |
+
"distro>=1.9.0",
|
| 20 |
+
"exceptiongroup>=1.3.1",
|
| 21 |
+
"faiss-cpu>=1.13.2",
|
| 22 |
+
"fastapi>=0.128.0",
|
| 23 |
+
"fpdf>=1.7.2",
|
| 24 |
+
"frozenlist>=1.8.0",
|
| 25 |
+
"greenlet>=3.3.0",
|
| 26 |
+
"h11>=0.16.0",
|
| 27 |
+
"httpcore>=1.0.9",
|
| 28 |
+
"httpx>=0.28.1",
|
| 29 |
+
"idna>=3.11",
|
| 30 |
+
"jiter>=0.12.0",
|
| 31 |
+
"joblib>=1.5.3",
|
| 32 |
+
"jsonpatch>=1.33",
|
| 33 |
+
"jsonpointer>=3.0.0",
|
| 34 |
+
"langchain>=1.2.0",
|
| 35 |
+
"langchain-chroma>=1.1.0",
|
| 36 |
+
"langchain-classic>=1.0.1",
|
| 37 |
+
"langchain-community>=0.4.1",
|
| 38 |
+
"langchain-core>=1.2.6",
|
| 39 |
+
"langchain-google-genai>=4.1.2",
|
| 40 |
+
"langchain-openai>=1.1.6",
|
| 41 |
+
"langchain-text-splitters>=1.1.0",
|
| 42 |
+
"langgraph>=1.0.5",
|
| 43 |
+
"langsmith>=0.6.0",
|
| 44 |
+
"marshmallow>=3.26.2",
|
| 45 |
+
"multidict>=6.7.0",
|
| 46 |
+
"mypy-extensions>=1.1.0",
|
| 47 |
+
"numpy>=2.4.0",
|
| 48 |
+
"openai>=2.14.0",
|
| 49 |
+
"orjson>=3.11.5",
|
| 50 |
+
"packaging>=25.0",
|
| 51 |
+
"pandas>=2.3.3",
|
| 52 |
+
"propcache>=0.4.1",
|
| 53 |
+
"pydantic>=2.12.5",
|
| 54 |
+
"pydantic-core>=2.41.5",
|
| 55 |
+
"pypdf>=6.5.0",
|
| 56 |
+
"python-dotenv>=1.2.1",
|
| 57 |
+
"pyyaml>=6.0.3",
|
| 58 |
+
"rasa>=0.1.1",
|
| 59 |
+
"regex>=2025.11.3",
|
| 60 |
+
"requests>=2.32.5",
|
| 61 |
+
"requests-toolbelt>=1.0.0",
|
| 62 |
+
"scikit-learn>=1.8.0",
|
| 63 |
+
"sniffio>=1.3.1",
|
| 64 |
+
"sqlalchemy>=2.0.45",
|
| 65 |
+
"tenacity>=9.1.2",
|
| 66 |
+
"tiktoken>=0.12.0",
|
| 67 |
+
"tqdm>=4.67.1",
|
| 68 |
+
"typing-extensions>=4.15.0",
|
| 69 |
+
"typing-inspect>=0.9.0",
|
| 70 |
+
"typing-inspection>=0.4.2",
|
| 71 |
+
"urllib3>=2.3.0",
|
| 72 |
+
"uvicorn>=0.40.0",
|
| 73 |
+
"yarl>=1.22.0",
|
| 74 |
+
"streamlit>=1.32.0",
|
| 75 |
+
]
|
| 76 |
+
|
| 77 |
+
[dependency-groups]
|
| 78 |
+
dev = [
|
| 79 |
+
"ipykernel>=7.1.0",
|
| 80 |
+
"pyzmq>=27.1.0",
|
| 81 |
+
"jupyter>=1.0.0",
|
| 82 |
+
"pytest>=9.0.2",
|
| 83 |
+
]
|
| 84 |
+
[build-system]
|
| 85 |
+
requires = ["setuptools>=72.0"]
|
| 86 |
+
build-backend = "setuptools.build_meta"
|
| 87 |
+
|
| 88 |
+
[tool.setuptools.packages.find]
|
| 89 |
+
where = ["src"]
|
| 90 |
+
include = ["underwriting_insurance"]
|
uv.lock
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|