️ Nota: El desarrollo activo de este proyecto está suspendido por el momento debido a limitaciones de tiempo. Mientras tanto, no dudes en bifurcar el repositorio o comunicarte con nosotros si deseas mantener el proyecto.
Pruju AI es un asistente de enseñanza que permite a los estudiantes interactuar con los materiales del curso del profesor. El asistente está diseñado para responder cualquier pregunta de los estudiantes, pero sólo si la respuesta se puede encontrar en los materiales del curso proporcionados por el profesor (p. ej., programa de estudios, diapositivas, transcripciones de conferencias). También se puede guiar al asistente para que responda de manera que se alinee con los objetivos pedagógicos del curso. Por ejemplo, se le puede pedir al asistente que no responda ciertas preguntas o que responda de una manera particular.
El proyecto existe para facilitar al máximo la creación de asistentes de enseñanza virtuales. Desde un punto de vista pedagógico, es fundamental poder controlar la base de conocimientos del asistente así como los tipos de respuestas que éste proporciona a las preguntas del alumno.
La aplicación se puede configurar para trabajar con los propios materiales del profesor sin necesidad de codificación. Necesita modificar algunos archivos de texto y ejecutar un script de Python para hacerlo suyo. También puede utilizar el código como punto de partida para configuraciones más sofisticadas y personalizadas. Si su curso utiliza Moodle, ¡ahora puede importar datos de su propio curso!
La aplicación funciona con la API de OpenAI, el servicio Azure OpenAI de Microsoft y Ollama. Ollama admite una gama más amplia de modelos de código abierto (por ejemplo, Mistral 7B, Llama 2). Sólo se ha probado el Mistral 7B.
Pruju es la jerga universitaria finlandesa para referirse a un folleto de estudio. Según el Diccionario Urbano (finlandés), prujus "puede variar en calidad desde un buen libro [...] hasta un montón de diapositivas crípticas de conferencias que no tienen ningún sentido".
Las instrucciones son para macOS, pero deberían funcionar con Linux y (con pequeñas modificaciones) también con Windows.
Clona el repositorio y crea un entorno virtual para el proyecto. Instale las dependencias requeridas:
pip install -r requirements.txt
textract
. Los siguientes pasos le ayudarán a evitar cualquier problema.
pip install --upgrade pip==24.0
six
después de instalar los requisitos: pip install --upgrade six
Debe crear un archivo .env que contenga al menos lo siguiente:
# Specify LLM provider and model
LLM_PROVIDER="openai"
MODEL_NAME="gpt-4"
# Directory for your course data:
CHAT_DATA_FOLDER ="prujuai_resources"
# Total model call quota:
TOTAL_MODEL_QUOTA=5
# Max number of tokens per call
MAX_PROMPT_TOKENS=2000
# Capacity management:
MAX_CONCURRENCY=2
MAX_QUEUE=10
Actualmente puedes elegir entre "openai" (la API propia de OpenAI), "azure" (el servicio Azure OpenAI de Microsoft) o "ollama" (Ollama).
Si eliges openai, debes definir la clave API:
LLM_PROVIDER="openai"
MODEL_NAME="gpt-4"
OPENAI_API_KEY="your-secret-key-goes-here"
Si elige Azure, debe definir el punto final de API y la clave de API:
LLM_PROVIDER="azure"
MODEL_NAME="gpt-4"
OPENAI_API_KEY = "your-secret-key-goes-here"
MODEL_ENDPOINT="https://your-azure-endpoint"
# Optionally, you can define:
AZURE_OPENAI_CUSTOM_BACKEND = "/custom/url/back/end/other/than/chat/completions"
AZURE_OPENAI_CUSTOM_HEADER="Some-Custom-Authentication-Header"
Si elige ollama, debe definir el modelo que se utilizará.
LLM_PROVIDER="ollama"
MODEL_NAME="mistral"
En el caso de Ollama, debe instalar Ollama y ejecutar ollama serve <modelname>
para entregar el modelo a 127.0.0.1:11434
. Hasta el momento sólo se ha probado el Mistral 7B. La funcionalidad básica funciona, pero no se ha probado exhaustivamente.
Correr:
gradio app.py
Una vez que la aplicación se esté ejecutando, le indicará la dirección donde puede encontrar la interfaz del chatbot.
Para comenzar, cree una copia del directorio prujuai_resources
y asígnele un nombre que desee (por ejemplo, mycourse_resources
). Luego modifique el archivo .env para que la aplicación sepa dónde buscar los archivos (por ejemplo, CHAT_DATA_FOLDER="mycourse_resources"
). En este nuevo directorio modifica los siguientes archivos a tu gusto:
prompt_template.txt
proporciona las instrucciones generales del sistema para el chatbot.examples_ui.txt
define los ejemplos que ayudan al usuario a empezar a hacer preguntas útilesfavicon.ico
es el ícono de la aplicaciónchat_header.md
proporciona una descripción modificable de su aplicación que se muestra encima de la interfaz de chatchat_footer.md
como arriba, pero debajo de la interfaz de chatPara leer sus propios materiales en una tienda de vectores, debe ejecutar:
python3 read_to_vectorstore.py
El script leerá los materiales del curso desde una ubicación determinada ( ./course_material
por defecto) y los almacenará en un almacén de vectores FAISS (por defecto ./course_material_vdb
). Una vez que haya terminado, mueva los archivos index.faiss
e index.pkl
a CHAT_DATA_FOLDER/faiss_index
. Si desea más opciones, como ejecutar el script en modo no interactivo con valores predeterminados razonables, ejecute el script con -h:
python3 read_to_vectorstore.py -h
Los materiales predeterminados del curso provienen de un curso imaginario llamado Introducción a Business Analytics con Python , producido con la ayuda de ChatGPT (GPT-4) con fines de demostración. Los materiales de ejemplo ( course_materials
) incluyen diapositivas de conferencias, transcripciones de conferencias y tutoriales de secuencias de comandos de Python.
¡Piense detenidamente a qué datos (no desea) que tenga acceso su aplicación!
Puede importar los materiales desde una instancia de Moodle. Cree un archivo llamado .moodle
y modifíquelo para que contenga lo siguiente:
COURSE_ID="12345"
WS_TOKEN="your-token"
WS_ENDPOINT="https://your-moodle-instance.edu/webservice/rest/server.php"
WS_STORAGE="moodle_data"
Al ejecutar el script moodle.py
se descargarán archivos (de los recursos de archivos y carpetas ). Las publicaciones del foro de Anuncios se pueden incluir con la opción -p
. De forma predeterminada, el script incrustará el contenido en un almacén de vectores FAISS en un directorio especificado en la variable de entorno WS_STORAGE
, seguido de " _vdb
" (por ejemplo, moode_data_vdb
).
python3 moodle.py
Luego puede copiar los archivos index.faiss
e index.pkl
a la carpeta de material de su curso ( CHAT_DATA_FOLDER/faiss_index
). El script también incluye enlaces de Moodle a los bloques de texto consumidos por la tienda de vectores, por lo que es recomendable agregar algo como esto al mensaje del sistema: Make sure to include hyperlinks to allow easy access to the materials.
Esto permite al usuario navegar fácilmente para ver el contenido original en Moodle. Asegúrese de que el token de acceso esté asociado con los permisos apropiados en el extremo de Moodle.
También puede utilizar una base de datos vectorial qdrant, ejecutarla localmente en un contenedor o utilizar el servicio alojado. Puede especificar la aplicación para usar su colección qdrant modificando .env de la siguiente manera:
VECTOR_STORE="qdrant" # If you use qdrant
VECTOR_STORE_COLLECTION="my_collection" # qdrant collection name
VECTOR_STORE_ENDPOINT="localhost" #"localhost" or hosted service endpoint
VECTOR_STORE_API_KEY="your-secret" # If you use qdrant's hosted service
Si está importando los materiales de su curso desde Moodle usando moodle.py
, agregue también las líneas anteriores a su .moodle
. Puede considerar ejecutar el script de importación de Moodle periódicamente para mantener actualizada la base de conocimientos del chatbot. Nuevamente, tenga en cuenta los permisos en Moodle .
Hay algunas funciones nuevas en la aplicación que aún no están debidamente documentadas. Las funcionalidades preexistentes no se ven afectadas. Estos incluyen:
El proyecto se encuentra actualmente en un estado de demostración funcional, con mucho margen de mejora. Algunas posibles direcciones para un mayor desarrollo:
Enrico Glerean brindó valiosos consejos sobre muchos aspectos del proyecto. Thomas Pfau contribuyó con el código y proporcionó muchos conocimientos técnicos cruciales a lo largo del camino.