Terminal AI ਲਈ ਇੱਕ ਸਵੈ-ਅਪਡੇਟ ਹੋਣ ਵਾਲਾ Knowledge Base

ਮੈਂ ਆਪਣਾ ਜ਼ਿਆਦਾਤਰ ਦਿਨ ਇੱਕ AI ਕੋਡਿੰਗ ਸਹਾਇਕ (assistant) ਦੇ ਨਾਲ ਟਰਮੀਨਲ (terminal) ਵਿੱਚ ਬਿਤਾਉਂਦਾ ਹਾਂ।

ਮੈਂ ਅਕਸਰ ਇੱਕ ਸੈਸ਼ਨ ਦੌਰਾਨ ਔਖੇ ਸਵਾਲ ਹੱਲ ਕਰਦਾ ਹਾਂ। ਮੈਨੂੰ ਕੋਈ ਔਖਾ ਹੱਲ ਜਾਂ ਕੋਈ ਖਾਸ ਕੌਂਫਿਗ ਸੈਟਿੰਗ ਮਿਲ ਜਾਂਦੀ ਹੈ। ਫਿਰ ਮੈਂ ਟੈਬ ਬੰਦ ਕਰ ਦਿੰਦਾ ਹਾਂ ਅਤੇ ਉਹ ਗਿਆਨ ਗਾਇਬ ਹੋ ਜਾਂਦਾ ਹੈ। ਇੱਕ ਮਹੀਨੇ ਬਾਅਦ, ਮੈਂ ਦੁਬਾਰਾ ਉਹੀ ਸਹੀ ਸਮੱਸਿਆ ਹੱਲ ਕਰਦਾ ਹਾਂ।

ਮੈਂ Claude Code hooks ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਆਪਣੇ ਸਹਾਇਕ (assistant) ਨੂੰ ਆਪਣੇ ਨੋਟਸ ਖੁਦ ਬਣਾਉਣ ਲਈ ਇੱਕ ਸਿਸਟਮ ਬਣਾਇਆ ਹੈ।

ਸਿਸਟਮ ਤਿੰਨ ਹਿੱਸਿਆਂ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ:

  • ਪ੍ਰੋਮਪਟ 'ਤੇ context ਪ੍ਰਦਾਨ ਕਰਨ ਲਈ ਇੱਕ ਛੋਟੇ Markdown knowledge base ਨੂੰ ਸਰਚ ਕਰਨਾ।
  • ਸੈਸ਼ਨ ਖਤਮ ਹੋਣ 'ਤੇ ਲਾਭਦਾਇਕ ਨੋਟਸ ਕੈਪਚਰ ਕਰਨਾ।
  • ਸੈਸ਼ਨ ਸ਼ੁਰੂ ਹੋਣ ਵੇਲੇ ਇੰਡੈਕਸ (index) ਲੋਡ ਕਰਨਾ।

ਇੱਥੇ ਦੱਸਿਆ ਗਿਆ ਹੈ ਕਿ ਤੁਹਾਡੇ ਕੰਮ ਦੇ ਵਹਾਅ (workflow) ਨੂੰ ਹੌਲੀ ਕੀਤੇ ਬਿਨਾਂ ਇਸਨੂੰ ਕਿਵੇਂ ਬਣਾਇਆ ਜਾਵੇ।

  1. ਰੀਟਰੀਵਲ (retrieval) ਲਈ UserPromptSubmit ਦੀ ਵਰਤੋਂ ਕਰੋ

ਇਹ hook ਹਰ ਵਾਰ ਚੱਲਦਾ ਹੈ ਜਦੋਂ ਤੁਸੀਂ ਕੋਈ ਪ੍ਰੋਮਪਟ ਭੇਜਦੇ ਹੋ। ਇਹ ਤੁਹਾਡੇ ਟੈਕਸਟ ਨੂੰ ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ ਅਤੇ ਮਾਡਲ ਦੇ ਜਵਾਬ ਦੇਣ ਤੋਂ ਪਹਿਲਾਂ context ਇੰਜੈਕਟ ਕਰ ਸਕਦਾ ਹੈ।

