Epic_1_Sprint_3 Create nodes in neo4j - robbiemu/aclarai GitHub Wiki
Tarefa: Criar nós (:Claim) e (:Sentence) no Neo4j
Descrição
Implementar a criação e gerenciamento de nós (:Claim)
e (:Sentence)
no banco de dados Neo4j, estabelecendo a estrutura fundamental do grafo de conhecimento para armazenar e relacionar claims extraídos e sentenças originais, incluindo as propriedades de qualidade dos claims e o relacionamento ORIGINATES_FROM
.
Escopo
Incluído
- Definição do esquema para nós
(:Claim)
e(:Sentence)
no Neo4j, conforme especificado emtechnical_overview.md
(seção IV.AClaim
Node Properties). - Implementação de funções para criar nós
(:Claim)
a partir de claims extraídos pelo pipeline Claimify, incluindo as propriedadesentailed_score
,coverage_score
, edecontextualization_score
(que podem sernull
neste sprint). - Implementação de funções para criar nós
(:Sentence)
para chunks de enunciados que não geraram claims de alta qualidade (e.g., foram descartados na fase de Decomposition do Claimify ou marcados como ambíguos), incluindo a propriedadeambiguous
se aplicável. - Estabelecimento do relacionamento
(:Claim)-[:ORIGINATES_FROM]->(:Block)
ou(:Sentence)-[:ORIGINATES_FROM]->(:Block)
para conectar claims e sentenças aos seus blocos de origem Tier 1 (technical_overview.md
eon-graph_vault_synchronization.md
). - Armazenamento de metadados relevantes para ambos os tipos de nós (e.g.,
aclarai:id
,text
,version
,timestamp
). - Implementação de índices apropriados para propriedades frequentemente consultadas (e.g.,
aclarai:id
,text
). - Documentação do esquema e uso da API de interação com o Neo4j.
Excluído
- Interface de usuário para visualização do grafo.
- Implementação de relacionamentos com conceitos (e.g.,
SUPPORTS_CONCEPT
,MENTIONS_CONCEPT
) que será feito em Sprint 5. - Avaliação de qualidade dos claims no pipeline Claimify (o cálculo dos scores), pois os scores virão da tarefa anterior deste sprint (mas a persistência dos scores
null
ou preenchidos já é incluída). - Otimizações avançadas de consulta (além dos índices básicos).
- Migração de dados legados.
Critérios de Aceitação
- Esquema de nós
(:Claim)
(comentailed_score
,coverage_score
,decontextualization_score
) e(:Sentence)
(comambiguous
opcional) definido e documentado. - Funções para criar nós
(:Claim)
a partir da saída do Claimify implementadas e testadas. - Funções para criar nós
(:Sentence)
a partir de chunks de enunciados que não resultaram em claims implementadas e testadas. - Relacionamento
ORIGINATES_FROM
entre claims/sentenças e seus blocos de origem estabelecido corretamente no grafo. - Metadados relevantes (
aclarai:id
,text
,version
,timestamp
, scores de qualidade) armazenados adequadamente em cada nó. - Índices criados no Neo4j para propriedades-chave (
aclarai:id
,text
) para consultas eficientes. - Documentação clara do esquema do grafo e das funções da API.
- Testes unitários e de integração demonstrando a funcionalidade de criação e persistência de nós e relacionamentos no Neo4j.
Dependências
- Neo4j configurado e acessível (de Sprint 1).
- Pipeline Claimify implementado para extração de claims e identificação de sentenças que não viraram claims (da tarefa anterior deste sprint).
- Definição clara do formato de saída dos claims e sentenças do pipeline Claimify.
- Definição do esquema de nós e relacionamentos em
technical_overview.md
.
Entregáveis
- Código-fonte para criação e gerenciamento de nós
(:Claim)
e(:Sentence)
no Neo4j (via LlamaIndex ou driver direto). - Esquema documentado do grafo, incluindo propriedades e relacionamentos.
- Funções de API (internas do serviço
aclarai-core
) para interação com o grafo. - Testes unitários e de integração.
- Documentação de uso e exemplos de dados criados.
Estimativa de Esforço
- 3 dias de trabalho
Riscos e Mitigações
- Risco: Esquema inadequado para necessidades futuras ou para a captura completa da semântica de Claimify.
- Mitigação: Projetar o esquema com base em
technical_overview.md
, permitindo extensibilidade futura (e.g., adicionar mais propriedades ou rótulos sem refatoração drástica); documentar claramente as convenções e princípios de design.
- Mitigação: Projetar o esquema com base em
- Risco: Desempenho inadequado com grande volume de dados ou alta taxa de ingestão.
- Mitigação: Implementar índices apropriados desde o início; considerar estratégias de ingestão em lote (batching) para criação de nós e relacionamentos; monitorar o desempenho durante os testes.
- Risco: Inconsistências entre o grafo e os dados de origem (e.g., blocos Markdown).
- Mitigação: Focar na precisão dos
aclarai:id
e versionamento. Os mecanismos de sincronização (vault-to-graph sync
de Sprint 3 efile watcher
de Sprint 4) mitigarão isso a longo prazo.
- Mitigação: Focar na precisão dos
Notas Técnicas
- Utilizar o LlamaIndex (
KnowledgeGraphIndex
ouNeo4jGraphStore
) para abstrair a interação com o Neo4j, se o LlamaIndex suportar a criação de nós com propriedades complexas e relacionamentos arbitrários. Caso contrário, usar o driver Neo4j Python diretamente. - Implementar as propriedades
entailed_score
,coverage_score
, edecontextualization_score
comoFloat
(ounull
se não avaliadas) para(:Claim)
nós. - Criar a propriedade
ambiguous
(Boolean) para nós(:Sentence)
quando apropriado. - Priorizar a criação do relacionamento
ORIGINATES_FROM
para garantir a rastreabilidade imediata dos claims e sentenças. - Implementar índices no Neo4j para propriedades frequentemente consultadas, especialmente
aclarai:id
para buscas rápidas. - Considerar estratégias de processamento em lote (Cypher
UNWIND
para múltiplosCREATE
ouMERGE
) para otimizar a performance de ingestão. - Documentar claramente as convenções de nomenclatura para nós (
:Claim
,:Sentence
,:Block
) e relacionamentos (:ORIGINATES_FROM
).