Пошаговые инструкции Средний уровень 14 мин

Как собрать локального ИИ-агента на компьютере: Ollama, Open WebUI и документы

Локальный помощник по документам на Windows: Docker, Open WebUI, Ollama и RAG. Настройка WSL, тестовый регламент, проверка источника, памяти и офлайн-работы.

RAG Ollama Локальные LLM Инструкция локальный ИИ-агент Open WebUI AnythingLLM приватность

Что получится в результате

У вас будет чат в браузере, который отвечает по своему тестовому документу. Модель и поиск работают в Docker-контейнере на вашем компьютере; регистрация в облачном AI-сервисе и API-ключ не нужны. Это первая версия локального помощника с базой знаний, а не автономный агент с доступом ко всему диску.

Берём один маршрут: Windows 11, PowerShell, Docker Desktop с Linux-контейнерами и Open WebUI со встроенной Ollama. На macOS и Linux этот текст не заменяет отдельную инструкцию установки. Получится локальный помощник с RAG: он отвечает по документу, но не выполняет самостоятельные действия.

Этот маршрут - для документов, а не только для чата

Если нужен лишь первый ответ модели, остановитесь на более лёгкой установке Ollama или LM Studio. Здесь добавляется поиск: интерфейс обрабатывает регламент, находит фрагмент и передаёт его модели вместе с вопросом. Это отдельный уровень сложности; запуск Docker не делает маленькую модель точнее.

Сначала проверить компьютер: Llama и API без Docker

Предпочитаете приложение: чат в LM Studio

Чат, RAG и агент: чем отличаются локальные сборки

Что понадобится

  • Windows 11 с включённой виртуализацией и WSL 2.
  • Практический ориентир: от 16 ГБ RAM и 20 ГБ свободного места. Без видеокарты модель работает на CPU, но медленнее.
  • Интернет для первоначальной установки, загрузки образа и моделей.
  • Тестовый TXT-файл без персональных данных и секретов.

Проверьте Windows, WSL и свободную память

Этот пример рассчитан на 64-разрядную Windows 11 на обычном x64-компьютере. Перед загрузкой большого образа проверьте версию Windows через winver, а в диспетчере задач, на вкладке производительности CPU, посмотрите, включена ли виртуализация. Docker требует поддерживаемую версию Windows и WSL 2.1.5 или новее; правила поддержки Windows меняются, поэтому сверяйте их на странице установки Docker.

PowerShell
wsl --version
wsl --status

Если WSL ещё не установлен, откройте PowerShell от администратора, выполните wsl --install и перезагрузите компьютер, если Windows попросит. Если он уже есть, но устарел, выполните wsl --update. Затем повторите проверки. Эти команды подготавливают Linux-среду; Ollama отдельно в Windows для данного контейнерного маршрута не нужна.

16 ГБ RAM и 20 ГБ на диске - практический запас для учебного примера, не гарантия. В памяти должны одновременно помещаться Windows, Docker, интерфейс, модель ответов и модель поиска. Диск занят также образом и двумя моделями. На 8 ГБ лучше сначала получить короткий ответ без Docker, а не пытаться загрузить всю сборку.

Шаг 1. Установите Docker Desktop

Откройте docs.docker.com/desktop/setup/install/windows-install/, выберите установщик для своего процессора и выполните установку. Если установщик предлагает backend, выберите WSL 2. Запустите Docker Desktop из меню «Пуск». Дождитесь, пока движок перейдёт в состояние Running. Условия лицензии Docker Desktop зависят от размера и типа организации; проверьте их для рабочего компьютера.

PowerShell
docker version

В выводе должны быть разделы Client и Server. Если Server недоступен, ещё не запущен Docker Desktop. Не переходите дальше, пока команда не работает.

Шаг 2. Создайте папку проекта

Откройте обычный PowerShell. Команды ниже выполняйте в одной сессии. Папка нужна для тестового документа, а историю чатов Docker хранит в отдельном томе.

