Production में AI ऐप्स की logging और monitoring
जिस चीज़ को आपने रिकॉर्ड ही नहीं किया, उसकी जांच आप नहीं कर सकते। हर AI बातचीत (interaction) से जुड़ी सही चीज़ें लॉग करें, उन logs में मौजूद पर्सनल डेटा को सुरक्षित रखें, और गलत इस्तेमाल (abuse) पर नज़र रखें।
60 सेकंड में
Production में AI ऐप्स की logging और monitoring
जिस चीज़ को आपने रिकॉर्ड ही नहीं किया, उसकी जांच आप नहीं कर सकते। हर AI बातचीत (interaction) से जुड़ी सही चीज़ें लॉग करें, उन logs में मौजूद पर्सनल डेटा को सुरक्षित रखें, और गलत…
हर बातचीत (interaction) के लिए क्या लॉग करें
| Field | क्यों | प्राइवेसी से जुड़ी सावधानी |
|---|---|---|
| Request id, time, feature, tenant | अलग-अलग इवेंट्स को आपस में जोड़ना | कम जोखिम |
| User id (जहाँ तक हो सके कल्पित नाम / pseudonymous) | हर यूज़र के गलत इस्तेमाल और कोटा पर नज़र रखने के लिए | नाम या फोन नंबर की जगह internal id इस्तेमाल करें |
| Model का नाम और version, prompt template version | यह जानने के लिए कि किस बदलाव से क्या हुआ | कम जोखिम |
| User input और model output | गलत इस्तेमाल और क्वालिटी की जांच के लिए | पर्सनल डेटा को redact करें (हटाएं/छिपाएं); एक्सेस सीमित रखें; कम समय तक संभाल कर रखें (shorter retention) |
| निकाले गए स्रोत (document ids) | जवाब पर किस चीज़ का असर पड़ा | ids लॉग करें, पूरा डॉक्यूमेंट टेक्स्ट नहीं |
| Tool calls, arguments और results | सिस्टम ने असल में क्या किया | संवेदनशील arguments को redact करें |
| Tokens, cost, latency | Denial of wallet और परफॉरमेंस | कम जोखिम |
| Safety signals | Guardrail blocks, refusals, canary hits, limit hits | कम जोखिम |
स्टोर करने से पहले redact करें
import re
PATTERNS = [
("EMAIL", re.compile(r"[\w.+-]+@[\w-]+\.[\w.-]+")),
("PAN", re.compile(r"\b[A-Z]{5}[0-9]{4}[A-Z]\b")),
# Indian mobile: optional +91, then 10 digits starting 6-9.
# Runs before LONG_NUMBER, which would otherwise eat "+91 98..." whole.
("PHONE", re.compile(r"(?<!\d)(?:\+91[ -]?)?[6-9]\d{9}(?!\d)")),
# 12 to 16 digits, spaces or dashes allowed: Aadhaar-like or card-like
("LONG_NUMBER", re.compile(r"(?<!\d)\d(?:[ -]?\d){11,15}(?!\d)")),
]
def redact(text: str) -> str:
for label, pattern in PATTERNS:
text = pattern.sub(f"[{label}]", text)
return textऐसे signals जिन पर अलर्ट मिलना चाहिए
| Signal | इसका क्या मतलब हो सकता है |
|---|---|
| कोई एक अकाउंट हर दिन अपनी टोकन सीमा के करीब हो, या अचानक खर्च बहुत बढ़ जाए | Denial of wallet, या कोई बॉट आपके फीचर का इस्तेमाल कर रहा है |
| बार-बार prompt-extraction या "ignore previous instructions" जैसे इनपुट | कोई आपके ऐप की टोह ले रहा है (जांच-परख कर रहा है) |
| आउटपुट में आपका prompt canary दिखाई दे जाए | System prompt लीक हो गया है |
| किसी एक यूज़र के लिए बहुत सारे refusals या ब्लॉक किए गए आउटपुट | Jailbreak की कोशिशें |
| अनजान domains के लिंक या इमेज वाले आउटपुट | डेटा चुराने (data exfiltration) की मुमकिन कोशिश |
| किसी टूल का सामान्य से कहीं ज़्यादा इस्तेमाल होना, या पहली बार इस्तेमाल होना | गलत इस्तेमाल, या कोई लूप |
| किसी दूसरे tenant के डॉक्यूमेंट्स बाहर आ जाना | Permission filter की गड़बड़ी: इसे एक गंभीर घटना (incident) मानें |
- 1
Baseline
कुछ हफ़्तों तक समझें कि 'सामान्य' क्या होता है: इस्तेमाल का वॉल्यूम, खर्च, refusals, टूल्स। - 2
Rules
ऊपर दिए गए सिग्नल्स के लिए अलर्ट नियम लिखें; कई टीमें अपने SIEM और डिटेक्शन नियम शेयर करने के लिए Sigma जैसे फॉर्मेट्स का इस्तेमाल करती हैं। - 3
Route
हर अलर्ट उस ज़िम्मेदार व्यक्ति (owner) के पास जाए जो उस फीचर को अच्छी तरह जानता हो। - 4
Runbook
लिख कर रखें कि क्या करना है: अकाउंट ब्लॉक करना, कोई टूल बंद करना, kill switch का इस्तेमाल करना। - 5
Tune
बेकार के शोर वाले (noisy) अलर्ट हटाएं, और हर घटना के बाद नए नियम जोड़ें।
डेटा रखने की अवधि (Retention) और नियम
और देखें और पढ़ें
लैब
एक log record डिज़ाइन, टेस्ट के साथ काम करने वाला एक redaction फ़ंक्शन, तीन अलर्ट नियम और एक retention टेबल।
समस्या
Starter फ़ाइल में दिए गए फ़र्ज़ी डेटा के साथ अपने कंप्यूटर पर काम करें।
- Starter चलाएं। Redaction टेस्ट पास करवाएं (पैटर्न को ठीक करने या क्रम बदलने की ज़रूरत पड़ सकती है)।
- एक ऐसा टेस्ट खुद जोड़ें जिसे पैटर्न पकड़ नहीं पाता, और एक वाक्य में लिखें कि सिर्फ regex ही काफी क्यों नहीं है।
- इस पाठ से कम से कम आठ fields लेकर चैटबॉट की एक बातचीत (turn) के लिए JSON log record डिज़ाइन करें। मार्क करें कि किन fields में पर्सनल डेटा है।
- सादे शब्दों में तीन अलर्ट नियम लिखें: signal, threshold, किसे बताया जाए, पहला एक्शन।
- एक retention टेबल लिखें: full text, metadata, cost data, security alerts।
प्रैक्टिस लैब
कोड में बदलाव करें और इसे रन करें। Python आपके ब्राउज़र में चलता है — हमारे सर्वर पर कुछ नहीं भेजा जाता।
कोई आउटपुट नहीं। वैल्यूज़ देखने के लिए print(...) जोड़ें।
आपका काम तब पूरा होगा जब
कठिन सवाल
उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।
Q1Redaction पैटर्न्स का क्रम (order) मायने क्यों रख सकता है?दिखाएं
क्योंकि पहले वाला पैटर्न उस टेक्स्ट को ले सकता है जिसकी ज़रूरत बाद वाले पैटर्न को है। शुरुआती कोड में, सामान्य "long number" पैटर्न पहले चलता है और "91 9876543210" को 12 अंकों की संख्या के रूप में देखता है, जिससे एक फ़ोन नंबर को गलत लेबल मिल जाता है और एक छूटा हुआ "+" पीछे रह जाता है। ज़्यादा सटीक पैटर्न्स (जैसे देश के कोड वाला फ़ोन नंबर) को सामान्य catch-all पैटर्न्स से पहले चलाएं, और boundaries का इस्तेमाल करें ताकि कोई पैटर्न किसी बड़े नंबर के अंदर मैच न हो सके।
Q2एक जांचकर्ता को 6 महीने पहले का यूज़र का सटीक मैसेज चाहिए, लेकिन आपका full-text retention केवल 30 दिनों का है। आप प्राइवेसी और जांच दोनों को ध्यान में रखकर सिस्टम कैसे डिज़ाइन कर सकते हैं?दिखाएं
मेटाडेटा को ज़्यादा समय तक रखें: request ids, user ids, model और prompt versions, document ids, tool calls और सेफ़्टी सिग्नल्स। जब कोई अलर्ट ट्रिगर हो या कोई इंसिडेंट शुरू हो, तो उससे जुड़े पूरे रिकॉर्ड्स को एक सुरक्षित इंसिडेंट स्टोर में कॉपी कर लें, जिसका अपना अलग retention हो। ज़्यादातर जांचें मेटाडेटा से शुरू हो सकती हैं, और सबसे ज़रूरी टेक्स्ट उसी समय सुरक्षित कर लिया जाता है जब वह प्रासंगिक बनता है।
अक्सर पूछे जाने वाले सवाल
क्या हमें पूरे prompts और outputs को लॉग करना भी चाहिए?
अक्सर हाँ, क्योंकि इनके बिना घटनाओं की जांच करना मुश्किल होता है। लेकिन पहले redact करें, एक्सेस सीमित करें, और पूरे टेक्स्ट को metadata की तुलना में कम समय तक रखें। बहुत संवेदनशील फीचर्स के लिए, सिर्फ metadata और एक hash लॉग करने पर विचार करें, और जांच के लिए पूरा टेक्स्ट बहुत कम समय के लिए ही रखें।
हमें AI logs कब तक रखने चाहिए?
इसका कोई एक तय जवाब नहीं है। यह आपके मकसद, आपकी कानूनी जिम्मेदारियों और आपके कॉन्ट्रैक्ट्स पर निर्भर करता है। हर log टाइप के हिसाब से तय करें, इसे लिख लें, और समय पूरा होने पर अपने आप डिलीट होने दें।
क्या यूज़र्स हमसे अपनी बातचीत डिलीट करने के लिए कह सकते हैं?
प्राइवेसी कानून अक्सर लोगों को अपने डेटा पर अधिकार देते हैं, जिसमें कई मामलों में डेटा मिटाने (erasure) का अधिकार भी शामिल है। Logs को इस तरह डिज़ाइन करें कि आप किसी एक यूज़र के डेटा को ढूंढकर डिलीट कर सकें। आपकी लीगल टीम ठीक-ठीक बता सकती है कि आप पर क्या नियम लागू होते हैं।
क्या मॉडल प्रोवाइडर भी हमारे prompts अपने पास रखता है?
यह प्रोवाइडर और आपके कॉन्ट्रैक्ट या सेटिंग्स पर निर्भर करता है। उनके डेटा के इस्तेमाल और retention की शर्तें पढ़ें, और ऐसे विकल्प चुनें जो आपके डेटा के अनुकूल हों। यह आपके threat model का हिस्सा है, कोई बाद में सोचने वाली बात नहीं।
पाठ का टेस्ट
5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।