ഒരു Jupyter notebook-ൽ നിന്ന് ഒരു ലൈവ് സർവീസിലേക്ക് ഒരു Retrieval-Augmented Generation (RAG) പൈപ്പ്‌ലൈൻ മാറ്റിയ നാല് മാസത്തെ പ്രവർത്തനത്തിന് ശേഷം, ഒരു വെറും ഡെമോയെ ഉപയോക്താക്കൾക്ക് വിശ്വസിക്കാവുന്ന ഒരു സിസ്റ്റമാക്കി മാറ്റിയ അഞ്ച് പ്രധാന തീരുമാനങ്ങൾ ലേഖകൻ ചൂണ്ടിക്കാട്ടുന്നു. ഇതിന്റെ വ്യത്യാസം കണക്കുകളിൽ വ്യക്തമാണ്: ടെക്സ്റ്റ് എങ്ങനെ വിഭജിക്കണം (split) എന്നതിലുണ്ടായ ചെറിയൊരു മാറ്റം റിട്രീവൽ ഹിറ്റ് റേറ്റ് (retrieval hit rate) 61%-ൽ നിന്ന് 83%-ലേക്ക് ഉയർത്തി. കൂടാതെ, 200 യഥാർത്ഥ ക്വറികൾ (queries) ഉൾപ്പെടുത്തിയ ഒരു ചെറിയ ഇവാലുവേഷൻ സെറ്റ് (evaluation set), പ്രശ്നങ്ങൾ ഉപഭോക്താക്കളിലേക്ക് എത്തുന്നതിന് മുമ്പ് തന്നെ കണ്ടെത്താൻ സഹായിക്കുന്നു.

എന്തുകൊണ്ട് ഇത് പ്രധാനമാണ്

RAG ഡെമോകൾ കാണാൻ വളരെ ആകർഷകമാണ് - അവ സെക്കൻഡുകൾക്കുള്ളിൽ ഒരു ഭാഗം കണ്ടെത്തി കൃത്യമായ മറുപടി നൽകുന്നു. എന്നാൽ പ്രൊഡക്ഷനിൽ (production), ഇതേ രീതി പലപ്പോഴും കാലഹരണപ്പെട്ട വിവരങ്ങളോ, തെറ്റായ എറർ കോഡുകളോ, അപൂർണ്ണമായ വാക്യങ്ങളോ നൽകുന്നു, ഇത് ഉപയോക്താക്കളുടെ വിശ്വാസം നഷ്ടപ്പെടുത്തുന്നു. ഇതിന്റെ തടസ്സം മിക്കപ്പോഴും ലാംഗ്വേജ് മോഡൽ (language model) അല്ല; മറിച്ച് വിവരങ്ങൾ എങ്ങനെ ശേഖരിക്കുന്നു (ingest), ഇൻഡക്സ് ചെയ്യുന്നു (index), നൽകുന്നു (serve) എന്നതിലാണ്. പൈപ്പ്‌ലൈൻ ശരിയായി ക്രമീകരിക്കുന്നത് മൂല്യം വർദ്ധിപ്പിക്കുന്ന ഒരു ഉൽപ്പന്നവും, ഉപയോഗപ്രദമല്ലാത്ത ഒരു ബാധ്യതയും തമ്മിലുള്ള വ്യത്യാസമായിരിക്കും.

1. ഫിക്സഡ്-സൈസ് ചങ്കുകൾ (fixed-size chunks) ഉപയോഗിക്കുന്നത് നിർത്തുക

പല പ്രോട്ടോടൈപ്പുകളും ഓരോ ഡോക്യുമെന്റും 512-ടോക്കൺ ബ്ലോക്കുകളായി മുറിക്കുന്നു. ഇത് ചെറിയ ടെക്സ്റ്റുകൾക്ക് അനുയോജ്യമാണെങ്കിലും, സാങ്കേതിക മാനുവലുകൾ, സപ്പോർട്ട് ത്രെഡുകൾ, കോഡ് സ്നിപ്പറ്റുകൾ എന്നിവയെ ഇത് തകർത്തു കളയുന്നു. വാക്യങ്ങൾ മുറിഞ്ഞുപോകുന്നു, ഹെഡിംഗുകൾ നഷ്ടപ്പെടുന്നു, ഉപയോക്താവ് പ്രതീക്ഷിക്കുന്ന കോൺടെക്സ്റ്റ് (context) കണ്ടെത്താൻ റിട്രീവൽ എഞ്ചിന് കഴിയാതെ വരുന്നു.

