개발 환경 및 전제 조건
본 시스템은 온프레미스 환경에서의 실행을 가정하며, 다음 컴포넌트들을 필요로 한다.
- Docker: 그래프 데이터베이스(FalkorDB) 실행
- Python 3.9+: 데이터 변환 및 에이전트 로직 수행
- Ollama: 로컬 LLM 추론 서버
- 하드웨어: LLM 구동을 위한 적정 수준의 GPU 또는 메모리(RAM 16GB 이상 권장)
데이터베이스 서버 구축 (FalkorDB)
FalkorDB는 Redis API 호환 고성능 그래프 데이터베이스다. Docker 컨테이너를 사용하여 신속하게 배포한다.
docker run -p 6379:6379 -p 3000:3000 -it --rm -v ./data:/var/lib/falkordb/data falkordb/falkordb
-p 6379:6379: FalkorDB(Redis 프로토콜) 접속 포트 바인딩. Python 클라이언트가 이 포트로 통신한다.
-p 3000:3000: (옵션) FalkorDB 시각화 도구 등을 위한 포트 바인딩.
-it --rm: 대화형 모드로 실행하며, 컨테이너 종료 시 자동 삭제.
-v ./data:/var/lib/falkordb/data: 호스트의 ./data 디렉토리를 컨테이너 내 데이터 저장소로 마운트하여 데이터 영속성(Persistence)을 보장한다.
패키지 및 모델 설치
IFC 파싱, 그래프 DB 연결, LLM 체인 구성을 위한 라이브러리를 설치한다.
Plaintext
falkordb
langchain
langchain-ollama
langchain-core
ifcopenshell
python-dotenv
streamlit
자연어를 Cypher 쿼리로 변환(Text-to-Cypher)하는 작업에는 코드 생성 능력이 뛰어난 모델이 필요하다. 본 프로젝트에서는 qwen2.5-coder:7b 모델을 사용한다.
# Ollama 설치 후 아래 명령어 실행
ollama pull qwen2.5-coder:7b
데이터베이스 연결 정보 및 그래프 네임스페이스 설정을 위해 프로젝트 루트에 .env 파일을 생성한다.
FALKORDB_HOST=localhost
FALKORDB_PORT=6379
FALKORDB_GRAPH=bim
FALKORDB_USERNAME=
FALKORDB_PASSWORD=
데이터 적재 (ETL Process)
BIM 데이터(.ifc)를 그래프 구조(노드 및 엣지)로 변환하여 FalkorDB에 적재하는 과정이다.
- ifcopenshell을 이용해 IFC 엔티티 파싱.
- src.falkordb_graph_converter 모듈이 엔티티를 노드로, 관계(포함, 집합 등)를 엣지로 변환.
- 속성(Property Set) 정보를 JSON 형태로 직렬화하여 노드에 저장.
python import_ifc_to_falkordb.py
실행된 결과 FalkorDB 의 서버에 접속해 확인해 보면 다음과 같이 파싱된 IFC 데이터셋이 그래프DB로 구축된 것을 확인할 수 있다.
웹 기반 에이전트 실행
데이터 적재가 완료되면 Streamlit 기반의 웹 인터페이스를 구동하여 질의응답 시스템을 활성화한다.
- 질의 입력: 사용자 자연어 질문 수신.
- Cypher 변환: LLM(qwen2.5-coder)이 스키마 정보를 바탕으로 질문을 Cypher 쿼리로 변환.
- 쿼리 실행: FalkorDB 엔진이 그래프 탐색 수행 후 JSON 결과 반환.
- 답변 생성: LLM이 JSON 결과를 해석하여 자연어 답변 생성.
결론
위 과정을 통해 구축된 시스템은 복잡한 BIM 데이터의 위상학적 관계를 그래프로 표현하고, 별도의 쿼리 언어 학습 없이 자연어만으로 건물 정보를 조회할 수 있는 환경을 제공한다. FalkorDB의 빠른 인덱싱과 로컬 LLM의 보안성을 결합하여 실무에 적용 가능한 수준의 응답 속도와 데이터 프라이버시를 확보할 수 있다.



댓글 없음:
댓글 쓰기