Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AAD : Prototypé sur le RAG #87

Open
Acrend opened this issue Nov 20, 2024 · 3 comments
Open

AAD : Prototypé sur le RAG #87

Acrend opened this issue Nov 20, 2024 · 3 comments
Assignees

Comments

@Acrend
Copy link
Collaborator

Acrend commented Nov 20, 2024

No description provided.

@Acrend
Copy link
Collaborator Author

Acrend commented Nov 20, 2024

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
Copy link
Collaborator Author

Acrend commented Nov 20, 2024

@lutangar

@Acrend
Copy link
Collaborator Author

Acrend commented Nov 22, 2024

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/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants