- BrainTools - https://www.braintools.ru -

Есть множество программ, позволяющих запускать модели на локальном компьютере, такие как GPT4All [1], LM Studio [2], LMDeploy [3], vLLM [4]. Сегодня я расскажу о том, как использовать свой локальный сервер с LLM (Large Language Model) на примере одной из самых популярных программ Ollama для запуска моделей вместо использования API от ChatGPT, Gemini или DeepSeek для подключения к LibreOffice Writer. В результате это позволит писать запросы по обработке данных прямо из документа или через специальное окно ввода команд: «Преобразуй список кандидатов в алфавитном порядке и удали всех с указанными ниже окончаниями» или «исправь ошибки [5] в тексте». Это позволит избежать лишних операций копирования и вставки по сравнению с запросами из браузера, которые теперь в рабочем процессе могут занимать добрую часть трудового дня. Чтобы LibreOffice Writer получил функцию AI, понадобится плагин localwriter.oxt. Этот плагин является мостом к AI-сервису, который работает через API.
Ollama — это программное обеспечение с открытым исходным кодом, которое позволяет запускать большие языковые модели (LLM) локально на компьютере. Нам она отлично подходит для сегодняшней задачи, потому что Ollama умеет использовать как CPU, так и современные GPU, а также предоставляет доступ через API. Мощная GPU для практического использования является единственным верным выбором из-за медленной работы на CPU, который годится лишь для проверки доказательства концепции и принятия решения дальнейших инвестиций в оборудование.
Стоит обратить внимание [6], что хоть Ollama и может запускать модели на Radeon, но в целом эти видеокарты не очень хороши для задач машинного обучения [7]. Поэтому для сегодняшней задачи нужно смотреть в сторону NVidia серии RTX с объёмом видеопамяти не меньше 8-10 гигабайт.
Для установки Ollama под Windows можете использовать эту инструкцию [8].
Чтобы убить двух сразу зайцев, можно установить Ollama с приложением для предоставления удобного веб-интерфейса, но имейте в виду, что многие инструкции подразумевают установку с GitHub устаревшего репозитория ollama-webui. Сейчас этот репозиторий удалён, а вместо него рекомендуется использовать активно развивающийся open-webui [9] репозиторий.
Если веб-интерфейс не нужен и достаточно чата в консоли, то в Linux я бы использовал образ Docker для меньшего количества телодвижений всего за два шага: запуск Ollama и запуск модели.
Первый шаг — это запуск Ollama в контейнере следующей командой:
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
Ollama будет использовать Docker volume для сохранения скачиваемых моделей, а они занимают очень много места. Убедитесь, что для этого хватит места на диске. Обычно по умолчанию для волюмов используется директория /var/lib/docker/volumes.
Для поддержки GPU NVidia из контейнеров нужно установить NVIDIA Container Toolkit [10] и запустить Ollama с параметром ‘–gpus=all’:
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
Если запуск контейнера будет ругаться на недоступность GPU, то проверить работоспособность GPU можно, запустив nvidia-smi внутри контейнера nvidia/cuda:
docker run --gpus all nvidia/cuda:12.8.0-base-ubi9 nvidia-smi
Второй шаг — это запуск модели внутри контейнера:
docker exec -it ollama ollama run gemma2:27b
Эти команды скачают и запустят LLM-модель gemma2:27b через ollama в контейнере с именем ollama. Вам в консоли будет доступен чат с моделью, но для сегодняшней задачи он нас не интересует. Нас интересует API на дефолтном порту 11434. Однако чат полезен для проверки работоспособности. Используйте nvidia-smi или nvtop для проверки, насколько загружен GPU во время генерирования токенов ответа на запрос, чтобы увидеть, сколько нагрузки ложится на CPU и на GPU в различные фазы ответа. Также вы сможете видеть, сколько видеопамяти занято, если GPU используется несколькими приложениями одновременно. Например, выбрав модели попроще, которые не используют всю память [11], даже можно одновременно запустить Stable Diffusion [12] и Ollama.

