Делай RAG
178 subscribers
5 photos
14 links
Канал, посвященный развитию бота-помощника по проверке рекламных материалов @lastminute_legal_bot

👉🏻Github проекта https://github.com/ekaterina-ya/lastminute_legal

Связаться с автором через сообщения канала или [email protected]
加入频道
Channel created
Please open Telegram to view this post
VIEW IN TELEGRAM
Channel photo updated
Всем привет и спасибо за интерес к нашему небольшому pet-проекту! 🚶‍♀️

Чат-бот «А юристы смотрели?» с помощью нейросети, дополненной постоянно обновляющейся базой решений Федеральной антимонопольной службы по рекламным делам, помогает проверять рекламные креативы на соответствие ФЗ «О рекламе». Бот работает по технологии Retrieval-Augmented Generation (RAG, генерация, дополненная поиском): он ищет в базе знаний решения ФАС по креативам, максимально близким к загруженному вами. Это обеспечивает более точную и индивидуальную оценку рисков — как если бы ваш случай проверял юрист, постоянно отслеживающий практику ФАС.

Автор проекта и канала – Екатерина Якуненко 😀, юрист крупного фармацевтического холдинга с опытом более 6 лет.
Во время декретного отпуска я прошла великолепный 100/10 would recommend курс от Рунетлекс Академии по использованию нейросетей в работе юриста. Курс вдохновил меня создать полезный для своей работы нейросетевой инструмент (при помощи самих же нейросетей!).
Я много работала с ФЗ «О рекламе» и медиа-проектами и отлично понимаю, насколько сложно маркетологам и предпринимателям одновременно выделиться среди конкурентов, сэкономить бюджет… и не забыть получить одобрение юристов, чьи многочисленные замечания иной раз вынуждают начинать процесс заново 😐
Так на пересечении желания внедрить нейросети в свои рабочие задачи, попрактиковать так называемый вайб-кодинг, поработать с открытыми и легко добываемыми данными и принести пользу коллегам-юристам, родилась идея сделать бота-помощника. Но главным образом меня вдохновляла мысль о креативщике или малом предпринимателе, который после долгой работы над рекламой в последний момент вспоминает, что ее же не видели юристы. Так сформировалась главная цель проекта и само собой получилось название для бота.

В этом канале я планирую:
🤩 делиться во всех подробностях (в формате инструкций и рассказа о провалах) процессом созданием бота — от гипотез и работы с данными до продуктовой части и проблем на запуске;
🤩 разумеется, рассказывать об обновлениях (точек роста ОЧЕНЬ много!) и других новостях;
🤩 писать о самых забавных кейсах ФАС, которые мне попались при работе с базой знаний, и других кулстори, связанных с проектом.

Поэтому этот канал будет интересен юристам, энтузиастам ИИ и low-code разработки (и особенно тем, кто совмещает эти роли). Возможно, заинтересует и тех, кто следит за жизнью подобных pet-проектов, создаваемых людьми из, казалось бы, совсем других сфер.
Я надеюсь, что бот будет действительно полезен многим людям, и что он вырастет во что-то большее. Поэтому очень приветствую любую конструктивную критику, обратную связь о работе бота, поддержку и предложения о сотрудничестве!

Начать поддержку можно с того, чтобы поставить звездочку проекту на Github или бустануть канал ☕️
Please open Telegram to view this post
VIEW IN TELEGRAM
113🔥76
День релиза! 🤩🤩🤩

В честь Дня релиза пост о ближайших планах по развитию бота и канала:

🤩 Настроить регулярный процесс пополнения базы знаний (RAG)
Сейчас в базе чуть больше 700 кейсов из практики всех управлений ФАС за прошедшие 2,5 года (с 01.01.2023 до 16.06.2025, когда я запустила первый скрапинг, т.е. извлечение дел из базы).
Процесс отбора кейсов в базу не на 100% автоматизированный — в нем довольно большая доля ручного отсмотра и контроля (как устроен отбор я обязательно расскажу в отдельном посте).
В ближайшее время хочу дополнить базу решениями за прошедшее с 16 июня время и за 2022 год. И заодно отладить пайплайн «скрапинг — отбор — пополнение RAG для бота».

