2025년 11월 29일 토요일

FalkorDB와 LLM을 활용한 BIM 그래프 에이전트 개발

이 글은 IFC(Industry Foundation Classes) 포맷의 BIM 데이터를 FalkorDB 그래프 데이터베이스로 변환하고, 로컬 LLM(Ollama)을 연동하여 자연어 질의가 가능한 AI 에이전트를 구축하는 전체 과정을 기술한다. 도커(Docker) 기반의 데이터베이스 서버 구성부터 Python 의존성 설치, 데이터 적재 및 애플리케이션 실행 방법을 단계별로 정리한다.

개발 환경 및 전제 조건
본 시스템은 온프레미스 환경에서의 실행을 가정하며, 다음 컴포넌트들을 필요로 한다.
  • 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에 적재하는 과정이다.
  1. ifcopenshell을 이용해 IFC 엔티티 파싱.
  2. src.falkordb_graph_converter 모듈이 엔티티를 노드로, 관계(포함, 집합 등)를 엣지로 변환.
  3. 속성(Property Set) 정보를 JSON 형태로 직렬화하여 노드에 저장.
# 기본 변환 (input 폴더 내의 IFC 파일 자동 감지)
python import_ifc_to_falkordb.py

실행된 결과 FalkorDB 의 서버에 접속해 확인해 보면 다음과 같이 파싱된 IFC 데이터셋이 그래프DB로 구축된 것을 확인할 수 있다. 

웹 기반 에이전트 실행
데이터 적재가 완료되면 Streamlit 기반의 웹 인터페이스를 구동하여 질의응답 시스템을 활성화한다.
  1. 질의 입력: 사용자 자연어 질문 수신.
  2. Cypher 변환: LLM(qwen2.5-coder)이 스키마 정보를 바탕으로 질문을 Cypher 쿼리로 변환.
  3. 쿼리 실행: FalkorDB 엔진이 그래프 탐색 수행 후 JSON 결과 반환.
  4. 답변 생성: LLM이 JSON 결과를 해석하여 자연어 답변 생성.
streamlit run BIM_graph_agent_web_falkordb.py

결론
위 과정을 통해 구축된 시스템은 복잡한 BIM 데이터의 위상학적 관계를 그래프로 표현하고, 별도의 쿼리 언어 학습 없이 자연어만으로 건물 정보를 조회할 수 있는 환경을 제공한다. FalkorDB의 빠른 인덱싱과 로컬 LLM의 보안성을 결합하여 실무에 적용 가능한 수준의 응답 속도와 데이터 프라이버시를 확보할 수 있다.

댓글 없음:

댓글 쓰기