Skip to content
··5 min de leitura

MVP do Agente S&P500 lançado: respondendo perguntas financeiras baseadas em dados da SEC

Construí um agente de IA que responde perguntas financeiras usando 10 anos de dados da SEC — e finalmente resolvi meus desafios de streaming para torná-lo em tempo real e verificável.

Atualização (2026): O Agente S&P 500 foi encerrado. Este post documenta o lançamento do MVP original para fins históricos. Sydney agora foca em conteúdo de blog e nos produtos de Chandler. Experimente a Sydney atual →


Olá,

Fico feliz em compartilhar que desde meu último post sobre minha luta trabalhando no Agente S&P500, a versão MVP está pronta! :D Deixa eu te mostrar o que este produto mínimo viável pode fazer e como chegou a existir.

O que este MVP pode fazer?

  1. Mergulhar em uma Década de Dados: O banco de dados do agente inclui os últimos 10 anos de fatos de empresas enviados ao SEC EDGAR. Bem legal, não?
  2. Respostas Confiáveis: Por ser fundamentado em fatos reais enviados à SEC, você pode confiar na qualidade das respostas.
  3. Fácil de Verificar: O agente sempre inclui dados de referência em sua resposta final. Então, se você estiver com alguma dúvida, pode verificar por conta própria!
  4. Lida com Perguntas Difíceis: Ele consegue lidar com consultas semicomplexas como "Compare a receita da Apple e Microsoft entre 2020 - 2022?" ou "Como a margem operacional da Microsoft mudou de 2020 a 2022?" Por que são semicomplexas? Bem, o agente precisa "raciocinar" e dividir essas perguntas amplas em menores, consultar informações do banco de dados e então juntá-las.
    • Por exemplo, para responder à primeira pergunta, o agente precisa saber a receita individual de cada empresa para cada ano 2020, 2021 e 2022 e então fazer a comparação.
  5. Atualizado (Quase): A data de corte é agosto de 2024. Qualquer coisa enviada à SEC depois disso não está nesta versão MVP.
  6. HTML streaming: O streaming funciona! Uhuuul! :D Acontece que DRF e React suportam nativamente streaming, então com langgraph, temos um fluxo de conversa responsivo, exibido em formato fácil de ler. Lutei com streaming html por um bom tempo.

Um olhar sob o capô

