ടെർമിനൽ AI-യ്ക്കായുള്ള സ്വയം അപ്‌ഡേറ്റ് ചെയ്യപ്പെടുന്ന ഒരു നോളജ് ബേസ് (Knowledge Base)

ഞാൻ എന്റെ ദിവസത്തിന്റെ ഭൂരിഭാഗവും ഒരു AI കോഡിംഗ് അസിസ്റ്റന്റുമായി ടെർമിനലിൽ ചെലവഴിക്കുന്നു.

ഒരു സെഷൻക്കിടയിൽ ഞാൻ പലപ്പോഴും കഠിനമായ പ്രശ്നങ്ങൾ പരിഹരിക്കാറുണ്ട്. സങ്കീർണ്ണമായ ഒരു പരിഹാരമോ അല്ലെങ്കിൽ ഒരു പ്രത്യേക കോൺഫിഗറേഷൻ സെറ്റിംഗോ ഞാൻ കണ്ടെത്തിക്കോളും. എന്നാൽ പിന്നീട് ഞാൻ ആ ടാബ് അടയ്ക്കുമ്പോൾ ആ അറിവ് നഷ്ടപ്പെടുന്നു. ഒരു മാസം കഴിഞ്ഞ്, അതേ പ്രശ്നം തന്നെ ഞാൻ വീണ്ടും പരിഹരിക്കേണ്ടി വരുന്നു.

Claude Code hooks ഉപയോഗിച്ച് എന്റെ അസിസ്റ്റന്റിന് സ്വന്തമായി കുറിപ്പുകൾ (notes) സൂക്ഷിക്കാൻ കഴിയുന്ന ഒരു സിസ്റ്റം ഞാൻ നിർമ്മിച്ചു.

ഈ സിസ്റ്റം മൂന്ന് ഭാഗങ്ങൾ ഉപയോഗിക്കുന്നു:

  • ഓരോ പ്രോംപ്റ്റിനും കോൺടെക്സ്റ്റ് നൽകുന്നതിനായി ഒരു ചെറിയ Markdown നോളജ് ബേസ് സെർച്ച് ചെയ്യുന്നു.
  • ഒരു സെഷൻ അവസാനിക്കുമ്പോൾ ഉപയോഗപ്രദമായ കുറിപ്പുകൾ ശേഖരിക്കുന്നു.
  • ഒരു സെഷൻ തുടങ്ങുമ്പോൾ ഇൻഡക്സ് ലോഡ് ചെയ്യുന്നു.

നിങ്ങളുടെ വർക്ക്ഫ്ലോ സാവധാനത്തിലാക്കാതെ ഇത് എങ്ങനെ നിർമ്മിക്കാം എന്ന് താഴെ നൽകുന്നു.

  1. റിട്രീവലിനായി (retrieval) UserPromptSubmit ഉപയോഗിക്കുക

നിങ്ങൾ ഓരോ പ്രോംപ്റ്റ് അയക്കുമ്പോഴും ഈ ഹുക്ക് പ്രവർത്തിക്കുന്നു. ഇത് നിങ്ങളുടെ ടെക്സ്റ്റ് സ്വീകരിക്കുകയും മോഡൽ മറുപടി നൽകുന്നതിന് മുമ്പ് കോൺടെക്സ്റ്റ് നൽകുകയും ചെയ്യുന്നു.

നിങ്ങളുടെ കുറിപ്പുകൾ എപ്പോൾ നോക്കണമെന്ന് മോഡലിനെ തീരുമാനിക്കാൻ വിടരുത്. പ്രസക്തമായ ഫയലുകൾ കണ്ടെത്താൻ grep പോലുള്ള വേഗതയേറിയ സെർച്ച് ഉപയോഗിക്കുക. ഏറ്റവും മികച്ച അഞ്ച് ഫലങ്ങൾ (matches) മാത്രം നൽകുക. ഇത് പ്രക്രിയ 100ms-ൽ താഴെയായി നിലനിർത്താൻ സഹായിക്കുന്നു.

സെർച്ച് ഹുക്കുകൾക്കായി രണ്ട് നിയമങ്ങൾ:

  • ഇത് ചിലവ് കുറഞ്ഞതാക്കുക. ആദ്യഘട്ട സെർച്ചിനായി ഒരു LLM-ന് പകരം grep ഉപയോഗിക്കുക.
  • ഇത് ലളിതമായി സൂക്ഷിക്കുക. ടൈറ്റിലുകളും ഫയൽ പാത്തുകളും മാത്രം നൽകുക. കൂടുതൽ വിവരങ്ങൾ ആവശ്യമാണെങ്കിൽ മോഡലിന് ഫയൽ തുറക്കാവുന്നതാണ്.
  1. കഠിനമായ ജോലികൾക്കായി Stop hook ഒഴിവാക്കുക

