Следующий компонент кода пайплайна отправляет каждый выскрапленный текст решения УФАС в нейросеть по API. Почти каждый, как упоминала в прошлый раз: код проверяет, точно ли там есть какой-то стоящий траты токенов текст (соломоново решение отправлять тексты из txt-файлов более 100 кб).
Если вы знаете, что такое API и зачем это нужно, читайте дальше 📥
API (Application Programming Interface) — это такой способ организовать взаимодействие созданной вами программы и какого-то другого сервиса. То есть я обращаюсь к нейросети не привычным образом через чат в браузере, а мой скрипт автоматизированно отправляет ей шаблонные запросы, она возвращает определенным образом структурированные ответы. Так и бот работает, к слову. Хочу все сделать пост про разные обнаруженные мной нюансы у API Gemini.
Главная выгода использования API в данном кейсе — скорость, масштаб и сохранение качества (каждый запрос — как новый чат, не замусоренный контекстом). На данный момент я прогнала уже несколько тысяч текстов, и без скрепленного API союза нейросети и скрипта для такого же результата понадобились бы месяцы непрерывнойотупляющейработы.
Промпт ставит нейросети несколько задач по анализу кейсов:
Задача 1: Первичная проверка релевантности ФЗ О рекламе
Поскольку, как вы помните, базу данных ФАС заполняют люди, а скрапинг идет по 4 фильтрам, в этих фильтрах оседает всякое залётное, и прежде всего из дел по госзакупкам. Нейросеть первым делом определяет, относится ли дело вообще к ФЗ О рекламе, и если нет, то модель должна вернуть минималистичный JSON с флагом
is_relevant_to_ad_law: false и коротким объяснением причины, не тратя ресурсы на дальнейший анализ. Как это может выглядеть - смотрите в pdf-аттаче!Если вы знаете, что такое JSON и зачем это нужно — проходите-не-задерживайтесь 📥
JSON (JavaScript Object Notation) — это текстовый формат для структурированного хранения данных, который организует информацию в виде пар «ключ:значение». В приведенном выше тексте ключ — «is_relevant_to_ad_law», а значение — «false». Направляя каждый API-запрос, я запрашиваю одну и ту же информацию, и мне нужно, чтобы нейросеть её располагала не беспорядочно, как токены лягут, а именно структурированно. Если по ключу «is_relevant_to_ad_law» значение становится «true», то будет дальнейший анализ, где ключей уже намного больше. Из таких пар «ключ-значение» легко собираются таблички. Но таблички — это лишь вершина айсберга, в этих массивах легко можно вылавливать другие данные с помощью скриптов без парсинга всего текста.
Задача 2: Оценка ценности дела для RAG-базы
Прошедшие первичный отсев герои попадают на, собственно, разметку. В этой задаче у меня два основных соображения:
1. мой бот проверяет только субстантивную часть, а всё, что касается каналов размещения и прочих нюансов реального мира (лицензии, соответствие рекламным тезисам реальному положению дел) — не трогает. Поэтому и в базе знаний этих дел мне нужно (забегая вперед скажу, что соотношение «субстантивные»-«технические» в практике делится год от года примерно 60/40 в пользу то одной категории, то второй).
2. У меня есть ни на чём особенном не обоснованное убеждение, что хорошему RAGу по нишевому юридическому вопросу не требуются стотыщмильонов документов. Я могу быть не права, конечно. Но есть ощущение, что качество ответов не станет сильно лучше, если у меня в базе будут сотни написанных под копирку дел о том, что слова «парилки ашкудишки» на окне табачной лавки являются запрещенной рекламной табака. Нужно всякое МЯСО, где УФАСы проявляли #мудростьФАС или иным образом зажигали по всяким тонким, интересным, неочевидным вопросикам, за которые мы так любим рекламное право. Вот без этого прям никак, без этого можно вообще ни за какие RAGи и не садиться.
Я не умею писать короткие посты, конец и аттач далее 😊
