π§ Stock-Market Research Assistant
Databricks AI Bootcamp Capstone β Stock-Market Research Assistant
ImplementaΓ§Γ£o profissional do projeto final do treinamento DataExpert.io
π ConclusΓ£o do Treinamento
Este repositΓ³rio contΓ©m a entrega final do projeto do Databricks AI Bootcamp, desenvolvido como parte do treinamento oficial da DataExpert.io.
π Treinamento Original
- Bootcamp: Rise of the AI Data Engineer
- Repository: EcZachly/databricks-ai-bootcamp-capstone
- NotebookLM: Databricks AI Boot Camp
π Project Highlights
| Feature | Status | Description |
|---|---|---|
| Pipeline Spark | β | IngestΓ£o distribuΓda com Spark e Delta Lake |
| API Externa | β | Massive API para preΓ§os e notΓcias de aΓ§Γ΅es |
| ConteΓΊdo NΓ£o Estruturado | β | HTML β texto β chunks com trafilatura |
| Databricks App | β | Main App + Dashboard separados |
| Agente Leitura/Escrita | β | MCP Server com tools de pesquisa e persistΓͺncia |
| RAG com pgvector | β | Embeddings e busca semΓ’ntica HNSW |
| Wiki Completa | β | DocumentaΓ§Γ£o tΓ©cnica e arquitetural |
ποΈ Architecture & Tech Stack
Camadas da Arquitetura
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Databricks Workspace β
β β
β ββββββββββββββββββββββββ ββββββββββββββββββββββββ β
β β Databricks App β β Databricks App β β
β β (Main App) β β (Dashboard) β β
β β β β β β
β β - Massive API β β - Read-only Flask β β
β β - Lakebase (PG) β β - Watchlist/Quotes β β
β β - Sync endpoint β β - News viewer β β
β ββββββββββββ¬ββββββββββββ ββββββββββββββββββββββββ β
β β β
β βΌ β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Lakebase (Postgres) β β
β β ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββββββββ β β
β β β watchlists β β ticker_news_ β β ticker_news_ β β β
β β β (ticker lists) β β documents β β embeddings β β β
β β ββββββββββββββββββββ β (news articles) β β (title+description) β β β
β β ββββββββββββββββββββ ββββββββββββββββββββββββ β β
β β β β β
β β βΌ β β
β β ββββββββββββββββββ β β
β β β pgvector HNSW β β β
β β β index (cosine) β β β
β β ββββββββββββββββββ β β
β β ββββββββββββββββββββ ββββββββββββββββββββ β β
β β β research_notes β β analysis_ β β β
β β β (agent writes) β β reports β β β
β β ββββββββββββββββββββ ββββββββββββββββββββ β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β MCP Server App β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Massive Broker (stock data) β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β FastMCP Server (tools exposed to Agent Bricks) β β β
β β β - get_quote(symbol) β β β
β β β - search_news(symbol, query, limit) β β β
β β β - search_research_context(query, symbol) β β β
β β β - get_watchlist() β β β
β β β - add_to_watchlist(symbol) β β β
β β β - remove_from_watchlist(symbol) β β β
β β β - save_research_note(symbol, title, content) β β β
β β β - save_analysis_report(symbol, report, sources) β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Stack TecnolΓ³gica
| Camada | Tecnologia | VersΓ£o | Uso |
|---|---|---|---|
| Data Warehouse | Databricks Lakebase | Postgres | Banco transacional integrado |
| Processing | Apache Spark | 3.5+ | Pipelines distribuΓdos |
| Embeddings | sentence-transformers | all-MiniLM-L6-v2 | Similaridade semΓ’ntica |
| Vector Search | pgvector | 0.5+ | Γndice HNSW cosine |
| APIs | Massive.com | v2 | PreΓ§os e notΓcias de aΓ§Γ΅es |
| Agent Framework | FastMCP | 1.0+ | Ferramentas para agente |
| Frontend | Flask | 2.0+ | API e Dashboard |
πΊοΈ Architecture Diagram
Pipeline de Dados
flowchart LR
subgraph "IngestΓ£o"
A[Watchlist Lakebase] -->|tickers| B[Massive API]
B -->|notΓcias| C[ticker_news_documents]
end
subgraph "Processamento"
C -->|HTML| D[trafilatura]
D -->|texto| E[Chunking]
E -->|chunks| F[Embeddings Spark]
end
subgraph "Armazenamento"
F -->|embeddings| G[ticker_news_embeddings]
E -->|chunks| H[ticker_news_chunk_embeddings]
G & H -->|HNSW| I[pgvector Index]
end
subgraph "Consulta RAG"
J[User Query] -->|embedding| I
I -->|top-k| K[Context Retrieval]
K -->|prompt| L[LLM Response]
end
Fluxo de Consulta RAG
flowchart LR
A[Query do UsuΓ‘rio] --> B[Embedding da Query]
B --> C[Busca Vetorial pgvector]
C --> D[Top-k Chunks]
D --> E[Contexto Formatado]
E --> F[Prompt com CitaΓ§Γ΅es]
F --> G[Resposta Fundamentada]
π Resultados
| MΓ©trica | Resultado | ObservaΓ§Γ£o |
|---|---|---|
| Dimensionalidade Embeddings | 384 | all-MiniLM-L6-v2 |
| MΓ©trica Similaridade | Cosine | Otimizada com pgvector |
| Index Vector | HNSW | Busca O(log n) aproximada |
| LatΓͺncia Query RAG | < 500ms | Com Γndice HNSW |
| Throughput Embeddings | Batch ~100 | Parallel Spark |
π Quick Start & Setup
PrΓ©-requisitos
- Acesso ao Databricks Workspace
- Massive API Key (grΓ‘tis em https://www.massive.com)
- Lakebase URL configurado no workspace
ConfiguraΓ§Γ£o
# 1. Criar secret scopes
python setup_secrets.py
# 2. Executar SQLs no Lakebase
psql $LAKEBASE_URL -f sql/01_setup_news_table.sql
psql $LAKEBASE_URL -f sql/02_setup_embeddings_table.sql
psql $LAKEBASE_URL -f sql/03_setup_chunk_embeddings_table.sql
psql $LAKEBASE_URL -f sql/04_cast_arrays_to_vectors.sql
psql $LAKEBASE_URL -f sql/05_setup_research_tables.sql
# 3. Executar notebook de ingestΓ£o
# (via Databricks UI: importar notebooks/ingest_ticker_news_embeddings.py)
# 4. Testar RAG
python3 test_rag.py --ticker AAPL --limit 5
# 5. Deploy dos Apps
databricks bundle deploy -t dev
Endpoints da API
| MΓ©todo | Endpoint | DescriΓ§Γ£o |
|---|---|---|
| GET | /watchlist |
Lista tickers |
| GET | /price/<symbol> |
PreΓ§o atual |
| GET | /news/<symbol> |
NotΓcias recentes |
| POST | /news/sync |
Sincronizar notΓcias |
| POST | /search/context |
Busca semΓ’ntica (RAG) |
Tools do MCP Server
Leitura:
get_quote(symbol)- PreΓ§o atualsearch_news(symbol, query, limit)- Busca notΓciassearch_research_context(query, symbol)- Busca contextoget_watchlist()- Lista tickersadd_to_watchlist(symbol)- Adicionar tickerremove_from_watchlist(symbol)- Remover ticker
Escrita (Agente):
save_research_note(symbol, title, content)- Salvar notasave_analysis_report(symbol, report, sources)- Salvar relatΓ³rio
π³ Estrutura do Projeto
databricks-capstone-delivery/
βββ app.py # Main Flask API (Day 1/2)
βββ lakebase.py # Lakebase connection helper
βββ massive_client.py # Massive API client
βββ setup_secrets.py # Secret scope setup
βββ requirements.txt # Python dependencies
βββ pyproject.toml # Project metadata
βββ test_rag.py # Script de validaΓ§Γ£o RAG
β
βββ dashboard/
β βββ app.py # Dashboard Flask
β βββ templates/index.html # Dashboard UI
β
βββ mcp_server/
β βββ alpaca_mcp_server.py # FastMCP server (com writing tools)
β βββ lakebase.py # Lakebase helper (novas funΓ§Γ΅es)
β βββ massive_broker.py # Massive broker
β
βββ notebooks/
β βββ ingest_ticker_news_embeddings.py # Spark pipeline
β
βββ sql/
β βββ 01_setup_news_table.sql
β βββ 02_setup_embeddings_table.sql
β βββ 03_setup_chunk_embeddings_table.sql
β βββ 04_cast_arrays_to_vectors.sql
β βββ 05_setup_research_tables.sql
β
βββ resources/
βββ dashboard.yml
βββ ingest_ticker_news_embeddings_job.yml
βββ mcp_server.yml
π§ Methodology & Quality Gates
Este projeto incorpora um sistema heurΓstico robusto para garantir qualidade e evitar erros comuns de engenharia de dados:
Data Contract Gate
Valida tabelas Silver/Gold antes da execuΓ§Γ£o:
| VerificaΓ§Γ£o | Implementada | Estado |
|---|---|---|
| Schema esperado (colunas, tipos, nullability) | β | Documentado em SQLs |
| Regras de qualidade (cardinalidade, unicidade) | β | Tabelas com constraints |
| SLA de volume e latΓͺncia | β | Documentado no schema |
| Contrato versionado | β | sql/*.sql com versionamento |
Idempotency Gate
Garante reexecuΓ§Γ£o segura do pipeline:
| VerificaΓ§Γ£o | Implementada | Estado |
|---|---|---|
| UPSERT ou FULL REFRESH definido | β | Tabelas com ON CONFLICT |
| Nenhum append cego sem verificaΓ§Γ£o | β | Chaves primΓ‘rias definidas |
| Custo de reprocessamento estimado | β | Log de contagem de linhas |
HeurΓsticas Aplicadas
| HeurΓstica | DescriΓ§Γ£o | AplicaΓ§Γ£o |
|---|---|---|
| Check antes de escrita | ValidaΓ§Γ£o de entrada antes de persistΓͺncia | lakebase.py + alpaca_broker.py |
| Rastreabilidade de evidΓͺncia | Toda conclusΓ£o indica SOURCE/INFERENCE/IMPLEMENTED/VALIDATED | PRD_E_PLANO_EXECUCAO.md |
| Gates antes de deploy | Dois checklists obrigatΓ³rios antes de considerar pronto | Este README |
| Falsos positivos vs falsos negativos | AvaliaΓ§Γ£o balanceada de RAG | Teste RAG com test_rag.py |
π Documentation Resources
PRD_E_PLANO_EXECUCAO.md- Requisitos e plano completoTECHNICAL.md- DocumentaΓ§Γ£o tΓ©cnica para tech leadsCHANGELOG.md- HistΓ³rico de versΓ΅esCONTRIBUTING.md- Guia de contribuiΓ§Γ£o
π License
Este projeto foi desenvolvido como parte do treinamento do Databricks AI Bootcamp.
Copyright (c) 2026 Roberto
Todos os direitos reservados.
Este cΓ³digo pode ser utilizado como portfolio para demonstrar competΓͺncias tΓ©cnicas em Engenharia de Dados, RAG e Agentes de IA.
β οΈ Notas Importantes
- Este nΓ£o Γ© um sistema de trading em produΓ§Γ£o. NΓ£o deve ser usado para decisΓ΅es financeiras reais.
- A API do Massive tem limites de rate. O pipeline respeita esses limites.
- Secrets nunca devem ser commitados. O
setup_secrets.pygarante isso.
Este projeto foi desenvolvido para demonstrar as habilidades tΓ©cnicas adquiridas durante o Databricks AI Bootcamp.
Author: Roberto LinkedIn: https://www.linkedin.com/in/roberton003/ GitHub: https://github.com/Roberton003