> **Beta Translation:** This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta.
OntoRAG, yapılandırılmamış metinden bilgi üçlülerinin çıkarılması ve elde edilen bilgi grafiğinin sorgulanması sırasında sıkı semantik tutarlılığı sağlayan, ontoloji odaklı bir bilgi çıkarma ve sorgulama sistemidir. GraphRAG'e benzer, ancak resmi ontoloji kısıtlamalarıyla, OntoRAG, çıkarılan tüm üçlülerin önceden tanımlanmış ontolojik yapılara uygun olmasını sağlar ve semantik olarak bilinçli sorgulama yetenekleri sunar.
Sistem, hem çıkarma hem de sorgulama işlemlerinde ilgili ontoloji alt kümelerini dinamik olarak seçmek için vektör benzerliği eşleştirmesi kullanır, bu da odaklı ve bağlamsal olarak uygun işleme sağlarken semantik geçerliliği korur.
**Servis Adı**: `kg-extract-ontology`
## Hedefler
**Ontolojiye Uygun Çıkarma**: Çıkarılan tüm üçlülerin yüklenen ontolojilere kesinlikle uygun olmasını sağlamak
**Dinamik Bağlam Seçimi**: Her parça için ilgili ontoloji alt kümelerini seçmek için gömülmeleri kullanmak
**Semantik Tutarlılık**: Sınıf hiyerarşilerini, özellik alanlarını/aralıklarını ve kısıtlamaları korumak
**Verimli İşleme**: Hızlı ontoloji öğesi eşleştirmesi için bellek içi vektör depoları kullanmak
**Ölçeklenebilir Mimari**: Farklı alanlara sahip çoklu eşzamanlı ontolojileri desteklemek
## Arka Plan
Mevcut bilgi çıkarma hizmetleri (`kg-extract-definitions`, `kg-extract-relationships`), resmi kısıtlamalar olmadan çalışır ve potansiyel olarak tutarsız veya uyumsuz üçlüler üretebilir. OntoRAG, bunu şunları yaparak ele alır:
1. Geçerli sınıfları ve özellikleri tanımlayan resmi ontolojileri yüklemek
2. Metin içeriğini ilgili ontoloji öğeleriyle eşleştirmek için gömülmeleri kullanmak
3. Çıkarma işleminin yalnızca ontolojiye uygun üçlüler üretmesini sağlamak
4. Çıkarılan bilginin semantik olarak doğrulanmasını sağlamak
Bu yaklaşım, sinirsel çıkarmanın esnekliğini, resmi bilgi gösteriminin titizliğiyle birleştirir.
## Teknik Tasarım
### Mimari
OntoRAG sistemi aşağıdaki bileşenlerden oluşur:
```
┌─────────────────┐
│ Configuration │
│ Service │
└────────┬────────┘
│ Ontologies
▼
┌─────────────────┐ ┌──────────────┐
│ kg-extract- │────▶│ Embedding │
│ ontology │ │ Service │
└────────┬────────┘ └──────────────┘
│ │
▼ ▼
┌─────────────────┐ ┌──────────────┐
│ In-Memory │◀────│ Ontology │
│ Vector Store │ │ Embedder │
└────────┬────────┘ └──────────────┘
│
▼
┌─────────────────┐ ┌──────────────┐
│ Sentence │────▶│ Chunker │
│ Splitter │ │ Service │
└────────┬────────┘ └──────────────┘
│
▼
┌─────────────────┐ ┌──────────────┐
│ Ontology │────▶│ Vector │
│ Selector │ │ Search │
└────────┬────────┘ └──────────────┘
│
▼
┌─────────────────┐ ┌──────────────┐
│ Prompt │────▶│ Prompt │
│ Constructor │ │ Service │
└────────┬────────┘ └──────────────┘
│
▼
┌─────────────────┐
│ Triple Output │
└─────────────────┘
```
### Bileşen Detayları
#### 1. Ontoloji Yükleyici
**Amaç**: Ontoloji yapılandırmalarını olay odaklı güncellemeler kullanarak yapılandırma hizmetinden alır ve ayrıştırır.
**Uygulama**:
Ontoloji Yükleyici, olay odaklı ontoloji yapılandırma güncellemelerini almak için TrustGraph'in ConfigPush kuyruğunu kullanır. "ontoloji" türünde bir yapılandırma öğesi eklendiğinde veya değiştirildiğinde, yükleyici yapılandırma-güncelleme kuyrusu aracılığıyla güncellemeyi alır ve meta veriler, sınıflar, nesne özellikleri ve veri türü özellikleri içeren JSON yapısını ayrıştırır. Bu ayrıştırılmış ontolojiler, çıkarma işlemi sırasında verimli bir şekilde erişilebilen yapılandırılmış nesneler olarak bellekte saklanır.
**Temel İşlemler**:
Ontoloji türündeki yapılandırmalar için config-update kuyruğuna abone olun
JSON ontoloji yapılarını OntologyClass ve OntologyProperty nesnelerine ayrıştırın
Ontoloji yapısını ve tutarlılığını doğrulayın
Ayrıştırılmış ontolojileri hızlı erişim için bellekte önbelleğe alın
Akışa özgü vektör depolarıyla akışa özel işleme yapın
**Amaç**: Tüm ontoloji öğeleri için vektör gömüleri oluşturarak semantik benzerlik eşleştirmesini etkinleştirir.
**Uygulama**:
Ontoloji Gömücüsü, yüklenen ontolojilerdeki her öğeyi (sınıflar, nesne özellikleri ve veri türü özellikleri) işler ve EmbeddingsClientSpec hizmetini kullanarak vektör gömüleri oluşturur. Her öğe için, öğenin tanımlayıcısını, etiketlerini ve açıklamasını (yorum) birleştirerek bir metin gösterimi oluşturur. Bu metin daha sonra, semantik anlamını yakalayan yüksek boyutlu bir vektör gömüsüne dönüştürülür. Bu gömüler, öğe türü, kaynak ontoloji ve tam tanım hakkında meta verilerle birlikte, akışa özel bir bellek içi FAISS vektör deposunda saklanır. Gömücü, ilk gömü yanıtından gömü boyutunu otomatik olarak algılar.
**Temel İşlemler**:
Öğenin kimliklerinden, etiketlerinden ve yorumlarından metin gösterimleri oluşturun
Toplu işleme için asyncio.gather kullanarak EmbeddingsClientSpec aracılığıyla gömüler oluşturun
Gömüleri kapsamlı meta verilerle FAISS vektör deposunda saklayın
Verimli erişim için ontolojiye, öğe türüne ve öğe kimliğine göre indeksleyin
Vektör deposu başlatması için gömü boyutlarını otomatik olarak algılayın
Bağımsız vektör depolarıyla akışa özel gömü modelleriyle çalışın
**Amaç**: Ontoloji eşleştirmesi için hassas bir şekilde metin parçalarını ince taneli segmentlere ayırır.
**Uygulama**:
Metin İşleyici, gelen metin parçalarını cümlelere ayırmak ve POS etiketlemesi yapmak için NLTK'yi kullanır. NLTK sürüm uyumluluğunu, `punkt_tab` ve `averaged_perceptron_tagger_eng`'i indirmeye çalışarak ve gerekirse eski sürümlere geri dönerek yönetir. Her metin parçası, ontoloji öğeleriyle bağımsız olarak eşleştirilebilen ayrı cümlelere bölünür.
**Temel İşlemler**:
NLTK cümle ayrıştırması kullanarak metni cümlelere ayırın
NLTK sürüm uyumluluğunu yönetin (punkt_tab vs punkt)
Metin ve konum bilgileriyle TextSegment nesneleri oluşturun
Hem tam cümleleri hem de ayrı parçaları destekleyin
**Amaç**: Mevcut metin parçası için en alakalı ontoloji öğesi alt kümesini belirler.
**Uygulama**:
Ontoloji Seçici, metin segmentleri ile ontoloji öğeleri arasında semantik eşleştirme yapmak için FAISS vektör benzerlik araması kullanır. Metin parçasındaki her cümle için, bir gömü oluşturur ve vektör deposunda en benzer ontoloji öğelerini yapılandırılabilir bir eşik değeri (varsayılan 0,3) ile kosinüs benzerliği kullanarak arar. Tüm ilgili öğeler toplandıktan sonra, kapsamlı bir bağımlılık çözümlemesi yapılır: bir sınıf seçilirse, üst sınıfları dahil edilir; bir özellik seçilirse, etki alanı ve aralık sınıfları eklenir. Ek olarak, seçilen her sınıf için, **o sınıfa referans veren tüm özellikleri** (etki alanı veya aralık olarak) otomatik olarak dahil eder. Bu, çıkarmanın ilgili tüm ilişki özelliklerine erişmesini sağlar.
**Temel İşlemler**:
Her metin parçasının (cümlelerin) gömülme değerlerini oluşturun.
FAISS vektör deposunda k-en yakın komşu araması yapın (top_k=10, eşik=0.3).
Zayıf eşleşmeleri filtrelemek için benzerlik eşiği uygulayın.
Bağımlılıkları çözün (üst sınıflar, etki alanları, aralıklar).
**Seçilen sınıflarla ilgili tüm özellikleri otomatik olarak dahil edin** (etki alanı/aralık eşleşmesi).
Tüm gerekli ilişkilerle tutarlı bir ontoloji alt kümesi oluşturun.
Birden çok kez görünen öğeleri yinelenenleri kaldırın.
**Amaç**: LLM'yi yalnızca ontolojiye uygun üçlüleri çıkarması için yönlendiren yapılandırılmış istekler oluşturur.
**Uygulama**:
Çıkarma hizmeti, `ontology-prompt.md`'dan yüklenen bir Jinja2 şablonu kullanır ve bu şablon, ontoloji alt kümesini ve LLM tarafından çıkarım için kullanılan metni biçimlendirir. Şablon, Jinja2 sözdizimini kullanarak sınıflar, nesne özellikleri ve veri türü özellikleri üzerinde dinamik olarak yineleme yapar ve her birini açıklamaları, etki alanları, aralıkları ve hiyerarşik ilişkileriyle birlikte sunar. İstek, yalnızca sağlanan ontoloji öğelerinin kullanılması konusunda kesin kurallar içerir ve tutarlı ayrıştırma için JSON çıktı biçimi talep eder.
**Temel İşlemler**:
Ontoloji öğeleri üzerinde döngüler içeren Jinja2 şablonunu kullanın.
Üst sınıf ilişkileri (subclass_of) ve yorumlarla sınıfları biçimlendirin.
Etki alanı/aralık kısıtlamaları ve yorumlarla özellikleri biçimlendirin.
Açık çıkarma kuralları ve çıktı biçimi gereksinimleri ekleyin.
**Amaç**: Uçtan uca, ontolojiye dayalı üçlü çıkarma işlemini gerçekleştirmek için tüm bileşenleri koordine eder.
**Uygulama**:
Ana Çıkarma Hizmeti (KgExtractOntology), eksiksiz çıkarma iş akışını yöneten orkestrasyon katmanıdır. Her akış için bileşen başlatmayı kullanan TrustGraph'ın FlowProcessor kalıbını kullanır. Bir ontoloji yapılandırma güncellemesi geldiğinde, akışa özgü bileşenleri (ontoloji yükleyici, gömücü, metin işlemcisi, seçici) başlatır veya günceller. Bir metin parçası işlenmek üzere geldiğinde, aşağıdaki adımları koordine eder: metni segmentlere ayırmak, vektör araması yoluyla ilgili ontoloji öğelerini bulmak, kısıtlı bir istek oluşturmak, istek hizmetini çağırmak, yanıtı ayrıştırmak ve doğrulamak, ontoloji tanım üçlüleri oluşturmak ve hem içerik üçlülerini hem de varlık bağlamlarını yayınlamak.
**Çıkarma İş Akışı**:
1. Metin parçasını chunks-input kuyruğu aracılığıyla alın.
2. Gerekirse akış bileşenlerini başlatın (ilk parça veya yapılandırma güncellemesinde).
3. Metni NLTK kullanarak cümlelere ayırın.
4. İlgili ontoloji kavramlarını bulmak için FAISS vektör deposunda arama yapın.
5. Otomatik özellik dahil etme ile ontoloji alt kümesini oluşturun.
Bağımlılıklar: [hayvan (köpek ve kedinin üst sınıfı), canlı (hayvanın üst sınıfı)]
Sonuç alt kümesi: Hayvan hiyerarşisi ve koşma ilişkisi ile eksiksiz mini-ontoloji
### Üçlü Doğrulama
**Amaç**: Çıkarılan tüm üçlülerin ontoloji kısıtlamalarına kesinlikle uygun olduğundan emin olun.
**Doğrulama Algoritması**:
1.**Sınıf Doğrulama**:
Konuların, ontoloji alt kümesinde tanımlanan sınıfların örnekleri olduğundan emin olun.
Nesne özellikleri için, nesnelerin de geçerli sınıf örnekleri olduğundan emin olun.
Sınıf adlarını, ontolojinin sınıf sözlüğü ile karşılaştırın.
Sınıf hiyerarşilerini işleyin - alt sınıfların örnekleri, üst sınıf kısıtlamaları için geçerlidir.
2.**Özellik Doğrulama**:
Öncüllerin, ontoloji alt kümesindeki özelliklerle eşleştiğinden emin olun.
Varlıklar arası nesne özellikleri ile varlıklardan literal değerlere olan veri tipi özellikleri arasındaki farkı belirtin.
Özellik adlarının tam olarak eşleştiğinden emin olun (varsa ad alanını dikkate alın).
3.**Alan/Aralık Kontrolü**:
Kullanılan her özellik için, alanını ve aralığını alın.
Konunun türünün, özelliğin alanıyla eşleştiğinden veya ondan türediğinden emin olun.
Nesnenin türünün, özelliğin aralığıyla eşleştiğinden veya ondan türediğinden emin olun.
Veri tipi özellikleri için, nesnenin doğru XSD türünde bir literal olduğundan emin olun.
Veri tipi özellikleri için, nesnenin doğru XSD türünde bir literal olduğundan emin olun
4.**Kardinalite Doğrulama**:
Her konu için özellik kullanım sayılarını takip edin.
Minimum kardinaliteyi kontrol edin - gerekli özelliklerin mevcut olduğundan emin olun.
Maksimum kardinaliteyi kontrol edin - özelliğin çok fazla kullanılmadığından emin olun.
Fonksiyonel özellikler için, her konu için en fazla bir değer olduğundan emin olun.
5.**Veri Tipi Doğrulama**:
Literal değerleri, bildirilen XSD türlerine göre ayrıştırın.
Tamsayıların geçerli sayılar olduğundan, tarihlerinin doğru biçimlendirildiğinden emin olun, vb.
Regex kısıtlamaları tanımlanmışsa, dize kalıplarını kontrol edin.
URI'lerin xsd:anyURI türleri için doğru biçimlendirildiğinden emin olun.
**Doğrulama Örneği**:
Üçlü: ("Buddy", "has-owner", "John")
"Buddy"nin, "has-owner" özelliğine sahip olabilen bir sınıf olarak tanımlandığından emin olun.
"has-owner" özelliğinin ontolojide olduğundan emin olun.
Alan kısıtlamasını doğrulayın: konu, "Pet" türünde veya bir alt türünde olmalıdır.
Aralık kısıtlamasını doğrulayın: nesne, "Person" türünde veya bir alt türünde olmalıdır.
Geçerliyse, çıktıya ekleyin; geçersizse, ihlali günlüğe kaydedin ve atlayın.
## Performans Hususları
### Optimizasyon Stratejileri
1.**Gömülü Önbellekleme**: Sık kullanılan metin segmentleri için gömülmeleri önbelleğe alın.
2.**Toplu İşleme**: Birden fazla segmenti paralel olarak işleyin.
3.**Vektör Deposu İndeksleme**: Büyük ontolojiler için yaklaşık en yakın komşu algoritmalarını kullanın.
4.**İstem Optimizasyonu**: Yalnızca gerekli ontoloji öğelerini dahil ederek istem boyutunu en aza indirin.
5.**Sonuç Önbellekleme**: Aynı parçalar için çıkarma sonuçlarını önbelleğe alın.
### Ölçeklenebilirlik
**Yatay Ölçekleme**: Paylaşılan ontoloji önbelleğine sahip çoklu çıkarıcı örneği.
**Ontoloji Bölümleme**: Büyük ontolojileri alanlara göre bölün.
**Akışlı İşleme**: Parçalara toplu olarak işlem yapmadan geldikçe işleyin.
**Bellek Yönetimi**: Kullanılmayan gömülmelerin periyodik olarak temizlenmesi.
## Hata Yönetimi
### Başarısızlık Senaryoları
1.**Eksik Ontolojiler**: Kısıtlanmamış çıkarma işlemine geri dönün.
2.**Gömme Hizmeti Hatası**: Önbelleğe alınmış gömülmeleri kullanın veya semantik eşleşmeyi atlayın.
3.**İstem Hizmeti Zaman Aşımı**: Üstel geri alma ile yeniden deneyin.
4.**Geçersiz Üçlü Biçimi**: Hatalı üçlüleri günlüğe kaydedin ve atlayın.
5.**Ontoloji Tutarsızlıkları**: Çakışmaları bildirin ve en spesifik geçerli öğeleri kullanın.
### İzleme
İzlenecek temel ölçütler:
Ontoloji yükleme süresi ve bellek kullanımı
Gömme oluşturma gecikmesi
Vektör arama performansı
İstem hizmeti yanıt süresi
Üçlü çıkarma doğruluğu
Ontoloji uyumluluk oranı
## Geçiş Yolu
### Mevcut Çıkarıcılardan
1.**Paralel Çalışma**: Başlangıçta mevcut çıkarıcılarla birlikte çalıştırın.
2.**Aşamalı Dağıtım**: Belirli belge türleriyle başlayın.
3.**Kalite Karşılaştırması**: Çıktı kalitesini mevcut çıkarıcılarla karşılaştırın.
4.**Tam Geçiş**: Kalite doğrulandığında mevcut çıkarıcıları değiştirin.
### Ontoloji Geliştirme
1.**Mevcut Bilgilerden Başlatma**: Başlangıç ontolojilerini mevcut bilgilerden oluşturun.
2.**Yinelemeli İyileştirme**: Çıkarma kalıplarına göre iyileştirin.
3.**Alan Uzmanı İncelemesi**: Konu uzmanlarıyla doğrulayın.
4.**Sürekli İyileştirme**: Çıkarma geri bildirimine göre güncelleyin.
## Ontolojiye Duyarlı Sorgu Hizmeti
### Genel Bakış
Ontolojiye duyarlı sorgu hizmeti, farklı arka uç grafik depolarını desteklemek için çoklu sorgu yolu sağlar. Cassandra (SPARQL aracılığıyla) ve Cypher tabanlı grafik depoları (Neo4j, Memgraph, FalkorDB) için hem hassas hem de semantik olarak bilinçli soru yanıtlama için ontoloji bilgisini kullanır.
**Hizmet Bileşenleri**:
`onto-query-sparql`: Doğal dili, Cassandra için SPARQL'e dönüştürür.
`sparql-cassandra`: Cassandra için rdflib kullanarak SPARQL sorgu katmanı.
`onto-query-cypher`: Doğal dili, grafik veritabanları için Cypher'a dönüştürür.
`cypher-executor`: Neo4j, Memgraph, FalkorDB için Cypher sorgu katmanı.
### Mimari
```
┌─────────────────┐
│ User Query │
└────────┬────────┘
│
▼
┌─────────────────┐ ┌──────────────┐
│ Question │────▶│ Sentence │
│ Analyser │ │ Splitter │
└────────┬────────┘ └──────────────┘
│
▼
┌─────────────────┐ ┌──────────────┐
│ Ontology │────▶│ Vector │
│ Matcher │ │ Store │
└────────┬────────┘ └──────────────┘
│
▼
┌─────────────────┐
│ Backend Router │
└────────┬────────┘
│
┌───────────┴───────────┐
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ onto-query- │ │ onto-query- │
│ sparql │ │ cypher │
└────────┬────────┘ └────────┬────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ SPARQL │ │ Cypher │
│ Generator │ │ Generator │
└────────┬────────┘ └────────┬────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ sparql- │ │ cypher- │
│ cassandra │ │ executor │
└────────┬────────┘ └────────┬────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ Cassandra │ │ Neo4j/Memgraph/ │
│ │ │ FalkorDB │
└────────┬────────┘ └────────┬────────┘
│ │
└────────────┬───────────────┘
│
▼
┌─────────────────┐ ┌──────────────┐
│ Answer │────▶│ Prompt │
│ Generator │ │ Service │
└────────┬────────┘ └──────────────┘
│
▼
┌─────────────────┐
│ Final Answer │
└─────────────────┘
```
### Sorgu İşleme Hattı
#### 1. Soru Analizörü
**Amaç**: Kullanıcı sorularını, ontoloji eşleştirmesi için anlamsal bileşenlere ayırır.
**Algoritma Açıklaması**:
Soru Analizörü, gelen doğal dil sorgusunu alır ve çıkarma hattında kullanılan aynı cümle bölme yaklaşımıyla anlamlı segmentlere böler. Soruda bahsedilen temel varlıkları, ilişkileri ve kısıtlamaları belirler. Her segment, soru türü (olaysal, toplama, karşılaştırma vb.) ve beklenen cevap formatı açısından analiz edilir. Bu ayrıştırma, soruyu yanıtlamak için ontolojinin hangi bölümlerinin en alakalı olduğunu belirlemeye yardımcı olur.
**Temel İşlemler**:
Soruyu cümlelere ve ifadelere ayırın
Soru türünü ve amacını belirleyin
Bahsedilen varlıkları ve ilişkileri çıkarın
Sorudaki kısıtlamaları ve filtreleri tespit edin
Beklenen cevap formatını belirleyin
#### 2. Sorgular İçin Ontoloji Eşleştirici
**Amaç**: Soruyu yanıtlamak için gereken ilgili ontoloji alt kümesini belirler.
**Algoritma Açıklaması**:
Çıkarma hattının Ontoloji Seçici'sine benzer, ancak soru yanıtlama için optimize edilmiştir. Eşleştirici, soru segmentleri için gömülme değerleri oluşturur ve ilgili ontoloji öğelerini vektör deposunda arar. Ancak, sorgu oluşturma için yararlı olacak kavramları bulmaya odaklanır, çıkarma işlemine değil. Grafiği keşfederken bahsedilmeyen ancak ilgili olabilecek ilgili özellikleri de seçime dahil eder. Örneğin, "çalışanlar" hakkında bir soru sorulursa, çalışan bilgileri bulmak için ilgili olabilecek "çalışır", "yönetir" ve "rapor verir" gibi özellikleri de içerebilir.
**Eşleştirme Stratejisi**:
Soru segmentlerini gömülme değerlerine dönüştürün
Doğrudan bahsedilen ontoloji kavramlarını bulun
Bahsedilen sınıfları birbirine bağlayan özellikleri dahil edin
Gezinme için ters ve ilgili özellikleri ekleyin
Hiyerarşik sorgular için üst/alt sınıfları dahil edin
Sorgu odaklı bir ontoloji bölümü oluşturun
#### 3. Arka Uç Yönlendirici
**Amaç**: Sorguları, yapılandırmaya göre uygun arka uç özel sorgu yoluna yönlendirir.
**Algoritma Açıklaması**:
Arka Uç Yönlendirici, sistem yapılandırmasını inceleyerek hangi grafik arka ucunun (Cassandra veya Cypher tabanlı) etkin olduğunu belirler. Soruyu ve ontoloji bölümünü uygun sorgu oluşturma hizmetine yönlendirir. Yönlendirici, birincil arka uç kullanılamıyorsa, aynı zamanda birden fazla arka uç arasında yük dengeleme veya yedekleme mekanizmalarını da destekleyebilir.
**Yönlendirme Mantığı**:
Sistem ayarlarından yapılandırılmış arka uç türünü kontrol edin
Cassandra arka uçları için `onto-query-sparql`'a yönlendirin
Neo4j/Memgraph/FalkorDB için `onto-query-cypher`'a yönlendirin
Sorgu dağıtımı ile çoklu arka uç yapılandırmalarını destekleyin
**Amaç**: Doğal dil sorularını, Cassandra üzerinde yürütme için SPARQL sorgularına dönüştürür.
**Algoritma Açıklaması**:
SPARQL sorgu oluşturucu, soruyu ve ontoloji bölümünü alır ve Cassandra arka ucu üzerinde yürütülmek üzere optimize edilmiş bir SPARQL sorgusu oluşturur. RDF/OWL semantiğini içeren, SPARQL'e özel bir şablon kullanan bir istem hizmeti kullanır. Oluşturucu, Cassandra işlemleriyle verimli bir şekilde çevrilebilen özellik yolları, isteğe bağlı ifadeler ve filtreler gibi SPARQL kalıplarını anlar.
**SPARQL Oluşturma İstem Şablonu**:
```
Generate a SPARQL query for the following question using the provided ontology.
ONTOLOGY CLASSES:
{classes}
ONTOLOGY PROPERTIES:
{properties}
RULES:
- Use proper RDF/OWL semantics
- Include relevant prefixes
- Use property paths for hierarchical queries
- Add FILTER clauses for constraints
- Optimise for Cassandra backend
QUESTION: {question}
SPARQL QUERY:
```
#### 5. Şifre Sorgu Üretimi (`onto-query-cypher`)
**Amaç**: Doğal dil sorularını, grafik veritabanları için Şifre sorgularına dönüştürür.
**Algoritma Açıklaması**:
Şifre sorgu üreticisi, Neo4j, Memgraph ve FalkorDB için optimize edilmiş yerel Şifre sorguları oluşturur. Ontoloji sınıflarını düğüm etiketlerine ve özellikleri ilişkilerle eşler, Şifre'nin desen eşleştirme sözdizimini kullanır. Üretici, ilişki yönü ipuçları, indeks kullanımı ve sorgu planlama ipuçları gibi Şifre'ye özgü optimizasyonları içerir.
**Şifre Üretim İstem Şablonu**:
```
Generate a Cypher query for the following question using the provided ontology.
NODE LABELS (from classes):
{classes}
RELATIONSHIP TYPES (from properties):
{properties}
RULES:
- Use MATCH patterns for graph traversal
- Include WHERE clauses for filters
- Use aggregation functions when needed
- Optimise for graph database performance
- Consider index hints for large datasets
QUESTION: {question}
CYPHER QUERY:
```
#### 6. SPARQL-Cassandra Sorgu Motoru (`sparql-cassandra`)
**Amaç**: Python rdflib kullanarak Cassandra'ya karşı SPARQL sorgularını yürütür.
**Algoritma Açıklaması**:
SPARQL-Cassandra motoru, Python'ın rdflib kütüphanesini ve özel bir Cassandra arka uç depolama alanını kullanan bir SPARQL işlemcisi uygular. SPARQL grafik desenlerini, birleştirmeleri, filtreleri ve toplama işlemlerini işleyerek uygun Cassandra CQL sorgularına dönüştürür. Motor, semantik yapıyı korurken Cassandra'nın sütun ailesi depolama modeline göre optimizasyon sağlayan bir RDF-Cassandra eşleme sürdürür.
**Uygulama Özellikleri**:
Cassandra için rdflib Store arayüzü uygulaması
Yaygın desenlerle SPARQL 1.1 sorgu desteği
Üçlü desenlerin CQL'ye verimli çevirisi
Özellik yolları ve hiyerarşik sorgular için destek
Büyük veri kümeleri için sonuç akışı
Bağlantı havuzu ve sorgu önbelleği
**Örnek Çeviri**:
```sparql
SELECT ?animal WHERE {
?animal rdf:type :Animal .
?animal :hasOwner "John" .
}
```
İndeksleri ve bölüm anahtarlarını kullanan, optimize edilmiş Cassandra sorgularına çevrilir.
**Amaç**: Neo4j, Memgraph ve FalkorDB'ye karşı Cypher sorgularını yürütür.
**Algoritma Açıklaması**:
Cypher yürütücüsü, farklı grafik veritabanları arasında Cypher sorgularını yürütmek için birleşik bir arayüz sağlar. Veritabanına özgü bağlantı protokollerini, sorgu optimizasyonu ipuçlarını ve sonuç biçimi normalizasyonunu işler. Yürütücü, her veritabanı türü için uygun olan yeniden deneme mantığını, bağlantı havuzunu ve işlem yönetimini içerir.
**Çoklu Veritabanı Desteği**:
**Neo4j**: Bolt protokolü, işlem fonksiyonları, indeks ipuçları
**Memgraph**: Özel protokol, akışlı sonuçlar, analitik sorgular
**FalkorDB**: Redis protokolü adaptasyonu, bellek içi optimizasyonlar
**Yürütme Özellikleri**:
Veritabanından bağımsız bağlantı yönetimi
Sorgu doğrulaması ve sözdizimi kontrolü
Zaman aşımı ve kaynak limiti uygulama
Sonuç sayfalama ve akış
Veritabanı türüne göre performans izleme
Veritabanı örnekleri arasında otomatik geçiş
#### 8. Cevap Oluşturucu
**Amaç**: Sorgu sonuçlarından doğal bir dil cevabı oluşturur.
**Algoritma Açıklaması**:
Cevap Oluşturucu, yapılandırılmış sorgu sonuçlarını ve orijinal soruyu alır, ardından kapsamlı bir cevap oluşturmak için istem hizmetini kullanır. Basit şablon tabanlı yanıtlardan farklı olarak, grafik verilerini sorunun bağlamında yorumlamak için bir LLM kullanır, karmaşık ilişkileri, toplamaları ve çıkarımları işler. Oluşturucu, ontoloji yapısına ve grafikten alınan belirli üçlülere başvurarak akıl yürütmesini açıklayabilir.
**Cevap Oluşturma Süreci**:
Sorgu sonuçlarını yapılandırılmış bir bağlama dönüştürür
Açıklık için ilgili ontoloji tanımlarını ekler
Soru ve sonuçlarla bir istem oluşturur
LLM aracılığıyla doğal dil cevabı oluşturur
Cevabı sorgu amacına göre doğrular
Gerekirse belirli grafik varlıklarına alıntılar ekler
### Mevcut Hizmetlerle Entegrasyon
#### GraphRAG ile İlişki
**Tamamlayıcı**: onto-query semantik hassasiyet sağlarken, GraphRAG geniş kapsamlı bir kapsama sahiptir.
**Paylaşılan Altyapı**: Her ikisi de aynı bilgi grafiğini ve istem hizmetlerini kullanır.
**Sorgu Yönlendirmesi**: Sistem, sorunun türüne göre sorguları en uygun hizmete yönlendirebilir.
**Hibrit Mod**: Kapsamlı cevaplar için her iki yaklaşımı da birleştirebilir.
#### OntoRAG Çıkarma ile İlişki
**Paylaşılan Ontolojiler**: kg-extract-ontology tarafından yüklenen aynı ontoloji yapılandırmalarını kullanır.
**Paylaşılan Vektör Deposu**: Çıkarma hizmetinden alınan bellek içi gömülmeleri yeniden kullanır.
**Tutarlı Semantikler**: Sorgular, aynı ontolojik kısıtlamalarla oluşturulmuş grafikler üzerinde çalışır.
**Soru**: "Hangi belgeler John Smith tarafından yazılmıştır?"
**Ontoloji Eşleşmesi**: [belge, kişi, yazarıdır]
**Oluşturulan Sorgu**:
```cypher
MATCH (d:document)-[:has-author]->(p:person {name: "John Smith"})
RETURN d.title, d.date
```
#### Örnek 3: Toplama Sorgusu
**Soru**: "Kedilerin kaç tane bacağı vardır?"
**Ontoloji Eşleşmesi**: [kedi, bacak sayısı (veri tipi özelliği)]
**Oluşturulan Sorgu**:
```cypher
MATCH (c:cat)
RETURN c.name, c.number_of_legs
```
### Yapılandırma
```yaml
onto-query:
embedding_model: "text-embedding-3-small"
vector_store:
shared_with_extractor: true # Reuse kg-extract-ontology's store
query_builder:
model: "gpt-4"
temperature: 0.1
max_query_length: 1000
graph_executor:
timeout: 30000 # ms
max_results: 1000
answer_generator:
model: "gpt-4"
temperature: 0.3
max_tokens: 500
```
### Performans Optimizasyonları
#### Sorgu Optimizasyonu
**Ontoloji Budama**: Sadece gerekli ontoloji öğelerini istemlerde kullanın.
**Sorgu Önbelleği**: Sıkça sorulan soruları ve sorgularını önbelleğe alın.
**Sonuç Önbelleği**: Aynı sorgular için sonuçları belirli bir zaman aralığında saklayın.
**Toplu İşleme**: Birden fazla ilgili soruyu tek bir grafik geçişiyle işleyin.
#### Ölçeklenebilirlik Hususları
**Dağıtık Çalıştırma**: Alt sorguları grafik bölümlerine göre paralel hale getirin.
**Artan Sonuçlar**: Büyük veri kümeleri için sonuçları akış şeklinde gönderin.
**Yük Dengeleme**: Sorgu yükünü birden fazla hizmet örneğine dağıtın.
**Kaynak Havuzları**: Grafik veritabanlarına bağlantı havuzlarını yönetin.
### Hata Yönetimi
#### Hata Senaryoları
1.**Geçersiz Sorgu Oluşturma**: GraphRAG'e veya basit anahtar kelime aramasına geri dönün.
2.**Ontoloji Uyuşmazlığı**: Aramayı daha geniş bir ontoloji alt kümesine genişletin.
3.**Sorgu Zaman Aşımı**: Sorguyu basitleştirin veya zaman aşımı süresini artırın.
4.**Boş Sonuçlar**: Sorguyu yeniden formüle etmeyi veya ilgili soruları önerin.
5.**LLM Hizmeti Hatası**: Önbelleğe alınmış sorguları veya şablon tabanlı yanıtları kullanın.
### İzleme Metrikleri
Soru karmaşıklığı dağılımı
Ontoloji bölüm boyutları
Sorgu oluşturma başarı oranı
Grafik sorgu yürütme süresi
Cevap kalitesi puanları
Önbellek isabet oranları
Hata frekansları (türlere göre)
## Gelecek Geliştirmeler
1.**Ontoloji Öğrenimi**: Çıkarma kalıplarına göre ontolojileri otomatik olarak genişletin.
2.**Güvenilirlik Puanlama**: Çıkarılan üçlülere güvenilirlik puanları atayın.
3.**Açıklama Oluşturma**: Üçlü çıkarma için gerekçeler sağlayın.
4.**Aktif Öğrenme**: Belirsiz çıkarmalar için insan doğrulaması isteyin.
## Güvenlik Hususları
1.**İstem Enjeksiyonu Önleme**: İstem oluşturulmadan önce parça metnini temizleyin.
2.**Kaynak Limitleri**: Vektör deposu için bellek kullanımını sınırlayın.
3.**Hız Sınırlama**: İstem başına çıkarma isteklerini sınırlayın.
4.**Denetim Kaydı**: Tüm çıkarma isteklerini ve sonuçlarını izleyin.
## Test Stratejisi
### Birim Testleri
Çeşitli formatlarda ontoloji yükleyici
Gömme oluşturma ve depolama
Cümle bölme algoritmaları
Vektör benzerliği hesaplamaları
Üçlü ayrıştırma ve doğrulama
### Entegrasyon Testleri
Uçtan uca çıkarma hattı
Yapılandırma hizmeti entegrasyonu
İstem hizmeti etkileşimi
Eşzamanlı çıkarma işleme
### Performans Testleri
Büyük ontoloji işleme (1000+ sınıf)
Yüksek hacimli parça işleme
Yük altında bellek kullanımı
Gecikme ölçümleri
## Teslimat Planı
### Genel Bakış
OntoRAG sistemi, her fazda kademeli değer sağlayan ve tamamlanmış sisteme doğru ilerleyen dört ana fazda teslim edilecektir. Plan, öncelikle temel çıkarma yeteneklerini, ardından sorgu işlevselliğini ve ardından optimizasyonları ve gelişmiş özellikleri eklemeyi hedeflemektedir.
### 1. Faz: Temel ve Temel Çıkarma
**Hedef**: Basit vektör eşleştirmesiyle temel, ontoloji odaklı çıkarma hattını kurun.