🤩 Выдачу кейсов из RAG для нейросети хочется сделать более нюансированной и точной
Сейчас нейросеть получает 10 наиболее близких кейсов, и эта близость определяется так называемым косинусным расстоянием. Это неидеальный (и я бы даже сказала местами абсолютно топорный) метод (о нем я тоже обязательно напишу подробнее), и есть несколько идей, как можно это улучшить.

🤩 Сделать в RAG отдельный блок с руководствами ФАС о надлежащем применении законодательства о рекламе
Сейчас нейросеть может их учитывать как часть своего обучения в недрах Google, но никогда не цитирует их. Но вполне можно помимо решений УФАСов добавлять в заключение и ссылки на нужное руководство, когда это уместно.

🤩 Настроить регулярный процесс изменений в коде
MVP – вещь неидеальная, мы специально оставили несколько шероховастей в продуктовой части, чтобы отладить процесс изменения и тестирования кода локально на моем компьютере, переноса итоговой версии на Гитхаб (это, кажется, называется коммитом?) и перезапуска кода на сервере.

🤩 Разобраться с анализом собранных данных
В коде прописан сбор данных обо всех действиях пользователя в боте в связке с этапами работы бэкэнда кода (как нейросеть описала креатив, какие получила кейсы из RAG, какое написала для вас заключение) и вашей обратной связью. Но я пока вообще не вникала, как это устроено, как это будет выглядеть, как лично я буду все это читать, не пойдет ли у меня кровь из глаз от всего этого айтишного.

🤩 Информационная работа
Контент-план и собственно контент для канала, публикации в разных медиа о проекте, прямые контакты со знакомыми предпринимателями, маркетологами, юристами, соц.сети и так далее. Нужно ли добавлять, что психологически лично для меня это самая сложная часть, я бы лучше круглыми сутками ковырялась в базе решений и писала техзадания по продуктовой части 🥺

Есть, конечно и отдаленные планы
Например, попытаться преодолеть заявленные ботом ограничения, касающиеся каналов распространения рекламы, путем разработки опросников и усложнения архитектуры обработки запросов.
А еще — освоить python на уровне, позволяющем мне понять собственный код 😀 кторый я писала, разумеется, не сама, а с помощью Google AI Studio и модели Gemini 2.5 Pro (той же самой, что проверяет креативы, вот такая она молодец).

Размышления о боте приводят и в эмпиреи, где бот разрастается до мультиагентной системы полного цикла для маркетологов, решающей задачи от концепта и изучения запросов клиента до готовой размещенной кампании (соответствующей всем требования законов всех рынков мира, разумеется!).
Но для начала я еще поделаю RAG :)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥132🎉1🤩1
Делай RAG pinned «Всем привет и спасибо за интерес к нашему небольшому pet-проекту! 🚶‍♀️ Чат-бот «А юристы смотрели?» с помощью нейросети, дополненной постоянно обновляющейся базой решений Федеральной антимонопольной службы по рекламным делам, помогает проверять рекламные…»
Добрый день, коллеги и друзья! Прошел день с релиза, и я уже вижу очень воодушевляющий отклик и так много поддержки! 😭 Спасибо большое всем, кто тестирует, сообщает о проблемах и впечатлениях, рассказывает о боте ближнему! Подписчикам — десятикратное спасибо!!!

В сегодняшнем посте я хочу рассказать о первых этапах работы над ботом (а завтра – о последних). Пока рассказ короткий и верхнеуровневый, о каждом этапе (и даже отдельных больших подзадачах) я буду писать отдельно в деталях, а этот и завтрашний пост позже пополнять ссылками.

😀 Концептуальный этап
Сразу был понятен контур Telegram бот + нейросеть + RAG по рекламному законодательству. Но довольно много бурных обсуждений внутри моей семьи было о том, чем будет наполнен RAG и что считать MVP. Основные отброшенные гипотезы:
⁃ RAG с руководствами ФАС (этими самыми);
⁃ RAG по делам о лекарствах и БАД как сфере, в которой у меня много опыта;
⁃ RAG по какому-то конкретному региону (УФАСу).
Все они были отброшены как неамбициозные не добавляющие ощутимой ценности к тому, как может проверить креатив любая приличная LLM простецким zero-shot запросом (как в том меме «я подписал договор, меня не посадят?»)
Было решено действовать по принципу go big or go home и сразу делать масштабный RAG с решениями со всех регионов, по всем рынкам и всем статьям ФЗ «О рекламе».

