നിങ്ങളുടെ AI ബില്ല് ഒറ്റരാത്രികൊണ്ട് മൂന്നിരട്ടിയായി. മോഡലും, ട്രാഫിക് വോള്യവും, പ്രോംപ്റ്റുകളിലെ ടെക്സ്റ്റും ഒന്നുതന്നെയായിരുന്നു; എന്നാൽ OpenAI-യുടെ പ്രോംപ്റ്റ് കാഷെ (prompt cache) തകരാറിലാക്കിയ ഒരു വരി കോഡായിരുന്നു ഇതിന് കാരണം.

എന്തുകൊണ്ടാണ് കാഷെ (cache) പ്രധാനമാകുന്നത്

ബൈറ്റ്-ഫോർ-ബൈറ്റ് (byte-for-byte) ഒരേപോലെ വരുന്ന പ്രീഫിക്സുകൾ (prefix) വീണ്ടും പ്രോസസ്സ് ചെയ്യുന്നത് ഒഴിവാക്കുന്നതിലൂടെ പ്രൊവൈഡറുടെ പ്രോംപ്റ്റ് കാഷെ നിങ്ങളുടെ പണം ലാഭിക്കുന്നു. ആദ്യത്തെ ടോക്കണുകൾ (tokens) മുമ്പത്തെ ഒരു കോളിന് സമാനമാണെങ്കിൽ, പ്രൊവൈഡർ ആ ടോക്കണുകളുടെ നേരത്തെ കണക്കാക്കിയ രൂപം തന്നെ വീണ്ടും ഉപയോഗിക്കുകയും പുതിയ സഫിക്സിന് (suffix) മാത്രം ചാർജ് ഈടാക്കുകയും ചെയ്യുന്നു. ഇതിന്റെ നിയമം കർശനമാണ്: മാച്ച് കൃത്യമായിരിക്കണം, സമാനത മാത്രം പോരാ. തുടക്കത്തിൽ ഒരു ടോക്കൺ മാറിയാൽ പോലും കാഷെ ഹിറ്റ് (cache hit) പൂർണ്ണമായും നഷ്ടപ്പെടും.

ഹിറ്റ് റേറ്റ് (hit rate) നശിപ്പിച്ച ആ തെറ്റ്

ഞങ്ങളുടെ ഏജന്റിൽ, മോഡലിന് "ഇപ്പോഴത്തെ സമയം" മനസ്സിലാക്കിക്കൊടുക്കാൻ സിസ്റ്റം പ്രോംപ്റ്റിന്റെ ഏറ്റവും മുകളിൽ ഒരു ടൈംസ്റ്റാമ്പ് (timestamp) നൽകിയിരുന്നു. ടൈംസ്റ്റാമ്പ് ഓരോ സെക്കൻഡിലും മാറിക്കൊണ്ടിരിക്കുന്നതിനാൽ, ഓരോ റിക്വസ്റ്റിനും ആദ്യത്തെ ടോക്കൺ സീക്വൻസ് വ്യത്യസ്തമായിരുന്നു. കാഷെ ഒരിക്കലും ഒരു മാച്ച് കണ്ടെത്താത്തതിനാൽ, ഓരോ കോളിനും പിന്നാലെ വരുന്ന 18,000 സ്റ്റാറ്റിക് ടോക്കണുകൾക്ക് (tool schemas, documentation snippets, few-shot examples, fixed instructions എന്നിവയ്ക്ക്) മുഴുവൻ തുകയും നൽകേണ്ടി വന്നു. ഇതിന്റെ ഫലമായി കാഷെ ഹിറ്റ് റേറ്റ് 0% ആയി മാറുകയും ബില്ല് മൂന്നിരട്ടിയായി വർദ്ധിക്കുകയും ചെയ്തു.

കാഷെ ചെയ്യാനായി ക്രമീകരണം മാറ്റുക

ഇതിനുള്ള പരിഹാരം ലളിതമാണ്: മാറാത്ത കാര്യങ്ങളെല്ലാം പ്രോംപ്റ്റിന്റെ തുടക്കത്തിലും മാറിക്കൊണ്ടിരിക്കുന്ന ഡാറ്റ (volatile data) അവസാനത്തിലും നൽകുക.

സ്റ്റാറ്റിക് പ്രീഫിക്സ് (cacheable)

  • ടൂൾ ഡെഫനിഷനുകൾ (Tool definitions)
  • റിട്രീവൽ ഡോക്യുമെന്റുകൾ (Retrieval documents)
  • ഫ്യൂ-ഷോട്ട് എക്സാമ്പിളുകൾ (Few-shot examples)
  • ഫിക്സഡ് സിസ്റ്റം ഇൻസ്ട്രക്ഷനുകൾ (Fixed system instructions)

