Manuscrito · Primeira edição

Social-RAG

Um pipeline de Retrieval-Augmented Generation para pesquisa em ciências sociais computacionais sobre o Telegram

L4BHD/UFBA
Autoria

Equipe de autores

Leonardo Nascimento
Universidade Federal da Bahia (UFBA)
Eric Brasil
UNILAB — Instituto de Humanidades e Letras, São Francisco do Conde/BA
Arthur Lima
Universidade Federal da Bahia (UFBA)
Gabriel Andrade
Universidade Federal da Bahia (UFBA)
Ricardo Sodré Andrade
Arquivo Nacional — Escritório Regional Nordeste, Salvador/BA
Tarssio Barreto
Ministério da Saúde, Brasília/DF
Ponto de partida

Escala desafia a leitura exaustiva

Dados de rastros digitais expandiram as possibilidades empíricas nas ciências sociais — e intensificaram um desafio metodológico de escala: corpora grandes demais e rápidos demais para serem lidos exaustivamente sem sacrificar o rigor interpretativo.

Volume, velocidade e heterogeneidade dos dados produzidos pelas plataformas digitais sobrecarregam a capacidade analítica das abordagens sociais tradicionais.
Proposta

O que é o Social-RAG

Uma arquitetura RAG modular projetada para investigação qualitativa em larga escala sobre corpora textuais — preservando rastreabilidade de evidências, auditabilidade e controle do pesquisador.

Camada de mediação técnica que expande a capacidade exploratória do pesquisador quando o corpus excede o alcance da leitura exaustiva — sem substituir a leitura crítica.
01

RAG: definição e estrutura

Retrieval-Augmented Generation — princípio, três etapas e por que ancora a geração em evidência verificável.
Retrieval-Augmented Generation

Como funciona um RAG, em três etapas

01 · Indexação
Vetorização do corpus
Os documentos são divididos em chunks e convertidos em vetores por um modelo de embeddings, armazenados em uma base vetorial otimizada para busca por similaridade.
02 · Recuperação
Busca semântica
A pergunta do pesquisador é projetada no mesmo espaço vetorial; o sistema localiza passagens semanticamente próximas, mesmo sem coincidência lexical com a query.
03 · Geração
Síntese ancorada
As passagens recuperadas são combinadas à pergunta em um prompt que instrui o LLM a responder com base na evidência fornecida, preservando trechos citáveis.
A principal contribuição do RAG está no aterramento factual: ao vincular cada afirmação a um trecho recuperável, o LLM deixa de operar como “stochastic parrot” e passa a funcionar como um instrumento de pesquisa auditável.
02

Arquitetura do Social-RAG

Pipeline modular, corpora analisados e as três decisões de projeto que sustentam o sistema.
Arquitetura

Pipeline modular em cinco etapas

01
Vetorização
text-embedding-3-large (OpenAI) — espaço semântico de alta dimensionalidade.
02
Indexação
ChromaDB com algoritmo HNSW — busca aproximada de vizinhos em milissegundos.
03
Recuperação
Estratégia Adaptive-K: corte dinâmico na curva de similaridade.
04
Reranking
MMR (Maximal Marginal Relevance) — equilibra relevância e diversidade.
05
Geração
System prompt em estrutura thread-of-thought, ancorado nos trechos recuperados.
Stack: Python · LangChain · Ollama (modelos locais e cloud open-weight) · OpenAI API · ChromaDB · pandas · FastAPI · Streamlit.
Visão end-to-end

Pipeline completo: do Telegram à resposta auditável

1 Coleta & preparação
Origem Telegram — grupos e canais públicos (posicionamento lurker, sem interação).
Streaming API MTProto via Python — mensagens em tempo real com metadados (autoria, timestamp, encaminhamentos).
Armazenamento Elasticsearch + Kibana — indexação contínua, enriquecimento e exploração.
Recorte temático Extração via script com normalização e deduplicação → CSV / JSON.
Saída: dois subsets — Vacinas (116.284) e Lei Rouanet (3.284).
2 Indexação semântica
Estratégia 1 chunk = 1 post — cada mensagem é a unidade mínima de indexação, citável e verificável.
Embeddings text-embedding-3-large (OpenAI) — projeção em espaço semântico de alta dimensão.
Metadados message_id · chat_id · strict_date · type · chat_title.
Base vetorial ChromaDB com algoritmo HNSW — busca aproximada de vizinhos em milissegundos.
Saída: índice vetorial persistente, navegável por similaridade e filtros estruturados.
3 Consulta & geração
Query Pergunta do pesquisador projetada no mesmo espaço vetorial → busca top-N ampla.
Adaptive-K Corte dinâmico no maior salto da curva de similaridade · piso K=10 · teto K=100 · buffer B=5.
Reranking MMR — equilibra relevância e diversidade, reduz duplicatas semânticas.
Geração System prompt em thread-of-thought → LLM (gemma3:12b · gpt-oss:120b · gpt-5-mini).
Saída: resposta ancorada em trechos citáveis, com rastreabilidade direta ao corpus.
Interface Streamlit
Seleção de modelo, tema e base · histórico de conversa · prompts e logs auditáveis · exportação em Markdown.
Human-in-the-loop
Corpus de teste

Dois subconjuntos temáticos do Telegram

Vacinas
116.284 mensagens únicas desde 2022 · queries com curinga vacin* · maior e mais heterogêneo
Lei Rouanet
3.284 mensagens únicas desde 2017 · variantes ortográficas · menor e mais concentrado em “guerra cultural”
A combinação dos dois recortes permite avaliar o desempenho do sistema sob alta complexidade narrativa (vacinas) e em cenário mais estabilizado (Rouanet) — testando a robustez sob variabilidade discursiva.
Coleta restrita a grupos e canais públicos · posicionamento lurker (sem interação) · anonimização e não-redistribuição do corpus integral.
Decisões de projeto

