ഏജന്റുകൾക്കായി സുരക്ഷിതമായ ഒരു ഡെലിവറി പൈപ്പ്‌ലൈൻ നിർമ്മിക്കുക

മിക്ക ഏജന്റ് ഡെമോകളും ഒരു പ്രധാന ചോദ്യം ഒഴിവാക്കാറുണ്ട്. ഡബിൾ-സെൻഡിംഗ് (രണ്ട് തവണ അയക്കുക) ഒഴിവാക്കിയും അംഗീകാരമില്ലാത്ത ജോലികൾ അയക്കാതെയും, ഒരു സ്വയംഭരണാധികാരമുള്ള സിസ്റ്റത്തെ (autonomous system) നിങ്ങളുടെ പേരിൽ കാര്യങ്ങൾ അയക്കാൻ നിങ്ങൾ എങ്ങനെ അനുവദിക്കും?

ഡബിൾ-സെൻഡിംഗ് എന്നത് അപൂർവ്വമായ ഒരു പിശകല്ല. ഒരു ടാസ്ക് നടക്കുമ്പോൾ തന്നെ ഒരു വർക്കർ (worker) പരാജയപ്പെട്ടാൽ, ഒരു സാധാരണ ക്യൂവിന്റെ (queue) സ്വാഭാവിക രീതിയാണിത്. ഒരു വർക്കർ ഒരു സന്ദേശം അയക്കുന്നു, എന്നാൽ അത് വിജയിച്ചു എന്ന് രേഖപ്പെടുത്തുന്നതിന് മുമ്പ് തന്നെ തകരാറിലാകുന്നു. ടാസ്ക് പരാജയപ്പെട്ടുവെന്ന് സിസ്റ്റം കരുതി പുതിയൊരു വർക്കറോട് അത് വീണ്ടും ചെയ്യാൻ ആവശ്യപ്പെടുന്നു. ഇതിന്റെ ഫലമായി ഉപഭോക്താവിന് രണ്ട് ഇമെയിലുകൾ ലഭിക്കുന്നു, നിങ്ങൾക്ക് ഒരു സപ്പോർട്ട് ടിക്കറ്റും ലഭിക്കുന്നു.

എല്ലാ തകരാറുകളും (crash) തടയാൻ നിങ്ങൾക്ക് കഴിയില്ല. ഒരു പ്രവർത്തനവും അതിന്റെ രേഖപ്പെടുത്തലും (record) തമ്മിലുള്ള ഇടവേളയിൽ ഉണ്ടാകുന്ന തകരാറുകൾ മുൻകൂട്ടി കണ്ട് വേണം നിങ്ങൾ രൂപകൽപ്പന ചെയ്യേണ്ടത്.

യഥാർത്ഥ പ്രത്യാഘാതങ്ങൾ ഉണ്ടാക്കാൻ സാധ്യതയുള്ള ഏജന്റ് ഔട്ട്‌പുട്ടുകൾക്കായി ഈ ആറ് ഘട്ടങ്ങളുള്ള പൈപ്പ്‌ലൈൻ ഉപയോഗിക്കുക:

• Produce: ഏജന്റ് പൂർണ്ണമായ ആർട്ടിഫാക്റ്റ് (artifact) നിർമ്മിക്കുന്നു. ഇത് ഇതുവരെ ഒന്നും അയക്കുന്നില്ല. • Persist: ഉദ്ദേശ്യവും (intent) ആർട്ടിഫാക്റ്റും ആദ്യം ഡ്യൂറബിൾ സ്റ്റോറേജിലേക്ക് (durable storage) എഴുതുക. • Score: ഔട്ട്‌പുട്ടിനോടൊപ്പം ഒരു കോൺഫിഡൻസ് സ്കോർ (confidence score) ചേർക്കുക. • Review: കുറഞ്ഞ കോൺഫിഡൻസ് ഉള്ളവ ഒരു മനുഷ്യന്റെ പരിശോധനയ്ക്കായി മാറ്റിവെക്കുക. • Approve: ഒരു fail-closed ഗേറ്റ് ഉപയോഗിക്കുക. ഒരു മനുഷ്യൻ വ്യക്തമായ അനുമതി നൽകാത്തിടത്തോളം സിസ്റ്റം എല്ലാ സന്ദേശങ്ങളും തടയുന്നു. • Send and Attest: ഒരു ലീസ് (lease) പ്രകാരം ഐറ്റം അയക്കുക, തുടർന്ന് ഒരു തെളിവ് രസീത് (evidence receipt) രേഖപ്പെടുത്തുക.

