qdrant-flask / gpt.py
aymanemalih's picture
Update gpt.py
b780e75
raw
history blame
7.52 kB
# import openai
# import json
# openai.api_key = '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'
# model = "gpt-3.5-turbo"
# def get_keywords(question):
# prompt = f"""je souhaite trouver la réponse à la question suivante à partir d'un fichier PDF en français. Veuillez me fournir 10 mots-clés et synonymes que je peux utiliser pour trouver les informations du PDF. Un seul mot par mot-clé. Utilisez uniquement des lettres minuscules.
# {question}"""
# response = openai.chat.completions.create(
# model=model,
# messages=[
# {
# "role": "system",
# "content": "Vous fournirez toujours des mots-clés incluant les synonymes 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()
# print(arguments)
# return " ".join(arguments).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.chat.completions.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": ""}
import openai
import json
model = "gpt-3.5-turbo"
openai.api_key = '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'
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.chat.completions.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.chat.completions.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"],
}
],
function_call={"name": "give_response", "arguments": ["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": ""}