В статье опишу настройку 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 с историей общения и возможность настраивать температуру и начальный промпт для каждого чата. Первый запрос скорее всего будет обрабатываться долго, т.к. понадобится время на загрузку модели.