Três escolhas que sustentam o sistema

Indexação
1 chunk = 1 post
Cada mensagem do Telegram é uma unidade de indexação. Mensagens são curtas, autocontidas e contextualizadas — dividi-las geraria perda semântica; agregá-las introduziria ruído. Garante rastreabilidade direta e citação verificável.
Recuperação
Adaptive-K
Em vez de um K fixo, o sistema identifica o maior salto na curva de similaridade:
K = argmax(s_i+1 − s_i)
Com piso (K=10) e teto (K=100) para evitar contextos pobres ou ruidosos.
Reranking
MMR · diversidade
Maximal Marginal Relevance reordena o conjunto selecionado priorizando passagens igualmente relevantes mas informacionalmente distintas — reduz redundância gerada por reposts e reescritas.
Avaliação comparativa

Três modelos com perfis deliberadamente distintos

Modelo Nome Parâmetros Perfil de implantação
A gemma3:12b 12B Local, open-weight, via Ollama — reprodutibilidade e baixo custo operacional.
B gpt-oss:120b-cloud 120B Cloud, open-weight, via Ollama — preserva a lógica de pesos abertos com maior capacidade.
C gpt-5-mini Cloud, modelo comercial fechado, via OpenAI API — referência otimizada.
Cobre um espectro realista: “local e controlável”“aberto e escalável”“fechado e robusto”.
03

Avaliação do sistema

Dois blocos de perguntas, protocolo LLM-as-judge cego, e os principais resultados observados.
Estratégia de avaliação

Dois blocos complementares de perguntas

Hermenêutico

Análise narrativa: padrões discursivos recorrentes, enquadramentos ideológicos, metáforas, julgamentos morais e associações políticas no corpus.

01
Acurácia temática
02
Profundidade analítica
03
Precisão das evidências
04
Capacidade de síntese
05
Sensibilidade política · ausência de alucinações
Factual

Recuperação precisa de evidência explícita: entidades nomeadas, números, datas, valores, links e descrições — incluindo negações e ausências.

01
Precisão literal
02
Cobertura factual
03
Extração de entidades
04
Sensibilidade a negações e ausências
05
Números, percentuais, URLs · ausência de alucinações
LLM-as-judge cego: 3 rodadas com mapeamento rotacional dos modelos a posições A/B/C (sem nomes), juízes GPT-5 e Gemini Pro + avaliação humana com o mesmo protocolo. Total: 13 tabelas de julgamento.
Resultados · bloco hermenêutico

Modelos B e C dominam o rigor interpretativo

Perfis radar do bloco hermenêutico para Vacina e Rouanet, por juiz
Figura 1 — Avaliação hermenêutica por juiz (ChatGPT/GPT-5, Gemini, Humano) para Vacina e Rouanet.
Padrão consistente entre temas e juízes
Modelo C (gpt-5-mini) apresenta os perfis mais altos, com B (gpt-oss:120b) muito próximo. A (gemma3:12b) fica atrás sobretudo em profundidade analítica, síntese e precisão evidencial.
Resultados · bloco factual

Separação mais nítida entre A e os modelos maiores

Perfis radar do bloco factual para Vacina e Rouanet, por juiz
Figura 2 — Avaliação factual por juiz. Modelos B e C convergem no topo; Modelo A perde fidelidade em precisão literal, cobertura e detecção de negações.
O gap aumenta quando a tarefa exige ancoragem literal
Modelos B e C exibem perfis uniformemente altos em precisão literal, extração de entidades e sensibilidade a negações. O Modelo A, embora ainda útil para leitura exploratória, mostra fragilidades em critérios de extração e verificação.
Síntese · estabilidade entre juízes

Ordenação consistente sob diferentes severidades

Heatmap das médias gerais por juiz, subset e modelo
Figura 3 — Médias globais por juiz × subset × modelo. Cores mais frias indicam pontuações maiores.
Direção dos resultados é estável
Mesmo com diferenças absolutas (Gemini é mais generoso; ChatGPT/GPT-5 e humano, mais severos), a ordenação C ≳ B ≫ A se mantém em todas as combinações.
Vacinas amplificam as diferenças
O corpus de vacinas — maior e mais heterogêneo — separa melhor os modelos. Em Rouanet, com enquadramentos mais estabilizados, os perfis tendem a convergir.
Conclusão

O que o Social-RAG é — e o que não é

Não é instrumento de mensuração
Não foi projetado para contagem exata, frequência lexical ou estatística clássica — regex e NLP tradicional fazem isso melhor.
É mediação qualitativa
Apoia exploração iterativa de padrões discursivos, enquadramentos narrativos e usos sociais da linguagem — mais próximo da leitura orientada por problema do que da extração automatizada.
Trade-off observado
Modelos menores e locais sustentam leituras exploratórias, mas exigem cautela em extração literal e atribuição de evidência.
Próximos passos
Escalabilidade · avaliação em domínios temáticos adicionais · integração de grafos de conhecimento para enriquecer a contextualização.
Repositório · github.com/LABHDUFBA/social-rag · arquivado em Zenodo (DOI 10.5281/zenodo.18601216).

Obrigado!

Leonardo Nascimento — leofn3@gmail.com
Eric Brasil · Arthur Lima · Gabriel Andrade
Ricardo Sodré Andrade · Tarssio Barreto
L4BHD/UFBA