സെമാന്റിക് യൂണിറ്റുകൾ (semantic units) നിലനിർത്തുന്നതിനായി സ്ട്രക്ചർ-അവയർ ചങ്കിംഗ് (structure-aware chunking) ഉപയോഗിക്കുക—അതായത് ഹെഡിംഗുകൾ, സംഭാഷണങ്ങളുടെ അതിരുകൾ, അല്ലെങ്കിൽ കോഡ് ഫെൻസുകൾ (code fences) എന്നിവയുടെ അടിസ്ഥാനത്തിൽ വിഭജിക്കുക. ലേഖകന്റെ സിസ്റ്റത്തിൽ, ഈ മാറ്റം കൊണ്ട് മാത്രം പ്രസക്തമായ ഭാഗങ്ങൾ കണ്ടെത്തുന്ന ക്വറികളുടെ നിരക്ക് 61%-ൽ നിന്ന് 83%-ലേക്ക് ഉയർന്നു. ഈ പുരോഗതി ഡാറ്റാ ഫോർമാറ്റിലുണ്ടായ മാറ്റം മൂലമാണ്; അടിസ്ഥാന മോഡലിൽ മാറ്റമൊന്നും വരുത്തിയിട്ടില്ല.

2. ഹൈബ്രിഡ് സെർച്ച് ഉപയോഗിക്കുക

പ്യുവർ വെക്റ്റർ സെർച്ച് (pure vector search - embedding-based similarity) ഒരേ അർത്ഥമുള്ള ഭാഗങ്ങൾ കണ്ടെത്തുന്നതിൽ മികച്ചതാണ്, എന്നാൽ എറർ കോഡുകൾ, വേർഷൻ നമ്പറുകൾ അല്ലെങ്കിൽ പ്രത്യേക സാങ്കേതിക പദങ്ങൾ (proprietary terminology) പോലുള്ള കൃത്യമായ ഐഡന്റിഫയറുകൾ കണ്ടെത്തുന്നതിൽ അത് പരാജയപ്പെട്ടേക്കാം. "ERR-XXXX" പോലുള്ള ഒരു എറർ കോഡ് തിരയുന്ന ഉപയോക്താവിന്, ആ കോഡ് ഇല്ലാത്തതും എന്നാൽ അർത്ഥത്തിൽ സമാനവുമായ ഒരു പാരഗ്രാഫ് ലഭിച്ചേക്കാം.

ഹൈബ്രിഡ് സെർച്ച് (Hybrid search) ഒരു ഡെൻസ് വെക്റ്റർ ഇൻഡക്സിനെയും (dense vector index) പരമ്പരാഗതമായ BM25 ഇൻഡക്സിനെയും (term-frequency based) സംയോജിപ്പിക്കുന്നു. ഈ രണ്ട് സ്കോറുകളെയും പരിഗണിക്കുന്നതിലൂടെ, ഉപയോക്താവ് ടൈപ്പ് ചെയ്ത കൃത്യമായ പദങ്ങളും അടങ്ങിയതും എന്നാൽ അർത്ഥത്തിലും സമാനവുമായ വിവരങ്ങൾ സിസ്റ്റം കണ്ടെത്തും. പ്രൊഡക്ഷന് വേണ്ടി ഹൈബ്രിഡ് സെർച്ച് എന്നത് ഒരു അധിക സൗകര്യമല്ല, മറിച്ച് അത് അനിവാര്യമായ ഒരു അടിസ്ഥാന ആവശ്യമാണ്.

3. കാലഹരണപ്പെട്ട വിവരങ്ങൾ (stale data) കൈകാര്യം ചെയ്യുക

കാലഹരണപ്പെട്ട വിലവിവരപ്പട്ടികകൾ, പോളിസി രേഖകൾ അല്ലെങ്കിൽ ഫേംവെയർ റിലീസ് നോട്ടുകൾ എന്നിവ സിസ്റ്റത്തിന്റെ വിശ്വാസ്യത പെട്ടെന്ന് ഇല്ലാതാക്കും. ഇൻഡക്സ് പുതുതായി നിലനിർത്താൻ മൂന്ന് പ്രായോഗിക വഴികൾ:

  • ഓരോ ഡോക്യുമെന്റിലും ഒരു വേർഷൻ സ്റ്റാമ്പ് അല്ലെങ്കിൽ ടൈംസ്റ്റാമ്പ് (timestamp) ചേർക്കുക.
  • സ്കോറിംഗിന്റെ സമയത്ത് റെസൻസി ബൂസ്റ്റ് (recency boost) നൽകുക, അങ്ങനെ പുതിയ വിവരങ്ങൾക്ക് മുൻഗണന ലഭിക്കുന്നു.
  • സോഴ്സ് സിസ്റ്റങ്ങളിൽ നിന്നുള്ള മാറ്റങ്ങൾ ഉൾപ്പെടുത്താൻ എല്ലാ രാത്രിയിലും ഇൻക്രിമെന്റൽ റീ-ഇൻഡക്സിംഗ് (incremental re-indexing) നടത്തുക.

