ps / app.py
GAS17's picture
Update app.py
6f92222 verified
raw
history blame
4.78 kB
import streamlit as st
import openai
import random
import os
# Configurar la API key de OpenAI desde la variable de entorno
openai.api_key = os.environ.get("OPENAI_API_KEY")
# Verificar si la API key está configurada
if not openai.api_key:
st.error("La API key de OpenAI no está configurada. Por favor, configúrala en las variables de entorno.")
st.stop()
# El resto del código permanece igual
contexto = """
CONCEPTOS BÁSICOS UAS, RPAS, drone o aeromodelo:
Se usan diferentes términos para referirnos a las aeronaves no tripuladas, pero ¿qué diferencias hay entre ellos?
• Aeronave no tripulada o RPA (Remotely Piloted Aircraft): Cualquier aeronave que opere o esté diseñada para operar de forma autónoma o para ser pilotada a distancia sin un piloto a bordo. Este RPA, es también llamado DAOD por DINACIA (Dispositivo aéreo operado a distancia)
• Dron (drone en inglés): Palabra coloquialmente usada para referirse en general a todas las aeronaves no tripuladas, debido a su similitud con un zumbido de Abejorro es otra forma de nombrar a los RPA
• Aeromodelo: Aeronave de tamaño reducido pilotado a distancia usada principalmente para vuelos deportivos o experimentales. También puede ser un RPA
• RPAS «sistema de aeronave pilotada por control remoto»: Aeronave pilotada a distancia, su sistema de vuelo, su estación, los enlaces requeridos de mando y control y cualquier otro componente según lo indicado en el diseño de la aeronave.
• UAV « aeronave no tripulada»: Aeronave no tripulada, que tiene la capacidad de volar autónomamente y el equipo para controlarla de forma remota.
• UAS «Unmanned Aircraft System»: El término UAS engloba los RPAS y las aeronaves autónomas es un término más genérico que se refiere a cualquier sistema de aeronaves no tripuladas, incluidos RPAS y UAV. (el piloto a distancia no puede intervenir durante el vuelo).
"""
def generar_preguntas(num_preguntas=38):
prompt = f"""Basándote en el siguiente contexto sobre drones y aeronaves no tripuladas, genera {num_preguntas} preguntas de opción múltiple.
Cada pregunta debe tener tres opciones de respuesta y solo una debe ser correcta.
Devuelve las preguntas en formato JSON como una lista de diccionarios, donde cada diccionario contenga las claves 'pregunta', 'opciones' (lista de 3 opciones), y 'respuesta_correcta' (índice de la opción correcta, 0, 1 o 2).
Contexto:
{contexto}
"""
response = openai.ChatCompletion.create(
model="gpt-4o-mini", # Asegúrate de que este es el nombre correcto del modelo
messages=[{"role": "system", "content": prompt}],
temperature=0.7,
)
# Asumimos que la respuesta está en formato JSON y la parseamos
import json
preguntas = json.loads(response.choices[0].message.content)
return preguntas
def evaluar_respuestas(preguntas, respuestas_usuario):
correctas = 0
resultados = []
for i, (pregunta, respuesta_usuario) in enumerate(zip(preguntas, respuestas_usuario)):
if respuesta_usuario == pregunta['respuesta_correcta']:
correctas += 1
resultados.append(f"Pregunta {i+1}: Correcta")
else:
resultados.append(f"Pregunta {i+1}: Incorrecta. La respuesta correcta era: {pregunta['opciones'][pregunta['respuesta_correcta']]}")
return correctas, resultados
# Aplicación Streamlit
st.title("Cuestionario de Drones")
# Inicializar o cargar preguntas
if 'preguntas' not in st.session_state:
st.session_state.preguntas = generar_preguntas()
# Botón para generar nuevas preguntas
if st.button("Generar nuevas preguntas"):
st.session_state.preguntas = generar_preguntas()
st.session_state.respuestas_enviadas = False
# Formulario para las preguntas
with st.form("quiz_form"):
respuestas_usuario = []
for i, pregunta in enumerate(st.session_state.preguntas):
st.write(f"**Pregunta {i+1}:** {pregunta['pregunta']}")
respuesta = st.radio(f"Selecciona una opción para la pregunta {i+1}:",
pregunta['opciones'],
key=f"pregunta_{i}")
respuestas_usuario.append(pregunta['opciones'].index(respuesta))
submitted = st.form_submit_button("Enviar respuestas")
# Evaluar respuestas cuando se envía el formulario
if submitted:
st.session_state.respuestas_enviadas = True
st.session_state.correctas, st.session_state.resultados = evaluar_respuestas(st.session_state.preguntas, respuestas_usuario)
# Mostrar resultados
if st.session_state.get('respuestas_enviadas', False):
st.write(f"Has acertado {st.session_state.correctas} de {len(st.session_state.preguntas)} preguntas.")
for resultado in st.session_state.resultados:
st.write(resultado)