В статье опишу настройку web API и web-чат похожего на ChatGPT для LLaMA-подобных моделей. Всё это довольно сносно работает на CPU Ryzen 3600 + 32ГБ ОЗУ.
API + веб чат
Для настройки нам понадобятся три проекта:
- llama.cpp - мозг нашей системы
- gpt-llama.cpp - эмулирует API от OpenAI. Реализовано не всё
- chatbot-ui - web интерфейс для доступа к моделям OpenAI
После установки компонентов должна получиться такая структура:
local-chat - корень проекта
├── chatbot-ui
├── gpt-llama.cpp
└── llama.cpp
├── main*
└── models/your-ggml-model.bin
llama.cpp
Думаю многие уже попробовали установить и пообщаться с llama-подобными моделями, но в любом случае опишу процесс установки.
Клонируем репозиторий:
git clone https://github.com/ggerganov/llama.cpp.git
Переходим в каталог и собираем проект
cd llama.cpp
make
Скачиваем любую GGML модель из семейства llama в каталог models
. Модели можно поискать на https://huggingface.co по запросу ggml alpaca
или ggml vicuna
.
gtp-llama.cpp
Это обертка над llama.cpp
для имитации API от OpenAI которая использует локальную модель для обработки запросов.
Для установки клонируем репозиторий и устанавливаем зависимости:
git clone https://github.com/keldenl/gpt-llama.cpp.git
cd gpt-llama.cpp
npm install
Запускаем web api:
PORT=8000 npm start
После старта можно зайти на http://localhostL8000/docs и проверить, что сервис работает: Теоретически gtp-llama.cpp можно использовать с любым приложением которое работают с GPT-3.5/4. У меня получилось запустить AutoGPT и оно что-то делает, может лазить в интернет используя headless движок хрома, но пока не вникал в тонкости.
Веб интерфейс чат бота
Сhatbot-ui реализует веб интерфейс похожий на ChatGPT для работы с моделями GPT-3.5 и GPT-4 используя API от OpenAI.
Скачиваем исходники:
git clone https://github.com/mckaywrigley/chatbot-ui.git
cd chatbot-ui
Правим файл .env.local
, содержание должно быть примерно такое:
# Chatbot UI
DEFAULT_MODEL=gpt-3.5-turbo
NEXT_PUBLIC_DEFAULT_SYSTEM_PROMPT=You are ChatGPT, a large language model trained by OpenAI. Follow the user's instructions carefully. Respond using markdown.
OPENAI_API_KEY=../llama.cpp/models/vicuna-13b-ggml-4bit.bin
# Google
GOOGLE_API_KEY=YOUR_API_KEY
GOOGLE_CSE_ID=YOUR_ENGINE_ID
Обратите внимание, gtp-llama.cpp
ожидает, что в OPENAI_API_KEY
вместо токена будет путь к llama модели.
GOOGLE_API_KEY и GOOGLE_CSE_ID - ключ и id вашего поискового движка в google. Заполните если хотите делать поисковые запросы через модель. Как получить ключи можно почитать по этой ссылке.
Теоретически настроив поисковик, chatbot-ui через поиск google может получать первые ссылки по запросу и передавать текст на обработку модель.
У меня это иногда работает и можно например узнать у бота текущую погоду или другую актуальную информацию + какое-то количество информационного мусора. Но в большинстве случаев в логах видно, что поиск в google происходит и информация из chatbot-ui
передается в gtp-llama.cpp
и на этом всё. Возможно проблему исправят в будущем.
Запускаем web интерфейс чата:
OPENAI_API_HOST=http://localhost:8000 npm run dev
где OPENAI_API_HOST=http://localhost:8000
- ссылка на API gtp-llama.cpp который настроили на предыдущем шаге.
Открываем в браузере http://localhost:3000 и получаем привычный интерфейс ChatGPT с историей общения и возможность настраивать температуру и начальный промпт для каждого чата. Первый запрос скорее всего будет обрабатываться долго, т.к. понадобится время на загрузку модели.