ഈ സുരക്ഷാ ക്രമീകരണങ്ങൾ, കഴിഞ്ഞ പാദത്തിൽ നിലവിലുണ്ടായിരുന്ന ഒരു വിലയോ അല്ലെങ്കിൽ നിലവിൽ റദ്ദാക്കപ്പെട്ട ഒരു പോളിസിയോ നൽകുന്നത് തടയുന്നു.

4. മോഡലുകൾ അപ്‌ഗ്രേഡ് ചെയ്യുന്നതിന് പകരം റീറാങ്ക് (Rerank) ചെയ്യുക

ഒരു എംബെഡിംഗ് മോഡൽ അപ്‌ഗ്രേഡ് ചെയ്യുന്നത് ഗുണനിലവാരത്തിൽ ചെറിയ മാറ്റം മാത്രമേ നൽകൂ, എന്നാൽ ഒരു ക്രോസ്-എൻകോഡർ റീറാങ്കർ (cross-encoder reranker) ചേർക്കുന്നത് കുറഞ്ഞ ചിലവിൽ വലിയ പുരോഗതി നൽകുന്നു.

പ്രൊഡക്ഷൻ ഫ്ലോയിൽ, ഹൈബ്രിഡ് സെർച്ച് ഉപയോഗിച്ച് 20 കുറഞ്ഞ ചിലവിലുള്ള കാൻഡിഡേറ്റുകളെ (candidates) കണ്ടെത്തി, അവയെ മികച്ച അഞ്ച് തിരഞ്ഞെടുക്കുന്നതിനായി റീറാങ്കറിലൂടെ കടത്തിവിടുന്നു. ഈ രണ്ട് ഘട്ടങ്ങളുള്ള സമീപനം, ഒരു മുഴുവൻ മോഡൽ അപ്‌ഗ്രേഡിനേക്കാൾ വളരെ കുറഞ്ഞ ചിലവിൽ മികച്ച ഗുണനിലവാരം നൽകുന്നു.

5. യഥാർത്ഥമായ ഒരു ഇവാലുവേഷൻ സെറ്റ് നിർമ്മിക്കുക

അളക്കാൻ കഴിയാത്ത ഒന്നിനെ നിങ്ങൾക്ക് മെച്ചപ്പെടുത്താൻ കഴിയില്ല. ലേഖകൻ 200 യഥാർത്ഥ ഉപയോക്തൃ ക്വറികൾ ഉൾക്കൊള്ളുന്ന ഒരു ടെസ്റ്റ് സ്യൂട്ട് (test suite) തയ്യാറാക്കി, ഓരോന്നിനും വിദഗ്ദ്ധർ തയ്യാറാക്കിയ മറുപടികളും നൽകി. ഓരോ കോഡ് മാറ്റവും ഈ സ്യൂട്ടിന് विरुद्धം പരിശോധിക്കുന്നു; ഏതെങ്കിലും തരത്തിലുള്ള പിശകുകൾ (regressions) ഡിപ്ലോയ്‌മെന്റിന് മുമ്പ് തന്നെ കണ്ടെത്താൻ ഇത് സഹായിക്കുന്നു.

ഒരു ഉപയോക്താവ് തെറ്റായ മറുപടിയെക്കുറിച്ച് പരാതിപ്പെടുമ്പോൾ, ആ ക്വറി ഉടൻ തന്നെ ഇവാലുവേഷൻ സെറ്റിലേക്ക് ചേർക്കുക; ഇത് യഥാർത്ഥ ലോകത്തെ പരാജയങ്ങളെ ഭാവിയിലേക്കുള്ള സുരക്ഷാ സംവിധാനങ്ങളാക്കി മാറ്റുന്നു. ഓരോ ജനറേറ്റഡ് ഉത്തരവും നിരന്തരം ലോഗ് ചെയ്യുന്നത് ഇവാലുവേഷൻ ലൂപ്പിനെ സഹായിക്കുകയും സിസ്റ്റം യഥാർത്ഥ ഉപയോഗത്തിന് അനുസൃതമായി നിലനിർത്തുകയും ചെയ്യുന്നു.