ഓരോ ഘട്ടവും പ്രത്യേകമായ ഡ്യൂറബിൾ ട്രാൻസിഷനുകൾ (durable transitions) ആയിരിക്കണം. സ്റ്റേറ്റ് (state) നിങ്ങളുടെ ഡാറ്റാബേസിലായിരിക്കണം, ഒരു വർക്കറുടെ മെമ്മറിയിലല്ല.

ഡ്യൂപ്ലിക്കേറ്റുകൾ ഒഴിവാക്കാൻ, റോ-ലെവൽ ലീസിംഗ് (row-level leasing) ഉപയോഗിക്കുക. Postgres-ൽ, SELECT ... FOR UPDATE SKIP LOCKED ഉപയോഗിക്കുക. ഇത് ഒരു സമയം ഒരു വർക്കർക്ക് മാത്രമേ ഒരു ടാസ്ക് കൈകാര്യം ചെയ്യാൻ കഴിയൂ എന്ന് ഉറപ്പാക്കുന്നു.

കാലാവധി കഴിഞ്ഞ ലീസുകൾ (expired leases) നിങ്ങൾ എങ്ങനെ കൈകാര്യം ചെയ്യുന്നു എന്നതാണ് ഏറ്റവും പ്രധാനപ്പെട്ട നിയമം. ഒരു എക്സ്റ്റേണൽ സന്ദേശം അയക്കുന്നതിനിടെ ഒരു വർക്കർ പരാജയപ്പെട്ടാൽ, അത് സ്വയമേവ വീണ്ടും ശ്രമിക്കരുത് (retry). പകരം, ആ ടാസ്ക് മനുഷ്യന്റെ പരിശോധനയ്ക്കായി മാറ്റിവെക്കുക. കാണാൻ കഴിയാത്ത ഒരു ഡബിൾ-സെൻഡിംഗിനേക്കാൾ നല്ലത്, തടസ്സപ്പെട്ടു എന്ന് കാണാൻ കഴിയുന്ന ഒരു ടാസ്കാണ്.

നിങ്ങൾ fail-closed തത്വങ്ങളും പാലിക്കണം:

  • സെൻഡിംഗ് ഡിഫോൾട്ട് ആയി ഓഫ് ആയിരിക്കണം. ഒരു സിംഗിൾ ഫ്ലാഗ് (flag) ഉപയോഗിച്ച് മാത്രമേ ഔട്ട്‌ബൗണ്ട് ട്രാഫിക് പ്രവർത്തനസജ്ജമാകൂ പാടുള്ളൂ.
  • ഐഡന്റിറ്റി പരിശോധിക്കപ്പെടണം. സന്ദേശം അയക്കുന്ന സമയത്ത് സിസ്റ്റം അയക്കുന്ന ആളുടെ അഡ്രസ്സും ട്രാൻസ്പോർട്ട് സെക്യൂരിറ്റിയും പരിശോധിക്കണം.
  • എല്ലാത്തിനും ഒരു രസീത് ഉണ്ടായിരിക്കണം. രേഖപ്പെടുത്താത്ത ഒരു സെൻഡിംഗ് പരാജയമാണ്.

ഇന്റേണൽ ലോഗുകൾ പോലുള്ള ചെറിയ കാര്യങ്ങൾക്കായി ഇത് നിർമ്മിക്കേണ്ടതില്ല. ഒരു തെറ്റ് പണനഷ്ടമുണ്ടാക്കുമ്പോഴോ, നിയമപരമായ പ്രശ്നങ്ങൾ സൃഷ്ടിക്കുമ്പോഴോ, അല്ലെങ്കിൽ ഒരു സപ്പോർട്ട് ടിക്കറ്റ് ആവശ്യമായി വരുമ്പോഴോ മാത്രം ഇത് ഉപയോഗിക്കുക.

Source: https://dev.to/danmercede/building-a-governed-double-send-safe-delivery-pipeline-for-agent-outputs-80e

Optional learning community: https://t.me/GyaanSetuAi