Introdução
Nos últimos anos, a automação na análise de dados financeiros tem ganhado força com o uso de agentes inteligentes que interagem diretamente com bancos de dados. Neste post, vamos mostrar como criar um agente SQL usando a biblioteca LangGraph, baseada no framework LangChain, para consultar dados financeiros de empresas brasileiras disponibilizados pela Comissão de Valores Mobiliários (CVM).
Esse agente permitirá que usuários façam perguntas em linguagem natural, que serão automaticamente convertidas em consultas SQL, facilitando a extração de insights sem necessidade de conhecimento avançado em bancos de dados.
Para obter o código e o tutorial deste exercício faça parte do Clube AM e receba toda semana os códigos em R/Python, vídeos, tutoriais e suporte completo para dúvidas.
Objetivo
O principal objetivo deste exercício é:
-
Demonstrar o processo completo para criar um agente inteligente que consulta uma base de dados SQLite com dados financeiros da CVM.
-
Realizar o processo de ETL (Extração, Transformação e Carga) para baixar, tratar e consolidar os dados da CVM.
-
Construir o agente SQL utilizando LangGraph, que interpreta perguntas e gera queries SQL corretas.
-
Apresentar como executar o agente e obter respostas para perguntas sobre desempenho financeiro das empresas.
Mas o que é LangGraph?
LangGraph é uma ferramenta que facilita a criação de agentes conversacionais baseados em grafos de estados, integrados com modelos de linguagem (LLMs) e ferramentas externas, como bases de dados SQL.
Com LangGraph, é possível:
-
Definir fluxos de diálogo complexos, incluindo chamadas automáticas a ferramentas.
-
Executar verificações e validações em queries SQL geradas.
-
Integrar modelos LLM para interpretar linguagem natural e gerar comandos precisos.
No nosso caso, LangGraph é usado para construir um agente que, ao receber perguntas, gera e executa consultas SQL no banco de dados da CVM.
ETL: Extraindo e Tratando Dados Financeiros da CVM
Antes de criar o agente, precisamos preparar os dados. Vamos utilizar dados das Demonstrações Financeiras Padronizadas (DFP) . É, basicamente, um documento eletrônico, de encaminhamento periódico, feito por Cias Abertas a CVM, que contém dados estruturados sobre suas demonstrações contábeis.
-
Baixa os arquivos ZIP anuais da CVM com dados financeiros (2019-2020 neste exemplo).
-
Extrai os arquivos CSV contidos nos ZIPs.
-
Lê os arquivos CSV relacionados a diferentes demonstrativos financeiros (BPA, BPP, DRE).
-
Empilha todos os dados em um único DataFrame.
-
Realiza tratamento dos dados:
-
Conversão de tipos (valores numéricos, datas).
-
Remoção de linhas e colunas irrelevantes.
-
Remoção de duplicatas.
-
-
Salva os dados tratados em um banco SQLite para consulta.
Assim, temos todo o processo de ETL contido nesta única função.
Como Criar o Agente SQL com LangGraph
A criação do agente envolve os seguintes passos principais:
-
Configuração do banco SQLite
Importar a base com os dados tratados da CVM usandoSQLDatabase
da LangChain, definindo a URI para o arquivo.db
. -
Inicializar o Toolkit SQL
Criar umSQLDatabaseToolkit
que combina o banco com o modelo LLM, permitindo que o agente entenda e execute comandos SQL. -
Definir nós e funções do grafo de estados
UsarToolNode
para associar ferramentas como listagem de tabelas, schema, execução de queries e validação de SQL. -
Criar prompts customizados em português para o agente
-
Prompt para gerar consultas SQL sintaticamente corretas e relevantes.
-
Prompt para verificar e corrigir erros comuns em queries SQL antes da execução.
-
-
Construir o grafo de estados com transições
Definir o fluxo do agente: listar tabelas → obter schema → gerar query → validar query → executar query → repetir. -
Compilar o agente LangGraph
Gerar um agente que executa esse fluxo automaticamente, permitindo interação por meio de perguntas em linguagem natural.
A imagem a seguir representa o grafo produzido pelo LangGraph, conforme todos os agentes produzidos pelo exercício:
Resultado
Ao rodar o agente, podemos fazer perguntas como:
-
"Quais empresas tiveram lucro positivo em 2019?"
-
"Liste os principais demonstrativos financeiros disponíveis."
-
"Qual foi o valor da receita líquida da empresa X no último trimestre?"
O agente processa a pergunta, gera a query SQL correta, executa no banco e retorna a resposta estruturada. Além disso, o agente realiza uma verificação automática para evitar erros comuns em SQL, garantindo a integridade das consultas.
O processo de streaming possibilita acompanhar o passo a passo da interação, mostrando a evolução da consulta e resultado.
No resultado abaixo realizamos a seguinte pergunta para o Agente SQL: "Quais empresas tiveram lucro positivo em 2019?" Podemos verificar que o Agente conseguiu consultar corretamente a requisição, construindo um código SQL adequado para a tarefa.
================================ Human Message =================================
Quais empresas tiveram lucro positivo em 2019? ================================== Ai Message ==================================
Available tables: bpa, bpp, dre
================================== Ai Message ==================================
Tool Calls:
sql_db_schema (192aaa8e-722b-4d6d-90dd-32a66f34785f)
Call ID: 192aaa8e-722b-4d6d-90dd-32a66f34785f
Args:
table_names: dre
================================= Tool Message =================================
Name: sql_db_schema
CREATE TABLE dre (
"CNPJ_CIA" TEXT,
"DT_REFER" TIMESTAMP,
"DENOM_CIA" TEXT,
"CD_CVM" INTEGER,
"GRUPO_DFP" TEXT,
"MOEDA" TEXT,
"ESCALA_MOEDA" TEXT,
"CD_CONTA" TEXT,
"DS_CONTA" TEXT,
"VL_CONTA" REAL,
demonstrativo TEXT
)
/*
3 rows from dre table:
CNPJ_CIA DT_REFER DENOM_CIA CD_CVM GRUPO_DFP MOEDA ESCALA_MOEDA CD_CONTA DS_CONTA VL_CONTA demonstrativo
00.000.000/0001-91 2019-12-31 00:00:00 BCO BRASIL S.A. 1023 DF Consolidado - Demonstração do Resultado REAL MIL 3.01 Receitas da Intermediação Financeira 123105325.0 DRE
00.000.000/0001-91 2019-12-31 00:00:00 BCO BRASIL S.A. 1023 DF Consolidado - Demonstração do Resultado REAL MIL 3.01.01 Receita de Juros 123105325.0 DRE
00.000.000/0001-91 2019-12-31 00:00:00 BCO BRASIL S.A. 1023 DF Consolidado - Demonstração do Resultado REAL MIL 3.02 Despesas da Intermediação Financeira -89253866.0 DRE
*/
================================== Ai Message ==================================
Tool Calls:
sql_db_query (13893100-9291-45b5-ae6e-5c430c52d940)
Call ID: 13893100-9291-45b5-ae6e-5c430c52d940
Args:
query: SELECT DISTINCT DENOM_CIA FROM dre WHERE DT_REFER LIKE '2019%' AND DS_CONTA = 'Lucro Líquido' AND VL_CONTA > 0 LIMIT 5
================================== Ai Message ==================================
Tool Calls:
sql_db_query (ec9b4ccd-7a42-4e68-9e29-6f44299c685a)
Call ID: ec9b4ccd-7a42-4e68-9e29-6f44299c685a
Args:
query: SELECT DISTINCT DENOM_CIA FROM dre WHERE DT_REFER LIKE '2019%' AND DS_CONTA = 'Lucro Líquido' AND VL_CONTA > 0 LIMIT 5
================================= Tool Message =================================
Name: sql_db_query
================================== Ai Message ==================================
Tool Calls:
sql_db_query (2ff079ea-da40-4e1b-ae70-343dfd2a9660)
Call ID: 2ff079ea-da40-4e1b-ae70-343dfd2a9660
Args:
query: SELECT DISTINCT DENOM_CIA FROM dre WHERE DT_REFER LIKE '2019%' AND DS_CONTA LIKE '%Lucro Líquido%' AND VL_CONTA > 0 LIMIT 5
================================== Ai Message ==================================
Tool Calls:
sql_db_query (ff9f5398-97ad-4fd3-bfc7-5388c644440d)
Call ID: ff9f5398-97ad-4fd3-bfc7-5388c644440d
Args:
query: SELECT DISTINCT DENOM_CIA FROM dre WHERE DT_REFER LIKE '2019%' AND DS_CONTA LIKE '%Lucro Líquido%' AND VL_CONTA > 0 LIMIT 5
================================= Tool Message =================================
Name: sql_db_query
================================== Ai Message ==================================
Tool Calls:
sql_db_query (7fec4b2d-8a17-44dd-9cdf-4b57db4204af)
Call ID: 7fec4b2d-8a17-44dd-9cdf-4b57db4204af
Args:
query: SELECT DISTINCT DENOM_CIA FROM dre WHERE DT_REFER LIKE '2019%' AND DS_CONTA LIKE '%Lucro%' AND VL_CONTA > 0 LIMIT 5
================================== Ai Message ==================================
Tool Calls:
sql_db_query (88c51514-cfac-40f6-80ba-a08d876e01fb)
Call ID: 88c51514-cfac-40f6-80ba-a08d876e01fb
Args:
query: SELECT DISTINCT DENOM_CIA FROM dre WHERE DT_REFER LIKE '2019%' AND DS_CONTA LIKE '%Lucro%' AND VL_CONTA > 0 LIMIT 5
================================= Tool Message =================================
Name: sql_db_query
[('BCO BRASIL S.A.',), ('BRB BANCO DE BRASILIA S.A.',), ('CENTRAIS ELET BRAS S.A. - ELETROBRAS',), ('COMPANHIA ENERGÉTICA DE BRASÍLIA - CEB',), ('ATOM EMPREENDIMENTOS E PARTICIPAÇÕES S.A.',)]
================================== Ai Message ==================================
As empresas que tiveram lucro positivo em 2019 são: BCO BRASIL S.A., BRB BANCO DE BRASILIA S.A., CENTRAIS ELET BRAS S.A. - ELETROBRAS, COMPANHIA ENERGÉTICA DE BRASÍLIA - CEB, ATOM EMPREENDIMENTOS E PARTICIPAÇÕES S.A.
Considerações Finais
Neste post, mostramos como criar um agente SQL com LangGraph, aplicando em dados reais da CVM para análise financeira. Essa abordagem traz uma poderosa combinação de:
-
Automação do processo de consulta a bancos de dados.
-
Uso de modelos de linguagem para interpretação de linguagem natural.
-
Tratamento e consolidação robusta dos dados via ETL.
-
Construção de fluxos inteligentes com LangGraph para otimizar a interação.
Essa metodologia pode ser aplicada para diversas bases financeiras, econômicas e empresariais, facilitando análises complexas para profissionais que não são especialistas em SQL.
Quer aprender mais?
Conheça nossa Formação do Zero à Análise de Dados Econômicos e Financeiros usando Python e Inteligência Artificial. Aprenda do ZERO a coletar, tratar, construir modelos e apresentar dados econômicos e financeiros com o uso de Python e IA.