O que construímos
Disease Twin é uma entidade computacional viva para cada doença rara do mundo. Não é uma página. Não é um documento. É um nó num grafo de conhecimento clínico (genes, fenótipos, medicamentos, vias metabólicas, ensaios clínicos, cobertura do SUS), envolvido por uma camada agentic de IA que faz três coisas continuamente:
- Lê a literatura — minera novos artigos, extrai relações tipadas, decide o que merece entrar no grafo.
- Gera hipóteses — propõe candidatos mecanísticos de reposicionamento de medicamentos a partir de genes causais e alvos farmacológicos conhecidos.
- Se autoverifica — toda alegação é checada contra fontes oficiais antes de ser publicada. Nada é inventado. Nada é mantido sem URL.
O resultado é visível em duas superfícies abertas:
- Cada doença tem um diário público de pesquisa que mostra exatamente o que os agentes fizeram naquela doença na semana, no mês, no ano. É a anti-caixa-preta.
- Qualquer assistente de IA na Terra (Claude, ChatGPT, Gemini, Copilot) pode consultar a doença diretamente via Model Context Protocol [5]. Não precisa scrapear. Não precisa de API privada. É uma chamada padrão.
Arquitetura em três camadas
O Disease Twin é deliberadamente simples de descrever e deliberadamente difícil de inventar. A arquitetura tem três camadas, cada uma com um princípio inegociável.
Camada 1 — O grafo de conhecimento clínico
A base é um grafo de propriedades em Neo4j, populado a partir de fontes abertas canônicas: Orphanet (catálogo de raras), Human Phenotype Ontology [6], MONDO, OMIM, ClinVar, Open Targets [7], PubTator3 [8], WikiPathways, ClinicalTrials.gov, e o sistema público de saúde brasileiro (DATASUS, CEAF, PCDT do SUS). O esquema segue Biolink Model [9], dump exportável em KGX, alinhado com o Monarch Initiative [10]. Casos clínicos individuais são representados em Phenopackets v2 [11]; descoberta federada usa Beacon v2 [12].
Princípio: nenhum nó é inventado. Cada entidade tem identificador estável (CURIE) e proveniência rastreável até a fonte original. A camada pública da doença é licenciada como CC0; dados de paciente jamais saem da carteira do paciente. Entre as duas, um limite k-anônimo.
Camada 2 — O co-cientista de 24 horas
Cinco agentes especializados rodam como jobs agendados, cada um com uma janela própria de "frescor" (cada doença é re-examinada quando seus dados específicos ficam obsoletos). Coletivamente, eles formam o que chamamos internamente de co-cientista:
Puxa relações tipadas pré-extraídas do PubTator3 (associate, treat, cause, inhibit, stimulate, prevent, correlações positivas e negativas) e materializa cada uma como uma aresta tipada no grafo, com a lista de PMIDs como evidência.
Inspirado em MedKGent [13]: usa um LLM para ler abstracts e extrair triplas tipadas com auto-consistência (a tripla só sobrevive se N execuções independentes concordarem). Cada extração precisa ancorar em entidades já existentes — genes por símbolo HGNC, medicamentos por nome ChEMBL, doenças por código Orphanet. Quem não ancora, não entra. Esse é o gate anti-alucinação.
Aplica guilt-by-association: se um medicamento é eficaz numa doença que compartilha genes causais com a sua, é candidato a investigação para a sua. Cada hipótese cita o gene compartilhado, a doença-fonte, e a fonte do uso atual. Não é recomendação clínica. É ponto de partida para o pesquisador humano.
Implementa a ideia clássica de descoberta baseada em literatura de Don Swanson [14]: A→B→C, em que A é a doença, B é um gene causal, e C é um fármaco que mira B mas que a literatura ainda não conectou a A. Conexões implícitas que nenhum paper afirmou diretamente, mas que o grafo deixa visíveis.
Inspirado em KGARevion [15]: antes de qualquer afirmação sair do sistema, ela é re-checada contra o grafo. Se a afirmação tem suporte, sai com a fonte. Se não tem, é rejeitada. O componente público mais visível dessa camada é o painel de transparência em raras.org/transparencia.
O design conversa com a linha do MedGraphRAG [16] e do HippoRAG [17]: grafo como memória de longo prazo do agente, recuperação multi-hop ponderada, evidência rastreável até o nível do trecho. Nossa camada de raciocínio sobre o grafo é fechada (é o nosso diferencial), mas a saída — toda saída — é fonte aberta.
Camada 3 — A superfície pública
Três interfaces tornam o trabalho dos agentes consumível pelo mundo:
- Páginas de doença em raras.org/doencas. Cada uma mostra a literatura recente, os genes envolvidos, os tratamentos cobertos pelo SUS, e o diário de atividade dos agentes naquela doença. É o que um paciente, médico, ou cuidador vê.
-
Servidor MCP em raras.org/api/mcp. Conformidade total com a especificação Streamable HTTP [5]. Expõe ~20 ferramentas (busca, descrição de doença, evidências, hipóteses, similaridade fenotípica) + resource templates (
disease://{orphaCode}) + um prompt padrão. Qualquer cliente MCP — Claude Desktop, ChatGPT Connectors, agentes customizados — pluga e consulta. Listado no Registry MCP oficial. -
Dumps abertos em Zenodo (DOI persistente), Hugging Face Datasets, e KGX para integração com Monarch e o NCATS Biomedical Data Translator. Discoverabilidade via Bioregistry (prefixo
raras), Croissant, ellms.txt.
Como mantemos honesto
A pergunta natural sobre qualquer sistema agentic é "ele alucina?". Nossa resposta é estrutural, não retórica.
(a) Tudo vem dos bancos canônicos. Nenhum dado é inventado por LLM. Todas as entidades do grafo vêm de uma allowlist canônica explícita declarada em um único arquivo do repositório aberto: Orphanet, HPO, OMIM, ClinVar, MONDO, GenCC, HGNC, Open Targets, ChEMBL, PubTator3, WikiPathways, Reactome, ClinicalTrials.gov, ReBEC, FDA, EMA, ANVISA, CONITEC, DOU (in.gov.br), bvsms.saude.gov.br, DATASUS, WHO. Adicionar uma fonte é um ato deliberado e revisável. Quatro gates sequenciais protegem a publicação: (1) filtro de domínio canônico antes do LLM ver qualquer fonte, (2) declaração obrigatória de citação por parágrafo, (3) validação cruzada dos índices citados contra a allowlist final, (4) decisão por cobertura — abaixo de 60% a página é bloqueada, entre 60% e 75% publica com flag de revisão, acima de 75% publica. Quando o extrator LLM-as-judge propõe uma tripla a partir de um abstract PubMed, ela só entra no grafo se ambos os endpoints já existem nesses bancos (gene por símbolo HGNC, medicamento por nome ChEMBL, doença por código Orphanet). Tripla sem âncora é descartada. Cada ação do LLM no grafo carrega createdBy e pode ser revertida em uma única query.
(b) Auto-consistência como confiança. Cada tripla passa por N execuções independentes do LLM em temperaturas diferentes. A confiança final é a fração de execuções em que a tripla apareceu. Triplas abaixo de um limiar são rejeitadas. Re-observações reforçam: r' = 1 - (1 - r) · (1 - r_novo), uma fórmula de combinação de evidência usada na linha MedKGent [13].
(c) Verificação como gate público. O painel de transparência mostra, por doença, o que foi verificado e o que foi rejeitado nas últimas 48 horas. Qualquer pessoa pode auditar. Nenhuma alegação de cobertura SUS é publicada sem URL de portaria DOU oficial ou da Biblioteca Virtual em Saúde do Ministério da Saúde. O princípio é inegociável: toda afirmação carrega sua fonte primária.
(d) Hipóteses são marcadas como hipóteses. O motor de reposicionamento e o ABC de Swanson geram candidatos para investigação, não recomendações clínicas. Cada cartão de hipótese carrega o aviso. Nenhuma rota da API mistura hipóteses com evidência verificada.
O que medimos no dia 1
O loop diário rodou pela primeira vez em produção esta semana. Em uma execução de aproximadamente três minutos, partindo de uma base já enriquecida, ele:
de reposicionamento
extraídas da literatura via LLM
de literatura no grafo
via MCP
Exemplos concretos de descobertas que o LLM extraiu e o grafo absorveu naquela execução: Glioblastoma → RFC4 associado, YY1 estimula RFC4, RFC4 causa resistência a temozolomida; Fibrose cística → elexacaftor/tezacaftor/ivacaftor trata cystic fibrosis; Mieloma múltiplo → M-protein associado, serum free light chain ratio associado; Lúpus eritematoso sistêmico → hidroxicloroquina trata SLE e previne retinopatia; Lesão de medula espinhal → dexmedetomidina trata, Liproxstatin-1 inibe ferroptose. Cada uma com PMID de evidência. Cada uma reproduzível.
O loop está agendado para rodar todos os dias às 4 da manhã horário de Brasília, em cron no Cloud Run. A cada execução, novas doenças entram no slice. Em 120 dias o ciclo completa rotação pelo catálogo inteiro.
Por que aberto é a única opção
O Google AI Co-Scientist é privado. O Stanford Virtual Lab roda em laboratório acadêmico. O Sakana AI Scientist é produto. Nenhum dos três foi feito para o paciente raro, e não há razão estrutural para que algum dia seja. O custo marginal de servir uma doença com 50 pacientes no Brasil é o mesmo de servir uma com 50.000 pacientes nos EUA, mas a receita esperada é zero. Em qualquer sistema fechado, a doença raríssima sempre perde.
A camada que constrói o conhecimento agentic da medicina precisa ser uma commons. Aberta, auditável, governada pelas pessoas que vivem as condições. A licença CC0 na camada de doenças não é cosmética: é a fechadura aberta que impede que alguém compre a base e feche em cima. O modelo de wallet do paciente é simétrico: nenhum dado individual sai do bolso do paciente, mas o conhecimento sobre a condição é de todos.
Esse é o ponto político da arquitetura. A camada técnica só funciona se a camada de governança proteger contra captura. Por isso quem cria comunidades na plataforma são associações de pacientes, não usuários quaisquer; por isso o fundador dessa plataforma tem que ser um paciente; por isso o painel de transparência existe.
Como conectar
Se você é desenvolvedor, pesquisador, ou está construindo uma ferramenta de saúde com IA, o caminho mais curto para usar o Disease Twin é via MCP. Em qualquer cliente MCP-compatível, adicione o servidor:
claude mcp add raras --transport http https://raras.org/api/mcp
Depois disso, qualquer agente que use esse cliente pode chamar ferramentas como describe_disease, get_evidence, find_phenotypically_similar, get_hypotheses, analyze_clinical_case, search_diseases. Todas retornam dados estruturados com proveniência. Documentação técnica completa em raras.org/mcp.
Para integração mais profunda (KGX dump, Beacon v2, Phenopackets v2, SPARQL): raras.org/docs. Descoberta do servidor MCP em raras.org/.well-known/mcp. Repositório aberto: github.com/rarasAI/raras.
O que vem a seguir
Três frentes em desenvolvimento ativo agora, em paralelo ao loop diário em produção:
- Camada de verificação 2.0 — estamos fechando o loop verify → revise → republish automaticamente para que, quando uma fonte oficial mudar, publicações afetadas sejam revertidas sem intervenção humana. É a próxima iteração do espírito KGARevion completo. Hoje o sistema verifica e marca; o gate de republicação já está sendo escrito.
- Cobertura da literatura LLM — estamos ampliando a extração estilo MedKGent para a cauda longa de doenças com pouca literatura indexada por PubTator. É onde mora a contribuição mais original do co-cientista: relações que nenhum sistema automatizado tinha capturado ainda. As primeiras execuções já estão escrevendo no grafo (Glioblastoma, CF, Mieloma, Lúpus, lesão de medula, pré-eclâmpsia).
- Federação — estamos preparando o servidor MCP para que outras instituições publiquem suas próprias Disease Twin shards e federemos consultas. A versão brasileira em SUS já está pronta para ser consultada lado a lado com versões europeias (ERDERA) ou norte-americanas (NCATS Translator). Ninguém precisa hospedar o mundo inteiro.
O ponto deste trabalho não é admirar o que construímos. É entregar o método. Karpathy diz que a próxima Wikipédia será um LLM agentic. A questão é quem é dono da camada. Nós escolhemos as doenças raras como prova de que comunidades podem construir e validar a sua, em produção, com fonte aberta, sem permissão. A receita é replicável para qualquer rede de conhecimento que o mercado decidiu esquecer.