feat: AI prompts personalizados por pregunta - backend v1.0.13, frontend v1.0.21
Backend: - Agregar campo ai_prompt a tabla questions - Endpoint analyze-image recibe custom_prompt - Validación de imagen apropiada (sugiere cambiar foto si no corresponde) - Script de migración migrate_ai_prompt.py Frontend: - Campo de texto para configurar prompt de IA en editor de preguntas - Envía custom_prompt al endpoint de análisis - UI con fondo morado para sección de IA La IA ahora analiza fotos según el contexto específico de cada pregunta y sugiere cambiar la imagen si no corresponde al componente solicitado.
This commit is contained in:
@@ -1029,6 +1029,7 @@ def delete_ai_configuration(
|
||||
async def analyze_image(
|
||||
file: UploadFile = File(...),
|
||||
question_id: int = None,
|
||||
custom_prompt: str = None,
|
||||
db: Session = Depends(get_db),
|
||||
current_user: models.User = Depends(get_current_user)
|
||||
):
|
||||
@@ -1061,12 +1062,37 @@ async def analyze_image(
|
||||
try:
|
||||
# Construir prompt dinámico basado en la pregunta específica
|
||||
if question_obj:
|
||||
# Prompt altamente específico para la pregunta
|
||||
question_text = question_obj.text
|
||||
question_type = question_obj.type
|
||||
section = question_obj.section
|
||||
|
||||
system_prompt = f"""Eres un mecánico experto realizando una inspección vehicular.
|
||||
# Usar prompt personalizado si está disponible
|
||||
if custom_prompt:
|
||||
# Prompt 100% personalizado por el administrador
|
||||
system_prompt = f"""Eres un mecánico experto realizando una inspección vehicular.
|
||||
|
||||
INSTRUCCIONES ESPECÍFICAS PARA ESTA PREGUNTA:
|
||||
{custom_prompt}
|
||||
|
||||
PREGUNTA A RESPONDER: "{question_obj.text}"
|
||||
Sección: {question_obj.section}
|
||||
|
||||
Analiza la imagen siguiendo EXACTAMENTE las instrucciones proporcionadas arriba.
|
||||
|
||||
VALIDACIÓN DE IMAGEN:
|
||||
- Si la imagen NO corresponde al contexto de la pregunta (por ejemplo, si piden luces pero muestran motor), indica en "recommendation" que deben cambiar la foto
|
||||
- Si la imagen es borrosa, oscura o no permite análisis, indica en "recommendation" que tomen otra foto más clara
|
||||
|
||||
Responde en formato JSON:
|
||||
{{
|
||||
"status": "ok|minor|critical",
|
||||
"observations": "Análisis específico según el prompt personalizado",
|
||||
"recommendation": "Si la imagen no es apropiada, indica 'Por favor tome una foto de [componente correcto]'. Si es apropiada, da recomendación técnica.",
|
||||
"confidence": 0.0-1.0
|
||||
}}"""
|
||||
else:
|
||||
# Prompt altamente específico para la pregunta
|
||||
question_text = question_obj.text
|
||||
question_type = question_obj.type
|
||||
section = question_obj.section
|
||||
|
||||
system_prompt = f"""Eres un mecánico experto realizando una inspección vehicular.
|
||||
|
||||
PREGUNTA ESPECÍFICA A RESPONDER: "{question_text}"
|
||||
Sección: {section}
|
||||
@@ -1074,11 +1100,15 @@ Sección: {section}
|
||||
Analiza la imagen ÚNICAMENTE para responder esta pregunta específica.
|
||||
Sé directo y enfócate solo en lo que la pregunta solicita.
|
||||
|
||||
VALIDACIÓN DE IMAGEN:
|
||||
- Si la imagen NO corresponde al contexto de la pregunta, indica en "recommendation" que deben cambiar la foto
|
||||
- Si la imagen es borrosa o no permite análisis, indica en "recommendation" que tomen otra foto más clara
|
||||
|
||||
Responde en formato JSON:
|
||||
{{
|
||||
"status": "ok|minor|critical",
|
||||
"observations": "Respuesta específica a: {question_text}",
|
||||
"recommendation": "Acción si aplica",
|
||||
"recommendation": "Si la imagen no es apropiada, indica 'Por favor tome una foto de [componente correcto]'. Si es apropiada, da acción técnica si aplica.",
|
||||
"confidence": 0.0-1.0
|
||||
}}
|
||||
|
||||
@@ -1089,7 +1119,7 @@ IMPORTANTE:
|
||||
- Si la pregunta es pass/fail, indica claramente si pasa o falla
|
||||
- Si la pregunta es bueno/regular/malo, indica el estado específico del componente"""
|
||||
|
||||
user_message = f"Inspecciona la imagen y responde específicamente: {question_text}"
|
||||
user_message = f"Inspecciona la imagen y responde específicamente: {question_obj.text}"
|
||||
else:
|
||||
# Fallback para análisis general
|
||||
system_prompt = """Eres un experto mecánico automotriz. Analiza la imagen y proporciona:
|
||||
|
||||
Reference in New Issue
Block a user