171 lines
5.0 KiB
Markdown
171 lines
5.0 KiB
Markdown
# Sistema de IA para Checklists Inteligentes
|
|
|
|
## Modos de IA
|
|
|
|
### 1. **OFF (Sin IA)**
|
|
- El mecánico completa manualmente todas las respuestas
|
|
- Sin sugerencias ni asistencia automática
|
|
- Control total del usuario
|
|
|
|
### 2. **ASSISTED (IA Asistida)**
|
|
**Funcionalidades:**
|
|
- **Análisis de fotos**: Cuando el mecánico sube una foto, la IA analiza la imagen y sugiere:
|
|
- Estado del componente (bueno/malo)
|
|
- Nivel de criticidad (ok/minor/critical)
|
|
- Observaciones automáticas basadas en lo que detecta
|
|
- **Sugerencias contextuales**: Basándose en respuestas previas
|
|
- **Detección de anomalías**: Si detecta algo crítico, lo marca automáticamente
|
|
- **El mecánico puede aceptar o rechazar** las sugerencias
|
|
|
|
**Ejemplo de flujo:**
|
|
```
|
|
1. Mecánico sube foto de pastillas de freno
|
|
2. IA analiza: "Desgaste del 85%, menos de 2mm de material"
|
|
3. Sugiere: Estado=Crítico, Requiere reemplazo inmediato
|
|
4. Mecánico revisa y confirma o modifica
|
|
```
|
|
|
|
### 3. **FULL (IA Completa - Copilot)**
|
|
**Funcionalidades:**
|
|
- **Inspección automática por fotos**: El mecánico solo toma fotos
|
|
- **Análisis completo**: La IA responde todas las preguntas automáticamente
|
|
- **Generación de informe**: Crea observaciones y recomendaciones
|
|
- **Detección de problemas**: Marca automáticamente items críticos
|
|
- **El mecánico solo revisa y firma** al final
|
|
|
|
**Ejemplo de flujo:**
|
|
```
|
|
1. Mecánico toma 20 fotos del vehículo
|
|
2. IA procesa todas las fotos
|
|
3. Responde las 99 preguntas automáticamente
|
|
4. Genera observaciones detalladas
|
|
5. Marca 3 items como críticos
|
|
6. Mecánico revisa el informe completo
|
|
7. Ajusta si es necesario
|
|
8. Firma y completa
|
|
```
|
|
|
|
## Implementación Técnica
|
|
|
|
### Análisis de Imágenes con OpenAI Vision
|
|
```javascript
|
|
// Frontend: Subir foto
|
|
const analyzeImage = async (imageFile, questionType) => {
|
|
const formData = new FormData()
|
|
formData.append('image', imageFile)
|
|
formData.append('question_id', questionId)
|
|
|
|
const response = await fetch('/api/analyze-image', {
|
|
method: 'POST',
|
|
body: formData
|
|
})
|
|
|
|
return response.json() // { status, observations, confidence }
|
|
}
|
|
```
|
|
|
|
### Backend: Procesamiento con IA
|
|
```python
|
|
# Backend: Analizar imagen con OpenAI GPT-4 Vision
|
|
import openai
|
|
from PIL import Image
|
|
|
|
async def analyze_vehicle_component(image_path: str, question: Question):
|
|
# Cargar imagen
|
|
with open(image_path, 'rb') as f:
|
|
image_data = f.read()
|
|
|
|
# Prompt especializado según tipo de pregunta
|
|
prompts = {
|
|
"brakes": "Analiza el estado de las pastillas de freno. Indica desgaste, grietas, material restante.",
|
|
"tires": "Evalúa la banda de rodadura, presión aparente, desgaste irregular.",
|
|
"lights": "Verifica funcionamiento de luces, roturas, opacidad.",
|
|
# ... más prompts especializados
|
|
}
|
|
|
|
# Llamada a OpenAI Vision API
|
|
response = openai.ChatCompletion.create(
|
|
model="gpt-4-vision-preview",
|
|
messages=[{
|
|
"role": "user",
|
|
"content": [
|
|
{"type": "text", "text": prompts.get(question.section, "Analiza este componente")},
|
|
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{image_data}"}}
|
|
]
|
|
}],
|
|
max_tokens=300
|
|
)
|
|
|
|
# Parsear respuesta
|
|
ai_analysis = response.choices[0].message.content
|
|
|
|
# Determinar status según análisis
|
|
if "crítico" in ai_analysis.lower() or "falla" in ai_analysis.lower():
|
|
status = "critical"
|
|
elif "menor" in ai_analysis.lower() or "atención" in ai_analysis.lower():
|
|
status = "minor"
|
|
else:
|
|
status = "ok"
|
|
|
|
return {
|
|
"status": status,
|
|
"observations": ai_analysis,
|
|
"confidence": 0.85,
|
|
"ai_analysis": {
|
|
"raw_response": ai_analysis,
|
|
"model": "gpt-4-vision",
|
|
"timestamp": datetime.now()
|
|
}
|
|
}
|
|
```
|
|
|
|
## Ventajas de cada modo
|
|
|
|
### OFF
|
|
✅ Control total del mecánico
|
|
✅ Sin dependencia de conectividad
|
|
✅ Sin costos de API
|
|
|
|
### ASSISTED
|
|
✅ Ayuda al mecánico a no olvidar detalles
|
|
✅ Documenta mejor con análisis de fotos
|
|
✅ Reduce errores humanos
|
|
✅ Aprende patrones comunes
|
|
⚠️ Requiere internet y API key
|
|
|
|
### FULL
|
|
✅ Rapidez extrema (5-10 min vs 30-40 min)
|
|
✅ Consistencia en evaluaciones
|
|
✅ Ideal para inspecciones masivas
|
|
✅ Genera informes detallados automáticamente
|
|
⚠️ Requiere validación del mecánico
|
|
⚠️ Mayor costo de API
|
|
|
|
## Casos de Uso Recomendados
|
|
|
|
**OFF**:
|
|
- Talleres sin internet estable
|
|
- Inspecciones básicas
|
|
- Presupuesto limitado
|
|
|
|
**ASSISTED**:
|
|
- Talleres medianos/grandes
|
|
- Inspecciones preventivas
|
|
- Documentación detallada requerida
|
|
|
|
**FULL**:
|
|
- Flotas de vehículos
|
|
- Inspecciones pre-compra masivas
|
|
- Talleres de alto volumen
|
|
- Empresas de rent-a-car
|
|
|
|
## Próximos pasos de implementación
|
|
|
|
1. ✅ Estructura de base de datos preparada
|
|
2. ⏳ Endpoint `/api/analyze-image` para análisis
|
|
3. ⏳ Integración con OpenAI Vision API
|
|
4. ⏳ UI para mostrar sugerencias de IA
|
|
5. ⏳ Sistema de confianza (confidence score)
|
|
6. ⏳ Historial de sugerencias aceptadas/rechazadas
|
|
7. ⏳ Fine-tuning del modelo con datos reales
|