LangGraph-നെ ഒരു നീളമേറിയ ചെയിനായി (Chain) കാണരുത്

LangGraph-നെ കൂടുതൽ സ്റ്റെപ്പുകളുള്ള LangChain ആയി കാണുന്നത് നിർത്തുക. ആ തെറ്റ് ഏജന്റുകളുടെ പ്രവർത്തനത്തെ തകരാറിലാക്കും.

സ്റ്റേറ്റ് (state), ബ്രാഞ്ചുകൾ (branches), ടൂൾ കോളുകൾ (tool calls), മനുഷ്യന്റെ അനുമതി (human approval) എന്നിവ ആവശ്യമായ വർക്ക്ഫ്ലോകൾക്ക് വേണ്ടിയുള്ളതാണ് LangGraph. വീണ്ടും തുടങ്ങാതെ തന്നെ പിശകുകളിൽ നിന്ന് തിരിച്ചു വരാൻ കഴിയുന്ന ഏജന്റുകൾക്ക് വേണ്ടിയുള്ളതാണ് ഇത്.

നിങ്ങൾ ഇത് ഉപയോഗിക്കുന്നുണ്ടെങ്കിൽ, ആദ്യം മൂന്ന് കാര്യങ്ങൾ നിർവചിക്കണം: state, interrupts, recovery.

ആദ്യത്തെ അതിർവരമ്പ്: State Schema

ഒരു സിംഗിൾ പ്രോംപ്റ്റിനെ സംബന്ധിച്ചിടത്തോളം അതിർവരമ്പ് എന്നത് ടെക്സ്റ്റ് ആണ്. എന്നാൽ LangGraph-നെ സംബന്ധിച്ചിടത്തോളം അതിർവരമ്പ് എന്നത് State schema ആണ്. നിങ്ങൾ ഇവ തീരുമാനിക്കണം:

  • ഏത് ഫീൽഡുകളാണ് നോഡുകൾക്കിടയിൽ മാറുന്നത്.
  • ഏത് ഫീൽഡുകളാണ് ഒരു നോഡ് അപ്‌ഡേറ്റ് ചെയ്യുന്നത്.
  • ഒരേസമയം പ്രവർത്തിക്കുന്ന ബ്രാഞ്ചുകൾ എങ്ങനെ മൂല്യങ്ങൾ (values) സംയോജിപ്പിക്കുന്നു.
  • ഏത് മൂല്യങ്ങളാണ് ഒരു ചെക്ക്പോയിന്റിലേക്ക് (checkpoint) പ്രവേശിക്കുന്നത്.
  • ഏത് മൂല്യങ്ങൾ ഒരിക്കലും നിലനിർത്താൻ പാടില്ല (persist).

ഇവിടെ Reducers വളരെ പ്രധാനമാണ്. മെസ്സേജുകൾ ചേർക്കുന്നതിന് (append) ശരിയായ നിയമം നിങ്ങൾ നിശ്ചയിച്ചില്ലെങ്കിൽ, നിങ്ങളുടെ പാരലൽ വർക്കുകൾ ഡാറ്റ നഷ്ടപ്പെടുത്തും.

ചെറുതായി തുടങ്ങുക. ഒരു സ്കീമയും (schema), ഒരു നോഡും, ഒരു റിഡ്യൂസറും (reducer) ഉപയോഗിച്ച് ഒരു ഗ്രാഫ് നിർമ്മിക്കുക. അത് പ്രവർത്തിപ്പിക്കാൻ നിങ്ങൾക്ക് കഴിയുന്നില്ലെങ്കിൽ, കൂടുതൽ ടൂളുകൾ ചേർക്കുന്നത് നിങ്ങളുടെ തെറ്റുകളെ മറച്ചുവെക്കുക മാത്രമേ ചെയ്യൂ.

റൺടൈം അതിർവരമ്പ് (The Runtime Boundary)

നിങ്ങൾ compile() ചെയ്യുന്നതിന് മുമ്പ്, നിങ്ങളുടെ ഗ്രാഫ് വെറുമൊരു വിവരണമാണ്. compile() ചെയ്തുകഴിഞ്ഞാൽ, റൺടൈം (runtime) നിയന്ത്രണം ഏറ്റെടുക്കുന്നു.

