Я глубоко не копал RAG, просто выделил неделю на изучение и не больше, и поделился тем что узнал и сделал с 0 знаниями
Сейчас есть база с векторными колонками, и я ищу совпадения вектора входного поискового запроса с векторами чанков а также с специальной графовой версий чанка, там под капотом тоже происходит поиск синусом
И после фильтрации я и получаю вместо 11000 чанков 5
Там уже это все есть, в итоге после фильтрации из 11000 записей емебедниг чанков по входному запросу получаем 5 чанков с контекстом и есть входной запрос от пользователя
Запрос пользователя нужно привести к нужному нам формату - это делается через дополнительные запросы к нейронке
Потом этот "нормализованный" запрос + история переписки прогоняем для каждого чанка и используем специальный промпт который определяет есть ли ответ на заданный вопрос в текущем контексте
После прогона по всем чанкам и нахождения ответа мы формируем ответ пользователю тоже через специальный промпт который дополнительно трансформирует ответ используя историю переписки
На вход приходят разные виды документов: переписки из чата, посты из хабра, резюме с хедхантер, спарсенный сайт визитки
Документ можно разделить на разные категории, документ бьется на чанки и у каждого чанка своя категория, запрос от пользователя имеет свою категорию, история может иметь другую отличную от последнего запроса категорию
В зависимости от категорий мы используем разные промпты при трансформации входных, промежуточных и выходных данных
export enum Category {
telegram = 'telegram',
/**
* рекламные, массовые или нерелевантные сообщения;
*/
spam = 'spam',
/**
* предложения о работе на полный рабочий день (штат, фултайм, постоянная занятость);
*/
job = 'job',
/**
* вопросы о найме, формировании или усилении команды;
*/
hiring = 'hiring',
/**
* вопросы о собеседованиях, подготовке к ним, оценке кандидатов;
*/
interview = 'interview',
...
}
Тут я больше изучал как вообще можно строить эти RAG системы и какие компоненты там могут быть
Я добавил там на сайте возможность посмотреть какие именно промпты запускались и там теперь видно почему долго
Запускается ведь не один промпт, а много, для того чтобы из 11000 чанков сделать 5 и уже в 5 искать нужные данные, все зависит еще и от самого вопроса, чем он ближе к данным которые в базе тем быстрее отработают все логики
Так как я использую бесплатные лимиты, я стараюсь не делать параллельных запросов - у некоторых провайдеров на это тоже стоят ограничения. Но если делать production-ready RAG-систему и купить платный доступ к нейросетям или развернуть их на собственном железе, то многие задачи можно распараллелить и существенно ускорить поиск ответа.
да, спасибо за комментарий, вижу что там все бесплатные запросы кончились у всех активных провайдеров, поэтому оно так и повисло, ща вот пишу заглушку чтобы оно хотя-бы уведомляло об этом в обратку
Я там добавил пример с чартами, сделал на скорую руку бажное скорее всего, просто чтобы показать что можно и графики, это же Ionicframework тот же браузер просто запакован в APK
если кто то захочет сделать свое мобильное приложение с фронтом и бэком и деплоем, то можно взять этот проект как стартер и модифицировать под себя, то что написала одна нейронка, поймет и другая
а из пользы я в нем фиксирую то что я хожу три раза в день на беговой дорожке и пью воду, выпил нажал плюсик
Свой велосипед любой может написать, в этом ничего сложного нет
Просто нужно учитывать то как потом людей искать на проект, и как люди после велосипеда будут работу искать
Нест дает архитектуру и некий стандарт по написанию кода
Я как работник приходя в контору с нестом сразу могу приступить к работе, мне не нужно изучать как использовать велосипед, и тем более как в нём реализовывать что то новое которое не вписывается в текущую архитектуру и нужно будет сидеть ломать голову придумывать и тратить время, а контора не очень любит оплачивать такие вещи и придётся быстро на коленке чет накостылить
Я как контора при найме людей предпочту специалистов у которых в голове уже есть некая структура и они не будут тратить время на изобретение и починку своих велосипедов, и мне нужно чтобы человек максимально быстро начал разрабатывать бизнес функционал и легко вошёл в текущий процесс разработки
А пример я просил, так как если человек написал некий свой мини нест, то не грех бы им поделится, а не просто говорить что выкинули нест и стало круто, а может и не выкинули, или проект был очень маленький и на мини несте не выйдет красиво написать чет большое с кучей микро сервисов
очень хочется увидеть не большой пример проекта с нест и без нест пусть на REST, так как проблемы неста многие узнают после 3х месяцев разработки, но альтернатива - это писать свой мини нест, и это обычно стопорит и народ остается в нест, до тех пор пока в проекте не происходит смены лида с текущего на некого джун+ который просто выкидывает нест и пишет свой набор велосипедов под конкретный проект
в итоге в этот проект сложно нанимать людей, так как никто не хочет заниматься нонейм великом
и когда этот горе джун+ уходит через пол года компании приходится как-то жить с этим великом долго
можешь сделать репозиторий в гитхаб, монорепа где два проекта с нест и без нест?
Я этот список сгенерировал с помощью гигачат, если вы дадите мне пример такой либы то я с удовольствием ее внедрю и оставлю коммент ссылку на ответ в коде)
Ну я сталкивался при разработке СРМ, с тем что люди хотят видеть конкретную таймзон, не важно что у них комп или телефон подтягивает таймзон из сети.
Хозяин бизнеса может дать доступы сотрудникам из разных регионов и с разными настройками времени и временных зон на их компьютерах, и чтобы не возникало путаницы, проще вообще игнорировать время компьютера клиента и отображать серверное время + таймзон который задал директор.
Спасибо, в следующий раз когда когда вернусь к этой задаче попробую все чанки в один запрос положить
Я глубоко не копал RAG, просто выделил неделю на изучение и не больше, и поделился тем что узнал и сделал с 0 знаниями
Сейчас есть база с векторными колонками, и я ищу совпадения вектора входного поискового запроса с векторами чанков а также с специальной графовой версий чанка, там под капотом тоже происходит поиск синусом
И после фильтрации я и получаю вместо 11000 чанков 5
Там уже это все есть, в итоге после фильтрации из 11000 записей емебедниг чанков по входному запросу получаем 5 чанков с контекстом и есть входной запрос от пользователя
Запрос пользователя нужно привести к нужному нам формату - это делается через дополнительные запросы к нейронке
Потом этот "нормализованный" запрос + история переписки прогоняем для каждого чанка и используем специальный промпт который определяет есть ли ответ на заданный вопрос в текущем контексте
После прогона по всем чанкам и нахождения ответа мы формируем ответ пользователю тоже через специальный промпт который дополнительно трансформирует ответ используя историю переписки
На вход приходят разные виды документов: переписки из чата, посты из хабра, резюме с хедхантер, спарсенный сайт визитки
Документ можно разделить на разные категории, документ бьется на чанки и у каждого чанка своя категория, запрос от пользователя имеет свою категорию, история может иметь другую отличную от последнего запроса категорию
В зависимости от категорий мы используем разные промпты при трансформации входных, промежуточных и выходных данных
Тут я больше изучал как вообще можно строить эти RAG системы и какие компоненты там могут быть
Я добавил там на сайте возможность посмотреть какие именно промпты запускались и там теперь видно почему долго
Запускается ведь не один промпт, а много, для того чтобы из 11000 чанков сделать 5 и уже в 5 искать нужные данные, все зависит еще и от самого вопроса, чем он ближе к данным которые в базе тем быстрее отработают все логики
Так как я использую бесплатные лимиты, я стараюсь не делать параллельных запросов - у некоторых провайдеров на это тоже стоят ограничения. Но если делать production-ready RAG-систему и купить платный доступ к нейросетям или развернуть их на собственном железе, то многие задачи можно распараллелить и существенно ускорить поиск ответа.
Добавил различные промежуточные тексты, чтобы было понятнее что происходит и вывожу провайдера и модель которая используется
вот эти файлы на куски разбиты https://github.com/site15/rag-system/tree/main/sources
файлов: 450, размер общий: 16.5 MiB (17,311,147 bytes)
куски разной длины
да, спасибо за комментарий, вижу что там все бесплатные запросы кончились у всех активных провайдеров, поэтому оно так и повисло, ща вот пишу заглушку чтобы оно хотя-бы уведомляло об этом в обратку
О! Спасибо, я как раз искал похожие проекты, по изучаю их апи
Я там добавил пример с чартами, сделал на скорую руку бажное скорее всего, просто чтобы показать что можно и графики, это же Ionicframework тот же браузер просто запакован в APK
Если что мобильное приложение уже опубликовано https://github.com/site15/my-dashboard/releases/tag/mobile%400.21.0
Вот коммит с изменениями https://github.com/site15/my-dashboard/commit/d54f0cfd6548d4c83af3e088baf08b6ccb5cc3ec
если кто то захочет сделать свое мобильное приложение с фронтом и бэком и деплоем, то можно взять этот проект как стартер и модифицировать под себя, то что написала одна нейронка, поймет и другая
а из пользы я в нем фиксирую то что я хожу три раза в день на беговой дорожке и пью воду, выпил нажал плюсик
Свой велосипед любой может написать, в этом ничего сложного нет
Просто нужно учитывать то как потом людей искать на проект, и как люди после велосипеда будут работу искать
Нест дает архитектуру и некий стандарт по написанию кода
Я как работник приходя в контору с нестом сразу могу приступить к работе, мне не нужно изучать как использовать велосипед, и тем более как в нём реализовывать что то новое которое не вписывается в текущую архитектуру и нужно будет сидеть ломать голову придумывать и тратить время, а контора не очень любит оплачивать такие вещи и придётся быстро на коленке чет накостылить
Я как контора при найме людей предпочту специалистов у которых в голове уже есть некая структура и они не будут тратить время на изобретение и починку своих велосипедов, и мне нужно чтобы человек максимально быстро начал разрабатывать бизнес функционал и легко вошёл в текущий процесс разработки
А пример я просил, так как если человек написал некий свой мини нест, то не грех бы им поделится, а не просто говорить что выкинули нест и стало круто, а может и не выкинули, или проект был очень маленький и на мини несте не выйдет красиво написать чет большое с кучей микро сервисов
очень хочется увидеть не большой пример проекта с нест и без нест пусть на REST, так как проблемы неста многие узнают после 3х месяцев разработки, но альтернатива - это писать свой мини нест, и это обычно стопорит и народ остается в нест, до тех пор пока в проекте не происходит смены лида с текущего на некого джун+ который просто выкидывает нест и пишет свой набор велосипедов под конкретный проект
в итоге в этот проект сложно нанимать людей, так как никто не хочет заниматься нонейм великом
и когда этот горе джун+ уходит через пол года компании приходится как-то жить с этим великом долго
можешь сделать репозиторий в гитхаб, монорепа где два проекта с нест и без нест?
...
Неа, так не пробовал, мне интересен был Vercel изначально и к нему я уже начал искать онлайн бд, позже может чекнут функции supabase, пока не критично
Спасибо большое за комментарий)
увы именно то что мне нужно я не смог найти(
Я этот список сгенерировал с помощью гигачат, если вы дадите мне пример такой либы то я с удовольствием ее внедрю и оставлю коммент ссылку на ответ в коде)
слежу много лет за этим проектом и его кодом, очень нравится движ вокруг этого фрейма, сам не рискну юзать...
в качестве работника я не смогу работу найти по такой специальности ((
в качестве директоре я не смогу найти грамотных специалистов по этой специальности ((
ну тема мне интересна очень, так как не каждый рискнет мутить чет свое крупное и на столько отличающееся от обычных практик
переводить из одной в другую проще, да, качество кода не главное в этом проекте, главное донести основные мысли
Ну я сталкивался при разработке СРМ, с тем что люди хотят видеть конкретную таймзон, не важно что у них комп или телефон подтягивает таймзон из сети.
Хозяин бизнеса может дать доступы сотрудникам из разных регионов и с разными настройками времени и временных зон на их компьютерах, и чтобы не возникало путаницы, проще вообще игнорировать время компьютера клиента и отображать серверное время + таймзон который задал директор.