From 0bdc485aeb98f2d6255929a9b225620dc3f4cd89 Mon Sep 17 00:00:00 2001 From: PREBOT Date: Mon, 9 Dec 2024 19:26:48 +0100 Subject: [PATCH] =?UTF-8?q?Ce=20notebook=20permet=20de=20d=C3=A9clencher?= =?UTF-8?q?=20la=20"pipeline=5Frag"=20pour=20une=20question=20et=20obtenir?= =?UTF-8?q?=20la=20r=C3=A9ponse.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 3 paramètres existent pour l'instant : le "top_K" de chunks récupérées en sortie de chaque queries, le choix du prompt (mistral/albert/chatgpt), et la version des instructions. Pour cela le notebook importe 'instructions_LLM' (qui historise les versions de prompt) et framework_test_functions Pour la suite, il faut : - rajouter des paramètres de tests. En priorité, la possibilité d'ingérer le texte complet à la place du chunk dans le prompt. - obtenir des scores de performance approximant la précision / le recall sur la base de 20 questions annotées --- framework_pipeline_test.ipynb | 313 ++++++++++++++++++++++++++++++++++ 1 file changed, 313 insertions(+) create mode 100644 framework_pipeline_test.ipynb diff --git a/framework_pipeline_test.ipynb b/framework_pipeline_test.ipynb new file mode 100644 index 0000000..e99a184 --- /dev/null +++ b/framework_pipeline_test.ipynb @@ -0,0 +1,313 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "collapsed_sections": [ + "BxaanZoIKZRg" + ], + "authorship_tag": "ABX9TyMJmSyyFNro750WquvdIFaJ", + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "source": [ + "# Chargement des fonctions depuis google drive" + ], + "metadata": { + "id": "BxaanZoIKZRg" + } + }, + { + "cell_type": "code", + "source": [ + "# Monter google drive dans Google colab\n", + "from google.colab import drive\n", + "drive.mount('/content/drive')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "fuGabxc7KDBt", + "outputId": "5d3f2017-26db-4aa1-ce67-25a948d36616" + }, + "execution_count": 1, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "import os\n", + "os.chdir('/content/drive/My Drive/srdt_analysis')\n", + "import sys\n", + "sys.path.append('/content/drive/MyDrive/srdt_analysis')\n", + "from instructions_LLM import instructions\n", + "from framework_test_functions import call_LLM, albert_search, pipeline_test_RAG" + ], + "metadata": { + "id": "USFAYP81KVcZ" + }, + "execution_count": 2, + "outputs": [] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "nCoxypg5d-Gm" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "# Chargement des fonctions depuis github" + ], + "metadata": { + "id": "DpXTStITKV4I" + } + }, + { + "cell_type": "code", + "source": [ + "!wget https://raw.githubusercontent.com/SocialGouv/srdt/refs/heads/framework_pipeline_test/srdt_analysis/framework_test_functions.py\n", + "!wget https://raw.githubusercontent.com/SocialGouv/srdt/refs/heads/framework_pipeline_test/srdt_analysis/instructions_LLM.py\n", + "!wget https://raw.githubusercontent.com/SocialGouv/srdt/refs/heads/framework_pipeline_test/srdt_analysis/API_KEYS.py\n", + "\n", + "#remarque : si la PR change de branche, il faut aussi changer les URLs (ici elles sont dans la branche \"framework_pipeline_test\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "tzhshsV5F0n5", + "outputId": "6c1d674b-d647-4cf8-d811-0929547ae006" + }, + "execution_count": 32, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "--2024-12-09 18:15:12-- https://raw.githubusercontent.com/SocialGouv/srdt/refs/heads/remi/srdt_analysis/framework_test_functions.py\n", + "Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...\n", + "Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected.\n", + "HTTP request sent, awaiting response... 404 Not Found\n", + "2024-12-09 18:15:12 ERROR 404: Not Found.\n", + "\n", + "--2024-12-09 18:15:12-- https://raw.githubusercontent.com/SocialGouv/srdt/refs/heads/remi/srdt_analysis/instructions_LLM.py\n", + "Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.111.133, 185.199.109.133, 185.199.110.133, ...\n", + "Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.111.133|:443... connected.\n", + "HTTP request sent, awaiting response... 404 Not Found\n", + "2024-12-09 18:15:12 ERROR 404: Not Found.\n", + "\n", + "--2024-12-09 18:15:13-- https://raw.githubusercontent.com/SocialGouv/srdt/refs/heads/remi/srdt_analysis/API_KEYS.py\n", + "Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.111.133, 185.199.110.133, ...\n", + "Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected.\n", + "HTTP request sent, awaiting response... 404 Not Found\n", + "2024-12-09 18:15:13 ERROR 404: Not Found.\n", + "\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from instructions_LLM import instructions\n", + "from framework_test_functions import call_LLM, albert_search, pipeline_test_RAG" + ], + "metadata": { + "id": "QVRtkuYZGmuG" + }, + "execution_count": 39, + "outputs": [] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "M2b1lCP6NnON" + }, + "execution_count": 8, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "# Réglage des paramètres de test" + ], + "metadata": { + "id": "WFF7Xp2lLILA" + } + }, + { + "cell_type": "code", + "source": [ + "version_instructions = instructions['v2'] #v2 : prompt séparé en reformulation et traitement de la réponse\n", + "LLM = {\n", + " 'llm_model_family' : 'mistral', #albert #mistral #chatgpt\n", + " 'llm_model_version' : 'mistral-large-2407' #gpt-3.5-turbo #mistral-large-2407 #meta-llama/Meta-Llama-3.1-70B-Instruct\n", + " } #choix du modèl de LLM (la reformulation, et la réponse)\n", + "\n", + "top_K = 2 #nombre de chunks en sortie de chaque query\n", + "\n", + "question_utilisateur = \"\"\" un salarié a droit à combien de semains de congés par an ? merci\"\"\"\n", + "# pour trouver des questions types : https://docs.google.com/spreadsheets/d/1bvss8wGC6UiaCyp4dvyBDt7mgdk-nyecf6epIdvfGm4/edit?gid=1360931749#gid=1360931749\n" + ], + "metadata": { + "id": "z-KKpumpLL1O" + }, + "execution_count": 27, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "# Lancement d'un test pour une question" + ], + "metadata": { + "id": "UzkSub9FMB46" + } + }, + { + "cell_type": "code", + "source": [ + "reponse_assistant = pipeline_test_RAG(version_instructions, LLM, question_utilisateur, top_K)" + ], + "metadata": { + "id": "f3XivpCAMGI5" + }, + "execution_count": 28, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "reponse_assistant['reponse_assistant'] # la réponse de l'assistant" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 214 + }, + "id": "Wb3MOBK6XcWz", + "outputId": "f65c5d84-91e2-429e-e2e4-4883d008a2d7" + }, + "execution_count": 29, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "\"### Reformulation de la demande\\n\\n**Contexte :**\\nVous êtes un salarié en France et vous souhaitez connaître le nombre de semaines de congés payés auxquelles vous avez droit par an. Vous vous interrogez également sur les conditions spécifiques pour bénéficier de ces congés.\\n\\n**Points juridiques à traiter :**\\n1. Combien de semaines de congés payés un salarié a-t-il droit par an en France ?\\n2. Y a-t-il des conditions spécifiques à remplir pour bénéficier de ces congés ?\\n\\n### Réponse\\n\\n#### 1. Combien de semaines de congés payés un salarié a-t-il droit par an en France ?\\n\\n**Principe général de droit :**\\nEn France, tout salarié a droit à des congés payés. La durée légale des congés payés est de 2,5 jours ouvrables par mois de travail effectif.\\n\\n**Détail :**\\nPour une année complète de travail, cela équivaut à 30 jours ouvrables de congés payés, soit environ 5 semaines.\\n\\n**Source :**\\nTitre du document : Salariés détachés : vos droits\\nConformément au droit français, tout salarié détaché bénéficie d'un droit à congés payés, soit 2,5 jours par mois effectif de travail. Pour une période d'activité inférieure à un mois, le droit à congé est proratisé selon la règle suivante : nombre de jours travaillés / 26 jours par mois (travail sur 6 jours dans la semaine, soit 52 semaines / 12 mois * 6 jours = 26 jours).\\n\\n#### 2. Y a-t-il des conditions spécifiques à remplir pour bénéficier de ces congés ?\\n\\n**Principe général de droit :**\\nLes congés payés sont un droit pour tous les salariés, mais il existe certaines conditions spécifiques à remplir pour en bénéficier.\\n\\n**Détail :**\\nLes congés payés sont acquis proportionnellement au temps de travail effectif. Si vous travaillez moins d'un mois complet, le nombre de jours de congés payés est proratisé.\\n\\n**Source :**\\nTitre du document : Salariés détachés : vos droits\\nConformément au droit français, tout salarié détaché bénéficie d'un droit à congés payés, soit 2,5 jours par mois effectif de travail. Pour une période d'activité inférieure à un mois, le droit à congé est proratisé selon la règle suivante : nombre de jours travaillés / 26 jours par mois (travail sur 6 jours dans la semaine, soit 52 semaines / 12 mois * 6 jours = 26 jours).\\n\\n### Conclusion\\n\\nEn France, un salarié a droit à 5 semaines de congés payés par an, soit 30 jours ouvrables. Ces congés sont acquis proportionnellement au temps de travail effectif. Pour bénéficier de ces congés, il est important de connaître les conditions spécifiques liées à la durée de travail effectif.\\n\\n### Prochaines étapes\\n\\nPour compléter cette réponse, avez-vous des questions supplémentaires concernant les modalités de prise de congés ou les éventuelles conditions spécifiques à votre situation (par exemple, si vous travaillez à temps partiel ou si vous avez des périodes d'absence) ?\"" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + } + }, + "metadata": {}, + "execution_count": 29 + } + ] + }, + { + "cell_type": "code", + "source": [ + "reponse_assistant['urls'] # la sources sélectionnées en sortie du RAG" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "khL6PFQdaDl6", + "outputId": "951185e0-f9fa-4d1c-ea94-135bf95a6f38" + }, + "execution_count": 30, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "['https://code.travail.gouv.fr/fiche-ministere-travail/salaries-detaches-vos-droits',\n", + " 'https://code.travail.gouv.fr/fiche-service-public/labsence-du-salarie-est-elle-prise-en-compte-pour-le-calcul-de-ses-conges',\n", + " 'https://code.travail.gouv.fr/fiche-service-public/conge-de-formation-economique-sociale-environnementale-et-syndicale-cfeses',\n", + " 'https://code.travail.gouv.fr/fiche-service-public/conge-de-proche-aidant']" + ] + }, + "metadata": {}, + "execution_count": 30 + } + ] + }, + { + "cell_type": "code", + "source": [ + "reponse_assistant['question_reformulee'] # la question reformulée" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 89 + }, + "id": "9xNloWibaIwd", + "outputId": "73bab9db-404b-48e3-e7f3-35f70ea7c03d" + }, + "execution_count": 31, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "\"Bonjour,\\n\\nJe suis salarié et je souhaite savoir combien de semaines de congés payés j'ai droit par an.\\n\\nMes questions sont :\\n- Combien de semaines de congés payés un salarié a-t-il droit par an en France ?\\n- Y a-t-il des conditions spécifiques à remplir pour bénéficier de ces congés ?\\n\\nMerci.\"" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + } + }, + "metadata": {}, + "execution_count": 31 + } + ] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "ov35es4wkvjA" + }, + "execution_count": null, + "outputs": [] + } + ] +} \ No newline at end of file