Коли асистент відповідає погано, перший інстинкт — змінити модель або промпт. Зазвичай же неправильним був пошук, а модель сумлінно підсумувала не те.
Перед тим як чіпати промпт, подивіться, що повернулося на запит. Якщо людина не змогла б відповісти з цих фрагментів, то й модель не мала шансу — і жодна кількість інструкцій не виправить контекст, у якому відповіді немає.
Саме тому оцінювання важливіше за майстерність промптів: без нього ви не скажете, яку з двох речей щойно змінили.
Перевірка механічна. Залогуйте те, що повернув пошук, і прочитайте це так, як прочитала б людина — якщо відповіді там немає, промпт ніколи не був проблемою.
def answerable(question: str, chunks: list[str]) -> bool:
"""Would a careful human answer this from these chunks alone?"""
context = "\n\n".join(chunks)
return grade(question, context) >= 0.7 # human-labelled, not model-scored
for case in eval_set:
if not answerable(case.question, retrieve(case.question)):
print(f"retrieval miss: {case.id}") Проженіть це по всьому набору для оцінювання, перш ніж торкатися хоч однієї інструкції. retrieval miss — це дефект чанкінгу або ембедингів, і формулювання його не лікує.
retrieval miss: refund-window-eu
retrieval miss: contract-termination-notice Два промахи з сорока — проблема чанкінгу. Двадцять — проблема ембедингів.