O backend é construído com FastAPI e organizado em camadas para separação de responsabilidades.
Responsáveis por receber dados do bot de WhatsApp, processar e armazenar nas bases de dados.
Cria uma nova análise de verificação.
Fluxo de Processamento:
- Recebe dados no formato
AnaliseInputFormatdo bot - Transforma dados via
AnaliseTransformer:- Converte claims e fontes para formato unificado
- Agrega vereditos de múltiplas fontes de dados
- Normaliza vereditos (
VERDADEIRO,FALSO,FORA_DE_CONTEXTO,CHECK) - Classifica tópicos usando IPTC Media Topics com LLM reranking
- Calcula métricas agregadas (total de claims, scores percentuais)
- Gera título da análise com LLM
- Salva em duas bases:
- BigQuery: Para análises e buscas complexas
- Firestore: Para recuperação rápida por ID
- Retorna URL de verificação
Exemplo de Request:
{
"DocumentId": "abc123",
"Date": "2025-12-13T10:00:00Z",
"message_type": "FromWhatsappGroup",
"PureText": "Texto da mensagem",
"Claims": {
"1": { "text": "Afirmação a ser verificada" }
},
"ResponseByDataSource": [
{
"data_source_id": "source_1",
"claim_verdicts": [
{
"claim_id": "1",
"Result": "Verdadeiro",
"reasoningText": "Justificativa",
"reasoningSources": []
}
]
}
]
}Resposta:
{
"success": true,
"message": "Análise criada com sucesso",
"document_id": "abc123",
"verification_url": "https://analytics.example.com/verificacao/abc123"
}Camada de abstração para comunicação com as bases de dados.
Arquivo: app/services/bigquery_service.py
Funcionalidades:
-
Busca Semântica (VECTOR_SEARCH):
- Usa embeddings Gemini (
gemini-embedding-001) - Busca por similaridade de cosseno
- Aplicada automaticamente quando há termo de busca
- Usa embeddings Gemini (
-
Inserção de Análises:
- Validação de duplicatas
- Inserção de claims com vereditos e fontes
- Armazenamento de métricas agregadas
-
Consultas Analíticas:
- Estatísticas gerais (total de verificações, afirmações)
- Dashboard (distribuição de resultados, modalidades)
- Listagem com filtros avançados
- Agregação de fontes citadas
Configuração:
# Variáveis de ambiente necessárias
GOOGLE_CLOUD_PROJECT=seu-projeto
BIGQUERY_DATASET=fact_checking_analytics
BIGQUERY_TABLE=analisesExemplo de Query (VECTOR_SEARCH):
SELECT base.*
FROM VECTOR_SEARCH(
(SELECT * FROM `projeto.dataset.analises`),
'embedding',
(SELECT @query_emb AS prompt_embedding),
top_k => 10,
distance_type => 'COSINE'
)
ORDER BY processed_at DESCArquivo: app/services/firestore_service.py
Funcionalidades:
- Armazenamento rápido: Backup e recuperação instantânea
- Interações de usuários: Likes, dislikes, revisores
- Listagem com filtros: Similar ao BigQuery mas sem busca semântica
- Perfis de usuários: Gerenciamento de dados de revisores
Collections:
analises: Análises de verificaçãousers: Perfis de usuários revisores
Servem dados para o cliente web com filtros e paginação.
Lista análises com filtros avançados e paginação.
Parâmetros:
limit(int): Número de resultados (1-100, padrão: 10)offset(int): Pular N resultados (paginação)search(str): Termo de busca (ativa VECTOR_SEARCH)message_type_whatsapp(bool): Filtrar WhatsAppmessage_type_direct(bool): Filtrar mensagens diretasmodality_text/audio/video/image(bool): Filtrar por modalidaderesult_true/fake/unknown(bool): Filtrar por resultadomin/max_truth_score(int): Filtrar por % verdadeiromin/max_fake_score(int): Filtrar por % falsomin/max_unverified_score(int): Filtrar por % inverificáveis
Comportamento:
- Sem busca: Consulta Firestore (rápido, ordenado por data)
- Com busca: Consulta BigQuery com VECTOR_SEARCH (semântico)
Busca uma análise específica por ID.
Retorna métricas agregadas para visualização em dashboard.
Estatísticas gerais do sistema.
Lista fontes citadas com contagem de citações.
Exporta dados em formato CSV.
O backend é implantado no Google Cloud Run com build automático.
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8080
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8080"]No Google Cloud Console → Cloud Run → Service → Variables:
GOOGLE_API_KEY: API key do GeminiGOOGLE_CLOUD_PROJECT: ID do projetoBIGQUERY_DATASET: Dataset do BigQueryBIGQUERY_TABLE: Tabela de análises
- Push para branch
main - Trigger automático no Cloud Build
- Build da imagem Docker
- Push para Container Registry
- Deploy no Cloud Run (sem downtime)
- Health check automático