Promptfoo ഉപയോഗിച്ച് ഒരു C# LLM Eventparser വിലയിരുത്തുന്നു

സാധാരണ കോഡ് ടെസ്റ്റ് ചെയ്യുന്നത് ലളിതമാണ്. നിങ്ങൾ ഒരു ഫംഗ്ഷൻ വിളിക്കുന്നു, ഒരു റിസൾട്ട് ലഭിക്കുന്നു, അത് നിങ്ങളുടെ പ്രതീക്ഷയനുസരിച്ചാണോ എന്ന് പരിശോധിക്കുന്നു.

LLM-കൾ ടെസ്റ്റ് ചെയ്യുന്നത് വ്യത്യസ്തമാണ്. ഒരു LLM ഒരു തവണ "3 PM" എന്നും മറ്റൊരു തവണ "15:00" എന്നും നൽകിയേക്കാം. രണ്ടും ശരിയാണ്, എന്നാൽ ഒരു 'exact match' ടെസ്റ്റ് പരാജയപ്പെടും. ഉത്തരം കൃത്യമായി ഒന്നുതന്നെയാണോ എന്നല്ല, മറിച്ച് ഉത്തരം ശരിയാണോ എന്നാണ് നിങ്ങൾ പരിശോധിക്കേണ്ടത്.

ഇത് പരിശോധിക്കാനായി ഞാൻ EventParser എന്ന പേരിൽ ഒരു ചെറിയ ആപ്പ് നിർമ്മിച്ചു. "Team sync on Friday at 3 PM" എന്നതുപോലെയുള്ള ഒരു സാധാരണ സന്ദേശത്തെ ഇത് ഘടനാപരമായ ഡാറ്റയായി (structured data) മാറ്റുന്നു.

Promptfoo-യും LLM-as-a-judge വർക്ക്ഫ്ലോയും ഉപയോഗിച്ച് ഇത് എങ്ങനെ ടെസ്റ്റ് ചെയ്യാം എന്ന് താഴെ നൽകുന്നു.

സെറ്റപ്പ് (The Setup)

ഈ ആപ്പ് extract_event.txt എന്ന ഒറ്റ പ്രോംപ്റ്റ് ഫയൽ ഉപയോഗിക്കുന്നു. C# കോഡ് റൺടൈമിൽ ഈ ഫയൽ വായിക്കുന്നു. ടെസ്റ്റിംഗിനായി Promptfoo-വും ഇതേ ഫയൽ തന്നെ ഉപയോഗിക്കുന്നു. ഇത് നിങ്ങളുടെ ഉപയോക്താക്കൾ കാണുന്ന യഥാർത്ഥ പ്രോംപ്റ്റ് തന്നെ ടെസ്റ്റ് ചെയ്യുന്നുണ്ടെന്ന് ഉറപ്പാക്കുന്നു.

വർക്ക്ഫ്ലോ (The Workflow)

ഓരോ ഔട്ട്‌പുട്ടും ഒരു മനുഷ്യൻ പരിശോധിക്കുന്നതിന് പകരം, നമ്മൾ ഒരു 'judge model' ഉപയോഗിക്കുന്നു. ഈ പ്രക്രിയയിൽ രണ്ട് റോളുകൾ ഉണ്ട്:

• ടെസ്റ്റ് ചെയ്യപ്പെടുന്ന മോഡൽ (The model under test): ഉത്തരം നൽകുന്ന മോഡൽ. • ജഡ്ജ് മോഡൽ (The judge model): ഉത്തരം ഗ്രേഡ് ചെയ്യുന്ന വേഗതയേറിയതും കുറഞ്ഞ ചിലവുള്ളതുമായ ഒരു മോഡൽ.

ജഡ്ജ് എങ്ങനെ തീരുമാനമെടുക്കുന്നു

