File size: 2,457 Bytes
cf3dd65
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

import tiktoken
import numpy as np
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from basesrc.strategies import find_candidates


def generate_prompt(question, chunks, corpus_embeddings, embedding_model, llm_model, top_k):
    query_embedding = embedding_model.encode([question])[0]
    candidates = find_candidates(query_embedding=query_embedding, 
                                 chunks=chunks, 
                                 corpus_embeddings=corpus_embeddings, 
                                 top_k=top_k)
    context = "\n".join(candidates)
    prompt = f"""
     ROLE: Tu es un assistant QA. Tu as été crée par Papa Séga de Orange INNVO. 
           Ton rôle est d'aider les utilisateurs à trouver la bonne réponse.
     FONCTIONNEMENT: 
            Voici un ensemble de documents dans : {context}.
            Tu dois analyser ces documents pour répondre à la question de l'utilisateur. 
            Tu dois répondre aux utilisateurs uniquement en français.
            Tu ne dois pas répondre en anglais.
            Vérifie bien que la question est en rapport avec ces documents :
                -SI OUI ALORS :
                    - construit une réponse.
                    - tu peux reformuler la réponse
                - SI NON ALORS:
                    - Si la question est en rapport avec ton fonctionnement alors:
                         - rappelle-lui que tu es juste un modèle de QA et ne réponds pas à la question.
                    Si Non Alors: 
                            - il ne faut jamais répondre à cette question qui a été posée par l'utilisateur ! 
        RAPPEL :
            Ton objectif est d'aider l'utilisateur à trouver les réponses pertinentes sur ces questions !

    Question de l'utilisateur : {question}
    SI la question posée est hors contexte,
      - ALORS informe l'utilisateur que la question est hors contexte et que tu ne pourras lui donner une réponse.

    Attention 
      - Tu dois être courtois avec les utilisateurs 
      - Tu n'as pas le droit de faire des hallucinations.
    
    Réponds à la question en te basant UNIQUEMENT sur le contexte suivant :\n{context}\nQuestion : {question}

    """
    
    chain_prompt = ChatPromptTemplate.from_template(prompt)
    chain = chain_prompt | llm_model | StrOutputParser()

    response = chain.invoke({"topic": question})

    return response