പ്രായോഗികമായ പ്രൊഡക്ഷൻ പൈപ്പ്‌ലൈൻ

  • Ingest: സ്ട്രക്ചർ-അവയർ ചങ്കിംഗ് ഹെഡിംഗുകൾ, കോഡ് ബ്ലോക്കുകൾ, സംഭാഷണങ്ങൾ എന്നിവ നിലനിർത്തുന്നു.
  • Index: ഡെൻസ് എംബെഡിംഗുകളും (dense embeddings) BM25 ടേം സ്റ്റാറ്റിസ്റ്റിക്സും (term statistics) ഒരുപോലെ സംഭരിക്കുക.
  • Retrieve: ഹൈബ്രിഡ് സെർച്ച് സെമാന്റിക് സമാനതയും കൃത്യമായ പദങ്ങളും തമ്മിൽ സന്തുലിതാവസ്ഥ നിലനിർത്തിക്കൊണ്ട് 20 കാൻഡിഡേറ്റുകളെ നൽകുന്നു.
  • Rerank: ഒരു ക്രോസ്-എൻകോഡർ ലിസ്റ്റിനെ ഏറ്റവും മികച്ച അഞ്ച് ഭാഗങ്ങളിലേക്ക് ചുരുക്കുന്നു.
  • Generate: LLM ഈ മികച്ച ചങ്കുകളും അവയുടെ മെറ്റാഡേറ്റയും ഉപയോഗിച്ച് അന്തിമ മറുപടി തയ്യാറാക്കുന്നു.
  • Evaluate: എല്ലാ മറുപടികളും ലോഗ് ചെയ്യുന്നു; പരാജയങ്ങൾ 200-ക്വറി ടെസ്റ്റ് സെറ്റിലേക്ക് തിരികെ നൽകുന്നു.

റിസ്കുകളും വിട്ടുവീഴ്ചകളും (Stakes and trade-offs)

കൃത്യമായി ക്രമീകരിച്ച ഒരു പൈപ്പ്‌ലൈൻ ഹാലൂസിനേഷനുകൾ (hallucinations) കുറയ്ക്കുകയും, ഉത്തരങ്ങളുടെ പ്രസക്തി മെച്ചപ്പെടുത്തുകയും, അമിതമായി ഉപയോഗിക്കുന്ന മോഡലുകളുടെ (over-provisioned models) ചിലവ് കുറയ്ക്കുകയും ചെയ്യുന്നു. ഇതിന്റെ ഗുണം ഉയർന്ന ഉപഭോക്തൃ സംതൃപ്തിയും കുറഞ്ഞ സപ്പോർട്ട് ചെലവുമാണ്. ഈ ഘട്ടങ്ങൾ അവഗണിക്കുന്നത് ബ്രാൻഡ് വിശ്വാസം തകർക്കുന്നതും വലിയ സാമ്പത്തിക നഷ്ടമുണ്ടാക്കുന്ന അടിയന്തര പ്രശ്നപരിഹാരങ്ങൾ (firefighting) അനിവാര്യമാക്കുന്നതുമായ ഒരു ദുർബലമായ സേവനത്തിന് കാരണമാകും.

ഇനി ശ്രദ്ധിക്കേണ്ട കാര്യങ്ങൾ

ഓപ്പൺ സോഴ്സ് എംബെഡിംഗുകളും (open-source embeddings) വെക്റ്റർ ഡാറ്റാബേസുകളും (vector databases) കൂടുതൽ വികസിപ്പിക്കപ്പെടുമ്പോൾ, “ഡെൻസ്” (dense), “സ്പാർസ്” (sparse) റിട്രീവലുകൾ തമ്മിലുള്ള വ്യത്യാസം കുറഞ്ഞുവരും, എങ്കിലും സെമാന്റിക് (semantic), എക്സാക്റ്റ് മാച്ചിംഗ് (exact matching) എന്നിവ സംയോജിപ്പിക്കുക എന്ന തത്വം നിലനിൽക്കും.

പ്രധാന പാഠം: ഒരു RAG സിസ്റ്റത്തിൽ ലാംഗ്വേജ് മോഡൽ (language model) അപൂർവ്വമായേ ഒരു തടസ്സമായി (choke point) മാറുന്നുള്ളൂ. യഥാർത്ഥ ജോലി എന്നത് ഉള്ളടക്കം എങ്ങനെ മുറിക്കുന്നു (slice), ഇൻഡക്സ് ചെയ്യുന്നു (index), ലഭ്യമാക്കുന്നു (surface) എന്നതിലാണ്. ഈ തീരുമാനങ്ങൾ ശരിയായി എടുക്കുന്നത് ആകർഷകമായ ഒരു ഡെമോയെ (flashy demo) വിശ്വസനീയമായ ഒരു ഉൽപ്പന്നമാക്കി (dependable product) മാറ്റുന്നു.