PowerShell
mkdir local-ai-demo
cd local-ai-demo

Шаг 3. Создайте постоянный секрет входа

Open WebUI использует секрет для подписания сессий. Сгенерируйте свой, не копируйте готовое значение из чужой инструкции. Сохраните его в менеджере паролей: при пересоздании контейнера используйте то же значение.

PowerShell
$secret = [guid]::NewGuid().ToString("N") + [guid]::NewGuid().ToString("N")

Шаг 4. Запустите интерфейс и Ollama

Используем образ с тегом ollama: в нём уже есть движок модели. Не нужно отдельно устанавливать Ollama или открывать её порт в сеть. Порт интерфейса привязан к 127.0.0.1, поэтому доступен только на этом компьютере. Если у вас уже есть контейнер local-ai-demo, не заменяйте его: выберите другое имя и отдельные тома.

PowerShell
docker run -d --name local-ai-demo -p 127.0.0.1:3000:8080 -v local-ai-demo-models:/root/.ollama -v local-ai-demo-data:/app/backend/data -e WEBUI_SECRET_KEY=$secret --restart unless-stopped ghcr.io/open-webui/open-webui:ollama

Команда скачает образ и выведет идентификатор контейнера. Тег ollama обновляется: для постоянной рабочей системы фиксируйте проверенную версию образа и делайте резервную копию данных перед обновлением.

Шаг 5. Проверьте запуск

PowerShell
docker ps --filter name=local-ai-demo
docker logs --tail 40 local-ai-demo

Контейнер должен быть в состоянии Up. Откройте http://127.0.0.1:3000 в браузере. Первый запуск может занять несколько минут: интерфейс готовит свои компоненты. Если страница не открылась, смотрите сообщение в логах, а не запускайте ту же команду повторно.

Шаг 6. Загрузите модель

Загрузите две разные модели: qwen3:4b для ответов и bge-m3 для поиска по документам. Вторая превращает фрагменты в числовые представления и не заменяет чат-модель. Обе команды скачивают файлы внутрь контейнера; дождитесь завершения каждой.

PowerShell
docker exec local-ai-demo ollama pull qwen3:4b
docker exec local-ai-demo ollama pull bge-m3
docker exec local-ai-demo ollama list

В списке должны быть qwen3:4b и bge-m3. Загрузка bge-m3 добавит около 1,2 ГБ. GPU в этом маршруте не настроен: медленный ответ на CPU ожидаем. Размер файлов не равен полной потребности в памяти.

Проверьте ресурсы контейнера

PowerShell
docker stats --no-stream local-ai-demo
docker exec local-ai-demo ollama ps

MEM USAGE / LIMIT в docker stats относится к контейнеру, а не ко всей памяти компьютера. В WSL 2 часть RAM ограничена настройками виртуальной машины. Если модель не помещается, проверьте лимит WSL/Docker и свободную RAM Windows; не отдавайте контейнеру всю память системы. Команда ollama ps может пока показать пустой список: загрузка файла на диск ещё не означает загрузку модели в память.

qwen3:4b занимает около 2,5 ГБ на диске; для её работы нужна дополнительная память. Если даже короткий чат не запускается, для диагностики можно скачать qwen3:0.6b. Это проверка работоспособности, а не равноценная замена 4B для вопросов по документам:

PowerShell
docker exec local-ai-demo ollama pull qwen3:0.6b

Для такого теста выберите qwen3:0.6b в обычном чате. Чтобы пройти основной маршрут, вернитесь к qwen3:4b и повторите проверки фактов по регламенту. Слабая модель может успешно загрузиться и всё равно выдумывать ответы. Не меняйте bge-m3 на чат-модель: у неё другая задача.

Шаг 7. Создайте локальную учётную запись

В Open WebUI нажмите регистрацию, задайте адрес, имя и уникальный пароль. Это учётная запись именно вашей установки; первый пользователь получает права администратора. В новом чате выберите qwen3:4b в списке моделей и отправьте: «Ответь одним предложением: что такое локальная модель?».

