o código:
from openai import OpenAI
from dotenv import load_dotenv
import os
import json
load_dotenv()
client = OpenAI(
base_url=os.getenv("BASE_URL"),
api_key=os.getenv("API_KEY"),
timeout=300
)
modelo = os.getenv("MODEL_ALTERNATIVO")
def carregar(nome_arquivo):
try:
with open(nome_arquivo, "r", encoding="utf-8") as arquivo:
dados = json.load(arquivo)
return dados["transacoes"]
except FileNotFoundError:
raise Exception(f"Arquivo '{nome_arquivo}' não encontrado.")
except json.JSONDecodeError as e:
raise Exception(f"JSON inválido: {e}")
def salvar(data, arquivo_json):
try:
with open(arquivo_json, "w", encoding="utf-8") as arquivo:
json.dump(
data,
arquivo,
indent=4,
ensure_ascii=False
)
except Exception as e:
raise Exception(f"Erro ao salvar o arquivo {arquivo_json}: {e}")
def analisar_transacao(lista_transacoes):
print("1. Executando a análise das transações")
prompt_sistema = """
Você é um analista de fraude.
Analise a transação abaixo.
Retorne apenas:
{
"id":"",
"status":"Aprovado" ou "Possível Fraude"
}
"""
lista_mensagens = [
{
"role": "system",
"content": prompt_sistema
},
{
"role": "user",
"content": json.dumps(
lista_transacoes,
ensure_ascii=False,
indent=2
)
}
]
resposta = client.chat.completions.create(
messages=lista_mensagens,
model=modelo,
temperature=0
)
conteudo = (
resposta.choices[0]
.message.content
.replace("```json", "")
.replace("```", "")
.strip()
)
print("\nConteúdo:")
print(conteudo)
json_resultado = json.loads(conteudo)
print("\nJSON carregado com sucesso!")
return json_resultado
def gerar_parecer(transacao):
print("2. Gerando parecer")
prompt = f"""
Para a seguinte transação:
{json.dumps(transacao, ensure_ascii=False, indent=2)}
Caso o status seja "Possível Fraude",
gere um parecer técnico justificando.
Caso contrário escreva:
Não Aplicável
"""
resposta = client.chat.completions.create(
model=modelo,
messages=[
{
"role": "user",
"content": prompt
}
]
)
print("Finalizou a geração do parecer")
return resposta.choices[0].message.content
def gerar_recomendacao(parecer):
print("3. Gerando recomendação")
prompt = f"""
Considere o seguinte parecer:
{parecer}
Forneça uma recomendação técnica.
Escolha entre:
- Notificar Cliente
- Acionar setor Anti-Fraude
- Realizar Verificação Manual
Inclua também uma classificação do tipo de fraude.
"""
resposta = client.chat.completions.create(
model=modelo,
messages=[
{
"role": "user",
"content": prompt
}
]
)
print("Finalizou a geração da recomendação")
return resposta.choices[0].message.content
# ==========================
# Programa Principal
# ==========================
lista_de_transacoes = carregar("transacoes.json")
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)
print("\nParecer:")
print(um_parecer)
recomendacao = gerar_recomendacao(um_parecer)
id_transacao = uma_transacao["id"]
produto_transacao = (
uma_transacao["nome_produto"]
.replace(" ", "_")
.replace("/", "_")
)
status_transacao = (
uma_transacao["status"]
.replace(" ", "_")
)
salvar(
{
"transacao": uma_transacao,
"parecer": um_parecer,
"recomendacao": recomendacao
},
f"transacao-{id_transacao}-{produto_transacao}-{status_transacao}.json"
)
print("\nProcessamento finalizado!")
O resultado no log ficou assim:
Resposta no coment