betagouv / VApp

Automatiser l'identification d’aides potentiellement applicables pour un projet de collectivité
https://beta.gouv.fr/startups/vapp.html
Other
1 stars 1 forks source link

AAD : Prototypé sur le RAG #87

Open Acrend opened 6 days ago

Acrend commented 6 days ago

Premier jet de RAG réalisé. C’est très intéressant, car cela ne nous oblige pas à revoir fondamentalement l’usage d’Ollama.

Bien que le RAG ait de grosses limites (il peut recommander des aides non pertinentes ou en exclure certaines qui le seraient), il permet de se concentrer logiquement sur un nombre limité d’aides présentant un contexte proche. Cela aboutit à un système de recherche plus rapide et ciblé.

Actuellement, le RAG fonctionne ainsi :

Utiliser la description du projet de l'utilisateur comme prompt et en générer les embeddings.

def generate_ollama_embeddings(
        prompt: str,
        ollama_api_url: str,
        model: str = "nomic-embed-text",
        bearer_token: str = None
    ):

    ollama_api_endpoint = f"{ollama_api_url}/api/embeddings/"

    # Ensure options is a dictionary (default empty dictionary if None)

    headers = {'Content-Type': 'application/json'}

    # Handle the bearer token with special character encoding
    if bearer_token:
        utf8_bytes = f'Bearer {bearer_token}'.encode('utf-8')
        auth_header_value = utf8_bytes.decode('latin1')
        headers['Authorization'] = auth_header_value

    data = {
        "model": model,
        "prompt": prompt,
    }

    try:
        response = requests.post(ollama_api_endpoint, data=json.dumps(data), headers=headers)
        # print(f"Status Code: {response.status_code}")
        # print(f"Response Text: {response.text}")
        return response.json() if response.status_code == 200 else None
    except Exception as error:
        print('-----------------------------------------')
        print('Something went wrong when calling Ollama')
        print(error)
        return None

Comparer les embeddings du projet utilisateur à ceux de l’ensemble des aides à l’aide de la cosine similarity.

def cosine_similarity_multi(user_prompt_emb:list, aides_description_list_mb_emb:list[list]):
    dot_products = np.dot(aides_description_list_mb_emb, user_prompt_emb)
    norm_user_prompt_emb = np.linalg.norm(user_prompt_emb)
    norms_list_mb_emb = np.linalg.norm(aides_description_list_mb_emb, axis=1)

    return dot_products / (norm_user_prompt_emb * norms_list_mb_emb)

Retenir les N aides ayant la meilleure cosine similarity.

Effectuer un scoring sur ces aides sélectionnées.

Acrend commented 6 days ago

@lutangar

Acrend commented 3 days ago

Exemple de limite cinglante du RAG (il s'agit des aides avec la cosine_similarity la plus élevée) :

Aide name :  Bénéficier d'une assistance à la recherche de subventions et au montage des dossiers
-----
Project description : Entretient d'un vieux moulin
-----
https://aides-territoires.beta.gouv.fr/aides/eb50-beneficier-dune-assistance-a-la-recherche-de-/
-------------------------
Aide name :  Financer la mise en œuvre du tri à la source et du traitement des biodéchets ménagers
-----
Project description : Entretient d'un vieux moulin
-----
https://aides-territoires.beta.gouv.fr/aides/7c0e-financer-la-mise-en-uvre-du-tri-a-la-source-e/
-------------------------
Aide name :  Dynamiser le renouvellement des peupleraies régionales - financement de la charte "merci le peuplier"
-----
Project description : Entretient d'un vieux moulin
-----
https://aides-territoires.beta.gouv.fr/aides/bc3c-abondement-a-la-charte-merci-le-peuplier-redy/
-------------------------
Aide name :  Mettre en place d’une chaufferie biomasse
-----
Project description : Entretient d'un vieux moulin
-----
https://aides-territoires.beta.gouv.fr/aides/assistance-a-maitrise-douvrage-pour-la-mise-en-place-dune-chaufferie-biomasse/
-------------------------
Aide name :  Aider à l'acquisition de véhicules pour le portage de repas au domicile des personnes âgées
-----
Project description : Entretient d'un vieux moulin
-----
https://aides-territoires.beta.gouv.fr/aides/3039-acquisition-de-vehicules-pour-le-portage-de-r/
-------------------------
Aide name :  Favoriser l'installation de jeunes agriculteurs
-----
Project description : Entretient d'un vieux moulin
-----
https://aides-territoires.beta.gouv.fr/aides/09d9-aide-a-linstallation-jeunes-agriculteurs/
-------------------------
Aide name :  Soutenir les manifestations valorisant la filière forêt-bois
-----
Project description : Entretient d'un vieux moulin
-----
https://aides-territoires.beta.gouv.fr/aides/64a1-soutien-aux-manifestations-valorisant-la-fili/