😀 Скрапинг решений из базы данных ФАС
Этот этап частично был параллельным первому (я наскрапила практику по лекарствам и БАДам, увидела, какие это слезы 😪, и отбросила ту гипотезу). Здесь произошел тот самый первый вайб-кодинг с помощью Google AI Studio, знакомство с Терминалом на macOS и JupyterLab (средой разработки). Я попросила нейросеть написать скрипт, который по заданным мной параметрам (нащупанным не с первого раза) соберет нужные txt файлы из базы ФАС.
Удивительные ощущения настоящего колдунства от работы кода, ведь то, что руками делалось бы неделями, свершилось за пару часов: скачано несколько тысяч файлов с определениями/решениями/предписаниями, все собрано в табличку. Ну мэджик!!!

😀 Разметка данных и формирование базы знаний — самый непростой, кропотливый, но интересный процесс
Этап разметки был честно поделен пополам с AI Studio: очередным скриптом в Студию отправлялись API-запросы с текстами определений и довольно сложным промптом, в котором были поставлены две основные задачи: 1) сортировать кейсы на ценные и неценные для RAG и 2) вытаскивать из текстов разные данные и раскладывать их в табличку. Ключевые данные — тексты и описания оспариваемых креативов, суммаризация сути дела, позиции и аргументов ФАС, а также собственная оценка нейросети по шкале от 1 до 10 того, насколько дело ценное для RAG.
После этого я вычитывала эти саммери, меняла иной раз данную нейросетью оценку, много думала о том, по каким параметрам делать итоговый отбор в RAG, насколько в этом процессе можно положиться на нейросеть без отсмотра кейсов собственными глазами. Во всем процессе работы над ботом этот этап был самым длительным, но и самым увлекательным — такого дикого креатива мало где еще насмотришься. Эта деятельность принесла идею для рубрики, обещающей быть самой яркой в канале: обзор самых кринжовых смешных и примечательных кейсов (спонсором этой рубрики могла бы быть не к ночи помянутая компания Ёбидоёби).
Всего у меня было 6 заплывов (я их называла для себя батчами): первый в 100, 4 по 200 и последний сразу аж на 1100 для ровного счета. Так из 2 тысяч дел в RAG итоге вошло 730.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥131👏1
😀 Создание и тестирование корпуса эмбеддингов — самый короткий и быстрый этап, который при этом сложнее всего объяснить, но я попытаюсь!
Это собственно вариант (самый простой) реализации того самого RAG: непосредственный процесс поиска (retrieval) кейсов в базе знаний и обогащения (augmentation) промпта для нейросети.
RAG‑подход использует «эмбеддинги» — числовые отпечатки смысла текста, которые позволяют сравнивать документы по содержанию. Каждое отобранное на предыдущем этапе определение было превращено в такой эмбеддинг с помощью специальной нейросети. Затем мы со Студией сделали код, который вычисляет косинусное расстояние между эмбеддингами: чем оно меньше, тем ближе дела по сути.
Сделав корпус эмбеддингов, я на 20 тестовых делах проверяла, как он работает, действительно ли косинусное расстояние помогает определить релевантные дела (спойлер надо? ДА, помогает! НО иногда получается, простите за низкий слог, лажа). В результате этого тестирования я сделала много полезных выводов о том, каким должен быть бэкэнд бота, то есть чего именно делать на следующем этапе, о котором можно будет почитать уже завтра!)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1131
Делай RAG
😀 Создание и тестирование корпуса эмбеддингов — самый короткий и быстрый этап, который при этом сложнее всего объяснить, но я попытаюсь! Это собственно вариант (самый простой) реализации того самого RAG: непосредственный процесс поиска (retrieval) кейсов…
Любуюсь 🥰 приближающимся к первому круглому значению числу подписчиков, горячо всех приветствую и продолжаю рассказ. Сегодня об айтишно-продуктовом блоке истории явления бота миру.

