O problema: conhecimento científico fragmentado em silos
Quem trabalha com pesquisa farmacêutica sabe bem o desafio: informações críticas estão espalhadas por sistemas completamente diferentes — artigos do PubMed, anotações internas de laboratório, bancos de dados de genômica, registros clínicos. Conectar esses pontos manualmente é lento, caro e propenso a falhas.
O resultado? Na fase inicial de descoberta de medicamentos, a taxa de sucesso tradicional é de apenas 5%, e cada ciclo de triagem consome mais de seis meses. Além disso, quando pesquisadores deixam a empresa, levam consigo conhecimento tácito valioso que raramente está documentado em lugar nenhum.
Esses três gargalos resumem o problema central que a AWS se propõe a resolver com a solução apresentada:
- Baixa eficiência e taxa de acerto — apenas 5% de sucesso com mais de 6 meses de triagem por tentativa.
- Conhecimento fragmentado — insights críticos dispersos entre PubMed, anotações e bancos de dados, gerando trabalho redundante e conexões perdidas.
- Perda de memória institucional — quando pesquisadores saem, a continuidade do trabalho é comprometida.
A solução: GraphRAG com BYOKG sobre Amazon Neptune Analytics
A resposta da AWS combina duas abordagens complementares: Geração Aumentada por Recuperação em Grafos (GraphRAG) e a estratégia Traga Seu Próprio Grafo de Conhecimento (BYOKG). Juntas, elas criam um ambiente de conhecimento interconectado onde pesquisadores podem fazer perguntas complexas em linguagem natural e receber respostas fundamentadas em dados verificados.
O motor por trás disso é o Amazon Neptune Analytics, que processa o grafo de conhecimento com alta performance, combinado com o Amazon Bedrock para geração de linguagem natural. O diferencial não é só fornecer respostas — é expor o raciocínio completo por trás de cada resultado, mostrando os caminhos de citação e as etapas de travessia do grafo. Isso torna a descoberta científica mais transparente e reproduzível.
Visão geral da solução
A solução reimagina o processo de pesquisa por meio da abordagem BYOKG enriquecida com capacidades de GraphRAG. Um grafo de conhecimento é uma representação estruturada da informação que exibe relacionamentos entre diferentes entidades como uma rede de nós e arestas interconectados.
Alimentado pelo Amazon Neptune, o grafo integra entidades científicas diversas — plantas, compostos, genes, proteínas e efeitos sobre a saúde — em uma rede unificada que conecta dados de fontes públicas como PubMed e Gene Ontology com conjuntos de dados proprietários. Pipelines de ingestão automatizados e algoritmos de grafo enriquecem continuamente essa rede, permitindo que pesquisadores descubram relações biológicas complexas que antes estavam ocultas em silos de dados desconectados.
Com Neptune Analytics e Amazon Bedrock, a solução combina algoritmos de grafo com consultas em linguagem natural, tornando a exploração científica ao mesmo tempo analítica e intuitiva. Pesquisadores podem fazer perguntas em português (ou inglês) e receber respostas baseadas em evidências, completas com citações de fontes e caminhos visuais.
Arquitetura da solução
A solução foi construída para ajudar pesquisadores a descobrir rapidamente artigos de periódicos médicos relevantes entre condições e tópicos. O conjunto de dados inclui:
- Artigos de periódicos HCLS fornecidos pelo subconjunto de acesso aberto do PMC, licenciados com CC BY e CC0.
- Metadados de periódicos fornecidos pelo Centro Nacional de Informações sobre Biotecnologia (NCBI) via pacote Bio.Entrez.
- Hierarquias da Ontologia de Doenças e códigos ICD-10 extraídos via API de vinculação ICD-10-CM do Amazon Comprehend Medical.
O diagrama abaixo ilustra o fluxo de carregamento dos dados no Amazon Neptune Analytics, usando serviços como Amazon Bedrock e Amazon Comprehend para extrair informações de periódicos médicos:

O grafo final é composto pelos seguintes tipos de nós:
- disease — representa uma doença dentro da Ontologia de Doenças, com mapeamento hierárquico entre doenças.
- author — representa um autor de um determinado periódico.
- journal — representa um periódico.
- journalChunk — representa um fragmento de um periódico, gerado pela estratégia padrão de chunking do Amazon Bedrock Knowledge Bases.
- icd10 — representa um código ICD-10, classificação padronizada de problemas médicos. As arestas entre nós icd10 e os nós de periódico foram criadas via vinculação ICD-10-CM do Amazon Comprehend Medical.