Если модели в списке нет, откройте Settings → Admin → Connections. Для Ollama внутри этого контейнера адрес — http://127.0.0.1:11434. Сохраните подключение и обновите список моделей.

Шаг 8. Подготовьте проверочный документ

Создайте небольшой файл с вымышленными данными. Так вы сможете проверить ответ, не рискуя внутренними документами.

PowerShell
@"
Регламент команды «Север».
По рабочим дням заявки принимаем с 09:00 до 18:00.
Ответственный за возвраты — Анна.
Возврат согласуется в течение трёх рабочих дней.
"@ | Set-Content -Path reglament.txt -Encoding UTF8

Шаг 9. Настройте локальный поиск и загрузите файл

До загрузки документа откройте Settings → Admin Settings → Documents. Выберите Embedding Model Engine: Ollama, Embedding Model: bge-m3. Для встроенной Ollama адрес соединения http://127.0.0.1:11434 указывается внутри настроек сервера Open WebUI, а не в браузере. Сохраните настройки. Если интерфейс предлагает отдельный адрес Ollama для embeddings, используйте тот же внутренний адрес.

Теперь откройте Workspace → Knowledge, создайте базу «Тестовый регламент», загрузите reglament.txt и дождитесь завершения обработки. Если файл уже обработали другой embedding-моделью, выполните повторную индексацию после смены настроек; для этого учебного файла проще создать новую базу и загрузить его заново. Старый индекс автоматически не превращается в индекс новой модели.

Шаг 10. Задайте вопрос именно по документу

Откройте Workspace → Models и создайте предустановку «Локальный регламент» с базовой моделью qwen3:4b. В редакторе предустановки, в разделе Capabilities, включите File Upload и File Context, выключите Builtin Tools и сохраните настройки. Нужен ответ по найденным фрагментам, без зависимости от вызова инструментов маленькой моделью. Названия переключателей зависят от версии Open WebUI. Затем откройте новый чат, выберите «Локальный регламент», введите # и прикрепите базу «Тестовый регламент» именно к этому чату. Не ограничивайтесь назначением базы предустановке или папке: в режиме Native это может требовать вызова инструментов и не передать текст автоматически.

Запрос
Отвечай только по прикреплённому регламенту. Укажи источник. Если информации нет, скажи, что её нет в документе. Кто отвечает за возвраты и сколько времени занимает согласование?

Ожидаемый ответ: Анна; три рабочих дня. Сверьте цитату с reglament.txt. В новом чате прикрепите ту же базу и спросите: «Какой штраф за задержку возврата?». В регламенте этого нет, поэтому нужен ответ «не указано», а не придуманная сумма. Если модель выдумала штраф или ответила без источника, проверка не пройдена; не загружайте рабочие документы до устранения ошибки.

Шаг 11. Проверьте локальность

После загрузки обеих моделей и обработки документа отключите интернет. В новом чате снова прикрепите базу через # и повторите оба вопроса. Если запрос не работает, проверьте, не выбраны ли внешние модели для ответов или embeddings. Затем измените в тестовом файле срок с трёх на пять дней, обработайте новую версию и проверьте ответ в новом чате: он должен опираться на пять дней, а не на старую историю.

Шаг 12. Остановите и снова запустите помощника

PowerShell
docker stop local-ai-demo
docker start local-ai-demo

Снова откройте интерфейс и проверьте, что учётная запись, чат и база знаний сохранились. Они находятся в томе local-ai-demo-data, модели — в local-ai-demo-models. Не удаляйте эти тома: удаление уничтожит соответствующие данные.

Измерьте скорость и отделите ошибку поиска от модели

Отправьте один короткий вопрос в обычном чате и запишите время до окончания ответа. Повторите его в новом чате с той же моделью: первый запуск может включать загрузку весов. Затем прикрепите базу и задайте вопрос про Анну. Сравнивайте отдельно скорость обычного ответа и ответа по документу; размер файла модели не определяет оба результата.