😀 Разработка логики бэкэнда бота и работа над промптами
Под бэкэндом я понимаю всё, что в файлe backend_logic.py всё, что может быть легко перенесено в другую продуктовую оболочку, например, на одностраничник. Я не уверена, правильно ли я использую термин бэкэнд, но AI Studio мне не возражала и все понимала, так что считаю, что все ок!
Что делает бэкэнд:
🤩 принимает файлы и тексты, файлы ресайзит;
🤩 отправляет уменьшенные файлы и тексты на предобработку по API в Gemini. Про предобработку буду писать отдельно;
🤩 для полученного результата предобработки создаётся эмбеддинг, вычисляется косинусное сходство между этим эмбеддингом и эмбеддингами из корпуса (корпус эмбеддингов — это результат предыдущего этапа);
🤩 из корпуса выбираются (retrieval) топ-10 дел с наибольшим косинусным сходством, заранее подготовленные описания дел вставляются (augmentation) в промпт на подготовку заключения;
🤩 обогащенный промпт отправляется по API в Gemini, Gemini генерирует заключение;
🤩 скрипт вставляет в заключение ссылку на кейс в базе ФАС и добавляет статичные дисклеймеры моего сочинения (если вы пробовали бот, то видели одинаковый блок в конце каждого заключения).
Бэкэнд не бэкэнд без двух промптов, содержание которых также было предметом долгого обдумывания. И продолжает им быть, ведь неотъемлемый компонент развития проекта — улучшение промпта. Именно для этого я прошу обратную связь, особенно от коллег-юристов, самую драгоценную.

😀 Продуктовая часть — сценарий бота и отладка
Это продумывание того, как бот взаимодействует с пользователем (то есть все кнопочки, окошки, их содержание, последовательность и прочие мелочи функционала), описание этого сценария в техническом задании-промпте, и много-много итераций локального тестирования (то есть сервером выступал мой ноутбук).
Этот этап был вторым самым длительным и богатым на тяжелые вздохи. Про вайб-кодинг здесь многие слышали, а слышали ли вы о муж-дебагинге? Если с первым драфтом кода у AI Studio все очень неплохо, то с отладкой 😐 (здесь починит, там поломает, без спроса «улучшит», что-то потеряет… ух). В общем, если бы не супруг, который за пару вечеров поправил все косяки, релиз состоялся бы, но, наверное, на недели две позже и без такой радости.

😀 Переезд на сервер и релиз
Когда мы убедились, что все работает хорошо, то я очистила итоговый код от постыдных нейросетевых комментариев, сделала репозиторий на Github (уже две звезды, ура!)) и организовала пространство на render.com. Тоже не с первого раза, а где-то с третьего: одна из нейросетей мне наврала, что для Telegram-бота нужно создавать Web Service, хотя вообще-то нужен Background Worker, а также я была озадачена сокрытием базы знаний и корпуса эмбеддингов в приватном репозитории.
Но все решилось, запустилось, я написала коллегами и в чат ilovedocs и-и-и
———вы находитесь здесь———

Каждый этот этап можно расписать на три поста, что меня поражает, ведь проделанная работа кажется довольно простой, а продукт — крошка-малышка. Ну поражает и поражает, написать все равно очень хочется, поэтому не переключайтесь! 😀
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥862🤩1
Добрый день! ☕️ Как прошел ваш пятничный вечер? Мой был очень эмоциональным, ведь вчера под раскаты грома в темной комнате, освещаемой молниями, я пыталась воссоединиться с базой данных, ведение которой прописано в коде бота.

Код по задумке должен собирать три типа данных:
🤩 log-файлы на каждого пользователя с данными о его активности и security-лог с данными о нарушениях правил безопасности;
🤩 агрегированные данные в базе данных SQLite (файл в формате .db);
🤩 сохранение загруженного пользователем контента (файлы, картинки, тексты).

