Spaces:
Sleeping
Sleeping
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" | |