alfredo / app.py
miguelcastroe's picture
Update app.py
4556e03 verified
raw
history blame
4.13 kB
def evaluar_prompt(prompt):
try:
# Encode the prompt
inputs = tokenizer(prompt, return_tensors="pt").to(device)
# Generate text (though this step isn't really affecting your feedback)
outputs = model.generate(
inputs["input_ids"],
max_length=150,
num_return_sequences=1,
no_repeat_ngram_size=2,
do_sample=True,
top_k=50,
top_p=0.95,
temperature=0.7
)
# Decode the generated text (not crucial for the feedback)
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
# Initialize variables to store detailed advice
claridad_consejo = ""
logica_consejo = ""
relevancia_consejo = ""
evidencia_consejo = ""
# Evaluate clarity
if len(prompt.split()) < 5:
claridad_consejo = "Tu prompt es muy corto, lo que puede generar ambigüedad. Intenta expandirlo para proporcionar más contexto o detalles específicos."
elif len(prompt.split()) > 20:
claridad_consejo = "Tu prompt es muy largo. Considera simplificarlo para que sea más directo y fácil de entender."
else:
claridad_consejo = "Tu prompt es claro y está bien definido, lo que facilita un análisis efectivo."
# Evaluate logic
subjective_terms = ["mejor", "peor", "único", "excelente", "terrible"]
if any(word in prompt.lower() for word in subjective_terms):
logica_consejo = f"Palabras como '{', '.join([w for w in subjective_terms if w in prompt.lower()])}' sugieren una perspectiva subjetiva. Reformula el prompt para enfocarte en criterios objetivos."
else:
logica_consejo = "El prompt evita términos subjetivos, lo que ayuda a mantener un enfoque objetivo."
# Evaluate relevance
relevant_terms = ["cliente", "experiencia", "empresa", "servicio", "producto"]
if any(word in prompt.lower() for word in relevant_terms):
relevancia_consejo = "El prompt es relevante y está alineado con el objetivo de mejorar la experiencia del cliente."
else:
relevancia_consejo = "El prompt podría no estar directamente relacionado con el objetivo principal. Asegúrate de que aborde claramente la cuestión principal."
# Evaluate evidence request
evidence_terms = ["evidencia", "pruebas", "demuestra", "ejemplos", "citas", "datos"]
if any(word in prompt.lower() for word in evidence_terms):
evidencia_consejo = "El prompt ya solicita evidencia, lo cual es positivo para un análisis detallado."
else:
evidencia_consejo = "Considera pedir explícitamente ejemplos específicos o evidencia para obtener respuestas más detalladas y fundamentadas."
# Compile suggestions
sugerencias = "### Sugerencias para Mejorar:\n"
# Add feedback for each category only if there is something to improve
if claridad_consejo != "Tu prompt es claro y está bien definido, lo que facilita un análisis efectivo.":
sugerencias += f"\n* **Claridad:** {claridad_consejo}"
if logica_consejo != "El prompt evita términos subjetivos, lo que ayuda a mantener un enfoque objetivo.":
sugerencias += f"\n* **Lógica:** {logica_consejo}"
if relevancia_consejo != "El prompt es relevante y está alineado con el objetivo de mejorar la experiencia del cliente.":
sugerencias += f"\n* **Relevancia:** {relevancia_consejo}"
if evidencia_consejo != "El prompt ya solicita evidencia, lo cual es positivo para un análisis detallado.":
sugerencias += f"\n* **Evidencia:** {evidencia_consejo}"
# If everything is fine, suggest no improvement
if not sugerencias.strip() or "### Sugerencias para Mejorar:\n" == sugerencias:
sugerencias = "Tu prompt está bien construido y no presenta áreas importantes para mejorar."
return sugerencias, 85
except Exception as e:
return str(e), "Error"