വോലറ്റൈൽ സഫിക്സ് (non-cacheable)

  • നിലവിലെ സമയം
  • സെഷൻ ഐഡന്റിഫയറുകൾ (Session identifiers)
  • യൂസർ മെസ്സേജുകൾ (User messages)
  • ലൈവ് കോൺടെക്സ്റ്റ് (Live context)

മോഡലിന് സമയം ആവശ്യമാണെങ്കിൽ, അത് തുടക്കത്തിൽ ചേർക്കുന്നതിന് പകരം സ്റ്റാറ്റിക് ബ്ലോക്കിന് ശേഷം ചേർക്കുക. അപ്പോൾ സ്റ്റാറ്റിക് ഭാഗം കാഷെ ഉപയോഗിക്കാനും അവസാന ഭാഗത്ത് പുതിയ കോൺടെക്സ്റ്റ് നൽകാനും സാധിക്കും.

സ്റ്റാക്കിലെ (stack) മറഞ്ഞിരിക്കുന്ന അപകടങ്ങൾ

ടെംപ്ലേറ്റ് ശരിയാണെന്ന് തോന്നിയാലും, മിഡിൽവെയറുകളോ (middleware) SDK-കളോ പേലോഡ് API-യിൽ എത്തുന്നതിന് മുമ്പ് റിക്വസ്റ്റ് ഐഡികൾ, ടൈംസ്റ്റാമ്പുകൾ അല്ലെങ്കിൽ മറ്റ് ഹെഡറുകൾ പോലുള്ള മെറ്റാഡാറ്റകൾ രഹസ്യമായി ചേർക്കാൻ സാധ്യതയുണ്ട്. ചില ഡിപ്ലോയ്മെന്റ് പൈപ്പ്‌ലൈനുകൾ ഓരോ തവണ റോളൗട്ട് ചെയ്യുമ്പോഴും ടൂൾ ഡെഫനിഷനുകൾ ക്രമമാക്കാറുണ്ട് (shuffle). നിങ്ങളുടെ പ്രോംപ്റ്റ് ബിൽഡറിൽ മാറ്റങ്ങൾ വരുത്താതെ തന്നെ, ഈ അദൃശ്യമായ മാറ്റങ്ങൾ ബൈറ്റ് സീക്വൻസിനെ മാറ്റിമറിക്കുകയും കാഷെ പ്രവർത്തനക്ഷമതയെ തകർക്കുകയും ചെയ്യുന്നു.

കാഷെ ഹിറ്റ് റേറ്റ് ശ്രദ്ധിക്കുക

ഏതൊരു AI ഏജന്റിനും കാഷെ ഹിറ്റ് റേറ്റിനെ ഒരു പ്രധാന ഹെൽത്ത് മെട്രിക് ആയി കണക്കാക്കുക. ഹിറ്റ് റേറ്റിൽ പെട്ടെന്നുണ്ടാകുന്ന കുറവ്, റിക്വസ്റ്റിന്റെ തുടക്കത്തിലുള്ള ബൈറ്റുകളിൽ എന്തോ മാറ്റം വന്നിട്ടുണ്ടെന്നതിന്റെ സൂചനയാണ്. ഹിറ്റ് ശതമാനം കാണിക്കുന്ന മോണിറ്ററിംഗ് ടൂളുകൾ ഉപയോഗിച്ചാൽ ചിലവ് അമിതമാകുന്നതിന് മുമ്പ് തന്നെ അത് കണ്ടെത്താൻ സാധിക്കും.

ചുരുക്കത്തിൽ

പ്രോംപ്റ്റ് കാഷെ എന്നത് മാറ്റമില്ലാത്ത ഒരു പ്രീഫിക്സിനെ (prefix) ആശ്രയിച്ചാണ് നിലനിൽക്കുന്നത്. ഓരോ റിക്വസ്റ്റിന്റെയും തുടക്കത്തിൽ മാറുന്ന എന്തും — ഒരു ടൈംസ്റ്റാമ്പ് പോലും — കാഷെ ഇല്ലാതാക്കുകയും നിങ്ങളുടെ ബില്ല് മൂന്നിരട്ടിയാക്കുകയും ചെയ്തേക്കാം. സ്റ്റാറ്റിക് ഉള്ളടക്കം ആദ്യം നൽകുക, വോലറ്റൈൽ ഉള്ളടക്കം അവസാനം നൽകുക, മറഞ്ഞിരിക്കുന്ന മാറ്റങ്ങൾക്കായി നിങ്ങളുടെ ടൂൾചെയിൻ പരിശോധിക്കുക, കൂടാതെ കാഷെ ഹിറ്റ് റേറ്റ് നിരീക്ഷിക്കുക. കൃത്യമായ പ്രോംപ്റ്റ് ലേഔട്ട് മികച്ച പ്രകടനവും സാമ്പത്തിക ലാഭവും ഉറപ്പാക്കുന്നു.