Как запустить корпоративный GPT на opensource-проектах. Без VPN и дообучения
В 2024 году нет необходимости кого-то убеждать в том, что интеграция AI в бизнес-процессы — это критическая необходимость для выживания бизнеса в будущем. AI-ассистенты способны ускорить и увеличить эффективность вашу и ваших сотрудников, а иногда и вовсе заменить «средних» специалистов.
OpenAI - все еще удерживает лидерские позиции, но ему уже наступают на пятки - Claude 3, Google(Gemini), а главное - появляются все более и более мощные open source модели - LLAMA2, Mixtral, и целое семейство на hugging face.
Основные юзкейсы для бизнеса
Для клиентов:
- Генерация контента
- Автоматизация customer support Q&A боты для клиентов
- автоматизация бизнес процессов
Для сотрудников:
- Q&A боты для сотрудников
- Онбординг
- Документ драфтинг
- Суммаризация и поиск информации в документах
- Ассистенты интегрированные с внутренними CRM, ERP
ChatGPT со своей экосистемой ассистентов позволяет постросить подобные решения. В том числе загрузить свои документы как базу знаний, интегрировать ассистенты с внутренними системами и тд. Однако встает вопрос по защите корпоративных данных и вообще получения доступа в реалиях блокировок и ограничений. Благо, бум генеративного AI сопровождается бумом open source моделей, UI, API wrappers и тд.
В этой статье мы рассмотрим как организовать доступ к таким ассистентам для сотрудников. Будем рассматривать только opensource решения 🙂
Для начала просто рассмотрим проекты, а потом уже расскажем как можно их скомбинировать исходя из юзкейса.
Проекты
LocalAI
Этот проект в первую очередь позволяет развернуть OpenAI совместимый API, за которым можем стоять локальная модель. Также это может работать как прокси API к OpenAI - чтобы работать без VPN. Таким образом, этот проект нужен если хотим развернуть локальную модель и хотим OpenAI совместимый API. Один из плюсов - они также поддерживают tools, function calling(то есть opensource модели можно интегрировать с внутренними CRM, ERP), генерация изображений, аудио.
Для запуска локальной модели желательно иметь сервер с GPU.
Chatbot UI
Просто веб интерфейс, который очень похож на ChatGPT, и который вы можете развернуть на своей инфраструктуре. Поддерживает модели OpenAI, Anthropic, Google Gemini, Mixtral
PrivateGPT
Загрузите свои документы и получите бота, который способен отвечать на вопросы, ссылаясь при этом на эти документы. Пожалуй лучший open source проект для кейса, когда нужно превратить инструкции для сотрудников в Q&A бота. Также огромный плюс - что они также поддерживают OpenAI совместивый API, который под капотом будет делать RAG по вашим документам).
BIG-AGI
Это в первую очередь просто веб интерфейс для большого количества моделей, но с более мощным функционалом чем Chatbot UI. С интеграцией с внешними инструментами - может гуглить, загружать веб страницы, делать ReAct. Также поддерживаются модели по генерации изображений. Другая особенность - “AI Personas” - ассистены для разных задач(Пока что довольно сложно настраивать своих, но вы можете делать своих персон со своими системными промтами)
Telegram бот
Можете запустить свой телеграм бот, даже несколько для разных задач. Например, можете сделать асистентов с разным system prompt для разных задач. Опять таки, за телеграм ботом может быть просто ваш ключ к OpenAI, а может быть ваша локальная модель запущенная с помощью LocalAI
Как собрать решение под себя
Указанные выше проекты легко и быстро запускаются в Docker. Используя их, вы можете собрать решение под свои задачи.
Ниже я приведу примеры комбинаций под разные задачи.
Для запуска вам может потребоваться:
- OpenAI аккаунт(ключ), который вы можете оплачивать
- VPS - виртаульный сервер(желательно где-нибудь в европе, например в timeweb)
- GPU сервер - сервер с видео картой. Можете рассмотреть цены на Yandex Cloud или запуск на своем железе
ChatGPT без vpn
Для начала самый простой случай, когда вам нужно настроить доступ к LLM общего назначения и без всякой специализации.
Варианты комбинаций:
- OpenAI аккаунт, VPS, Chatbot UI/BIG-AGI - если нужен веб интерфейс
- OpenAI аккаунт, VPS, Telegram bot
- GPU сервер, LocalAI, Chatbot UI/BIG-AGI
- GPU сервер, LocalAI, Telegram bot
Q&A бот
Как превратить инструкции для сотрудников в бота, который способен отвечать на вопросы?
Часто эту задачу называют “дообучение на своих данных”. Чаще всего вам не нужно дообучение(это дорого и не так эффективно), вам нужно предоставить качественный контекст(см. RAG) из своих данных для LLM.
Варианты комбинаций:
- OpenAI аккаунт, VPS, PrivateGPT
- OpenAI аккаунт, VPS, PrivateGPT, Chatbot UI/BIG-AGI
- OpenAI аккаунт, VPS, PrivateGPT, Telegram bot
- GPU сервер, PrivateGPT
- GPU сервер, LocalAI, PrivateGPT
Ассистенты с system prompt
Этот тот случай, когда мы можете создать много ассистентов решающих узко-направленные задачи. При этом, вся логика описана в system promt. Тот самый случай, когда какую-то инструкцию для сотрудника по выполнению определенной задачи(например, подготовки документа, технической конфигурации и тд) можно заменить ботом, который помогает сотруднику эту задачу выполнить гораздно быстрее и проще. Например, в reputation.ru есть ассистент, который генерирует kubernetes манифесты для публикации приложений, уточняя у разработчика все необходимые детали приложения.
- OpenAI аккаунт, VPS, Telegram bot
- OpenAI аккаунт, VPS, BIG-AGI(сделать кастомную “AI persona”)
- GPU сервер, LocalAI, Telegram bot
- GPU сервер, LocalAI, BIG-AGI(сделать кастомную “AI persona”)
Заключение и мысли про finetuning(дообучение)
Часто вижу что компании хотят сделать свою LLM заточенную под их предметную область и часто ошибочно полагают что дообучение существующих foundation models это правильный путь. В тоже время их задачу может решить промпт инжиниринг или качественный контекст(RAG).
Поэтому лучше:
- Получите доступ к одной из foundation models(OpenAI, Claude3, Google Gemini или запустите локально Llama 2, Mistral). Моя заметка-сравнение некоторых моделей на русском языке
- Поиграйтесь с проптом и разными техниками промпта, попробуйте разбить задачу на несколько этапов, дайте LLM примеры
- Дайте LLM доступ к базе знаний через RAG
- Сделайте набор тестов и сравните разные модели
- Если нужен специфичный стиль выдачи, формат или нужно улучшить поведение модели на сложных "edge cases" - попробуйте finetuning
На последок неплохое видео от OpenAI про то как выжимать максимум из LLM:
Я правильно понимаю, что это работает как обычная индексация какого-то корпуса, примерно на уровне elastic search? То есть фактически берем какую-то коллекцию документов, скармливаем на вход модели без дообучения - и этого достаточно?
В целом правильно понимаете. Однако алгоритм извлечения информации из корпуса документов может быть сложнее чем простой TFIDF в elastic search
Я с gpt4all и mistral сейчас экспериментирую. Очень противоречивые впечатления. Красивая идея: на базе пачки доков получить собственного карманного эксперта в сложной теме без дообучения. По факту же - видимо, всё упирается в подготовку данных и их объём всё таки. Пока результатами тестов недоволен.
Да, к тому же очень сильно завиcит от доменной области. Подготовка документов и их разбивка очень сильно влияет. Можете рассмотреть вариант чтобы разбитый корпус еще дополнительно прогонять через LLM чтобы делать суммаризиацию или какое-то другое извлечение информации. А еще всякие подходы к промптингу типа CoT пред ответом.
Вот тут, видимо, и засада. Пользователю предлагается взять пачку txt, pdf, csv, отдать на вход модели – и можно пользоваться. Но этого недостаточно.
Для примера: скармливаю пачку спецификаций по оборудованию. Модель об этом изначально ничего не знает, нету этих данных в интернете. Задаю запрос по конкретной характеристике - скажем, по диаметру воздуховода. Уверенно отвечает - но настолько мимо, что хоть стой хоть падай. И куда копать - неясно.
Ну, попробую менять формат на входе.
да нейро любит приврать... с умным видом = в prompt прописывайте условие
—-
вот недавнее видео про claude в вашу тему https://www.youtube.com/watch?v=Evg4HXvsYVY&t=8s&pp=ygUkQW50aHJvcGljJ3MgTWV0YSBQcm9tcHQ6IEEgTXVzdC10cnkh
Вы описали тест Needle in haystack https://arize.com/blog-course/the-needle-in-a-haystack-test-evaluating-the-performance-of-llm-rag-systems/
Попробуйте потюнить ваш промпт для извлечения фактов, ну и разные форматы документов тоже
Весьма полезно, благодарю за столь подробно освещенную тему!
Я правильно понимаю, что хоть и размещаем что-то на своем корп сервере, то ОпенАи может в любой момент прикрыть лавочку?
может, поэтому вы можете использовать локальную модель. В тоже время, лавочка уже прикрыта для РФ, но все кому нужно обходят :)