एजेंट्स के लिए एक सुरक्षित डिलीवरी पाइपलाइन बनाना

अधिकांश एजेंट डेमो एक महत्वपूर्ण प्रश्न को छोड़ देते हैं। आप एक स्वायत्त (autonomous) सिस्टम को आपकी ओर से चीजें भेजने की अनुमति कैसे देते हैं, बिना दोबारा भेजने (double-sending) या बिना स्वीकृत कार्य को भेजने के?

'डबल-सेंड' कोई दुर्लभ त्रुटि नहीं है। जब कोई वर्कर काम के बीच में ही क्रैश हो जाता है, तो यह एक साधारण क्यू (queue) का डिफ़ॉल्ट व्यवहार होता है। एक वर्कर संदेश भेजता है और फिर सफलता दर्ज करने से पहले ही क्रैश हो जाता है। सिस्टम को लगता है कि कार्य विफल हो गया है और वह एक नए वर्कर को फिर से प्रयास करने के लिए कहता है। ग्राहक को दो ईमेल मिलते हैं और आपको एक सपोर्ट टिकट मिलता है।

आप हर क्रैश को नहीं रोक सकते। आपको एक्शन (action) और रिकॉर्ड (record) के बीच के अंतराल में होने वाले क्रैश के लिए डिज़ाइन करना चाहिए।

वास्तविक परिणाम वाले किसी भी एजेंट आउटपुट के लिए इस छह-चरणीय पाइपलाइन का उपयोग करें:

• Produce: एजेंट पूरा आर्टिफैक्ट (artifact) तैयार करता है। यह अभी कुछ भी नहीं भेजता है। • Persist: सबसे पहले इरादे (intent) और आर्टिफैक्ट को ड्यूरेबल स्टोरेज (durable storage) में लिखें। • Score: आउटपुट के साथ एक कॉन्फिडेंस स्कोर (confidence score) जोड़ें। • Review: कम कॉन्फिडेंस वाले आइटम्स को किसी इंसान (human) के पास भेजें। • Approve: 'फेल-क्लोज्ड' (fail-closed) गेट का उपयोग करें। जब तक कोई इंसान स्पष्ट अनुमति नहीं देता, सिस्टम सभी सेंड्स को ब्लॉक कर देता है। • Send and Attest: आइटम को एक लीज़ (lease) के तहत भेजें, फिर एक एविडेंस रसीद (evidence receipt) लिखें।

प्रत्येक चरण एक अलग ड्यूरेबल ट्रांज़िशन (durable transition) होना चाहिए। स्टेट (state) आपके डेटाबेस में रहता है, वर्कर की मेमोरी में नहीं।

डुप्लिकेट्स को रोकने के लिए, रो-लेवल लीजिंग (row-level leasing) का उपयोग करें। Postgres में, SELECT ... FOR UPDATE SKIP LOCKED का उपयोग करें। यह सुनिश्चित करता है कि एक समय में केवल एक ही वर्कर किसी कार्य का स्वामी हो।

सबसे महत्वपूर्ण नियम यह है कि आप एक्सपायर्ड लीज़ (expired leases) को कैसे संभालते हैं। यदि कोई वर्कर बाहरी संदेश भेजते समय क्रैश हो जाता है, तो उसे स्वचालित रूप से दोबारा प्रयास (retry) न करें। इसके बजाय, मानवीय समीक्षा के लिए कार्य को अलग (strand) कर दें। एक दिखाई देने वाला अटका हुआ कार्य (stuck task), एक अदृश्य डबल-सेंड से बेहतर है।

आपको 'फेल-क्लोज्ड' सिद्धांतों का भी पालन करना चाहिए:

  • डिफ़ॉल्ट रूप से सेंडिंग बंद रहती है। सभी आउटबाउंड ट्रैफिक को सक्षम करने के लिए एक सिंगल फ्लैग होना चाहिए।
  • पहचान की जाँच की जाती है। सिस्टम को भेजते समय सेंडर एड्रेस और ट्रांसपोर्ट सुरक्षा को सत्यापित करना चाहिए।
  • हर चीज़ की एक रसीद निकलती है। बिना रिकॉर्ड किया गया सेंड एक विफलता है।

इसे इंटरनल लॉग्स जैसे कम जोखिम वाले कार्यों के लिए न बनाएं। इसका उपयोग तब करें जब कोई गलती पैसे का नुकसान करती है, कानूनी समस्या पैदा करती है, या सपोर्ट टिकट की आवश्यकता होती है।

स्रोत: https://dev.to/danmercede/building-a-governed-double-send-safe-delivery-pipeline-for-agent-outputs-80e

वैकल्पिक लर्निंग कम्युनिटी: https://t.me/GyaanSetuAi