nvtop показывает нагрузку на Device 1 (NVIDIA CMP 50H)
Gemma2 — это отличная модель от Google, но вы можете, перезапуская только команду из второго шага, выбрать другие модели [13].
В данном примере 27b означает, что выбрана модель gemma2 с 27 миллиардами параметров, которая занимает 16 гигабайт. Если 27b работает очень медленно, то можно выбрать 9b или 2b. В данном случае 9b и 2b — это дистиллированные (уменьшенные) модели. Всегда проверяйте размеры моделей. Они не должны намного превышать размеры видеопамяти видеокарты, но имейте в виду, что размер файла модели из-за сжатия может не соответствовать размеру модели в GPU. Ollama позволяет запускать модели, которые превосходят размер памяти GPU. Хотя часть модели и может быть выгружена в память компьютера, но пострадает производительность. Лучше всего экспериментируйте и выбирайте модель, исходя из ваших требований к скорости ответа, но в любом случае это будет компромисс из-за того, что огромные модели, как deepseek-r1:671b, занимают 400 гигабайт и их практически нереально запустить локально за сколько-нибудь вменяемые деньги.

Чат Ollama с моделью gemma2:27b
Ollama после запуска открывает чат и позволяет сразу в консоли писать ей запросы. Но нас интересует Ollama API, а не чат. Кроме чата, Ollama работает на порту 11434 и по протоколу HTTP обрабатывает запросы в формате JSON. Проверить работу API можно через curl:
$ curl -X POST –location ‘http://localhost:11434/api/generate’ –data ‘{ «model»: «gemma2:27b», «prompt»: «Привет. Расскажи о себе»}’

Чат Ollama с моделью gemma2:27b
Если запускаете Ollama через open-webui [9], имейте в виду, что по умолчанию HTTP API отключен. Чтобы его включить, нужно запускать с дополнительными аргументами:
./run-compose.sh --enable-gpu --enable-api --webui
Подробное описание Ollama API с примерами смотрите здесь [14].
Если Ollama отвечает множеством токенов, то перейдём к настройке LibreOffice.
Чтобы LibreOffice начал работать с LLM, нужно установить плагин. Задачка решается в два действия.
Должно получиться вот так:

Плагин установлен
После установки плагина в меню LibreOffice появится ещё один пункт localwriter. Чтобы он начал работать, нужно его настроить. Из обязательных настроек нужно ввести имя модели. По умолчанию плагин будет обращаться к API по адресу 127.0.0.1 [17]:5000/. Ollama по умолчанию обычно работает на порту 11434, но будучи запущенной, например, через проект open-webui из Docker за пределы контейнера «выставляется» порт 11435:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cb1287b66652 ghcr.io/open-webui/open-webui:main "bash start.sh" 2 days ago Up 33 hours (healthy) 0.0.0.0:3000->8080/tcp, [::]:3000->8080/tcp open-webui
3adfa0f6b57c ollama/ollama:latest "/bin/ollama serve" 2 days ago Up 33 hours 0.0.0.0:11435->11434/tcp, [::]:11435->11434/tcp ollama
В настройках кроме лимита токенов вы можете задать «системную подсказку». Например, если хотите использовать определённый стиль письма, тут можно разместить эти требования, и плагин будет отправлять их вместе с каждым запросом к модели.

Можно ввести отдельно системную подсказку отдельно для ‘Edit selection’ и для ‘Extend selection’
К сожалению, сейчас от отправки запроса до накопления полного ответа от модели LibreOffice находится в подвисшем состоянии. Программа просто никак не реагирует ни на что, и система даже может запросить разрешение завершить её принудительно (не соглашайтесь, если тлеет надежда дождаться ответ). Когда ответ будет сформирован, вы увидите его в документе. При использовании больших моделей или слабых вычислительных ресурсах это может занимать неприлично много времени, поэтому лучше отладить скорость ответа модели до использования плагина в LibreOffice.

