mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-04-25 16:36:21 +02:00
272 lines
8.4 KiB
Markdown
272 lines
8.4 KiB
Markdown
|
|
---
|
|||
|
|
layout: default
|
|||
|
|
title: "Sorgu Zamanı Açıklanabilirlik"
|
|||
|
|
parent: "Turkish (Beta)"
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# Sorgu Zamanı Açıklanabilirlik
|
|||
|
|
|
|||
|
|
> **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.
|
|||
|
|
|
|||
|
|
## Durum
|
|||
|
|
|
|||
|
|
Uygulandı
|
|||
|
|
|
|||
|
|
## Genel Bakış
|
|||
|
|
|
|||
|
|
Bu özellik, GraphRAG'ın sorgu yürütülmesi sırasında açıklanabilirlik verilerini nasıl kaydettiğini ve ilettiğini açıklamaktadır. Amaç, nihai cevaptan başlayarak, seçilen kenarlara ve kaynak belgelere kadar tam bir izlenebilirlik sağlamaktır.
|
|||
|
|
|
|||
|
|
Sorgu zamanı açıklanabilirliği, GraphRAG boru hattının akıl yürütme sırasında neler yaptığını yakalar. Bu, bilginin nereden geldiğini kaydeden, çıkarma zamanı köken bilgilerine bağlanır.
|
|||
|
|
|
|||
|
|
## Terminoloji
|
|||
|
|
|
|||
|
|
| Terim | Tanım |
|
|||
|
|
|------|------------|
|
|||
|
|
| **Açıklanabilirlik** | Bir sonucun nasıl elde edildiğinin kaydı |
|
|||
|
|
| **Oturum** | Tek bir GraphRAG sorgu yürütmesi |
|
|||
|
|
| **Kenar Seçimi** | Akıl yürütmeyle ilgili kenarların LLM tarafından seçilmesi |
|
|||
|
|
| **Köken Zinciri** | Kenar → parça → sayfa → belge yolu |
|
|||
|
|
|
|||
|
|
## Mimari
|
|||
|
|
|
|||
|
|
### Açıklanabilirlik Akışı
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
GraphRAG Query
|
|||
|
|
│
|
|||
|
|
├─► Session Activity
|
|||
|
|
│ └─► Query text, timestamp
|
|||
|
|
│
|
|||
|
|
├─► Retrieval Entity
|
|||
|
|
│ └─► All edges retrieved from subgraph
|
|||
|
|
│
|
|||
|
|
├─► Selection Entity
|
|||
|
|
│ └─► Selected edges with LLM reasoning
|
|||
|
|
│ └─► Each edge links to extraction provenance
|
|||
|
|
│
|
|||
|
|
└─► Answer Entity
|
|||
|
|
└─► Reference to synthesized response (in librarian)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### İki Aşamalı GraphRAG İşlem Hattı
|
|||
|
|
|
|||
|
|
1. **Kenar Seçimi**: LLM, alt grafikten ilgili kenarları seçer ve her biri için bir gerekçe sunar.
|
|||
|
|
2. **Sentez**: LLM, yalnızca seçilen kenarlardan cevap oluşturur.
|
|||
|
|
|
|||
|
|
Bu ayrım, açıklanabilirliği sağlar - hangi kenarların katkıda bulunduğunu tam olarak biliyoruz.
|
|||
|
|
|
|||
|
|
### Depolama
|
|||
|
|
|
|||
|
|
Açıklanabilirlik üçlüleri, yapılandırılabilir bir koleksiyonda saklanır (varsayılan: `explainability`).
|
|||
|
|
Kaynak ilişkileri için PROV-O ontolojisi kullanılır.
|
|||
|
|
Kenar referansları için RDF-star yeniden tanımlaması.
|
|||
|
|
Cevap içeriği, kütüphaneci hizmetinde saklanır (satır içi değil - çok büyük).
|
|||
|
|
|
|||
|
|
### Gerçek Zamanlı Akış
|
|||
|
|
|
|||
|
|
Açıklanabilirlik olayları, sorgu yürütüldüğü sırada istemciye akış olarak gönderilir:
|
|||
|
|
|
|||
|
|
1. Oturum oluşturuldu → olay gönderildi.
|
|||
|
|
2. Kenarlar alındı → olay gönderildi.
|
|||
|
|
3. Gerekçeyle birlikte kenarlar seçildi → olay gönderildi.
|
|||
|
|
4. Cevap oluşturuldu → olay gönderildi.
|
|||
|
|
|
|||
|
|
İstemci, `explain_id` ve `explain_collection`'i tam ayrıntıları almak için kullanır.
|
|||
|
|
|
|||
|
|
## URI Yapısı
|
|||
|
|
|
|||
|
|
Tüm URI'ler, UUID'lerle birlikte `urn:trustgraph:` ad alanını kullanır:
|
|||
|
|
|
|||
|
|
| Varlık | URI Kalıbı |
|
|||
|
|
|--------|-------------|
|
|||
|
|
| Oturum | `urn:trustgraph:session:{uuid}` |
|
|||
|
|
| Alma | `urn:trustgraph:prov:retrieval:{uuid}` |
|
|||
|
|
| Seçim | `urn:trustgraph:prov:selection:{uuid}` |
|
|||
|
|
| Cevap | `urn:trustgraph:prov:answer:{uuid}` |
|
|||
|
|
| Kenar Seçimi | `urn:trustgraph:prov:edge:{uuid}:{index}` |
|
|||
|
|
|
|||
|
|
## RDF Modeli (PROV-O)
|
|||
|
|
|
|||
|
|
### Oturum Etkinliği
|
|||
|
|
|
|||
|
|
```turtle
|
|||
|
|
<session-uri> a prov:Activity ;
|
|||
|
|
rdfs:label "GraphRAG query session" ;
|
|||
|
|
prov:startedAtTime "2024-01-15T10:30:00Z" ;
|
|||
|
|
tg:query "What was the War on Terror?" .
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Veri Alma Varlığı
|
|||
|
|
|
|||
|
|
```turtle
|
|||
|
|
<retrieval-uri> a prov:Entity ;
|
|||
|
|
rdfs:label "Retrieved edges" ;
|
|||
|
|
prov:wasGeneratedBy <session-uri> ;
|
|||
|
|
tg:edgeCount 50 .
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Seçim Varlığı
|
|||
|
|
|
|||
|
|
```turtle
|
|||
|
|
<selection-uri> a prov:Entity ;
|
|||
|
|
rdfs:label "Selected edges" ;
|
|||
|
|
prov:wasDerivedFrom <retrieval-uri> ;
|
|||
|
|
tg:selectedEdge <edge-sel-0> ;
|
|||
|
|
tg:selectedEdge <edge-sel-1> .
|
|||
|
|
|
|||
|
|
<edge-sel-0> tg:edge << <s> <p> <o> >> ;
|
|||
|
|
tg:reasoning "This edge establishes the key relationship..." .
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Cevap Varlığı
|
|||
|
|
|
|||
|
|
```turtle
|
|||
|
|
<answer-uri> a prov:Entity ;
|
|||
|
|
rdfs:label "GraphRAG answer" ;
|
|||
|
|
prov:wasDerivedFrom <selection-uri> ;
|
|||
|
|
tg:document <urn:trustgraph:answer:{uuid}> .
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
`tg:document`, kütüphaneci hizmetinde saklanan cevabı referans alır.
|
|||
|
|
|
|||
|
|
## Ad Alanı Sabitleri
|
|||
|
|
|
|||
|
|
`trustgraph-base/trustgraph/provenance/namespaces.py` içinde tanımlanmıştır:
|
|||
|
|
|
|||
|
|
| Sabit | URI |
|
|||
|
|
|----------|-----|
|
|||
|
|
| `TG_QUERY` | `https://trustgraph.ai/ns/query` |
|
|||
|
|
| `TG_EDGE_COUNT` | `https://trustgraph.ai/ns/edgeCount` |
|
|||
|
|
| `TG_SELECTED_EDGE` | `https://trustgraph.ai/ns/selectedEdge` |
|
|||
|
|
| `TG_EDGE` | `https://trustgraph.ai/ns/edge` |
|
|||
|
|
| `TG_REASONING` | `https://trustgraph.ai/ns/reasoning` |
|
|||
|
|
| `TG_CONTENT` | `https://trustgraph.ai/ns/content` |
|
|||
|
|
| `TG_DOCUMENT` | `https://trustgraph.ai/ns/document` |
|
|||
|
|
|
|||
|
|
## GraphRagResponse Şeması
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
@dataclass
|
|||
|
|
class GraphRagResponse:
|
|||
|
|
error: Error | None = None
|
|||
|
|
response: str = ""
|
|||
|
|
end_of_stream: bool = False
|
|||
|
|
explain_id: str | None = None
|
|||
|
|
explain_collection: str | None = None
|
|||
|
|
message_type: str = "" # "chunk" or "explain"
|
|||
|
|
end_of_session: bool = False
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Mesaj Türleri
|
|||
|
|
|
|||
|
|
| mesaj_türü | Amaç |
|
|||
|
|
|--------------|---------|
|
|||
|
|
| `chunk` | Yanıt metni (akış veya son) |
|
|||
|
|
| `explain` | IRI referansıyla açıklanabilirlik olayı |
|
|||
|
|
|
|||
|
|
### Oturum Yaşam Döngüsü
|
|||
|
|
|
|||
|
|
1. Birden fazla `explain` mesajı (oturum, alma, seçim, yanıt)
|
|||
|
|
2. Birden fazla `chunk` mesajı (akış yanıtı)
|
|||
|
|
3. `end_of_session=True` ile birlikte son `chunk`
|
|||
|
|
|
|||
|
|
## Kenar Seçim Formatı
|
|||
|
|
|
|||
|
|
LLM, seçilen kenarlarla birlikte JSONL döndürür:
|
|||
|
|
|
|||
|
|
```jsonl
|
|||
|
|
{"id": "edge-hash-1", "reasoning": "This edge shows the key relationship..."}
|
|||
|
|
{"id": "edge-hash-2", "reasoning": "Provides supporting evidence..."}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
`id`, `(labeled_s, labeled_p, labeled_o)`'nin `edge_id()` tarafından hesaplanan bir karma değeridir.
|
|||
|
|
|
|||
|
|
## URI'nin Korunması
|
|||
|
|
|
|||
|
|
### Sorun
|
|||
|
|
|
|||
|
|
GraphRAG, LLM'ye okunabilir etiketler gösterir, ancak açıklanabilirlik, köken takibi için orijinal URI'lere ihtiyaç duyar.
|
|||
|
|
|
|||
|
|
### Çözüm
|
|||
|
|
|
|||
|
|
`get_labelgraph()`, şunları döndürür:
|
|||
|
|
`labeled_edges`: LLM için `(label_s, label_p, label_o)` listesi
|
|||
|
|
`uri_map`: `edge_id(labels)` → `(uri_s, uri_p, uri_o)` eşlemesini içeren sözlük
|
|||
|
|
|
|||
|
|
Açıklanabilirlik verilerini saklarken, `uri_map`'dan gelen URI'ler kullanılır.
|
|||
|
|
|
|||
|
|
## Köken Takibi
|
|||
|
|
|
|||
|
|
### Kaynaktan Kenara
|
|||
|
|
|
|||
|
|
Seçilen kenarlar, kaynak belgelere kadar izlenebilir:
|
|||
|
|
|
|||
|
|
1. İçeren alt grafiği sorgulayın: `?subgraph tg:contains <<s p o>>`
|
|||
|
|
2. Kök belgeye kadar `prov:wasDerivedFrom` zincirini izleyin
|
|||
|
|
3. Zincirdeki her adım: parça → sayfa → belge
|
|||
|
|
|
|||
|
|
### Cassandra Tırnaklı Üçlü Desteği
|
|||
|
|
|
|||
|
|
Cassandra sorgu hizmeti, tırnaklı üçlüleri eşleştirmeyi destekler:
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# In get_term_value():
|
|||
|
|
elif term.type == TRIPLE:
|
|||
|
|
return serialize_triple(term.triple)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Bu, şu tür sorguları mümkün kılar:
|
|||
|
|
```
|
|||
|
|
?subgraph tg:contains <<http://example.org/s http://example.org/p "value">>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## CLI Kullanımı
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
tg-invoke-graph-rag --explainable -q "What was the War on Terror?"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Çıktı Formatı
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
[session] urn:trustgraph:session:abc123
|
|||
|
|
|
|||
|
|
[retrieval] urn:trustgraph:prov:retrieval:abc123
|
|||
|
|
|
|||
|
|
[selection] urn:trustgraph:prov:selection:abc123
|
|||
|
|
Selected 12 edge(s)
|
|||
|
|
Edge: (Guantanamo, definition, A detention facility...)
|
|||
|
|
Reason: Directly connects Guantanamo to the War on Terror
|
|||
|
|
Source: Chunk 1 → Page 2 → Beyond the Vigilant State
|
|||
|
|
|
|||
|
|
[answer] urn:trustgraph:prov:answer:abc123
|
|||
|
|
|
|||
|
|
Based on the provided knowledge statements...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Özellikler
|
|||
|
|
|
|||
|
|
Sorgu sırasında gerçek zamanlı açıklanabilirlik olayları
|
|||
|
|
`rdfs:label` aracılığıyla kenar bileşenleri için etiket çözümü
|
|||
|
|
`prov:wasDerivedFrom` aracılığıyla kaynak zinciri takibi
|
|||
|
|
Tekrarlanan sorguları önlemek için etiket önbelleği
|
|||
|
|
|
|||
|
|
## Uygulanan Dosyalar
|
|||
|
|
|
|||
|
|
| Dosya | Amaç |
|
|||
|
|
|------|---------|
|
|||
|
|
| `trustgraph-base/trustgraph/provenance/uris.py` | URI oluşturucular |
|
|||
|
|
| `trustgraph-base/trustgraph/provenance/namespaces.py` | RDF ad alanı sabitleri |
|
|||
|
|
| `trustgraph-base/trustgraph/provenance/triples.py` | Üçlü oluşturucular |
|
|||
|
|
| `trustgraph-base/trustgraph/schema/services/retrieval.py` | GraphRagResponse şeması |
|
|||
|
|
| `trustgraph-flow/trustgraph/retrieval/graph_rag/graph_rag.py` | URI korumasıyla temel GraphRAG |
|
|||
|
|
| `trustgraph-flow/trustgraph/retrieval/graph_rag/rag.py` | Kütüphaneci entegrasyonlu hizmet |
|
|||
|
|
| `trustgraph-flow/trustgraph/query/triples/cassandra/service.py` | Tırnaklı üçlü sorgu desteği |
|
|||
|
|
| `trustgraph-cli/trustgraph/cli/invoke_graph_rag.py` | Açıklanabilirlik gösterimiyle CLI |
|
|||
|
|
|
|||
|
|
## Referanslar
|
|||
|
|
|
|||
|
|
PROV-O (W3C Provenance Ontology): https://www.w3.org/TR/prov-o/
|
|||
|
|
RDF-star: https://w3c.github.io/rdf-star/
|
|||
|
|
Çıkarma zamanı kökeni: `docs/tech-specs/extraction-time-provenance.md`
|