Files
AI/ontology_platform/docs/phases/PHASE0_NEXT_STEPS.md
LASTA_DEV01\lasta 9e88f4c7ad ontology
2026-05-13 19:57:34 +09:00

6.2 KiB

Phase 0 — 다음 작업자 핸드오프

본 문서는 이 프로젝트를 이어받는 AI 에이전트 또는 개발자가 즉시 작업을 시작하기 위한 핸드오프 노트다.

현재 상태 (지금까지 완료된 것)

  • 0.1 일부: 폴더 골격, pyproject.toml, README.md, .env.example, .gitignore, NOTICE 생성
  • 설계 문서: ../통합설계서.md 배치 완료 (모든 작업의 기준)

즉시 시작할 작업 (순서대로)

0.1 (잔여): OntoCast vendored copy

근거: 통합설계서 §9.1, OntoCast 분석 §13.1

# 1. 원본을 vendored/ontocast로 복사 (.git 제외)
Copy-Item -Path "C:\Users\lasta\MyProject\AI\참고\ontocast-main\*" `
          -Destination "C:\Users\lasta\MyProject\AI\ontology_platform\vendored\ontocast\" `
          -Recurse -Exclude ".git",".github",".venv","node_modules"

# 2. 원본 LICENSE 및 NOTICE를 vendored/ontocast/ 안에 그대로 유지
# 3. NOTICE 파일의 "(원본 저장소 URL 기입)" 부분을 실제 URL로 채우기
# 4. git init (아직 안 했다면)
cd C:\Users\lasta\MyProject\AI\ontology_platform
git init
git add .
git commit -m "Initial scaffold: folder skeleton, design doc, NOTICE"

확인 사항:

  • vendored/ontocast/ 안에 원본 LICENSE 파일이 있어야 한다
  • vendored/ontocast/pyproject.toml은 그대로 두되, 우리 pyproject.toml이 우선
  • NOTICE 파일의 OntoCast 항목에 실제 source URL 기입

0.2: select_ontology.py 버그 수정

근거: 통합설계서 §5 Phase 0, OntoCast 분석 §13.1 / §9.1 (1번)

문제: vendored/ontocast/ontocast/agent/select_ontology.py에서 None 선택 인덱스 불일치.

  • 코드는 answer_index == 0을 None으로 처리
  • 그러나 dynamic model은 1..num_ontologies+1 범위 사용
  • 실제 None 선택은 num_ontologies + 1이어야 자연스러움

조치:

  1. 해당 함수의 분기 로직을 answer_index == num_ontologies + 1 또는 동등한 표현으로 수정
  2. 수정 사실을 파일 상단 주석으로 명시 (Apache 2.0 의무): 예) # MODIFIED 2026-MM-DD: Fixed None index inconsistency, see docs/통합설계서.md §5 Phase 0
  3. 회귀 테스트 작성: tests/unit/test_select_ontology.py
    • 케이스 1: ontology가 0개일 때 → None 반환
    • 케이스 2: ontology가 N개, LLM이 1~N 선택 → 해당 ontology 반환
    • 케이스 3: ontology가 N개, LLM이 N+1 선택 → None 반환

0.3: convert_document.py 다중 파일 처리 확장

근거: 통합설계서 §5 Phase 0, OntoCast 분석 §13.1 (3번) / §21.1 (4번)

문제: convert_document()가 "processing only one file"로 주석 처리되어 있고, 다중 파일 처리 시 마지막 파일 기준으로만 상태가 업데이트됨.

조치:

  1. 입력 파일 목록을 순회하며 각 파일을 독립 ContentUnit으로 만들어 AgentState.content_units에 누적
  2. 동일 corpus 내 파일들이 함께 처리되도록 보장 (각 파일이 별도 doc IRI를 가짐)
  3. 회귀 테스트: 2개 PDF를 한 번에 처리 → 둘 다 처리되어야 함

0.4: Robyn → FastAPI 재작성

근거: 통합설계서 §11 (기술 스택), OntoCast 분석 §13 (API 명세)

조치:

  1. platform/api/main.py 생성 (FastAPI app 인스턴스)
  2. OntoCast 분석 §13.1~§13.4의 4개 endpoint를 FastAPI로 동일 시맨틱 재작성:
    • GET /health
    • GET /info
    • POST /process (JSON + multipart)
    • POST /flush (관리자 권한 + confirmation token, 분석 §21.1 #6)
  3. OntoCast의 ToolBox 의존성 주입은 FastAPI Depends로 변환
  4. uvicorn platform.api.main:app --reload로 기동 가능해야 함

중요: OntoCast 코어 모듈(stategraph/, agent/, onto/, tool/)은 건드리지 않는다. API 레이어만 재작성.

0.5: Pydantic Settings 정리

근거: 통합설계서 §5 Phase 0 (5번), OntoCast 분석 §15

조치:

  1. platform/config.py 생성
  2. pydantic-settingsBaseSettings.env 로딩
  3. Phase 0에서는 filesystem 모드만 활성화 (Fuseki/Neo4j는 Phase 4에서):
    • STORAGE_BACKEND=filesystem 강제
    • Neo4j/Fuseki 변수가 채워져 있어도 무시
  4. OntoCast의 기존 Config 클래스는 우리 Settings에서 만들어 주입

0.6: End-to-end 통합 테스트

근거: 통합설계서 §5 Phase 0 Acceptance Gate

조치:

  1. vendored/ontocast/data/의 예제 JSON 또는 PDF 1개를 fixture로 복사 → tests/fixtures/
  2. tests/integration/test_phase0_e2e.py 작성:
    • FastAPI TestClient/process 호출
    • 응답에 ontology TTL과 facts TTL 둘 다 포함
    • working_directory/에 ontology/facts 파일 생성 확인
    • BudgetTracker가 LLM call/triple count를 0보다 큰 값으로 기록

0.7: Acceptance Gate 0 체크

통합설계서 §5 Phase 0 Acceptance Gate의 4개 체크박스를 PR에 인용하며 모두 확인:

  • 단일 PDF 또는 JSON 입력 → ontology TTL + facts TTL이 filesystem에 생성됨
  • /health, /info, /process (FastAPI 버전) 정상 동작
  • BudgetTracker가 LLM call/triple count를 정확히 기록
  • LangGraph 워크플로우(CONVERT→CHUNK→...→SERIALIZE) 전 노드가 traceable

작업 시 준수사항

  1. PR 단위: 위의 0.1~0.7 각각을 별도 PR/커밋으로 분리. 하나의 PR에 여러 단계를 섞지 않는다.
  2. PR 설명에 근거 인용: 예) "통합설계서 §5 Phase 0 (3번)에 따라 다중 파일 처리 확장. OntoCast 분석 §13.1 인용."
  3. vendored/ 수정 시 라이선스 의무:
    • 수정한 파일 상단에 # MODIFIED YYYY-MM-DD: <한 줄 설명> 주석 추가
    • 원본 LICENSE/NOTICE 파일은 절대 삭제하지 않는다
  4. Phase 1로 넘어가지 말 것: Acceptance Gate 0 통과 전까지 Trafilatura/Crawl4AI/Guardrails/Neo4j GraphRAG 의존성을 활성화하거나 import하지 않는다. (pyproject.toml에 명시되어 있더라도 코드에서 사용 금지)

Phase 1 이후 핸드오프

Phase 0 완료 후, 본 폴더에 PHASE1_NEXT_STEPS.md를 작성하여 다음 작업자에게 동일한 형식으로 핸드오프한다. 통합설계서 §12 Phase 1 작업 단위(1.1~1.7)를 참조.