️ Remarque : Le développement actif de ce projet est suspendu pour le moment en raison de contraintes de temps. En attendant, n'hésitez pas à créer le référentiel ou à nous contacter si vous souhaitez maintenir le projet.
Pruju AI est un assistant pédagogique qui permet aux étudiants d'interagir avec le matériel de cours de l'enseignant. L'assistant est conçu pour répondre à toute question de l'étudiant, mais seulement si la réponse peut être trouvée dans le matériel de cours fourni par l'enseignant (par exemple, le programme, les diapositives, les relevés de notes des cours). L'assistant peut également être guidé pour répondre d'une manière qui correspond aux objectifs pédagogiques du cours. Par exemple, on peut demander à l'assistant de ne pas répondre à certaines questions ou de répondre d'une manière particulière.
Le projet existe pour rendre la création d’assistants pédagogiques virtuels aussi simple que possible. D'un point de vue pédagogique, il est essentiel de pouvoir contrôler la base de connaissances de l'assistant ainsi que les types de réponses que l'assistant apporte aux questions de l'étudiant.
L'application peut être configurée pour fonctionner avec le matériel de l'enseignant sans aucun codage. Vous devez modifier certains fichiers texte et exécuter un script Python pour vous l'approprier. Vous pouvez également utiliser le code comme point de départ pour des configurations plus sophistiquées et personnalisées. Si votre cours utilise Moodle, vous pouvez désormais importer les données de votre propre cours !
L'application fonctionne avec l'API d'OpenAI, le service Azure OpenAI de Microsoft et Ollama. Ollama prend en charge une plus large gamme de modèles open source (par exemple, Mistral 7B, Llama 2). Seul le Mistral 7B a été testé.
Pruju est l'argot universitaire finlandais pour un document d'étude. Selon le dictionnaire urbain (finlandais), la qualité des prujus « peut aller d'un bon livre [...] à une pile de diapositives de cours énigmatiques qui n'ont aucun sens ».
Les instructions concernent macOS mais devraient également fonctionner avec Linux et (avec de petites modifications) Windows.
Clonez le dépôt et créez un environnement virtuel pour le projet. Installez les dépendances requises :
pip install -r requirements.txt
textract
. Les étapes suivantes devraient vous aider à éviter tout problème.
pip install --upgrade pip==24.0
six
après avoir installé la configuration requise : pip install --upgrade six
Vous devez créer un fichier .env contenant au moins les éléments suivants :
# 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
Vous pouvez actuellement choisir entre « openai » (la propre API d'OpenAI), « azure » (le service Azure OpenAI de Microsoft) ou « ollama » (Ollama).
Si vous choisissez openai, vous devez définir la clé API :
LLM_PROVIDER="openai"
MODEL_NAME="gpt-4"
OPENAI_API_KEY="your-secret-key-goes-here"
Si vous choisissez Azure, vous devez définir le point de terminaison de l'API et la clé 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 vous choisissez ollama, vous devez définir le modèle à utiliser.
LLM_PROVIDER="ollama"
MODEL_NAME="mistral"
Dans le cas d'Ollama, vous devez installer Ollama et exécuter ollama serve <modelname>
pour servir le modèle sur 127.0.0.1:11434
. Seul le Mistral 7B a été testé jusqu'à présent. La fonctionnalité de base fonctionne, mais n'a pas été testée de manière approfondie.
Courir:
gradio app.py
Une fois l’application lancée, elle vous indiquera l’adresse où vous pourrez trouver l’interface du chatbot.
Pour commencer, créez une copie du répertoire prujuai_resources
et donnez-lui un nom que vous aimez (par exemple, mycourse_resources
). Modifiez ensuite le fichier .env pour que l'application sache où chercher les fichiers (par exemple CHAT_DATA_FOLDER="mycourse_resources"
). Dans ce nouveau répertoire, modifiez les fichiers suivants à votre guise :
prompt_template.txt
fournit les instructions système générales pour le chatbotexamples_ui.txt
définit les exemples qui aident l'utilisateur à commencer à poser des questions utilesfavicon.ico
est l'icône de l'applicationchat_header.md
fournit une description modifiable de votre application qui s'affiche au-dessus de l'interface de chatchat_footer.md
comme ci-dessus, mais en dessous de l'interface de chatPour lire vos propres documents dans un magasin vectoriel, vous devez exécuter :
python3 read_to_vectorstore.py
Le script lira votre matériel de cours à partir d'un emplacement donné ( ./course_material
par défaut) et les stockera dans un magasin de vecteurs FAISS (par défaut ./course_material_vdb
). Une fois que vous avez terminé, déplacez les fichiers index.faiss
et index.pkl
vers CHAT_DATA_FOLDER/faiss_index
. Si vous souhaitez plus d'options, comme exécuter le script en mode non interactif avec des valeurs par défaut raisonnables, exécutez le script avec -h :
python3 read_to_vectorstore.py -h
Le matériel de cours par défaut provient d'un cours imaginaire appelé Primer on Business Analytics with Python , produit avec l'aide de ChatGPT (GPT-4) à des fins de démonstration. Les exemples de matériel ( course_materials
) incluent des diapositives de cours, des transcriptions de cours et des didacticiels de script Python.
Veuillez réfléchir attentivement aux données auxquelles vous souhaitez (ne pas) que votre application ait accès !
Vous pouvez importer les matériaux à partir d'une instance Moodle. Créez un fichier appelé .moodle
et modifiez-le pour qu'il contienne les éléments suivants :
COURSE_ID="12345"
WS_TOKEN="your-token"
WS_ENDPOINT="https://your-moodle-instance.edu/webservice/rest/server.php"
WS_STORAGE="moodle_data"
L'exécution du script moodle.py
téléchargera les fichiers (à partir des ressources Fichier et Dossier ). Les messages du forum Annonces peuvent être inclus avec l'indicateur -p
. Le script intégrera par défaut le contenu dans un magasin de vecteurs FAISS dans un répertoire spécifié dans la variable d'environnement WS_STORAGE
, suivi de " _vdb
" (par exemple, moode_data_vdb
).
python3 moodle.py
Vous pouvez ensuite copier les fichiers index.faiss
et index.pkl
dans votre dossier de matériel de cours ( CHAT_DATA_FOLDER/faiss_index
). Le script inclut également des liens Moodle vers les blocs de texte consommés par le magasin de vecteurs, il est donc conseillé d'ajouter quelque chose comme ceci à l'invite du système : Make sure to include hyperlinks to allow easy access to the materials.
Cela permet à l'utilisateur de naviguer facilement pour voir le contenu original sur Moodle. Assurez-vous que le jeton d'accès est associé aux autorisations appropriées du côté Moodle.
Vous pouvez également utiliser une base de données vectorielles qdrant, l'exécuter localement dans un conteneur ou en utilisant le service hébergé. Vous pouvez spécifier l'application qui utilisera votre collection qdrant en modifiant .env comme suit :
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 vous importez votre matériel de cours depuis Moodle en utilisant moodle.py
, ajoutez également les lignes ci-dessus à votre .moodle
. Vous pouvez envisager d'exécuter périodiquement le script d'importation Moodle pour maintenir la base de connaissances du chatbot à jour. Encore une fois, veuillez faire attention aux autorisations du côté de Moodle .
Certaines nouvelles fonctionnalités de l'application ne sont pas encore correctement documentées. Les fonctionnalités préexistantes ne sont pas affectées. Ceux-ci incluent :
Le projet est actuellement dans un état de démonstration fonctionnel, avec de nombreuses possibilités d'amélioration. Quelques pistes de développement possibles :
Enrico Glerean a fourni de précieux conseils sur de nombreux aspects du projet. Thomas Pfau a contribué au code et fourni de nombreuses informations techniques cruciales tout au long du processus.