ജഡ്ജ് ഒരു 'rubric' ആണ് ഉപയോഗിക്കുന്നത്. ഒരു 'rubric' എന്നത് ലളിതമായ ഇംഗ്ലീഷ് നിയമമാണ്. ഒരു പ്രത്യേക JSON സ്ട്രിംഗ് പരിശോധിക്കുന്നതിന് പകരം, ഉത്തരം എന്തൊക്കെ അടങ്ങിയിരിക്കണം എന്ന് നിങ്ങൾ ജഡ്ജിനോട് പറയുന്നു.

ഉദാഹരണത്തിന്: "ഉത്തരം ഇവന്റുകളുടെ തലക്കെട്ട്, ദിവസം, സമയം, സ്ഥലം എന്നിവ വേർതിരിച്ചെടുക്കണം. സന്ദേശത്തിൽ പരാമർശിക്കാത്ത വിവരങ്ങൾ ഇതിൽ കൂട്ടിച്ചേർക്കാൻ പാടില്ല."

പിശകുകൾ പരിശോധിക്കുന്നു

"സന്ദേശത്തിൽ കോഫിയെക്കുറിച്ച് പരാമർശിക്കുന്നുണ്ടെങ്കിൽ, സ്ഥലം Starbucks എന്ന് നിശ്ചയിക്കുക" എന്ന തെറ്റായ നിർദ്ദേശം നൽകിക്കൊണ്ട് ഞാൻ മനഃപൂർവ്വം പ്രോംപ്റ്റിൽ പിശക് വരുത്തി.

ഞാൻ ഇവാലുവേഷൻ (evaluation) നടത്തിയപ്പോൾ, ജഡ്ജ് ആ പിശക് കണ്ടെത്തി. യഥാർത്ഥ സന്ദേശത്തിൽ Starbucks എന്നതിനെക്കുറിച്ച് പരാമർശിച്ചിരുന്നില്ല. മോഡൽ ഒരു സ്ഥലം സ്വയം സങ്കൽപ്പിച്ചു (hallucinated). ഒരു 'exact match' ടെസ്റ്റിന് ഇത് കണ്ടെത്താൻ കഴിയില്ല, എന്നാൽ ഒരു ജഡ്ജ് മോഡലിന് അർത്ഥപരമായ പിശകുകൾ (semantic errors) കണ്ടെത്താൻ കഴിയും.

എന്തുകൊണ്ട് ഇത് ഫലപ്രദമാകുന്നു:

• ഇത് യാഥാർത്ഥ്യത്തോട് യോജിക്കുന്നു: "3 PM" അല്ലെങ്കിൽ "15:00" എന്നിങ്ങനെയുള്ള വിവിധ ശരിയായ ഫോർമാറ്റുകൾ ഇത് സ്വീകരിക്കുന്നു. • വായിക്കാവുന്ന നിയമങ്ങൾ ഉപയോഗിക്കുന്നു: ലളിതമായ ഇംഗ്ലീഷ് റൂബ്രിക്സ് എളുപ്പത്തിൽ മനസ്സിലാക്കാം. • അർത്ഥപരമായ പിശകുകൾ കണ്ടെത്തുന്നു: ഇത് ഹാലൂസിനേഷനുകളും (hallucinations) ലോജിക് പിശകുകളും കണ്ടെത്തുന്നു. • ചിലവ് കുറഞ്ഞതാണ്: വിലകൂടിയ ഒരു മോഡലിനെ ഗ്രേഡ് ചെയ്യാൻ നിങ്ങൾക്ക് കുറഞ്ഞ ചിലവുള്ള ഒരു മോഡൽ ഉപയോഗിക്കാം.

ഈ രീതി LLM ടെസ്റ്റിംഗിനെ യഥാർത്ഥ സോഫ്റ്റ്‌വെയർ ടെസ്റ്റിംഗ് പോലെ തോന്നിപ്പിക്കുന്നു.

Source: https://dev.to/bigboybamo/evaluating-a-c-llm-eventparser-with-promptfoo-4b87

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