അസിസ്റ്റന്റ് ഒരു മറുപടി പൂർത്തിയാക്കുമ്പോഴെല്ലാം Stop hook പ്രവർത്തിക്കുന്നു. നിങ്ങൾ ഇവിടെ വലിയൊരു ജോലി നൽകിയാൽ അസിസ്റ്റന്റ് സാവധാനത്തിലാകും. 30 ടേണുകളുള്ള ഒരു സെഷൻ 30 കഠിനമായ ജോലികൾക്ക് കാരണമാകും.

പകരം, ഒരു സെഷൻ മുഴുവനായി ഒരിക്കൽ മാത്രം ശേഖരിക്കാൻ SessionEnd ഉപയോഗിക്കുക.

  1. SessionEnd-ന്റെ പരിമിതി പരിഹരിക്കുക

SessionEnd എന്നത് നോൺ-ബ്ലോക്കിംഗ് (non-blocking) ആണ്. നിങ്ങൾ ഇവിടെ ഒരു വലിയ ബാക്ക്ഗ്രൗണ്ട് ടാസ്ക് ആരംഭിച്ചാൽ, സെഷൻ അടയുമ്പോൾ സിസ്റ്റം അത് നിർത്തിപ്പോകാൻ സാധ്യതയുണ്ട്.

ഇതിനുള്ള പരിഹാരം രണ്ട് ഹുക്കുകൾ ഉപയോഗിക്കുക എന്നതാണ്:

  • SessionEnd: ട്രാൻസ്ക്രിപ്റ്റ് പാത്ത് (transcript path) വേഗത്തിൽ ഒരു ക്യൂ ഫയലിലേക്ക് (queue file) ചേർക്കുക.
  • SessionStart: ആ ക്യൂ ഉപയോഗിച്ച് വലിയ ക്യാപ്ചർ ടാസ്ക് ബാക്ക്ഗ്രൗണ്ടിൽ പ്രവർത്തിപ്പിക്കുക.

അടുത്ത സെഷൻ ആക്ടീവ് ആയതിനാൽ, ബാക്ക്ഗ്രൗണ്ട് പ്രക്രിയ തടസ്സപ്പെടാതെ തുടരും.

  1. ഇൻഫിനിറ്റ് ലൂപ്പുകൾ (infinite loops) തടയുക

കുറിപ്പുകൾ എഴുതാൻ നിങ്ങൾ ഒരു ഹെഡ്‌ലെസ്സ് AI (headless AI) ഉപയോഗിക്കുമ്പോൾ, അത് നിങ്ങളുടെ എൻവയോൺമെന്റ് സ്വീകരിക്കുന്നു. ഇതിനർത്ഥം പുതിയ AI അതിന്റെ തന്നെ ഹുക്കുകൾ പ്രവർത്തിപ്പിക്കും എന്നാണ്. ഇത് അവസാനമില്ലാത്ത AI കോളുകളുടെ ഒരു ലൂപ്പ് സൃഷ്ടിക്കുന്നു.

നിങ്ങളുടെ സ്ക്രിപ്റ്റുകളുടെ മുകളിൽ എപ്പോഴും ഒരു റിക്കർഷൻ ഗാർഡ് (recursion guard) ചേർക്കുക:

[ -n "$KB_CAPTURE" ] && exit 0

നിങ്ങളുടെ ബാക്ക്ഗ്രൗണ്ട് ക്യാപ്ചർ ടാസ്ക് ആരംഭിക്കുമ്പോൾ KB_CAPTURE=1 എന്ന് സെറ്റ് ചെയ്യുക.

സെറ്റപ്പിന്റെ സംഗ്രഹം:

  • ഇൻസ്റ്റന്റ് കോൺടെക്സ്റ്റ് ഇൻജക്ഷനായി UserPromptSubmit ഉപയോഗിക്കുക.
  • ടാസ്ക്കുകൾ ക്യൂ ചെയ്യാൻ SessionEnd ഉപയോഗിക്കുക.
  • യഥാർത്ഥ ജോലി നടപ്പിലാക്കാൻ SessionStart ഉപയോഗിക്കുക.
  • പണം ലാഭിക്കാൻ കുറിപ്പുകൾ സംഗ്രഹിക്കാൻ (summarizing) ഒരു കുറഞ്ഞ ചിലവുള്ള മോഡൽ ഉപയോഗിക്കുക.

ഒരു തവണ വീണ്ടും പരിഹരിക്കേണ്ടി വരുന്നത് ഒഴിവാക്കുന്നത് തന്നെ പല ക്യാപ്ചറുകളുടെയും ചിലവ് ലാഭിക്കും.

Source: https://dev.to/just_an_electron/a-self-updating-knowledge-base-for-my-terminal-ai-assistant-claude-code-hooks-28jb

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