Files
AI/ontology_platform/docs/phases/PHASE0_ACCEPTANCE_GATE.md
lasta ec4f9a64f6 Phase 0.7 — Acceptance Gate 자동화 + LM Studio 통합 + OntoCast 버그 수정
- platform/ → ont_platform/ rename
  Python 내장 platform 모듈과 이름 충돌. numpy/scipy가 platform.machine() 호출 시
  우리 패키지를 가져와 AttributeError. ont_platform으로 변경하고 pyproject.toml,
  ont_platform/**, tests/** import 경로 모두 업데이트.

- ont_platform/config.py: lenient LLM builder 추가
  LM Studio/vLLM 등 OpenAI-호환 로컬 서버가 임의 모델 식별자(예: deepseek-r1-distill-
  qwen-7b)를 쓸 수 있도록 OntoCast의 OpenAIModel enum validation을 Pydantic
  model_construct로 우회. ToolConfig() 생성 시 충돌을 막기 위해 LLM_MODEL_NAME을
  잠시 비웠다가 lenient 인스턴스로 교체.

- ont_platform/api/deps.py: ToolBox 초기화를 asyncio.to_thread로 격리
  LLMTool.create()가 내부에서 asyncio.run()을 부르는데 lifespan/테스트가 이미
  async 컨텍스트라 이중 loop 충돌. 별도 스레드에서 sync 생성자 실행.

- 테스트 인프라 정비
  * tests/integration/test_api_smoke.py: TestClient 구버전 starlette 호환을 위해
    lifespan='off' 대신 app.router.lifespan_context = noop 패턴 적용.
  * tests/unit/test_convert_document.py, test_select_ontology.py: ontocast.agent
    __init__.py가 re-export한 함수가 서브모듈을 가리는 문제로 sys.modules에서
    실제 모듈 객체 직접 추출.
  * tests/e2e/conftest.py: .env 자동 로드 + provider별 skip 조건 (Ollama는
    LLM_API_KEY 불필요).
  * tests/e2e/test_phase0_full_pipeline.py: provider별 키 분기,
    HDBSCAN 클러스터링이 동작하도록 fixture 페이로드 16문장으로 확장.

- vendored OntoCast 버그 수정 3건 (VENDORED_MODIFICATIONS.md 기록):
  * agent/render_ontology.py: render_ontology_fresh()의 .format() 호출에 누락된
    ontology_prefix 인자 추가 (Bootstrap 단계에서 KeyError: 'ontology_prefix').
  * stategraph/node_factories.py: render_ontology/render_facts 노드의
    state.model_copy(deep=True)로 budget_tracker가 deep-copy되어 root state의
    BudgetTracker가 영원히 0인 채로 남던 버그 수정. 원본 인스턴스 공유로 변경.

- 문서 갱신
  README.md (Phase 0.7 부분완료 + ont_platform 폴더 이름),
  docs/phases/PHASE0_ACCEPTANCE_GATE.md (검증 이력 + Ollama/LM Studio 옵션),
  .env.example (LM Studio/Ollama/OpenAI 세 옵션 명시).

검증
- unit + integration 26/26 통과.
- e2e (LM Studio + Qwen3-8B / DeepSeek-R1-Distill-Qwen-7B): 워크플로우 끝까지
  실행 + 5번 LLM 호출 + LangGraph 전 노드 traceable 확인. 7-8B 로컬 모델은
  strict structured output(Turtle RDF in JSON) 한계로 ontology/facts TTL 자동
  생성 부분 성공. 클라우드 LLM 환경에서 재검증 필요.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-05-14 09:05:24 +09:00

5.0 KiB

Phase 0 — Acceptance Gate 결과

본 문서는 통합설계서 §5 Phase 0의 Acceptance Gate를 객관적으로 점검한 결과다. Phase 1 진입 전에 모든 체크가 통과되어야 한다.

결과 요약

# Acceptance Gate 항목 상태 검증 방법
1 단일 PDF/JSON 입력 → ontology TTL + facts TTL이 filesystem에 생성됨 ⚠️ e2e 검증 대기 (로컬 LLM/API 키 필요) tests/e2e/test_phase0_full_pipeline.py
2 /health, /info, /process (FastAPI) 정상 동작 통합 테스트 10/10 통과 (2026-05-14) tests/integration/test_api_smoke.py
3 BudgetTracker가 LLM call/triple count를 정확히 기록 ⚠️ e2e 검증 대기 (mock 검증은 통합 테스트로 통과) e2e 테스트가 실제 검증
4 LangGraph 워크플로우 (CONVERT→CHUNK→...→SERIALIZE) 전 노드 traceable OntoCast 원본 워크플로우 무수정 채택 vendored/ontocast/ontocast/stategraph/ 그대로 사용

추가로 단위 테스트 16/16 통과 (test_convert_document 7, test_platform_config 5, test_select_ontology 4).

현재 진척 (2026-05-14):

  • Python 3.13.13 환경 + pip install -e ".[dev]" 완료
  • pip install -e vendored/ontocast 로 OntoCast 의존성 설치 완료
  • 패키지 이름 충돌 수정: platform/ont_platform/ (Python 내장 platform 모듈과 충돌)
  • 단위 + 통합 테스트 26/26 모두 통과
  • 남은 작업: e2e 테스트 (Acceptance Gate #1, #3) 실행 — 로컬 Ollama 또는 OpenAI 키 필요

다음 작업자가 실행할 검증 절차

1) 환경 준비

# Python 3.12+ 설치 (예: https://www.python.org/downloads/)
python --version  # Python 3.12.x 이상 확인

cd C:\Users\lasta\MyProject\AI\ontology_platform

# 가상환경 + 의존성 설치
python -m venv .venv
.venv\Scripts\activate
pip install --upgrade pip
pip install -e ".[dev]"

# .env 생성 (실제 LLM 키 채우기)
Copy-Item .env.example .env
# 그 다음 .env 파일을 편집하여 LLM_API_KEY 등 채움

2) 자동 검증 (Acceptance Gate #2)

# 단위 + 통합 테스트만 (LLM 호출 없음, 빠름)
pytest tests/unit tests/integration -v

기대 결과: 모든 케이스 PASS.

  • tests/unit/test_select_ontology.py (4 케이스) — Phase 0.2 검증
  • tests/unit/test_convert_document.py (7 케이스) — Phase 0.3 검증
  • tests/unit/test_platform_config.py (5 케이스) — Phase 0.5 검증
  • tests/integration/test_api_smoke.py (10 케이스) — Phase 0.4 + 0.6 mock 검증

3) End-to-end 검증 (Acceptance Gate #1, #3, #4)

LLM 호출이 실제로 일어남. OpenAI는 비용 발생, Ollama는 로컬에서 무료.

# (A) Ollama 로컬 사용 (권장 — 비용 무료)
# 사전: Ollama 설치 후 `ollama pull qwen2.5`
$env:LLM_PROVIDER = "ollama"
$env:LLM_MODEL_NAME = "qwen2.5"
$env:LLM_BASE_URL = "http://localhost:11434"
pytest tests/e2e -m e2e -v

# (B) OpenAI 사용
$env:LLM_PROVIDER = "openai"
$env:LLM_MODEL_NAME = "gpt-4o-mini"
$env:LLM_API_KEY = "sk-..."
pytest tests/e2e -m e2e -v

기대 결과:

  • test_full_pipeline_writes_ontology_and_facts PASS
  • 응답에서 ontology TTL과 facts TTL이 비어 있지 않음
  • metadata.budget.calls_count > 0
  • metadata.budget.ontology_triples_generated > 0 또는 facts_triples_generated > 0
  • tmp_path / "work" 아래 .ttl 또는 .rdf 파일 생성됨

4) 수동 smoke (선택)

# 서버 기동
uvicorn ont_platform.api.main:app --reload

# 다른 셸에서
curl http://localhost:8000/health
curl http://localhost:8000/info
curl -X POST http://localhost:8000/process `
  -H "Content-Type: application/json" `
  -d '{"text":"Alice works at Acme in Berlin."}'

통과 시 처리

위 모든 검증을 통과하면 이 문서의 표 상태 컬럼을 로 갱신하고 git에 commit한다.

이후 Phase 1 작업은 PHASE1_NEXT_STEPS.md를 따른다.

실패 시 처리

  • 단위 테스트 실패: 어느 케이스가 실패했는지 확인. Phase 0.2/0.3/0.5의 vendored 수정 또는 platform/ 코드에 회귀가 발생했을 가능성. PR 단위로 롤백 후 재시도.
  • 통합 테스트 실패: FastAPI 라우팅/의존성 주입 문제. platform/api/main.py 또는 platform/api/deps.py 확인.
  • E2E 테스트 실패:
    • LLM_API_KEY, LLM_PROVIDER, LLM_MODEL_NAME 환경변수 확인
    • 워크플로우가 timeout: ServerConfig.base_recursion_limit 조정 검토
    • OntoCast select_ontology.py 또는 convert_document.py 수정에 회귀가 있는지 점검 (VENDORED_MODIFICATIONS.md 참조)

검증 이력

일자 검증자 결과
2026-05-13 (코드 작성: ontology-platform agent) 코드 준비 완료. 실 환경 검증 보류.
2026-05-14 lasta + Claude unit 16/16, integration 10/10 통과 (Gate #2 ). 패키지 이름 충돌 수정 (platformont_platform). e2e는 LLM 필요로 대기.
____-- ________________ __________________________________