Задать вопрос

Как связать YandexGPT с базой данных?

Суть идеи:
бизнес пишет запрос простым языком по типу: "количество клиентов за 2023 год". Под капотом YndexGPT, основываясь на контексте, где указана схема, таблицы и их поля, генерирует sql запрос, который мы посылаем базе и выводим ответ. Концепция направлена исключительно на простые запросы.

Находил пару статей где такую тему реализовывали силами OpenAI. Подскажите пожалуйста, в какую сторону можно покопать. Может кто-то делал подобное? Стоит ли тратить время или (пока) такая идея заведомо гиблая?

P.S.
Пробовал играться с API и просто с чатом YandexGPT2. При одинаковом контексте и запросе, выдают абсолютно разные ответы. Будто разные модели используются (чат YandexGPT2 дает более корректный ответ)
  • Вопрос задан
  • 2008 просмотров
Подписаться 3 Средний 2 комментария
Пригласить эксперта
Ответы на вопрос 6
AshBlade
@AshBlade
Просто хочу быть счастливым
Стоит ли тратить время или (пока) такая идея заведомо гиблая?

Гиблая
Ответ написан
Комментировать
@rPman
При наличии доступа к весам llm, мощностям для finetuning и переобучения, специалистам по нейронным сетям, можно сделать ряд сопроводительны нейронок, которые будут помогать принимать решение о дальнейших действиях, закодировать большое количество 'дорожек' из llm к формальным базам данных, и сделать задачу якобы решенной.

По факту llm будет решать одну единственную задачу - текстовый интерфейс на естественном языке к интерфейсу к базе данных. Т.е. набор функционала и запросы, которые можно делать к базе нужно будет закодировать заранее.

Если не углубляться
- во первых, тебе нужно на основе llm сделать классификатор, который будет из текста пользователя понимать, intent - какое именно действие он желает сделать (для этого обучают нейронку на основе pretrained llm, возможно убирают последние слои, заменяя их на новые, веса которых нужно будет найти и обучить на основе подготовленной базы вопросов пользователей и соответствующих им реакций, с некоторой долей вероятности можно попробовать без обучения спрашивать у умной llm типа chatgpt4, к сожалению chatgpt3.5 и сравнимые с ней плохо с этим справляются, точнее это вопрос творческий и возможно вместо одного универсального промпта тут нужно готовить франкенштейна из большого количества разных, llm-ка от яндекса не подойдет).
- во вторых, это сбор информации, отличный пример - человек спрашивает брать ли завтра зонтик, мало сети понять что для ответа на вопрос нужно знать какая будет погода завтра (а завтра это через сколько часов?), нужно понять где этот человек находится и возможно задать наводящий вопрос... это я еще молчу про контекст беседы, может пользователь обсуждает о том что взять с собой в поездку на следующей неделе, т.е. вот уже другое время и место (фраза взять с собой может подразумевать - положить в багаж).
Я видел примеры промптов, с помощью которых из лога беседы можно вытягивать элементы информации (список этих элементов придется заранее забивать соответственно тому интерфейсу, который выбран как целевой на первом шаге), что то типа проанализируй, достаточно ли в данном тексте информации для ответа на вопрос, выделяя в промпте цель, собранную информацию и часть лога беседы, может сжатой через саморизацию с фильтром - нужную для данной задачи (этакая симуляция большого окна контекста).
Вот тут у директора по развитию ии от яндекс спрашивали как раз

Не получится брать сырой поток сообщений, добавлять к ним промпт и надеяться получить сразу результат, это кропотливая работа, по преобразованию потока сообщений в некую выжимку, работа с ней разными запросами и заранее подготовленными нейронками (это на порядок эффективнее, кстати то где слабые сети еще могут давать результат, повторяю, нужен доступ к весам, оборудованию и собирать датасеты)

p.s. С некоторой долей риска можно просить на ходу нейронку генерировать sql запросы на основе вопросов пользователя, результат будет с большими ошибками, чем умнее llm-ка тем сложнее эти ошибки будет обнаружить (в автоматическом режиме я имею в виду).

upd. вот тут из гигачата сделали внутреннюю базу и как то интегрировали нейронку чтобы ею пользоваться, подробности не сообщили но в статье и комментариях есть ссылки на работы и технологии
Ответ написан
Steel_Balls
@Steel_Balls
0KLRiyDQv9C40LTQvtGALiDQmNC00Lgg0L3QsNGF0YPQuQ==
Не взлетит. Гиблое дело.
Этой идее как минимум 40 лет
Ответ написан
Комментировать
riky
@riky
Laravel
Тоже подумываю над таким. Естественно дьявол кроется в деталях, влезет ли схема БД (все таблицы и поля) в контекст. если база большая то скорее всего и нет, либо нужна "дорогая" модель с большим контекстом. Но как правило все таблицы для каждого запроса и не нужны. поэтому можно попробовать сделать в несколько запросов. указать запрос клиента и перечислить таблицы, на выходе должна ответить какие таблицы могут понадобиться.
вторым этапом передать ей схемы этих таблиц, надо тестить в каком виде будут лучше результаты, либо просто в виде CREATE TABLE или просто текстом перечислить. возможно для некоторых столбцов понадобиться передавать ручное описание того какие и как там данные лежат.
ну и последним шагом (как писал в др комментарии) проверить через него же, не опасен ли запрос.

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

думаю должно получиться. проблема в том что обычный юзер не сможет проверить по запросу правильно ли она считает. ну получил я от нее в конце концов какое то число, смогу я его в отчет вставить и к директору с ним прийти?
Ответ написан
Комментировать
@maximq
QA Engineer
YandexGPT будет работать локально, ведь так? так ведь? — если нет, бизнес не боится утечки данных (а возможно и ПД) ?
Даже если это всё запустить локально, используя обученную модель, в вашем случае возможны ошибки, потому что нейросеть сама будет генерировать запросы. Только представьте какие могут быть финансовые потери, если количество строк в выводе будет меньше/больше чем нужно. В таком случае лучше продумать запросы к БД самому, а нейросеть пусть пытается понять, какой из них требуется в конкретном контексте.
Ответ написан
@SergTaranov
Можно. Теоретически так: каждый ответ нейросети в виде sql запроса. Потом этот запрос используем для итогового ответа пользователю. Делаем умный кэш запросов пользователей для нейросети. Если запрос с нужным уровнем достоверности встречался ранее- используем сохранённый sql запрос. Если новый - обращаемся к нейросети или к оператору. Сам такое хотел сделать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы