From 4f99763b3e9835fb9911b252503a973cf598cf16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Guillaume?= <62661249+leoguillaume@users.noreply.github.com> Date: Mon, 9 Dec 2024 13:54:48 +0100 Subject: [PATCH] feat: update rag notebook (#105) Co-authored-by: leoguillaume --- .../retrieval_augmented_generation.ipynb | 138 ++++++++++++++++-- 1 file changed, 123 insertions(+), 15 deletions(-) diff --git a/docs/tutorials/retrieval_augmented_generation.ipynb b/docs/tutorials/retrieval_augmented_generation.ipynb index 333cda4..b831189 100644 --- a/docs/tutorials/retrieval_augmented_generation.ipynb +++ b/docs/tutorials/retrieval_augmented_generation.ipynb @@ -81,7 +81,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 17, "id": "e80daa99-3416-4b81-a8aa-4fb7427bbe6c", "metadata": { "colab": { @@ -114,7 +114,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "id": "Q_5YNzmR_JcK", "metadata": { "colab": { @@ -147,7 +147,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 14, "id": "a0f0adf2", "metadata": {}, "outputs": [ @@ -155,7 +155,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Collection ID: 6c6dd988-bd3d-4449-bfdd-106cda5d22ad\n" + "Collection ID: 39a36180-aab5-4a5a-8e07-4da01a8b8193\n" ] } ], @@ -180,7 +180,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 18, "id": "6852fc7a-0b09-451b-bbc2-939fa96a4d28", "metadata": { "colab": { @@ -189,15 +189,7 @@ "id": "6852fc7a-0b09-451b-bbc2-939fa96a4d28", "outputId": "8555033d-d20f-4b0b-8bfa-7fa5c83a299b" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], + "outputs": [], "source": [ "files = {\"file\": (os.path.basename(file_path), open(file_path, \"rb\"), \"application/pdf\")}\n", "data = {\"request\": '{\"collection\": \"%s\"}' % collection_id}\n", @@ -267,6 +259,16 @@ "La méthode lexicale est la plus simple. Elle ne fait pas de recherche vectorielle mais se base uniquement sur la similarité lexicale entre la question et le contenu des documents à l'aide de l'algorithme [BM25](https://en.wikipedia.org/wiki/Okapi_BM25).\n" ] }, + { + "cell_type": "code", + "execution_count": 8, + "id": "2668210f", + "metadata": {}, + "outputs": [], + "source": [ + "prompt = \"Qui est Ulrich Tan ?\"" + ] + }, { "cell_type": "code", "execution_count": 14, @@ -282,7 +284,6 @@ } ], "source": [ - "prompt = \"Qui est Ulrich Tan ?\"\n", "data = {\"collections\": [collection_id], \"k\": 6, \"prompt\": prompt, \"method\": \"lexical\"}\n", "response = session.post(url=f\"{base_url}/search\", json=data, headers={\"Authorization\": f\"Bearer {api_key}\"})\n", "\n", @@ -460,6 +461,113 @@ "for source in sources:\n", " print(source)" ] + }, + { + "cell_type": "markdown", + "id": "2f00610e", + "metadata": {}, + "source": [ + "## Recherche par `/chat/completions`\n", + "\n", + "Il est possible de faire une recherche RAG avec l'endpoint `/chat/completions`. Pour ce faire, il faut spécifier le paramètre `search=True` et `search_args` avec les arguments de la recherche que vous souhaitez faire (idem que pour l'endpoint `/search`)." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "e2e1368a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "- Réponse du model: Selon les documents, Ulrich Tan est le chef du pôle Datamin du département \"Eatalab\".\n", + "\n", + "- Sources utilisées pour la génération:\n", + "\n", + "– M. Gilles Corbi, agent contractuel, chef du pôle Production du département « ISO » ; \n", + "– M. Yann Brûlé, grade, chef du pôle « SI RIE » du département « ISO » ; \n", + "– M. Ulrich Tan, chef du pôle Datamin du département « Etalab » ; \n", + "– Mme Marie-Christie Ritz, cheffe du pôle « RH et attractivité » ; \n", + "– Mme Fadila Leturcq, cheffe du pôle « Campus du numérique ». \n", + "\n", + "\f21 juin 2023 \n", + "\n", + "JOURNAL OFFICIEL DE LA RÉPUBLIQUE FRANÇAISE \n", + "\n", + "Texte 5 sur 95\n", + "– Mme Elsa Le Duigou, agent contractuel ; \n", + "– M. Valentin Brel, agent contractuel ; \n", + "– Mme Margot Sanchez, agent contractuel ; \n", + "– M. Paul Burgun, agent contractuel ; \n", + "– Mme Emma Ghariani, agent contractuel. \n", + "Art. 5. – Délégation est donnée à Mme Géraldine Taurand, attachée d’administration hors classe, cheffe de la \n", + "mission « Budget et achats », pour signer tous actes de gestion et procéder aux validations électronique dans l’outil\n", + "– M. Perica Sucevic, agent contractuel, préfigurateur de la mission « Droit et international » ; \n", + "– Mme Floriane Beaudron, agente contractuelle, cheffe de la mission « Communication ». \n", + "Art. 3. – Délégation est donnée à l’effet de signer au nom du ministre de la transformation et de la fonction \n", + "publiques ainsi qu’au nom de la Première ministre, tous actes relevant des attributions de leurs pôles, et notamment\n", + "– M. Ishan Bhojwani, agent contractuel, chef du département « Incubateur de services numériques » (ISN) ; \n", + "– Mme Marielle Chrisment, lieutenante-colonelle de gendarmerie, cheffe du département « Etalab » ; \n", + "– M. Guy Duplaquet, ingénieur général des mines, chef du département « Infrastructures et services opérés » \n", + "\n", + "(ISO) ; \n", + "\n", + "– M. Florian Delezenne, agent contractuel, chef du département « Opérateur de produits interministériels » \n", + "\n", + "(OPI).\n", + "– M. Louis di Benedetto, inspecteur en chef de la santé publique vétérinaire, chef du pôle « Pilotage de la \n", + "\n", + "qualité et des partenariats » du département « ISO » ; \n", + "\n", + "– M. Philippe Levillain, agent contractuel, chef du pôle « Réseau interministériel de l’Etat / SOI » du \n", + "\n", + "département « ISO » ;\n", + "– Mme Virginie Rozière, ingénieure en chef de l’armement, cheffe du pole « Expertise, contrôle et maitrise des \n", + "\n", + "risques » du département « ACE » ; \n", + "\n", + "– Mme Marine Boudeau, agente contractuelle, préfiguratrice du pôle « Brigade d’intervention numérique », du \n", + "\n", + "département « ACE » ; \n", + "\n", + "– M. Mohsen Souissi, agent contractuel, préfigurateur du pôle « Référentiels, capitalisation et observatoires » du \n", + "\n", + "département « ACE » ;\n" + ] + } + ], + "source": [ + "response = session.post(\n", + " url=f\"{base_url}/chat/completions\",\n", + " json={\n", + " \"messages\": [{\"role\": \"user\", \"content\": prompt}],\n", + " \"model\": language_model,\n", + " \"stream\": False,\n", + " \"n\": 1,\n", + " \"search\": True,\n", + " \"search_args\": {\"collections\": [collection_id], \"k\": 6, \"method\": \"semantic\"}\n", + " }\n", + ")\n", + "response = response.json()\n", + "\n", + "sources = [result[\"chunk\"][\"content\"] for result in response['search_results']]\n", + "\n", + "print(f\"\"\"- Réponse du model: {response['choices'][0]['message']['content']}\n", + "\n", + "- Sources utilisées pour la génération:\n", + "\n", + "{'\\n'.join(sources)}\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "545a2396", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": {