Files
AI/PHASE5_REFERENCE_ANALYSIS.md
2026-05-12 19:40:31 +09:00

3.1 KiB

Phase 5 Reference Analysis

1. 참조한 오픈소스 목록

  • 참고/ontocast-main
  • 참고/neo4j-graphrag-python-main
  • 참고/knowledge_agent-main
  • 참고/OpenDeepResearcher-main
  • 참고/instructor-main
  • 참고/guardrails-main
  • Phase 1 계열 참고: playwright-main, trafilatura-master, crawl4ai-main, firecrawl-main

2. 각 오픈소스에서 참고한 코드 구조

  • ontocast: Pydantic report model, RDF triple payload, graph update/fix model, external evidence request 분리.
  • neo4j-graphrag: NodeType, RelationshipType, GraphSchema, constraint/property schema, storage/query layer 분리.
  • knowledge_agent: LangGraph state machine, role별 node, state에 todo/complete/report를 축적하는 loop.
  • OpenDeepResearcher: query generation, source fetch, relevance evaluation, context extraction, iterative refinement loop.
  • instructor: response model 중심 structured output, retry/validation exception 경계.
  • guardrails: validation outcome, validator/reask/on-fail action 분리.

3. 현재 프로젝트에 직접 적용한 구조

  • Ontology schema를 DB registry로 분리: OntologyEntityType, OntologyRelationType.
  • Claim과 graph fact를 분리: Claim은 provenance/evidence, OntologyTriple은 graph fact.
  • Schema evolution을 review 대상으로 분리: OntologyProposal.
  • Ontology가 모르는 영역을 별도 객체로 관리: KnowledgeGap.
  • Domain-specific relation/type alias는 crawler_platform/app/adapters로 분리.
  • Knowledge gap을 research queue item으로 변환하는 GapTaskPlanner 추가.

4. 제외한 구조와 제외 이유

  • Neo4j 전용 driver/query 구조: 현재 저장소는 SQLAlchemy/SQLite 중심이라 storage abstraction만 반영.
  • LangGraph/MCP runtime: 현재 앱에 무거운 agent runtime을 넣기보다 queue/state 구조만 반영.
  • OpenDeepResearcher의 외부 검색 API 호출: 네트워크/API 의존이 크므로 research task 추상화만 반영.
  • Instructor/Guardrails 라이브러리 직접 의존: 현재 provider 독립 구조를 유지하기 위해 schema/retry/validation 개념만 반영.

5. 새 core architecture 방향

Crawler / Browser
→ Main Content Extraction
→ Semantic Cleaning
→ Structured Document
→ Structured Extraction
→ Validation
→ Ontology Registry
→ Claim / Evidence
→ Ontology Triple
→ Knowledge Gap
→ Gap-driven Research Queue
→ Governance Proposal

6. 기존 domain-specific hardcoding 제거 방향

  • relation_schema.py에서 perfume relation rule을 제거하고 perfume adapter로 이동.
  • entity_normalizer.py에서 perfume alias를 제거하고 adapter 기반 normalization으로 변경.
  • Core validation은 config/registry/adapter constraint만 사용하도록 변경.
  • Multi-domain test에서 academic domain의 authoredBy relation이 perfume adapter 없이 동작함을 검증.

7. 남은 Phase 6 후보

  • page classifier와 content zone도 adapter 기반으로 분리.
  • external search planner를 gap-driven research loop에 연결.
  • schema proposal approve/reject API와 migration history 추가.
  • source conflict resolver를 triple merge 단계에 더 깊게 연결.