-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathanalisador_transacoes.py
155 lines (123 loc) · 4.72 KB
/
analisador_transacoes.py
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
from openai import OpenAI
from dotenv import load_dotenv
import os
import json
load_dotenv()
cliente = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
modelo = "gpt-3.5-turbo"
def carrega(nome_do_arquivo):
try:
with open(nome_do_arquivo, "r") as arquivo:
dados = arquivo.read()
return dados
except IOError as e:
print(f"Erro: {e}")
def salva(nome_do_arquivo, conteudo):
try:
with open(nome_do_arquivo, "w", encoding="utf-8") as arquivo:
arquivo.write(conteudo)
except IOError as e:
print(f"Erro ao salvar arquivo: {e}")
def analisar_transacao(lista_transacoes):
print("1. Executando a ánlise de transação")
prompt_sistema = """
Analise as transações financeiras a seguir e identifique se cada uma delas é uma "Possível Fraude" ou deve ser "Aprovada".
Adicione um atributo "Status" com um dos valores: "Possível Fraude" ou "Aprovado".
Cada nova transação deve ser inserida dentro da lista do JSON.
# Possíveis indicações de fraude
- Transações com valores muito discrepantes
- Transações que ocorrem em locais muito distantes um do outro
Adote o formato de resposta abaixo para compor sua resposta.
# Formato Saída
{
"transacoes": [
{
"id": "id",
"tipo": "crédito ou débito",
"estabelecimento": "nome do estabelecimento",
"horário": "horário da transação",
"valor": "R$XX,XX",
"nome_produto": "nome do produto",
"localização": "cidade - estado (País)"
"status": ""
},
]
}
"""
lista_mensagens = [
{
"role": "system",
"content": prompt_sistema
},
{
"role": "user",
"content": f"Considere o CSV abaixo, onde cada linha é uma transação diferente: {lista_de_transacoes}. Sua resposta deve adotar o #Formato de Resposta (apenas um json sem outros comentários)"
}
]
resposta = cliente.chat.completions.create(
messages = lista_mensagens,
model=modelo,
temperature=0
)
conteudo = resposta.choices[0].message.content.replace("'", '"')
print("\Conteúdo:", conteudo)
json_resultado = json.loads(conteudo)
print("\nJSON:", json_resultado)
return json_resultado
def gerar_parecer(transacao):
print("2. Gerando um parecer para cada transação")
prompt_sistema = f"""
Para a seguinte transação, forneça um parecer, apenas se o status dela for de "Possível Fraude". Indique no parecer uma justificativa para que você identifique uma fraude.
Transação: {transacao}
## Formato de Resposta
"id": "id",
"tipo": "crédito ou débito",
"estabelecimento": "nome do estabelecimento",
"horario": "horário da transação",
"valor": "R$XX,XX",
"nome_produto": "nome do produto",
"localizacao": "cidade - estado (País)"
"status": "",
"parecer" : "Colocar Não Aplicável se o status for Aprovado"
"""
lista_mensagens = [
{
"role": "system",
"content": prompt_sistema
}
]
resposta = client.chat.completions.create(
messages = lista_mensagens,
model=modelo,
)
def gera_recomendacoes(parecer):
print("3. Gerando recomendações")
prompt_sistema = f"""
Para a seguinte transação, forneça uma recomendação apropriada baseada no status e nos detalhes da transação da Transação: {parecer}
As recomendações podem ser "Notificar Cliente", "Acionar setor Anti-Fraude" ou "Realizar Verificação Manual".
Elas devem ser escritas no formato técnico.
Inclua também uma classificação do tipo de fraude, se aplicável.
"""
lista_mensagens = [
{
"role": "system",
"content": prompt_sistema
}
]
resposta = client.chat.completions.create(
messages = lista_mensagens,
model=modelo,
)
conteudo = resposta.choices[0].message.content
print("Finalizou a geração de recomendação")
return conteudo
lista_de_transacoes = carrega("./dados/transacoes.csv")
transacoes_analisadas = analisar_transacao(lista_de_transacoes)
for uma_transacao in transacoes_analisadas["transacoes"]:
if uma_transacao["status"] == "Possível Fraude":
um_parecer = gerar_parecer(uma_transacao)
recomendacao = gerar_recomendacao(um_parecer)
id_transacao = uma_transacao["id"]
produto_transacao = uma_transacao["nome_produto"]
status_transacao = uma_transacao["status"]
salva(f"transacao-{id_transacao}-{produto_transacao}-{status_transacao}.txt", recomendacao)