Через системную подсказку можно попросить модель изменить своё обычное поведение [18]
В данном примере я ввёл запрос, дождался ответа и заново открыл окно, чтобы показать, какой запрос привёл к такому результату с настройками системной подсказки для «Edit selection» чтобы модель писала в стиле быдла. Главное не забыть убирать системные подсказки в настройках, чтобы не удивляться, почему всегда получается хамский, нудный, лживый или ещё какой-то специфический результат.
У плагина есть два режима работы: ввод команды с выделением текста для передачи в LLM (edit selection) и выполнение команд прямо из документа (extend selection). Вот пример исправления ошибок в тексте с помощью модели gemma2:27b:

Edit selection: пишем команду, что нужно сделать с выделенным текстом

Результат исправлений с использованием модели gemma2:27b
Ещё примеры, чем можно попросить нейронку помочь:

Предобработка информации, полученной в неудобных форматах

Лог tcpdump обработан LLM в читаемый вид
Теперь можем просто дать задание, не имея исходных данных:

В пустом документе запросим сгенерировать информацию

Разные модели по-своему подходят к выполнению задачи
Второй вариант использования плагина через меню Extend selection — это выполнение команд, написанных прямо в тексте:

Запросим дописать начатое письмо

Такое себе
Gemma2 — отличная модель, но, по всем канонам её создателя Google, обязательно нужно интегрировать миллион нравоучений… Открывайте форточку, если станет душно от использования этой модели.
Скажу честно, что пока я не уверен, что дома буду использовать этот плагин в текущем состоянии для своих задач. Но ещё год назад я привыкал к нейрочатам, лишь изредка пробуя, как они справляются с различными задачами. А сейчас я уже знаю, как и в каких задачах нейронки могут помочь, а в каких, собрав волю в кулак, сделать самостоятельно за нейронку свою работу. И в итоге с каждым днём всё больше и больше работы я перекладываю на нейросети. Поэтому всегда держу на карандаше подобные решения. Ведь если нейронка способна хотя бы на 5-10% улучшить скорость или качество работы, то это вполне может окупить покупку сервера с одной или несколькими мощными видеокартами на офис со множеством сотрудников в организации, где очень важно, чтобы не утекали данные. Ну и, конечно же, я бы с удовольствием ознакомился с тем, к каким ещё программам из различных сфер таким лёгким способом можно прикрутить нейронку.
© 2025 ООО «МТ ФИНАНС»
Telegram-канал со скидками, розыгрышами призов и новостями IT 💻 [19]
Автор: SergeyNovak
Источник [21]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/12818
URLs in this post:
[1] GPT4All: https://github.com/nomic-ai/gpt4all
[2] LM Studio: https://github.com/lmstudio-ai
[3] LMDeploy: https://github.com/InternLM/lmdeploy
[4] vLLM: https://github.com/vllm-project/vllm
[5] ошибки: http://www.braintools.ru/article/4192
[6] внимание: http://www.braintools.ru/article/7595
[7] обучения: http://www.braintools.ru/article/5125
[8] эту инструкцию: https://habr.com/ru/articles/879076/
[9] open-webui: https://github.com/open-webui/open-webui
[10] NVIDIA Container Toolkit: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
[11] память: http://www.braintools.ru/article/4140
[12] Stable Diffusion: https://github.com/AUTOMATIC1111/stable-diffusion-webui
[13] другие модели: https://ollama.com/library
[14] здесь: https://github.com/ollama/ollama/blob/main/docs/api.md
[15] страницы плагинов для LibreOffice: https://extensions.libreoffice.org/en/extensions/show/99224
[16] GitHub: https://github.com/balisujohn/localwriter
[17] 127.0.0.1: http://127.0.0.1
[18] поведение: http://www.braintools.ru/article/9372
[19] Telegram-канал со скидками, розыгрышами призов и новостями IT 💻: https://t.me/ruvds_community
[20] Image: https://ruvds.com/ru-rub?utm_source=habr&utm_medium=article&utm_campaign=SergeyNovak&utm_content=podklyuchaem_ai_k_libreoffice_plagin_localwriter
[21] Источник: https://habr.com/ru/companies/ruvds/articles/881964/?utm_campaign=881964&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.