Бот работает на сервере сервиса render.com и все эти данные должен сохранять в так называемом persistent disk, который создавался вместе с запуском бота на сервере. Этот диск помогает сохранять локальные файлы при перезапуске бота. Сначала я надеялась, что я смогу сделать код, который будет в каком-то постоянном режиме вытягивать данные из этого диска, но это оказалось в принципе невозможно. Потому что render.com вот такой вот супер-секьюрный. Возможным оказалось скачивать файлы на момент Х, и AI Studio подсказала мне очень легкий, простейший способ это сделать…
Легкий способ обернулся примерно часом мытарств с так называемым SSH-ключом 🥺 Это такой способ подключать свой компьютер к удаленному серверу через пару ключей — приватный и публичный. Ваш компьютер выдает вам публичный ключ, вы его вносите на сервер, затем через Терминал вы обращаетесь компьютером к серверу, он сверяет публичный и приватный ключи, и вы получаете все, что вам надо с диска.
Я не буду вдаваться в детали, почему все это было долго: основная причина состоит в моей личной малограмотности (я не понимаю как по-нормальному пользоваться Терминалом), а Студия почему-то плохо определяла причины ошибок и давала неправильные советы по определению места нахождения данных на диске. Почему-то Студия игнорировала мои оказавшиеся правильными идеи и до последнего уверяла меня, что я просто неправильно скопировала ключ… 🙃

Короче, после успешной стыковки с сервером оказалось, что SQLite база не ведется, а пользовательский контент не сохраняется.
🤪🤪🤪🤪

Грустно? Мне тоже стало очень грустно! ☹️ Я стала думать о том, как же хорошо, что не сообщила о боте на очень широкую аудиторию, и почему я не проверила это все до релиза, это же очевидный такой 8 этап!

Но потом мне перестало быть грустно, ведь логи записались нормально!
Сейчас за 5 минут мы с Chat GPT o4-mini-high (я пока обиделась на Студию) сделали скрипт, который собрал мне данные из логов в табличку. Пока такой костыль, базу данных, конечно же, буду чинить после выходных.

И вот первая статистика использования бота:
За почти 4 дня на ~21:00 вечера пятницы 😀😀 уникальных пользователей направили 😀😀 запросов
😀 пользователя (2 юриста, 1 ИИ-энтузиаст и 1 ответственный гражданин) дали обратную связь в опроснике
😀 пользователя оставили развернутый комментарий.
Назвавшиеся юристами пользователи поставили заключению решительные двойки! Ну и правильно, коллеги, давайте как-то воспитывать этих роботов (правда по логам одной из коллег в качестве заключения указана внутренняя ошибка на стороне Google… такому и правда сложно ставить хорошие оценки).

Оптимизма вечеру добавила мысль, что в самом ближайшем времени нас не ждет ИИ-апокалипсис 🚀, ведь ИИ сам себя довольно плохо дебажит. И данные собирать без супервизии не умеет.
А в мои ближайшие планы добавилась отладка сбора данных и просмотр каких-то базовых 101 уроков по программированию (да хотя бы в Терминале разобраться).
Хороших выходных, коллеги!
Please open Telegram to view this post
VIEW IN TELEGRAM
6🤝3🔥2
Это бот в этот непогожий понедельник. Первый раз прилег по необъяснимым причинам — видела по логам сервера, что кто-то пришел попользоваться ботом, но, как и я, на большую часть запросов получал грустное
500 An internal error has occurred. Please retry or report in https://developers.generativeai.google/guide/troubleshooting

Но я пытаюсь смотреть на ботоводство как на уникальную жизненную ситуацию: возможность из каждой новой проблемы получить новое знание. Так, например, я узнала, что Google любезно сообщает об инцидентах здесь, а если никакого глобального инцидента нет, то предлагает посмотреть, что могло пойти не так с конкретно вашим проектом (впрочем, и на моем проекте тоже не было инцидентов).

Задуплилась не только Gemini, но и сам бот, причем и в бэкэндовой части, и в телеграмской. Например, бэкэнд не генерировал ссылки на базу ФАС, а оставлял только caseID (это номера, которые в базе ФАС присвоены страницам отдельных дел), который нейросеть подбирает из аугментированного второго промпта. А в интерфейсе Телеграма бот ругал меня за вводимый между запросами текст, не распознавал его как креатив и выдавал окно, которое должно выдаваться при прохождении опросника. Это все я поправила простым советским рубильником, перезапустив бота на сервере.
Короче, день проходит с ощущением загадки, которую я не могу разгадать Буду признательна, если у кого-то сегодня найдется минутка потыкать бота, поглядеть, сохраняются ли ошибки 🥱
Please open Telegram to view this post
VIEW IN TELEGRAM
👍521