# निष्कर्षण का स्रोत: सबग्राफ मॉडल ## समस्या निष्कर्षण के समय का वर्तमान स्रोत जानकारी एक पूर्ण पुन: निरूपण प्रति उत्पन्न करता है निष्कर्षित त्रिगुट: प्रत्येक ज्ञान तथ्य के लिए एक अद्वितीय `stmt_uri`, `activity_uri`, और संबंधित PROV-O मेटाडेटा। एक ऐसे खंड को संसाधित करना जो 20 संबंधों का उत्पादन करता है, उसमें लगभग 220 स्रोत जानकारी त्रिगुट होते हैं, इसके अतिरिक्त लगभग 20 ज्ञान त्रिगुट - लगभग 10:1 का ओवरहेड। यह महंगा है (भंडारण, अनुक्रमण, प्रसारण) और अर्थपूर्ण रूप से गलत है। प्रत्येक खंड को एक एकल LLM कॉल द्वारा संसाधित किया जाता है जो सभी त्रिगुटों को एक लेनदेन में उत्पन्न करता है। वर्तमान प्रति-त्रिगुट मॉडल 20 स्वतंत्र निष्कर्षण घटनाओं का भ्रम पैदा करके इसे अस्पष्ट करता है। इसके अतिरिक्त, चार निष्कर्षण प्रोसेसरों में से दो (kg-extract-ontology, kg-extract-agent) में कोई स्रोत जानकारी नहीं है, जिससे ऑडिट में अंतराल पैदा होते हैं। ## समाधान प्रति-त्रिगुट पुन: निरूपण को एक **सबग्राफ मॉडल** से बदलें: एक स्रोत जानकारी रिकॉर्ड प्रति खंड निष्कर्षण, उस खंड से उत्पन्न सभी त्रिगुटों में साझा किया जाता है। ### शब्दावली परिवर्तन | पुराना | नया | |-----|-----| | `stmt_uri` (`https://trustgraph.ai/stmt/{uuid}`) | `subgraph_uri` (`https://trustgraph.ai/subgraph/{uuid}`) | | `statement_uri()` | `subgraph_uri()` | | `tg:reifies` (1:1, पहचान) | `tg:contains` (1:कई, समावेशन) | ### लक्षित संरचना सभी स्रोत जानकारी त्रिगुट `urn:graph:source` नामित ग्राफ में जाते हैं। ``` # Subgraph contains each extracted triple (RDF-star quoted triples) tg:contains <> . tg:contains <> . tg:contains <> . # Derivation from source chunk prov:wasDerivedFrom . prov:wasGeneratedBy . # Activity: one per chunk extraction rdf:type prov:Activity . rdfs:label "{component_name} extraction" . prov:used . prov:wasAssociatedWith . prov:startedAtTime "2026-03-13T10:00:00Z" . tg:componentVersion "0.25.0" . tg:llmModel "gpt-4" . # if available tg:ontology . # if available # Agent: stable per component rdf:type prov:Agent . rdfs:label "{component_name}" . ``` ### मात्रा की तुलना एक ऐसे खंड के लिए जो N निकाले गए त्रिगुण उत्पन्न करता है: | | पुराना (प्रति-त्रिगुण) | नया (उप-ग्राफ) | |---|---|---| | `tg:contains` / `tg:reifies` | N | N | | गतिविधि त्रिगुण | ~9 x N | ~9 | | एजेंट त्रिगुण | 2 x N | 2 | | कथन/उप-ग्राफ मेटाडेटा | 2 x N | 2 | | **कुल प्रामाणिकता त्रिगुण** | **~13N** | **N + 13** | | **उदाहरण (N=20)** | **~260** | **33** | ## दायरा ### अपडेट करने के लिए प्रोसेसर (मौजूदा प्रामाणिकता, प्रति-त्रिगुण) **kg-extract-definitions** (`trustgraph-flow/trustgraph/extract/kg/definitions/extract.py`) वर्तमान में, यह `statement_uri()` + `triple_provenance_triples()` को परिभाषा के प्रत्येक लूप के अंदर कॉल करता है। परिवर्तन: लूप से पहले `subgraph_uri()` और `activity_uri()` का निर्माण करें। लूप के अंदर `tg:contains` त्रिकों को एकत्र करें। लूप के बाद एक बार साझा गतिविधि/एजेंट/व्युत्पत्ति ब्लॉक उत्सर्जित करें। **kg-extract-relationships** (`trustgraph-flow/trustgraph/extract/kg/relationships/extract.py`) परिभाषाओं के समान पैटर्न। समान परिवर्तन। ### उत्पत्ति जोड़ने के लिए प्रोसेसर (वर्तमान में गायब) **kg-extract-ontology** (`trustgraph-flow/trustgraph/extract/kg/ontology/extract.py`) वर्तमान में, यह बिना किसी स्रोत जानकारी के त्रिक उत्पन्न करता है। उपग्राफ स्रोत जानकारी जोड़ें। उसी पैटर्न का उपयोग करके: प्रत्येक खंड के लिए एक उपग्राफ, प्रत्येक के लिए `tg:contains`। निकाले गए त्रिगुट। **kg-extract-agent** (`trustgraph-flow/trustgraph/extract/kg/agent/extract.py`) वर्तमान में, यह बिना किसी स्रोत जानकारी के त्रिक (triples) उत्पन्न करता है। समान पैटर्न का उपयोग करके सबग्राफ (subgraph) स्रोत जानकारी जोड़ें। ### साझा उत्पत्ति लाइब्रेरी में परिवर्तन **`trustgraph-base/trustgraph/provenance/triples.py`** `triple_provenance_triples()` को `subgraph_provenance_triples()` से बदलें नया फ़ंक्शन एक एकल के बजाय निकाले गए त्रिपुलों की सूची को स्वीकार करता है प्रत्येक ट्रिपल के लिए एक `tg:contains` उत्पन्न करता है, साझा गतिविधि/एजेंट ब्लॉक पुराने `triple_provenance_triples()` को हटा दें **`trustgraph-base/trustgraph/provenance/uris.py`** `statement_uri()` को `subgraph_uri()` से बदलें। **`trustgraph-base/trustgraph/provenance/namespaces.py`** `TG_REIFIES` को `TG_CONTAINS` से बदलें। ### दायरे में नहीं **kg-extract-topics**: पुराना-शैली का प्रोसेसर, वर्तमान में उपयोग में नहीं है। मानक प्रक्रियाओं में। **kg-extract-rows**: पंक्तियाँ उत्पन्न करता है, ट्रिपल नहीं, अलग उत्पत्ति मॉडल। मॉडल। **क्वेरी-टाइम प्रोवेनेंस** (`urn:graph:retrieval`): एक अलग चिंता का विषय, पहले से ही एक अलग पैटर्न का उपयोग करता है (प्रश्न/अन्वेषण/फोकस/संश्लेषण)। **दस्तावेज़/पृष्ठ/खंड प्रोवेनेंस** (पीडीएफ डिकोडर, चंकर): पहले से ही उपयोग करता है `derived_entity_triples()` जो प्रति-एंटिटी है, प्रति-ट्रिपल नहीं - कोई अनावश्यकता समस्या नहीं। ## कार्यान्वयन संबंधी टिप्पणियाँ ### प्रोसेसर लूप का पुनर्गठन पहले (प्रत्येक त्रिक के लिए, संबंधों में): ```python for rel in rels: # ... build relationship_triple ... stmt_uri = statement_uri() prov_triples = triple_provenance_triples( stmt_uri=stmt_uri, extracted_triple=relationship_triple, ... ) triples.extend(set_graph(prov_triples, GRAPH_SOURCE)) ``` (उपग्राफ के बाद): ```python sg_uri = subgraph_uri() for rel in rels: # ... build relationship_triple ... extracted_triples.append(relationship_triple) prov_triples = subgraph_provenance_triples( subgraph_uri=sg_uri, extracted_triples=extracted_triples, chunk_uri=chunk_uri, component_name=default_ident, component_version=COMPONENT_VERSION, llm_model=llm_model, ontology_uri=ontology_uri, ) triples.extend(set_graph(prov_triples, GRAPH_SOURCE)) ``` ### नया सहायक हस्ताक्षर ```python def subgraph_provenance_triples( subgraph_uri: str, extracted_triples: List[Triple], chunk_uri: str, component_name: str, component_version: str, llm_model: Optional[str] = None, ontology_uri: Optional[str] = None, timestamp: Optional[str] = None, ) -> List[Triple]: """ Build provenance triples for a subgraph of extracted knowledge. Creates: - tg:contains link for each extracted triple (RDF-star quoted) - One prov:wasDerivedFrom link to source chunk - One activity with agent metadata """ ``` ### महत्वपूर्ण परिवर्तन यह उत्पत्ति मॉडल में एक महत्वपूर्ण बदलाव है। उत्पत्ति (प्रोवेनेंस) का जारी किया गया है, इसलिए माइग्रेशन की आवश्यकता नहीं है। पुराना `tg:reifies` / `statement_uri` कोड पूरी तरह से हटाया जा सकता है।