145 lines
No EOL
5.8 KiB
Markdown
145 lines
No EOL
5.8 KiB
Markdown
---
|
||
title: "Nextcloud Assistant ← LiteLLM ← Ollama"
|
||
date: "2024-07-19"
|
||
author: Сисадмин Линк
|
||
tags: ["ai", "nextcloud", "litellm", "ollama"]
|
||
description: "Настройка локального ИИ для Nextcloud Assistant через прослойку LiteLLM"
|
||
cover: "/posts/covers/nlo.jpg"
|
||
---
|
||
Опять же, как было в случае с [принтером](/posts/ricoh_config), у меня Arch-based дистрибутив, поэтому буду расписывать по нему.
|
||
|
||
## Установка {#install}
|
||
Начнём с установки **[Ollama](https://github.com/ollama/ollama)**. У меня карточка от красных, поэтому я ставлю версию **rocm**.
|
||
|
||
```bash
|
||
yay -S ollama-rocm
|
||
```
|
||
или если нет **yay**
|
||
```bash
|
||
sudo pacman -S ollama-rocm
|
||
```
|
||
|
||
## Сервис systemd {#systemd_service}
|
||
Как в моём случае, почему-то оно не подхватывало мою **RX 6700 XT** (но [тут](https://github.com/ollama/ollama/issues/3547) нашлось решение), поэтому мне пришлось редактировать **сервис systemd** следующим образом:
|
||
|
||
```bash
|
||
sudo systemctl edit --full ollama
|
||
```
|
||
|
||
```bash
|
||
[Unit]
|
||
Description=Ollama Service
|
||
Wants=network-online.target
|
||
After=network.target network-online.target
|
||
|
||
[Service]
|
||
ExecStart=/usr/bin/ollama serve
|
||
WorkingDirectory=/var/lib/ollama
|
||
Environment="HOME=/var/lib/ollama"
|
||
Environment="HSA_OVERRIDE_GFX_VERSION=10.3.0" # Добавлено, чтобы увидело карточку
|
||
Environment="OLLAMA_HOST=0.0.0.0" # Возможность локально подключатся извне
|
||
User=ollama
|
||
Group=ollama
|
||
Restart=on-failure
|
||
RestartSec=3
|
||
Type=simple
|
||
PrivateTmp=yes
|
||
ProtectSystem=full
|
||
ProtectHome=yes
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
```
|
||
|
||
## Импорт модели GGUF {#gguf_import}
|
||
|
||
Обн. от `05.08.24` - добавлена инструкция импорта моделей `.gguf`
|
||
|
||
Далее устанавливаем желаемую модель, в моём случае это **`llama3`** и модель, которую можно импортировать из файла `.gguf`, я буду использовать **`saiga-llama3`[[🔗](https://huggingface.co/IlyaGusev/saiga_llama3_8b_gguf)]**.
|
||
|
||
```bash
|
||
ollama pull llama3
|
||
```
|
||
|
||
Для того, чтобы импортировать модель, нам необходимо:
|
||
- Загрузить модель 🙃
|
||
- Создать файл, который можно скормить **ollama**
|
||
|
||
```bash
|
||
echo FROM папка_с_моделью/файл_модели.gguf >> файл_название_модели
|
||
```
|
||
В моём случае можно сразу название модели, потому что работаю сразу из папки с моделью
|
||
```bash
|
||
echo FROM saiga_llama3.gguf >> saiga-llama3
|
||
```
|
||
Осталось импортировать
|
||
```bash
|
||
ollama -f файл_название_модели название_модели
|
||
```
|
||
```bash
|
||
ollama -f saiga-llama3 saiga-llama3
|
||
```
|
||
|
||
## LiteLLM
|
||
Далее идём ставить **[LiteLLM](https://github.com/BerriAI/litellm)**. Это прослойка между Ollama и [Nextcloud LocalAI](https://github.com/nextcloud/integration_openai), которая использует запросы в формате OpenAI API.
|
||
|
||
```bash
|
||
pipx install 'litellm[proxy]'
|
||
```
|
||
Нам нужна именно **`litellm[proxy]`**, а не просто **`litellm`**!
|
||
|
||
Теперь нужно собственно, запустить модели, с которыми впоследствии мы будем общаться через [Nextcloud Assistant](https://github.com/nextcloud/assistant). \
|
||
Однако, перед тем, как мы перейдём к запуску наших моделей, нам нужно создать файлик **`config.yaml`**, который мы впоследствии "скормим" **LiteLLM** со следующим содержимым:
|
||
|
||
```bash
|
||
model_list:
|
||
- model_name: llama3
|
||
litellm_params:
|
||
model: ollama/llama3
|
||
- model_name: qwen2
|
||
litellm_params:
|
||
model: ollama/qwen2
|
||
|
||
# ну далее по шаблону, если есть другие модели
|
||
```
|
||
## LiteLLM systemd
|
||
Затем я сделал **systemd** сервис, чтобы не запускать это дело ручками, он должен располагаться в
|
||
```bash
|
||
/home/ваш_пользователь/.config/systemd/user/litellm.service
|
||
```
|
||
|
||
```bash
|
||
[Unit]
|
||
Description=LiteLLM for Ollama
|
||
|
||
[Service]
|
||
ExecStart=/home/ваш_пользователь/.local/bin/litellm --config путь_до/config.yaml
|
||
Restart=on-failure
|
||
RestartSec=5s
|
||
|
||
[Install]
|
||
WantedBy=default.target
|
||
```
|
||
|
||
Далее
|
||
```bash
|
||
systemctl --user daemon-reload
|
||
systemctl --user enable --now litellm
|
||
```
|
||
## Nextcloud Assistant
|
||
Теперь идём в настройки сервера **Искусственный интеллект** [/settings/admin/ai], предварительно установив **Nextcloud Assistant** и **OpenAI and LocalAI integration**, листаем ниже до **`OpenAI и локальная интеграция`**.
|
||
|
||
**`Service URL`** - ip_пк:4000 \
|
||
**`Service Name (optional)`** - LiteLLM (или другое, какое хотите)
|
||
|
||
**`API key`** - не нужен \
|
||
**`Default completion model to use`** - выбираем **ollama/ваша_модель** (openai) \
|
||
**`Max new tokens per request`** - ставите сколько считаете нужным
|
||
|
||
**`Select enabled features`**
|
||
|
||
Отключил потому что модель такое не умеет:
|
||
- Image generation provider
|
||
- Speech-to-text
|
||
|
||
Статья написана без использования ИИ. Хотя, наверное, это и так видно 🙃 |