ਮਾਡਲ ਨੂੰ ਇਹ ਫੈਸਲਾ ਨਾ ਕਰਨ ਦਿਓ ਕਿ ਤੁਹਾਡੇ ਨੋਟਸ ਕਦੋਂ ਦੇਖਣੇ ਹਨ। ਸਬੰਧਤ ਫਾਈਲਾਂ ਲੱਭਣ ਲਈ grep ਵਰਗੀ ਤੇਜ਼ ਸਰਚ ਦੀ ਵਰਤੋਂ ਕਰੋ। ਸਿਰਫ਼ ਚੋਟੀ ਦੇ ਪੰਜ ਮੈਚ (matches) ਹੀ ਇੰਜੈਕਟ ਕਰੋ। ਇਹ ਪ੍ਰਕਿਰਿਆ ਨੂੰ 100ms ਤੋਂ ਘੱਟ ਰੱਖਦਾ ਹੈ।

ਸਰਚ hooks ਲਈ ਦੋ ਨਿਯਮ:

  • ਇਸਨੂੰ ਸਸਤਾ ਰੱਖੋ। ਸ਼ੁਰੂਆਤੀ ਸਰਚ ਲਈ LLM ਦੀ ਬਜਾਏ grep ਦੀ ਵਰਤੋਂ ਕਰੋ।
  • ਇਸਨੂੰ ਹਲਕਾ ਰੱਖੋ। ਸਿਰਫ਼ ਟਾਈਟਲ ਅਤੇ ਫਾਈਲ ਪਾਥ (file paths) ਹੀ ਇੰਜੈਕਟ ਕਰੋ। ਜੇਕਰ ਮਾਡਲ ਨੂੰ ਹੋਰ ਵੇਰਵੇ ਦੀ ਲੋੜ ਹੋਵੇ, ਤਾਂ ਉਹ ਫਾਈਲ ਖੋਲ੍ਹ ਸਕਦਾ ਹੈ।
  1. ਭਾਰੀ ਕੰਮਾਂ ਲਈ Stop hook ਤੋਂ ਬਚੋ

Stop hook ਹਰ ਵਾਰ ਚੱਲਦਾ ਹੈ ਜਦੋਂ ਸਹਾਇਕ (assistant) ਜਵਾਬ ਦੇਣਾ ਖਤਮ ਕਰਦਾ ਹੈ। ਜੇਕਰ ਤੁਸੀਂ ਇੱਥੇ ਕੋਈ ਲੰਬਾ ਕੰਮ ਚਲਾਉਂਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਡਾ ਸਹਾਇਕ ਹੌਲੀ ਹੋ ਜਾਂਦਾ ਹੈ। ਇੱਕ 30-turn ਸੈਸ਼ਨ 30 ਭਾਰੀ ਕੰਮਾਂ ਨੂੰ ਟ੍ਰਿਗਰ ਕਰੇਗਾ।

ਇਸ ਦੀ ਬਜਾਏ, ਪੂਰੇ ਸੈਸ਼ਨ ਨੂੰ ਇੱਕ ਵਾਰ ਕੈਪਚਰ ਕਰਨ ਲਈ SessionEnd ਦੀ ਵਰਤੋਂ ਕਰੋ।

  1. SessionEnd ਦੀ ਸੀਮਾ ਨੂੰ ਹੱਲ ਕਰੋ

SessionEnd non-blocking ਹੈ। ਜੇਕਰ ਤੁਸੀਂ ਇੱਥੇ ਕੋਈ ਲੰਬਾ ਬੈਕਗ੍ਰਾਊਂਡ ਟਾਸਕ ਸ਼ੁਰੂ ਕਰਦੇ ਹੋ, ਤਾਂ ਸੈਸ਼ਨ ਬੰਦ ਹੋਣ 'ਤੇ ਸਿਸਟਮ ਇਸਨੂੰ ਖਤਮ ਕਰ ਸਕਦਾ ਹੈ।

