# Dify с Ollama: как собрать локальный RAG-пилот и проверить ответ

Источник: https://modelium.tech/zhurnal/dify-ollama-lokalno/

Dify можно связать с локальным Ollama через официальный плагин и собрать RAG-пилот на тестовом документе: один тип модели отвечает, другой строит векторы для поиска. Сначала проверьте, найден ли нужный фрагмент, затем — что ответ действительно следует из него. Self-hosted Dify и локальный Base URL сами по себе не доказывают отсутствие сетевого выхода; версии, ресурсы и права нужно проверить отдельно.

**Проверено по документации 3 октября 2026 года.** Ниже — протокол самостоятельной проверки, а не заявленный результат прогона Modelium. Сохраните версии Dify, плагина, Ollama, теги моделей и конфигурацию стенда до начала теста [s1](#src-s1) [s2](#src-s2) [s8](#src-s8).

## Какой результат должен получиться?

Создайте маленький документ с вымышленным фактом, например «В тестовой инструкции версии A-17 код проверки — ЯНТАРЬ». Задайте вопрос о коде и второй вопрос, ответа на который в документе нет. Пилот проходит только если поиск возвращает нужный фрагмент для первого вопроса, ответ совпадает с текстом источника, а на второй вопрос система не выдаёт уверенную выдумку. Это **план проверки**, не измерение качества модели и не гарантия безопасности.

Маршрут: тестовый документ → embedding-модель Ollama → индекс базы знаний Dify → поиск нужного фрагмента → chat-модель Ollama → ответ с проверяемой ссылкой на источник. Плагин Dify отдельно настраивает Chat и Text Embedding; в Knowledge Retrieval результаты поступают в контекст последующего LLM-узла [s1](#src-s1) [s3](#src-s3) [s6](#src-s6).

## Что подготовить до подключения?

Нужны отдельный тестовый экземпляр Dify, работающая Ollama, две выбранные локальные модели — для диалога и для embeddings — и файл без персональных данных. Официальный Docker Compose Dify запускает не один контейнер, а несколько основных и зависимых сервисов; проверьте статус через `docker compose ps` и завершите настройку администратора до теста. Документация Dify указывает системные требования для **платформы** (от 2 CPU и 4 GiB RAM), но это не минимум памяти для вашей chat- или embedding-модели: их параметры и размещение проверяются отдельно [s2](#src-s2) [s1](#src-s1).

Для Dify используйте закреплённый релиз из официальной инструкции, скопируйте `docker/.env.example` в `docker/.env`, поднимите `docker compose up -d` из каталога `docker` и проверьте состояние всех сервисов через `docker compose ps`. Выход `init_permissions` после однократной настройки ожидаем. Неподготовленный Docker Compose и открытый в интернет административный интерфейс не следует считать защищённым корпоративным развёртыванием [s2](#src-s2).

На стороне Ollama сначала проверьте фактический список локальных моделей запросом к `/api/tags`; в API Ollama указаны отдельные endpoints для генерации, списка моделей и embeddings. Не выбирайте облачный тег в предположении, что название провайдера гарантирует локальность, и не приписывайте размеру скачанных весов смысл системного требования [s8](#src-s8) [s1](#src-s1). Если модель для embeddings отсутствует, официальный README плагина приводит `ollama pull embeddinggemma` как пример загрузки; это не обещание качества для русского корпуса — проверяйте на своём наборе [s1](#src-s1).

## Как подключить Ollama к Dify без ошибки адреса?

В Dify откройте **Integrations → Model Provider**, установите официальный Ollama-плагин из Marketplace и добавьте выбранную chat-модель. Затем добавьте отдельную модель типа **Text Embedding** и назначьте её в Default Models как Embedding Model, если приложение использует настройку по умолчанию. Тип модели и точное имя должны совпадать с тем, что действительно доступно в Ollama; Dify различает default reasoning и embedding models [s3](#src-s3) [s1](#src-s1).

Укажите **Base URL корня хоста** вида `http://<доступный-хост>:11434`, **без **`**/api**`: плагин сам добавляет `/api/chat`, `/api/generate` или `/api/embed`. Адрес должен быть доступен из контейнера Dify, а не только из браузера автора. `localhost` внутри контейнера Dify не равен `localhost` машины с Ollama; README плагина предлагает достижимый host address, например `host.docker.internal` или адрес локальной сети, но конкретный адрес нужно проверить в своей Docker-схеме. Локальный Ollama не требует облачного API-ключа; для Ollama Cloud плагин требует ключ, а облако здесь не является частью пилота [s1](#src-s1).

Если Dify сообщает `connection refused`, не отключайте защиту и не публикуйте Ollama API наружу. Сначала сверяйте: процесс Ollama, порт, адрес **из сети контейнера**, правила доступа и фактический URL без повторённого `/api`. Исправление сетевого пути не равняется доказательству отсутствия других исходящих соединений [s1](#src-s1) [s8](#src-s8).

## Как проверить базу знаний до ответа модели?

В **Knowledge → Create** сделайте готовую базу знаний и загрузите только тестовый файл. Посмотрите предварительную разбивку на фрагменты, задайте режим индексации и дождитесь завершения обработки. Для этих шагов Dify отдельно описывает upload, chunk settings, indexing и статус обработки; успешная загрузка файла ещё не означает успешный поиск [s4](#src-s4).

Откройте **Retrieval Testing** и введите вопрос «Какой код проверки указан для A-17?». Сохраните точный запрос, найденный фрагмент, заголовок документа и использованные параметры. Затем спросите о несуществующем коде B-99. Если нужный фрагмент не найден, меняйте разбиение, индекс или настройки поиска и повторяйте тест; настройка, изменённая в Retrieval Testing, **временная** и не переносится в приложение автоматически [s5](#src-s5) [s4](#src-s4). Не называйте отсутствие релевантного фрагмента «галлюцинацией LLM»: на этом этапе ошибается или пустует поиск, модель ещё не получала правильный контекст.

## Как получить ответ с проверяемым контекстом?

Для простого пилота создайте приложение Chatbot, подключите базу знаний в **Context**, включите **Citation and Attribution** и проверьте вопросы в **Debug and Preview** до публикации приложения — это последовательность, описанная Dify [s7](#src-s7). Если нужен явный Chatflow, соберите **User Input → Knowledge Retrieval → LLM → Answer**: в Knowledge Retrieval выберите запрос и базу знаний, а переменную `result` передайте в **Context** узла LLM. В chatflow цитирование ответов по базе знаний включено по умолчанию, но может быть отключено в Features; наличие красивого ответа без проверенного `result` не подтверждает RAG [s6](#src-s6).

Задайте модели ограничение: отвечать только по найденному фрагменту и прямо говорить, если данных недостаточно. Затем сравните три артефакта: текст исходного документа, выдачу Retrieval Testing или результат Knowledge Retrieval, и финальный ответ с указанием источника. Если ответ верный, но нужного фрагмента нет среди результатов, пилот **не засчитывается**: модель могла воспользоваться общей памятью или угадать демонстрационное слово. Повторите с другим случайным кодом, которого модель не могла знать заранее. Это собственный критерий редакции, а не документированная гарантия Dify.

## Что остаётся неподтверждённым?

Положительный ответ на одном вымышленном документе не подтверждает качество русского поиска, безопасность корпоративных документов или полную офлайн-изоляцию. Плагин поддерживает локальные и облачные модели, а развертывание Dify включает отдельные сервисы и плагины; происхождение каждого вызова проверяйте в журнале и сетевом тесте, а не по слову «local» в UI [s1](#src-s1) [s2](#src-s2). Реальные права доступа, обновление документов, проверку цитат и отказ на запрос без ответа нужно тестировать на данных и в пределах политики организации. Modelium здесь не запускал стек и не измерял его скорость, качество или потребление памяти.

**Следующий шаг:** перенесите два вопроса в маленький набор с ручной разметкой релевантных фрагментов и пройдите [протокол проверки качества RAG](/zhurnal/ocenka-kachestva-rag/). По отдельному [гайду проверки офлайн-контура](/zhurnal/proverka-offline-kontura-ii/) можно исследовать сетевой выход, но он не заменяет оценку поиска и ответа [s5](#src-s5) [s6](#src-s6).

## Источники

1. [Dify Ollama plugin — README, закреплённая ревизия](https://github.com/langgenius/dify-official-plugins/blob/60fd178450bf76fa651f348113a9bc93783dd1ee/models/ollama/README.md) — получено 2026-10-03
2. [Dify — развёртывание Docker Compose, закреплённая ревизия](https://github.com/langgenius/dify-docs/blob/01f1cb6979de8cb8b3c5c73bc9e975ee147a095d/en/self-host/deploy/quick-start/docker-compose.mdx) — получено 2026-10-03
3. [Dify — Model Providers и модель индекса, закреплённая ревизия](https://github.com/langgenius/dify-docs/blob/01f1cb6979de8cb8b3c5c73bc9e975ee147a095d/en/self-host/use-dify/workspace/model-providers.mdx) — получено 2026-10-03
4. [Dify — создание базы знаний и ожидание индексации](https://github.com/langgenius/dify-docs/blob/01f1cb6979de8cb8b3c5c73bc9e975ee147a095d/en/self-host/use-dify/knowledge/create-knowledge/introduction.mdx) — получено 2026-10-03
5. [Dify — Retrieval Testing и временные параметры](https://github.com/langgenius/dify-docs/blob/01f1cb6979de8cb8b3c5c73bc9e975ee147a095d/en/self-host/use-dify/knowledge/test-retrieval.mdx) — получено 2026-10-03
6. [Dify — Knowledge Retrieval node и Context LLM](https://github.com/langgenius/dify-docs/blob/01f1cb6979de8cb8b3c5c73bc9e975ee147a095d/en/self-host/use-dify/nodes/knowledge-retrieval.mdx) — получено 2026-10-03
7. [Dify — подключение базы знаний к приложению](https://github.com/langgenius/dify-docs/blob/01f1cb6979de8cb8b3c5c73bc9e975ee147a095d/en/self-host/use-dify/knowledge/integrate-knowledge-within-application.mdx) — получено 2026-10-03
8. [Ollama — локальные API, список моделей и embeddings](https://github.com/ollama/ollama/blob/42e911bc3d05798cad729cb474bf62f378cb2e26/docs/api.md) — получено 2026-10-03