Como o modelo de dados do grafo é próprio, a solução utiliza o toolkit BYOKG-RAG para implementar consultas em linguagem natural sobre o grafo. O diagrama abaixo ilustra os componentes do BYOKG:

Pré-requisitos
Para implementar a solução, são necessários:
- AWS CLI versão 2.11.0 ou posterior instalada e configurada (guia de instalação).
- Acesso aos serviços: Amazon Neptune Analytics, Amazon Bedrock (modelo Claude 4.5 Sonnet), Amazon SageMaker, Amazon S3 e Amazon Comprehend Medical.
- Perfil IAM com as permissões:
NeptuneAnalyticsFullAccess,AWSServiceRoleForAmazonNeptuneAnalytics,AmazonS3ReadOnlyAccess,AmazonBedrockFullAccesseComprehendMedicalFullAccess. - Python 3.9 ou posterior.
- graphrag_toolkit versão 1.0.0 ou posterior.
- Ambiente Jupyter Notebook.
Estimativa de custos
A aproximação de custo por hora para executar esta demonstração é a seguinte:
- Neptune Analytics — grafo com 16 mNCU, sem standby, conectividade pública: US$ 0,48/hora.
- SageMaker Jupyter Notebook — instância t3.medium com 5 GB de volume EBS: US$ 0,05/hora (computação) + US$ 0,70/hora (armazenamento).
- Amazon S3 — armazenamento padrão, 161 MB: 0,161 GB × US$ 0,023 = US$ 0,0037 por mês.
- Amazon Bedrock — o custo depende do uso do modelo e do consumo de tokens. Consulte a página de preços para informações atualizadas.
Configurando o Neptune Analytics
A implementação começa com a configuração do Neptune Analytics. Os passos principais são:
1. Criar um bucket S3:
aws s3 mb s3://amzn-s3-bucket-name
2. Copiar o conjunto de dados para o bucket:
aws s3 sync s3://aws-neptune-customer-samples-us-east-1/sample-notebooks/vector-graph-hybrid-search/graph-data/ s3://amzn-s3-bucket-name/<YOUR PREFIX>
3. Criar um grafo no Neptune Analytics usando a API CreateGraphUsingImportTask para importar a partir do local do Amazon S3. Consulte o Guia do Usuário do Neptune Analytics para detalhes. Configure a memória provisionada mínima e máxima em 16.
4. Criar um Neptune Notebook associado ao grafo para facilitar consultas e interações. Consulte o Guia do Usuário do Neptune Analytics para detalhes sobre criação de notebooks.
5. Baixar o notebook de exemplo e fazer upload para o ambiente Jupyter.
Implementação: construindo um sistema GraphRAG modular
O notebook demonstra uma abordagem modular para construir um sistema de Geração Aumentada por Recuperação (RAG) sobre um grafo de conhecimento de saúde, usando o pacote Python graphrag-toolkit e o modelo Amazon Bedrock Anthropic Claude 4.5 Sonnet.
Inicialização do modelo de linguagem
O primeiro passo é inicializar o gerador de linguagem baseado no Amazon Bedrock:
from graphrag_toolkit.byokg_rag.llm import BedrockGenerator
def init_llm_generator(model_name='us.anthropic.claude-3-5-sonnet-20240620-v1:0', region_name='us-west-2'):
return BedrockGenerator(
model_name=model_name,
region_name=region_name
)
llm_generator = init_llm_generator()
Configuração do KGLinker
O KGLinker é inicializado com o armazenamento do grafo e o gerador de linguagem. Ele atua como a interface central para consultar o grafo e gerar respostas:
from graphrag_toolkit.byokg_rag.graph_connectors import KGLinker
def init_kg_linker(graph_store, llm_generator):
return KGLinker(graph_store=graph_store, llm_generator=llm_generator)
kg_linker = init_kg_linker(graph_store, llm_generator)
Gerando respostas a partir de consultas
Com o kg_linker configurado, é possível fazer perguntas em linguagem natural e obter respostas enriquecidas pelo contexto do grafo de conhecimento:
def generate_kg_response(kg_linker, question, schema, graph_context="Not provided. Use the above schema to understand the graph."):
return kg_linker.generate_response(
question=question,
schema=schema,
graph_context=graph_context
)
# Example usage
response = generate_kg_response(kg_linker, question, schema)
print(response)
Vinculação de entidades para recuperação aprimorada
Para melhorar a extração de informações e vincular o texto em linguagem natural às entidades do grafo, a solução usa um índice de string fuzzy combinado com o EntityLinker:
from graphrag_toolkit.byokg_rag.indexing import FuzzyStringIndex
from graphrag_toolkit.byokg_rag.graph_retrievers import EntityLinker
def init_and_link_entities(graph_store, artifacts):
string_index = FuzzyStringIndex()
string_index.add(graph_store.nodes())
retriever = string_index.as_entity_matcher()
entity_linker = EntityLinker(retriever=retriever)
linked_entities = entity_linker.link(artifacts["entity-extraction"], return_dict=False)
linked_answers = entity_linker.link(artifacts["draft-answer-generation"], return_dict=False)
return entity_linker, linked_entities, linked_answers
entity_linker, linked_entities, linked_answers = init_and_link_entities(graph_store, artifacts)
Essa estrutura modular separa claramente a inicialização do modelo de linguagem, a interface com o grafo de conhecimento, as consultas em linguagem natural e a vinculação de entidades nos nós do grafo. A separação facilita experimentação flexível e extensão para diferentes domínios ou conjuntos de dados. O uso do matcher de string fuzzy garante reconhecimento robusto de entidades, algo especialmente importante em contextos de dados de saúde complexos ou com ruído.
Benefícios e métricas de desempenho
Os principais indicadores de desempenho da implementação demonstram o valor mensurável que a solução GraphRAG pode gerar para organizações de pesquisa farmacêutica:
- Aceleração do ciclo de pesquisa — redução de seis meses para três semanas, representando um ganho de eficiência de 87%.
- Otimização da taxa de sucesso — análise entre domínios viabiliza direções de pesquisa mais eficazes e melhor alocação de recursos.
- Ganhos de eficiência operacional — 70% de redução no tempo de revisão, 85% de acesso mais rápido a dados e 90% de melhora no aproveitamento do conhecimento.
- Validação baseada em dados — rastreamento avançado e visualização garantem transparência total da pesquisa, fortalecendo a conformidade regulatória.
- Integração inteligente de conhecimento — o sistema escala e integra novas fontes de dados com impacto mínimo de recursos, preservando a memória institucional.
Limpeza dos recursos
Para evitar cobranças adicionais, é importante remover os recursos criados ao final da demonstração.
Excluir o grafo Neptune Analytics seguindo as etapas documentadas ou pelo comando CLI (substitua g-sample pelo ID do grafo criado):
aws neptune-graph delete-graph --graph-id g-sample
Excluir o notebook pelo Console de Gerenciamento da AWS, selecionando a instância e escolhendo a opção de exclusão no menu Ações.
Excluir o bucket S3 seguindo as etapas documentadas ou pelo comando CLI (substitua amzn-s3-bucket-name pelo nome do bucket criado):
aws s3 rb s3://amzn-s3-bucket-name --force
Conclusão
A integração do GraphRAG com Amazon Neptune Analytics e Amazon Bedrock representa um avanço significativo na metodologia de pesquisa científica. A solução permite conectar fontes de dados antes isoladas, interagir com conjuntos de dados complexos via linguagem natural e visualizar relações intrincadas entre entidades científicas.
Com redução de até 87% nos ciclos de pesquisa e potencial de aumentar em cinco vezes a taxa de descobertas bem-sucedidas, a abordagem não apenas acelera o ritmo da descoberta, mas também fortalece a qualidade e a credibilidade dos achados científicos. Organizações que adotam soluções de IA generativa nesse contexto não estão apenas melhorando seus processos — estão se posicionando na vanguarda da inovação científica.
Fonte
Powering scientific discovery: BYOKG and GraphRAG for intelligent pharmaceutical research (https://aws.amazon.com/blogs/machine-learning/powering-scientific-discovery-byokg-and-graphrag-for-intelligent-pharmaceutical-research/)
Leave a Reply