Своя библиотека контекста: почему курируемые примеры повышают точность ответов
Разбираю на своём кейсе с библиотекой модов, почему маленький вычищенный набор примеров бьёт огромный сырой каталог — и как собрать такой набор под свою задачу.
Есть соблазн думать, что чем больше данных ты скормишь модели или поисковику, тем точнее будет ответ. Я сам так думал, пока не уперся в конкретную боль на одном из своих проектов. Опыт получился наглядный, поэтому расскажу через него.
Откуда взялась проблема
Я делаю редактор крашеных модов для игрового клиента. Внутри был инструмент добавления мода, и он искал по всему распарсенному справочнику статов, который вытаскивается из игровых файлов. Там тысячи строк: статы мобов, статы скиллов, какие-то внутренние служебные значения и, где-то среди этого, нужные аффиксы предметов.
Выглядело это так. Владелец пишет в поиск spirit — и получает десятки результатов. Один нужный, остальные шум. Плюс всё только на английском, поэтому человеку сначала надо вспомнить точное английское написание, а потом ещё глазами отфильтровать выдачу. Формально данные полные. По факту пользоваться невозможно.
То же самое происходит, когда мы даём модели гигантский недифференцированный контекст. Информация есть. Сигнал в ней тонет.
Что такое библиотека контекста
Библиотека контекста — это собранный вручную набор примеров, определений и заготовок, который ты подкладываешь к задаче вместо сырой свалки. Ключевое слово здесь «вручную». Кто-то один раз сел, отобрал то, что реально используется, перевёл, сгруппировал и подписал.
В моём случае решение получилось таким: я завёл отдельную двуязычную библиотеку модов. Это встроенный JSON, который вообще не зависит от игровых файлов. Внутри только те моды, которые люди действительно ставят на предметы. Русское и английское название рядом. Похожие вещи собраны в группы, которые ставятся в один клик. У каждой группы заранее прописан цвет по умолчанию.
Сырой каталог со всеми тысячами статов я не выбросил. Я спрятал его за тумблер «Расширенный поиск». Он остаётся доступен на редкий случай, когда нужного мода в библиотеке нет. Но по умолчанию человек работает с чистым отобранным набором.
Почему курируемый набор точнее
Механика простая, и она одинаково работает и для человека, и для модели.
- Меньше кандидатов — меньше ошибок выбора. Когда в выдаче три релевантных пункта вместо шестидесяти, промахнуться почти невозможно.
- Отбор уже произошёл. В курируемом наборе кто-то заранее решил, что сюда попадает, а что отсекается. Эта работа сделана один раз и переиспользуется каждым запросом.
- Формат нормализован. Двуязычие, единые названия, группировка. Модель или человек тратит силы на саму задачу и не расшифровывает сырой формат.
- Контекст помещается целиком. Маленький вычищенный набор влезает в окно внимания без потерь. Огромный каталог приходится резать, и режется он вслепую.
Я бы сформулировал так: точность ответа определяется качеством того, что ты положил в контекст, задолго до того, как модель начнёт отвечать.
Как собрать такую библиотеку под себя
Если переносить мой опыт на работу с ИИ-ассистентами, порядок действий получается примерно один и тот же.
- Найди свой
stat_descriptions. Это источник, который формально полный и практически бесполезный из-за шума. У кого-то это вся база знаний компании, у кого-то — папка со всеми документами подряд. - Отбери то, что реально используется. Не пытайся положить всё. Смотри на реальные запросы и оставляй примеры, которые закрывают частые случаи.
- Нормализуй формат. Приведи к единому виду, добавь недостающий язык, подпиши понятными названиями. Скучный ручной этап, и именно он даёт основной прирост.
- Сгруппируй. Похожие примеры рядом — это те самые «наборы в один клик». Модель охотнее опирается на связный блок, чем на разрозненные куски.
- Оставь дверь к сырым данным. Мой тумблер «Расширенный поиск» — это страховка. Курируемый набор покрывает основное, полный источник остаётся на редкие случаи.
Что я вынес из этого
Библиотека контекста — это живой актив, который приходится вести. Появился новый частый запрос — добавил пример. Что-то устарело — вычистил. Она маленькая ровно потому, что за ней кто-то следит.
Самое неочевидное для меня было вот что: полнота данных и полезность данных — разные вещи, и вторая почти всегда важнее. Тот сырой каталог со всеми статами никуда не делся и остался технически исчерпывающим. Но реальную точность дал маленький отобранный JSON, который я собрал руками под конкретную задачу.