Ontotext GraphDB는 RDF 및 SPARQL을 준수하는 그래프 데이터베이스이자 지식 발견 도구입니다.
이 노트북은 LLM을 사용하여Ontotext GraphDB에 대한 자연어 쿼리(NLQ to SPARQL,text2sparql이라고도 함)를 제공하는 방법을 보여줍니다.
GraphDB LLM 기능
GraphDB는 여기에 설명된 일부 LLM 통합 기능을 지원합니다:
gpt-queries
- 지식 그래프(KG)의 데이터를 사용하여 텍스트, 목록 또는 테이블을 LLM에 요청하는 magic predicates
- 쿼리 설명
- 결과 설명, 요약, 재구성, 번역
- 벡터 데이터베이스에서 KG 엔티티 인덱싱
- 모든 텍스트 임베딩 알고리즘 및 벡터 데이터베이스 지원
- GraphDB가 Elastic, Solr, Lucene에 사용하는 것과 동일한 강력한 connector(인덱싱) 언어 사용
- RDF 데이터의 변경 사항을 KG 엔티티 인덱스에 자동 동기화
- 중첩 객체 지원 (GraphDB 버전 10.5에서는 UI 지원 없음)
- KG 엔티티를 다음과 같이 텍스트로 직렬화 (예: Wines 데이터셋의 경우):
- 정의된 KG 엔티티 인덱스를 사용하는 간단한 챗봇
SPARQL 생성을 사용합니다. 여기에서 확인할 수 있는 Star Wars API(SWAPI) 온톨로지와 데이터셋을 사용합니다.
설정하기
실행 중인 GraphDB 인스턴스가 필요합니다. 이 튜토리얼은 GraphDB Docker 이미지를 사용하여 데이터베이스를 로컬에서 실행하는 방법을 보여줍니다. Star Wars 데이터셋으로 GraphDB를 채우는 docker compose 설정을 제공합니다. 이 노트북을 포함한 모든 필요한 파일은 GitHub 저장소 langchain-graphdb-qa-chain-demo에서 다운로드할 수 있습니다.- Docker를 설치합니다. 이 튜토리얼은 Docker Compose가 번들로 제공되는 Docker 버전
24.0.7을 사용하여 작성되었습니다. 이전 Docker 버전의 경우 Docker Compose를 별도로 설치해야 할 수 있습니다. - GitHub 저장소 langchain-graphdb-qa-chain-demo를 로컬 머신의 폴더에 클론합니다.
- 동일한 폴더에서 다음 스크립트를 실행하여 GraphDB를 시작합니다
http://localhost:7200/에서 시작되기까지 몇 초 정도 기다려야 합니다. Star Wars 데이터셋 starwars-data.trig가 자동으로 langchain 저장소에 로드됩니다. 로컬 SPARQL 엔드포인트 http://localhost:7200/repositories/langchain을 사용하여 쿼리를 실행할 수 있습니다. 또한 선호하는 웹 브라우저에서 GraphDB Workbench http://localhost:7200/sparql을 열어 대화형으로 쿼리를 수행할 수 있습니다.
- 작업 환경 설정
conda를 사용하는 경우 새로운 conda 환경을 생성하고 활성화합니다. 예:
온톨로지 지정
LLM이 SPARQL을 생성할 수 있으려면 지식 그래프 스키마(온톨로지)를 알아야 합니다.OntotextGraphDBGraph 클래스의 두 가지 매개변수 중 하나를 사용하여 제공할 수 있습니다:
query_ontology: SPARQL 엔드포인트에서 실행되어 KG 스키마 문장을 반환하는CONSTRUCT쿼리입니다. 온톨로지를 자체 named graph에 저장하는 것을 권장하며, 이렇게 하면 관련 문장만 더 쉽게 가져올 수 있습니다(아래 예시 참조).DESCRIBE쿼리는 지원되지 않습니다.DESCRIBE는 Symmetric Concise Bounded Description(SCBD), 즉 들어오는 클래스 링크도 반환하기 때문입니다. 수백만 개의 인스턴스가 있는 대규모 그래프의 경우 효율적이지 않습니다. github.com/eclipse-rdf4j/rdf4j/issues/4857을 확인하세요local_file: 로컬 RDF 온톨로지 파일입니다. 지원되는 RDF 형식은Turtle,RDF/XML,JSON-LD,N-Triples,Notation-3,Trig,Trix,N-Quads입니다.
- 클래스, 속성, 클래스에 대한 속성 연결(rdfs:domain, schema:domainIncludes 또는 OWL 제약 사용), 분류 체계(중요한 개체)에 대한 충분한 정보를 포함합니다.
- SPARQL 구성에 도움이 되지 않는 지나치게 장황하고 관련 없는 정의 및 예제는 포함하지 않습니다.
Turtle로 LLM에 제공됩니다. 적절한 접두사가 있는 Turtle이 가장 간결하고 LLM이 기억하기 가장 쉽기 때문입니다.
Star Wars 온톨로지는 클래스에 대한 많은 특정 트리플을 포함한다는 점에서 다소 특이합니다. 예를 들어 종족 :Aleena는 <planet/38>에 살고, :Reptile의 하위 클래스이며, 특정 전형적인 특성(평균 키, 평균 수명, 피부색)을 가지고 있으며, 특정 개체(캐릭터)가 해당 클래스의 대표입니다:
OntotextGraphDBGraph 초기화 전에 환경 변수 ‘GRAPHDB_USERNAME’과 ‘GRAPHDB_PASSWORD’를 설정해야 합니다.
StarWars 데이터셋에 대한 질의응답
이제OntotextGraphDBQAChain을 사용하여 몇 가지 질문을 할 수 있습니다.
Chain 수정자
Ontotext GraphDB QA chain은 QA chain의 추가 개선과 앱의 전반적인 사용자 경험 향상을 위한 프롬프트 개선을 허용합니다.”SPARQL Generation” 프롬프트
이 프롬프트는 사용자 질문과 KG 스키마를 기반으로 SPARQL 쿼리 생성에 사용됩니다.-
sparql_generation_prompt기본값:
“SPARQL Fix” 프롬프트
때때로 LLM이 구문 오류나 누락된 접두사 등이 있는 SPARQL 쿼리를 생성할 수 있습니다. chain은 LLM에게 일정 횟수만큼 수정하도록 프롬프트하여 이를 수정하려고 시도합니다.-
sparql_fix_prompt기본값: -
max_fix_retries기본값:5
”Answering” 프롬프트
이 프롬프트는 데이터베이스에서 반환된 결과와 초기 사용자 질문을 기반으로 질문에 답변하는 데 사용됩니다. 기본적으로 LLM은 반환된 결과의 정보만 사용하도록 지시받습니다. 결과 집합이 비어 있으면 LLM은 질문에 답할 수 없다고 알려야 합니다.-
qa_prompt기본값:
docker compose down -v --remove-orphans
를 실행하여 Docker 환경을 종료할 수 있습니다.
Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.