ഒരു ഗ്രാഫ് പരാജയപ്പെടുമ്പോൾ, നോഡിൽ മാത്രം നോക്കരുത്. ഈ നാല് കാര്യങ്ങൾ പരിശോധിക്കുക:

  • State schema ആ കീ (key) എഴുതാൻ നോഡിനെ അനുവദിക്കുന്നുണ്ടോ?
  • നോഡ് ഒരു സാധുവായ (valid) State ഫീൽഡ് തിരികെ നൽകുന്നുണ്ടോ?
  • റിഡ്യൂസർ ഡാറ്റ ശരിയായി സംയോജിപ്പിക്കുന്നുണ്ടോ?
  • കണ്ടിഷണൽ എഡ്ജിന് (conditional edge) ഒരു എക്സിറ്റ് പാത്ത് ഉണ്ടോ?

ഹ്യൂമൻ ഇൻ ദി ലൂപ്പ് (The Human In The Loop)

മനുഷ്യന്റെ അനുമതിയെ ഒരു UI ഫീച്ചറായി കാണരുത്. അതിനെ ഒരു ഗ്രാഫ് കോൺട്രാക്റ്റ് (graph contract) ആയി കാണുക.

വിശ്വസനീയമായ ഒരു രീതി ഇപ്രകാരമാണ്:

  • മോഡൽ ഒരു ടൂൾ കോൾ നിർദ്ദേശിക്കുന്നു.
  • ഗ്രാഫ് ഒരു ഇൻ്ററപ്റ്റ് (interrupt) നൽകുന്നു.
  • ഒരു മനുഷ്യൻ ആ പ്രവർത്തനം അംഗീകരിക്കുകയോ തിരുത്തുകയോ ചെയ്യുന്നു.
  • ഗ്രാഫ് കൃത്യം ആ പോയിന്റിൽ നിന്ന് പുനരാരംഭിക്കുന്നു.

ഇത് ഏജന്റുകളെ വെറും റിയാക്റ്റീവ് (reactive) ആക്കുന്നതിന് പകരം വീണ്ടും പ്രവർത്തിപ്പിക്കാൻ കഴിയുന്നവയാക്കി (recoverable) മാറ്റുന്നു.

നിങ്ങളുടെ സ്മോക്ക് ചെക്ക്‌ലിസ്റ്റ് (Smoke Checklist)

പ്രൊഡക്ഷനിലേക്ക് പോകുന്നതിന് മുമ്പ്, ഈ ടെസ്റ്റ് നടത്തുക:

  • പ്രൊഡക്ഷൻ ഡാറ്റ ഇല്ലാത്ത ഒരു താൽക്കാലിക ഡയറക്ടറി ഉപയോഗിക്കുക.
  • ഒരു മിനിമൽ State നിർവചിക്കുക.
  • സാധുവായ ഫീൽഡുകൾ മാത്രം തിരികെ നൽകുന്ന ഒരു നോഡ് എഴുതുക.
  • അപ്പൻഡ് (append) ആക്ഷനുകൾക്കായി ഒരു റിഡ്യൂസർ ഉപയോഗിക്കുക.
  • ഒരു ടൂൾ ആക്ഷന് മുമ്പ് ഒരു ഇൻ്ററപ്റ്റ് ചേർക്കുക.
  • ഒരു ചെക്ക്പോയിന്റർ (checkpointer) ചേർക്കുക.
  • മനഃപൂർവ്വം ഒരു പരാജയം ഉണ്ടാക്കുകയും അത് പുനരാരംഭിക്കുന്ന രീതി പരിശോധിക്കുകയും ചെയ്യുക.

ഈ രീതി പരാജയപ്പെട്ടാൽ, കൂടുതൽ ടൂളുകൾ ചേർക്കരുത്. പ്രശ്നം നിങ്ങളുടെ റൺടൈം അതിർവരമ്പിലാണ്.

LangGraph എന്നത് ഒറ്റത്തവണയുള്ള മോഡൽ കോളുകൾക്ക് വേണ്ടിയുള്ളതല്ല. നിങ്ങളുടെ AI-ക്ക് പരിശോധിക്കാവുന്നതും (inspectable), താൽക്കാലികമായി നിർത്താവുന്നതും (pausable), പുനപരിശോധിക്കാവുന്നതുമായ (reviewable) മൾട്ടി-സ്റ്റെപ്പ് ജോലികൾ ചെയ്യേണ്ടതുണ്ടെങ്കിൽ മാത്രം ഇത് ഉപയോഗിക്കുക.

Source: https://dev.to/doramagic/do-not-treat-langgraph-as-a-longer-chain-define-state-interrupts-and-recovery-first-4n3n

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