File size: 3,602 Bytes
bac8f2c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import openai
import json

model = "gpt-3.5-turbo"


def get_keywords(question):
    prompt = f""" Je souhaite trouver la réponse à la question suivante dans une colonne d'un fichier csv. Veuillez me fournir 10 mots-clés et synonymes que je peux utiliser pour trouver les informations du csv. Un seul mot par mot-clé. Utilisez uniquement des lettres minuscules.
{question}"""


    response = openai.ChatCompletion.create(
        model=model,
        messages=[
            {
                "role": "system",
                "content": "Vous fournirez toujours 10 mots-clés incluant des synonymes pertinents et explicit des mots de la question d’origine. Les synonymes  doivent être des termes juridiques couramment utilisés dans les articles de loi canadienne",     },
            {
                "role": "user",
                "content": prompt,
            },
        ],
        functions=[
            {
                "name": "list_keywords",
                "description": "Utilisez cette fonction pour donner à l'utilisateur une liste de mots-clés",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "list": {
                            "type": "array",
                            "items": {"type": "string", "description": "A keyword"},
                            "description": "A list of keywords",
                        }
                    },
                },
                "required": ["list"],
            }
        ],
        function_call={"name": "list_keywords", "arguments": ["list"]},
    )

    arguments = response["choices"][0]["message"]["function_call"]["arguments"].lower()
    keywords = json.loads(arguments)["list"]

    return " ".join(keywords).split(" ")


def answer_question(chunk, question):
    prompt = f"""```
{chunk}
```

Sur la base des informations ci-dessus, quelle est la réponse à cette question?

```
{question}
```"""

    response = openai.ChatCompletion.create(
        model=model,
        messages=[
            {
                "role": "system",
                "content": "Définissez toujours answer_found sur false si la réponse à la question n'a pas été trouvée dans les informations fournies.",
            },
            {
                "role": "user",
                "content": prompt,
            },
        ],
        functions=[
            {
                "name": "give_response",
                "description": "Utilisez cette fonction pour donner la réponse et si la réponse à la question a été trouvée ou non dans le texte.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "answer_found": {
                            "type": "boolean",
                            "description": "Définissez ceci sur true uniquement si le texte fourni inclut une réponse à la question",
                        },
                        "response": {
                            "type": "string",
                            "description": "La réponse complète à la question, si l'information était pertinente",
                        },
                    },
                },
                "required": ["answer_found"],
            }
        ],
    )

    try:
        function_call = response["choices"][0]["message"]["function_call"]
        arguments = function_call["arguments"].lower()
        result = json.loads(arguments)
        return result
    except KeyError:
        return {"answer_found": False, "response": ""}