Детерминированный майндсет vs недетерминированные LLM
Часто замечаю и слышу от других про то, как у некоторых программистов "скрипит мозг" от попытки разрабатывать приложения вокруг LLM. Типичный набор жалоб: "она постоянно придумывает", "каждый раз выдает что-то новое", "я не могу полагаться на результат"
Мы - программисты - все время программировали в детерминистской парадигме: есть код, есть предсказуемый результат. Эта парадигма настолько укоренилась в нас, что сейчас, имея дело с LLM, у нас "реально так подгорает": результаты LLM-ок вероятностные, зависят от контекста, и при одних и тех же входных данных порой выдают совершенно разный результат. Оттого тяжело полагаться на эти результаты далее по стеку, я уже не говорю о том, что огромный вопрос - как тестировать такие системы? Ведь чтобы интерпретировать результаты, нужно быть не просто программистом - нужно разбираться в предметной области.
Думаю, добавляет к этому всему - невозможность напрямую контролировать этот процесс - да, ты можешь менять промпты и входные данные, но ты совершенно не знаешь, какой output это в итоге даст. А залезть в модель и перенастроить ее напрямую ты просто не можешь. (Кстати, возможно поэтому зачастую первое желание - сделать свою модель?)
Как же решать эту проблему? По нашему опыту это некоторая комбинация следующего:
1) Принять и
простить полюбить недетерминированность :)
2) Комбинировать компоненты, написанные в традиционной парадигме, с LLM компонентами.
3) Использовать те немногие возможности, что дают разработчики LLM для частичного "детерминизма" выходных данных -
Predicted Outputs,
Structured Outputs и тп
4) Как можно раньше в проекте сформулировать набор метрик (
evals), чтобы оценивать каждую итерацию или улучшение, и принять что смотрим не на одно значение этих метрик, а на распределение оных
А вы как справляетесь? Или вообще нет такой проблемы?
Обсуждение 23
Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.
Обсудить в Telegram