Если простой чат работает, но ответ по регламенту неверный, сначала откройте использованный источник и проверьте, есть ли там строка про Анну. Нет правильного фрагмента - разбирайте извлечение текста, embeddings и прикрепление базы. Фрагмент правильный, ответ ошибочный - проверяйте запрос и модель ответов. Увеличение модели не восстановит отсутствующий текст.

PowerShell
docker exec local-ai-demo ollama ps
docker stats --no-stream local-ai-demo
docker logs --tail 60 local-ai-demo

В этом примере нет параметра --gpus, поэтому CPU в выводе ожидаем. Видеокарта, которая ускоряет нативную Ollama в Windows, не подключается автоматически к контейнеру. Не публикуйте логи без удаления секретов и содержимого документов.

Если что-то не работает

  • Port is already allocated: замените в команде 3000 на свободный порт, например 3001, и открывайте его в браузере.
  • Имя контейнера занято: проверьте docker ps -a. Для нового независимого теста используйте другое имя и отдельные имена томов.
  • Чат отвечает, но не по документу: проверьте завершение индексации и прикрепление базы через #. Начните с короткого TXT, а не скана PDF.
  • Очень медленно: уменьшите модель или используйте короткий документ. Docker должен иметь достаточно RAM; нехватку памяти смотрите в логах.
  • Не работает без интернета: проверьте, что уже скачаны и языковая, и embedding-модель, а облачные провайдеры и веб-поиск отключены.
  • Docker не видит Server: запустите Docker Desktop, дождитесь готовности и проверьте Linux-контейнеры. Если приложение не стартует, вернитесь к версии Windows, WSL и виртуализации; повторный docker run не помогает.
  • Модель есть в Windows, но отсутствует здесь: контейнер использует свой том local-ai-demo-models. Загрузка в нативную Ollama или LM Studio не скачивает её в контейнер автоматически.
  • После изменения файла ответ старый: обработайте новую версию, прикрепите её к новому чату и проверьте источник. История прошлого разговора не доказывает обновление индекса.
  • Русские буквы повреждены уже в источнике: откройте reglament.txt как UTF-8 и исправьте файл до индексации. Модель не восстановит надёжно испорченный исходный текст.

Минимальная проверка результата

Сборка готова, если браузерный чат доступен по localhost, модель отвечает, документ обработан, ответ про Анну подтверждается источником, отсутствующий штраф не выдумывается, а данные сохраняются после перезапуска. Автоматический поиск по документам здесь — RAG. Самостоятельные действия агента с файлами и аккаунтами в эту сборку не входят.

Что не подключать в первой версии

Не давайте помощнику shell, папку с паролями, весь диск и право изменять оригиналы. Не пробрасывайте интерфейс на внешний IP и не отключайте вход ради удобства. Сначала проверяйте ответы на тестовых файлах; локальная модель тоже ошибается.

Частые вопросы

Нужна ли видеокарта?

Нет, этот контейнерный пример работает на CPU. Скорость может быть низкой; для GPU нужен отдельный маршрут настройки и совместимый драйвер.

Почему документ не находится?

Проверьте завершение обработки файла, наличие bge-m3 в ollama list и выбор Ollama в настройках embeddings. Прикрепите базу через # в новом чате, включите File Context. Если сменили embedding-модель, перестройте индекс. Если документ назначен только модели или папке, в Native-режиме может понадобиться вызов инструментов; учебный маршрут избегает этой зависимости.

Это уже автономный агент?

Нет. Это локальный помощник с RAG по документам. Автономные действия потребуют отдельных инструментов, ограничений доступа и тестов.

Можно ли взять свои PDF?

Да, начните с PDF, в котором выделяется текст. Скан без текстового слоя требует OCR; сначала проверьте качество извлечения текста.

Где хранятся чаты и модели?

В отдельных Docker-томах local-ai-demo-data и local-ai-demo-models. Остановка контейнера их не удаляет; удаление томов — удаляет.

Дальше по теме

Похожие материалы