ਇਸਦਾ ਹੱਲ ਦੋ hooks ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਹੈ:

  • SessionEnd: ਟ੍ਰਾਂਸਕ੍ਰਿਪਟ ਪਾਥ (transcript path) ਨੂੰ ਤੇਜ਼ੀ ਨਾਲ ਇੱਕ ਕਿਊ ਫਾਈਲ (queue file) ਵਿੱਚ ਜੋੜੋ।
  • SessionStart: ਉਸ ਕਿਊ ਨੂੰ ਖਾਲੀ ਕਰੋ ਅਤੇ ਭਾਰੀ ਕੈਪਚਰ ਟਾਸਕ ਨੂੰ ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਚਲਾਓ।

ਕਿਉਂਕਿ ਅਗਲਾ ਸੈਸ਼ਨ ਐਕਟਿਵ ਹੁੰਦਾ ਹੈ, ਬੈਕਗ੍ਰਾਊਂਡ ਪ੍ਰਕਿਰਿਆ ਚਲਦੀ ਰਹੇਗੀ।

  1. ਇਨਫੀਨੀਟ ਲੂਪਸ (infinite loops) ਤੋਂ ਬਚੋ

ਜਦੋਂ ਤੁਸੀਂ ਨੋਟਸ ਲਿਖਣ ਲਈ ਇੱਕ headless AI ਬਣਾਉਂਦੇ ਹੋ, ਤਾਂ ਇਹ ਤੁਹਾਡੇ ਵਾਤਾਵਰਣ (environment) ਨੂੰ ਵਿਰਾਸਤ ਵਿੱਚ ਲੈਂਦਾ ਹੈ। ਇਸਦਾ ਮਤਲਬ ਹੈ ਕਿ ਨਵਾਂ AI ਆਪਣੇ hooks ਨੂੰ ਟ੍ਰਿਗਰ ਕਰੇਗਾ। ਇਹ ਅਣਗਿਣਤ AI ਕਾਲਾਂ ਦਾ ਇੱਕ ਲੂਪ ਬਣਾ ਦਿੰਦਾ ਹੈ।

ਹਮੇਸ਼ਾ ਆਪਣੇ ਸਕ੍ਰਿਪਟਾਂ ਦੇ ਉੱਪਰ ਇੱਕ recursion guard ਜੋੜੋ:

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

ਜਦੋਂ ਤੁਸੀਂ ਆਪਣਾ ਬੈਕਗ੍ਰਾਊਂਡ ਕੈਪਚਰ ਟਾਸਕ ਲਾਂਚ ਕਰਦੇ ਹੋ, ਤਾਂ KB_CAPTURE=1 ਸੈੱਟ ਕਰੋ।

ਸੈੱਟਅੱਪ ਦਾ ਸਾਰ:

  • ਤੁਰੰਤ context ਇੰਜੈਕਸ਼ਨ ਲਈ UserPromptSubmit ਦੀ ਵਰਤੋਂ ਕਰੋ।
  • ਟਾਸਕਾਂ ਨੂੰ ਕਿਊ (enqueue) ਕਰਨ ਲਈ SessionEnd ਦੀ ਵਰਤੋਂ ਕਰੋ।
  • ਅਸਲ ਕੰਮ ਚਲਾਉਣ ਲਈ SessionStart ਦੀ ਵਰਤੋਂ ਕਰੋ।
  • ਪੈਸੇ ਬਚਾਉਣ ਲਈ ਨੋਟਸ ਦਾ ਸਾਰ ਕੱਢਣ ਲਈ ਇੱਕ ਸਸਤੇ ਮਾਡਲ ਦੀ ਵਰਤੋਂ ਕਰੋ।

ਇੱਕ ਵਾਰ ਦੁਬਾਰਾ ਸਮੱਸਿਆ ਹੱਲ ਕਰਨ ਤੋਂ ਬਚਣਾ ਕਈ ਕੈਪਚਰਾਂ ਦੀ ਕੀਮਤ ਕੱਢ ਦਿੰਦਾ ਹੈ।

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