Governance · संरचना से ही read-only
नीति कोड है।
प्रॉम्प्ट नहीं।
SQAI मॉडल को वही मानता है जो वह है: एक अविश्वसनीय क्लाइंट। Allow-lists टूल के निर्माण के समय कोड में स्थिर हो जाती हैं, निष्पादन से पहले in-process जाँची जाती हैं, और मॉडल के protocol में अनुपस्थित रहती हैं। सिस्टम को मनाने के लिए कुछ है ही नहीं।
IIसंकुचन, पूर्ण विवरण
तीन परतें। हर एक केवल घटा सकती है।
हर उत्तर एक ही नियंत्रण से गुज़रता है। एक hash-pinned contract परिभाषित करता है कि क्या अस्तित्व में है। आपकी नीति उसे केवल अनुमत तक सीमित करती है। एक typed अनुरोध को दोनों के भीतर फिट होना होगा।
- 01
Contract
pinned runtime में 4,778 क्षमताएँ; एजेंट्स को 4,574 उजागर, सभी read-only। शेष 204 पूरी तरह बाहर — मॉडल के लिए उनका अस्तित्व नहीं।
- 02
आपकी नीति
तीन allow-lists — allowedSources, allowedFields प्रति source, allowedFunctions — createSQAI() के समय स्थिर। Functions का डिफ़ॉल्ट "all-readonly" है।
- 03
एक अनुरोध
एक typed plan, contract के विरुद्ध validated, फिर निष्पादन से पहले in-process नीति के विरुद्ध जाँचा गया — कभी बाद में नहीं।
allowedSourcesordersallowedFieldsregionrevenueunit_priceallowedFunctionsstats.medianfinance.npvQuerySpec v1 · median(revenue) by region · policy ✓
contract_hash sha256:79f1c5a6c7164e7e9e1750e70a5c03292fa87eb52d8148a740c06695924be9a1
केवल संकुचन।
एक नीति सतह को घटा सकती है; कोई भी उसे बढ़ा नहीं सकता। ऐसी क्षमता का नाम लें जो contract उजागर नहीं करता, और createSQAI() निर्माण के समय unsupported_operation फेंकता है — कोई एजेंट जुड़ने से पहले ही ऐप विफल हो जाता है।
और मॉडल के टूल input में कोई allowed* फ़ील्ड नहीं है। नीति protocol में नहीं है, इसलिए कोई प्रॉम्प्ट — या injection — उसे विस्तृत नहीं कर सकता।
IIIनीति, कोड में
एक बार लिखी। हर बार जाँची।
अधिकांश governance टूलिंग डेटा पथ के बगल में बैठकर उसे देखती है। SQAI की नीति पथ के भीतर है: constructor में तीन allow-lists, हर निष्पादन से पहले in-process लागू।
const sqai = createSQAI({
sources: { orders },
// policy — fixed here, invisible to the model
allowedSources: ['orders'],
allowedFields: {
orders: ['region', 'revenue', 'unit_price'],
},
// functions default: 'all-readonly'
allowedFunctions: [
'stats.median', 'finance.npv',
],
});- allowedSources
- वे registered sources जिन्हें एक plan नाम दे सकता है। अन्य कुछ भी policy_denied_source लौटाता है।
- allowedFields
- प्रति source कॉलम। किसी अन्य कॉलम को छूने वाला plan policy_denied_field लौटाता है।
- allowedFunctions
- वे read-only functions जिन्हें एक plan कॉल कर सकता है — डिफ़ॉल्ट "all-readonly"। इससे बाहर कुछ भी policy_denied_function लौटाता है।
- tool input
- कोई allowed* फ़ील्ड नहीं। मॉडल नीति कभी नहीं देखता, इसलिए वह कभी व्यापक नीति नहीं भेज सकता।
अस्वीकृति का लेखा
अस्वीकृतियाँ डेटा हैं, exceptions नहीं। हर एक में एक स्थिर कोड होता है जिसे एजेंट पढ़ सकता है — और कोई भी retryable नहीं है, इसलिए कोई लूप नीति को घिस नहीं सकता।
निर्माण के समय
unsupported_operationनीति ऐसी क्षमता का नाम लेती है जो contract उजागर नहीं करता। निर्माण विफल होता है; कोई एजेंट जुड़ने से पहले ही ऐप बंद हो जाता है।
अनुरोध के समय
policy_denied_sourceplan, allowedSources से बाहर किसी source का नाम लेता है।
policy_denied_fieldplan उस source के allowedFields से बाहर किसी कॉलम को छूता है।
policy_denied_functionplan, allowedFunctions से बाहर किसी function को कॉल करता है।
source: "sqai" — हर नीति अस्वीकृति एक संरचित, non-retryable परिणाम के रूप में आती है। टूल कभी throw नहीं करते।
IVअभिरक्षा
परिणाम रखे जाते हैं, संग्रहीत नहीं।
पूरा result set कभी मॉडल के context में नहीं आता। इसे एक governed store में रखा जाता है और id से संदर्भित किया जाता है; मॉडल को एक घोषित sample प्राप्त होता है।
Result store
नियंत्रित स्टोर · TTL 15 मिनट
- result_id
- 16 यादृच्छिक bytes, base64url। अनुमान-अयोग्य, कभी क्रमिक नहीं।
- authorization
- Tenant-bound। गलत tenant को result_not_found मिलता है — store कभी अस्तित्व की पुष्टि नहीं करता।
- ttl
- 15 मिनट। उसके बाद entry मिट जाती है।
- capacity
- अधिकतम 256 results — कुल 64 MB, प्रति tenant 16 MB।
Store परिणाम रखता है। मॉडल एक sample पढ़ता है और यह स्पष्ट करता है।
Model-context सीमाएँ
defaultLimit100जब plan में कोई सीमा निर्धारित न हो तब लागू row limitmaxExecutionRows1,000किसी भी execution द्वारा लौटाई जाने वाली rows की अधिकतम सीमाmaxRowsToModel25model context को अधिकतम इतनी ही rows मिलती हैंmaxCellsToModel250model context को अधिकतम इतनी ही cells मिलती हैंmaxBytesToModel32,000model को result data के अधिकतम इतने ही bytes मिलते हैंTruncation सदैव result में घोषित होता है। आंशिक rows कभी नहीं दिखाई जातीं — row या तो पूरी आती है या बिल्कुल नहीं।
ऑडिट दृष्टिकोण
17%संगठन किसी agent की पूरी tool-call sequence को बाद में पुनर्निर्मित कर सकते हैं
GDPR Article 30 और SOC 2 CC7.2 ठीक ऐसे ही records की अपेक्षा करते हैं।
हर SQAI उत्तर अपना पुनर्निर्माण स्वयं वहन करता है:
plan_hash · invocation_hash · computation_hash · contract_hash
Replay एक lookup है, जाँच नहीं। Replay कैसे काम करता है →
VIप्रश्न
Governance, सीधे पूछा गया
क्या मॉडल अपनी पहुँच स्वयं बढ़ा सकता है?
नहीं। नीति createSQAI() के समय निर्धारित होती है और execution से पहले in-process जाँची जाती है। मॉडल के tool input में कोई allowed* field नहीं होता, इसलिए protocol में विस्तार की कोई गुंजाइश नहीं — नीति से बाहर का अनुरोध एक structured policy_denied परिणाम लौटाता है।
क्या read-only एक ऐसा flag है जिसे bypass किया जा सकता है?
यह flag नहीं है। उजागर contract में 4,574 read-only capabilities हैं; write path निर्माण से ही अनुपस्थित है, अक्षम नहीं। Prompt injection मॉडल की माँग बदल सकता है — वह किसी pinned contract में capabilities नहीं जोड़ सकता।
GDPR Article 30 या SOC 2 CC7.2 समीक्षा के लिए कौन से records उपलब्ध हैं?
हर result में plan_hash, invocation_hash, computation_hash और contract_hash होते हैं। सटीक computation को बाद में भी उन hashes के विरुद्ध replay और सत्यापित किया जा सकता है।
Query के बाद result data कहाँ रहता है?
एक tenant-authorized result store में: ids 16 यादृच्छिक bytes के होते हैं, entries 15 मिनट बाद समाप्त हो जाती हैं, और store कुल 64 MB तथा प्रति tenant 16 MB तक सीमित है। Model context को अधिकतम 25 rows, 250 cells और 32,000 bytes मिलते हैं — truncation सदैव घोषित।
VIIआगे
उत्तर को नियंत्रित करें।
एक schema और एक compliance प्रश्न लाएँ। हम वह नीति दिखाएँगे जो उसका उत्तर देती है।