Se você ainda está lendo aqui, provavelmente quer saber mais sobre como construí este MVP e superei alguns dos desafios que mencionei antes. Então, vamos ficar um pouco técnicos!

  1. Dados Reduzidos: Em vez de usar relatórios completos 10-K ou 10-Q, estou usando os "Fatos" enviados à SEC. Isso significa que nosso banco de dados é significativamente menor — menos de 2 GB! Abaixo estão alguns exemplos do que foi enviado por empresas públicas à SEC:
  "AccruedRoyaltiesCurrent": \{
    "label": "Accrued Royalties, Current"
  \},
  "AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment": \{
    "label": "Accumulated Depreciation, Depletion and Amortization, Property, Plant, and Equipment"
  \},
  "AccumulatedOtherComprehensiveIncomeLossNetOfTax": \{
    "label": "Accumulated Other Comprehensive Income (Loss), Net of Tax"
  \},
  "AccumulatedOtherComprehensiveIncomeLossOtherThanTemporaryImpairmentNotCreditLossNetOfTaxAvailableforsaleDebtSecurities": \{
    "label": "Accumulated Other Comprehensive Income (Loss), Other than Temporary Impairment, Not Credit Loss, Net of Tax, Available-for-sale, Debt Securities"
  \},
  "AdditionalPaidInCapitalCommonStock": {
    "label": "Additional Paid in Capital, Common Stock"

Isso também significa que não preciso usar um vector store de grande escala e rápido, que é muito caro (na faixa de $600 - $700/mês)

2. Cloud SQL postgreSQL como banco de dados principal: Estou usando Cloud SQL PostgreSQL como banco de dados principal. Como já estava usando Cloud Run CI/CD do GCP, fazia sentido ficar com as ofertas do Google. Esse era um conceito completamente novo para mim, então tive que aprender como fazer a migração de banco de dados do local para a nuvem e depois como configurar o backend para funcionar com o banco de dados Cloud SQL usando IP privado. A documentação do GCP tem sido útil.

3. React Encontra Django: Este é meu primeiro sucesso ao fazer o deploy tanto do frontend React quanto do backend Django Rest Framework (DRF) com um banco de dados Cloud SQL. Foi uma jornada de tentativas e erros, mas o o1-preview da ChatGPT e o Anthropic Claude 3.5 Sonnet foram uma grande ajuda. Eles são de fato muito poderosos, especialmente quando você dá contexto suficiente do problema que está resolvendo.

4. Agente Inteligente: O agente é construído usando Langgraph. Tem duas ferramentas principais: Google Search e uma ferramenta de Resposta a Perguntas Financeiras. Ele decide qual usar com base na sua pergunta.

5. Como as consultas SQL são geradas?

Não é direto converter uma pergunta genérica/ampla do usuário em consultas SQL adequadas para o banco de dados. Uma das principais razões é porque quando as empresas enviam os fatos financeiros à SEC, elas usam conceitos/terminologias financeiras que não são intuitivos para pessoas normais.

Por exemplo, "receita" pode ser representada por múltiplos fatos como:

  • Revenue
  • Revenue from Contract with Customer, Excluding Assessed Tax
  • Revenue from related Parties
  • Deferred Revenue
  • etc...

E entre as empresas, elas podem optar por usar rótulos diferentes para o mesmo conceito. Por exemplo, a Apple usa "Revenue from Contract with Customer, Excluding Assessed Tax" vs Tesla usa "Revenue".

Ou quando você pede "margem operacional", isso pode não ser um fato que a empresa envia à SEC. Em vez disso, elas enviam receita total e Lucro Operacional (Perda).

Outra situação é quando as empresas mudaram de nome ao longo do tempo, então você precisa garantir que as consultas SQL incluam tanto o nome antigo quanto o novo.

Então como instruo a máquina a selecionar o fato/rótulo certo para uma pergunta ampla específica?

Uso busca híbrida com Weaviate para encontrar os fatos ou rótulos mais relevantes e envio de volta ao modelo LLM.

6. Testes em etapas é fundamental

Antes do deployment final para produção, dividi o processo em etapas e testei cada uma:

1. Teste local do backend DRF com banco de dados local.

2. Teste do backend em container Docker com banco de dados local.

3. Migração do banco de dados PostgreSQL para Cloud SQL e teste.

4. Teste do backend em container Docker com Cloud SQL.

5. Teste local do frontend React.

6. Frontend React com backend de produção e Cloud SQL.

7. Migração do frontend React para Wordpress em produção.

8. Teste de ponta a ponta.

Tive que aprender essa abordagem passo a passo da maneira difícil. Inicialmente, pulei algumas etapas e testei em pedaços maiores, mas os modelos de linguagem (LLM) não conseguiam identificar exatamente onde as coisas deram errado.

O que vem a seguir?

  1. Corrigir o problema de cold start: Agora, leva um tempo para o agente responder a primeira pergunta. Estou trabalhando em uma solução econômica.
  2. Mostrar etapas intermediárias aos usuários: Ao responder perguntas complexas como "Compare a receita da Apple e Microsoft entre 2020 e 2022", leva tempo para o agente gerar a resposta final. Mostrar as etapas em que o agente está trabalhando em tempo real pode melhorar a experiência do usuário.
  3. Enriquecer com conteúdo textual 10-K/10-Q: Planejo incluir mais conteúdo textual relevante dos documentos 10-K e 10-Q para fornecer respostas mais detalhadas.

Isso é tudo de mim por agora. Experimente a versão MVP e me diga o que acha! Você já tentou construir algo com dados financeiros ou documentos da SEC? Adoraria ouvir sobre sua experiência — deixe um comentário abaixo ou me envie um email diretamente (chandler@chandlernguyen.com).

Abraços,

Chandler

Continuar Lendo

Minha Jornada
Conectar
Idioma
Preferências