RAG с Ollama и Qdrant как универсальная поисковая система для собственных данных

В условиях все более запутанного мира информации становится все более важным сделать собственные базы данных пригодными для целенаправленного поиска - не через классический полнотекстовый поиск, а через семантически релевантные ответы. Именно в этом и заключается принцип работы базы данных RAG - поискового решения с поддержкой искусственного интеллекта, состоящего из двух центральных компонентов:


Актуальные темы по искусственному интеллекту

  1. векторная база данных (например, Qdrant), в которой любое содержимое хранится в виде числовых векторов,
  2. и языковой модели (например, через Ollama), которая интеллектуально объединяет соответствующие запросы с подходящим контентом.

Вместо того чтобы позволять модели „угадывать“, эта архитектура использует свои собственные источники знаний - например:

  • документальные фильмы собственного сочинения,
  • Содержание веб-сайтов,
  • технические руководства,
  • Поддерживайте базы данных,
  • Списки часто задаваемых вопросов,
  • или любые архивные текстовые источники (например, из старых баз данных).

Решающий фактор: Все эти источники могут быть подготовлены заранее и „разбиты“ (т. е. разделены на небольшие текстовые блоки), чтобы впоследствии предоставить наиболее релевантные фрагменты текста для ответа на вопрос пользователя.

Хотите ли вы сделать анализируемой собственную базу знаний, внутреннюю документацию или целый архив продукции - с помощью Ollama + Qdrant Вы можете делать это на собственном Mac, без каких-либо облачных ограничений и с полным контролем над данными.

Что такое база данных RAG - и зачем вообще нужны „куски“?

RAG расшифровывается как Retrieval-Augmented Generation - другими словами, текстовый ИИ с поддержкой поиска информации. Вместо того чтобы обучать языковую модель, такую как GPT, Mistral или LLaMA, только на том, что она уже „знает“, она может получить доступ к дополнительной информации через подключенную базу знаний (обычно так называемую векторную базу данных).

Пример:

Если вы спросите языковую модель: „Что содержится в моей налоговой декларации за 2023 год?“, ей придется гадать, не имея доступа к исходным данным. Однако если у нее есть доступ к локально хранящемуся векторному представлению этого документа, она может получить соответствующую информацию и включить ее в свой ответ.

Почему контент „разбивается на куски“

Документы, веб-сайты или книги обычно слишком длинные, чтобы их можно было обработать или найти за один раз. Современные языковые модели также имеют ограничения по количеству лексем - то есть ограниченный объем текста, который они могут понять за один раз (часто около 4 000-8 000 лексем, а в новых моделях даже 32 000 и более).

Поэтому в RAG используется следующий прием:

  1. Оригинальный текст разделен на небольшие части (chunks).
  2. Каждый фрагмент преобразуется в вектор с помощью языковой модели (встраивание).
  3. Эти векторы хранятся в базе данных, например Qdrant.
  4. Когда пользователь делает запрос, подсказка также переводится в вектор - и из нее извлекаются наиболее похожие фрагменты.
  5. Затем этот контент добавляется в языковую модель - например, с помощью системной подсказки или контекстной инъекции.

Это создает систему, которая ведет себя как память - но без классических ключевых слов или полнотекстового поиска, а исключительно на основе смысла (семантики).

Требования и цель

Мы создаем местную систему RAG, состоящую из:

  • местный LLM через Ollama
  • база данных векторов под названием Qdrant
  • скрипт на Python, который разбивает тексты на куски, векторизует их и вставляет в базу данных
  • Дополнительно: простой интерфейс или API для запросов

Целевая платформа: macOS (Intel или Apple Silicon)

Это обязательное условие:

  • macOS 12 или новее (Monterey или выше)
  • Базовые знания о терминалах
  • Python 3.10 или новее
  • Дополнительно: Homebrew installiert

Шаг 1: Ollama 1TP12Animal

Ollama - это инструмент, позволяющий запускать локальные языковые модели, такие как Mistral, LLaMA, Gemma или Codellama, на вашем собственном компьютере - даже без интернета.

Установка на Mac:

curl -fsSL https://ollama.com/install.sh | sh

Кроме того, Ollama может быть назначен через Homebrew install:
brew install оллама

После установки:

ollama run mistral

Это загружает модель Mistral 7B и запускает ее локально. Ollama поставляется с REST API, который мы будем использовать позже для векторизации. Конечно, вы можете использовать и другие модели, такие как Gemma3 (12B), Mistral Small (24B) или другие LLM.

Шаг 2: животные Qdrant 1TP12 (локальная база данных векторов)

Qdrant - это молниеносная векторная база данных на основе Rust. Она бесплатна, имеет открытый исходный код и легко запускается на Mac - предпочтительно через Docker. Если вы еще не установили Docker на свой Mac 1TP12, вы можете загрузить его с сайта Веб-сайт Docker бесплатно и запустить его на Mac как обычное приложение для рабочего стола installieren. Кроме того, вы можете установить Docker через Homebrew install, если вы уже используете Homebrew:

brew install --cask docker

Затем запустите Qdrant через Docker:

docker run -p 6333:6333 -v qdrant_storage:/qdrant/storage qdrant/qdrant

С Qdrant можно связаться по адресу

http://localhost:6333

Для тестирования:

curl http://localhost:6333/collections

Шаг 3: Подготовьте среду Python

Нам нужен Python для чанкинга, встраивания и взаимодействия с Qdrant.

Подготовка:

python3 -m venv rag-env
source rag-env/bin/activate
pip install qdrant-client sentence-transformers ollama numpy

Если ollama не распознается как пакет Python, используйте REST API напрямую через запросы:

pip install requests

Шаг 4: Расщепление и встраивание

Ниже приведен пример скрипта, который разбивает текстовый документ на фрагменты, создает вкрапления с помощью Ollama и вставляет их в Qdrant:

import requests
from qdrant_client import QdrantClient
from qdrant_client.models import PointStruct
import uuid

# Konfiguration
CHUNK_SIZE = 500 # Zeichen
COLLECTION_NAME = "mein_rag_wissen"

# Text vorbereiten
with open("mein_text.txt", "r") as f:
text = f.read()

chunks = [text[i:i+CHUNK_SIZE] for i in range(0, len(text), CHUNK_SIZE)]

# Qdrant vorbereiten
client = QdrantClient("localhost", port=6333)

# Neue Collection anlegen (falls noch nicht vorhanden)
client.recreate_collection(
collection_name=COLLECTION_NAME,
vectors_config={"size": 4096, "distance": "Cosine"}
)

def get_embedding_ollama(text):
response = requests.post(
"http://localhost:11434/api/embeddings",
json={"model": "mistral", "prompt": text}
)
return response.json()["embedding"]

# Embeddings erzeugen und in Qdrant speichern
points = []
for i, chunk in enumerate(chunks):
vector = get_embedding_ollama(chunk)
points.append(PointStruct(
id=str(uuid.uuid4()),
vector=vector,
payload={"text": chunk}
))

client.upsert(collection_name=COLLECTION_NAME, points=points)
print(f"{len(points)} Chunks erfolgreich eingefügt.")

Шаг 5: Запросы через семантический поиск

Теперь вы можете отправлять запросы в виде вектора в Qdrant, и он будет находить наиболее релевантные фрагменты текста:

query = "Wie funktioniert ein RAG-System?"
query_vector = get_embedding_ollama(query)

results = client.search(
collection_name=COLLECTION_NAME,
query_vector=query_vector,
limit=3
)

for r in results:
print(r.payload["text"])

Затем вы можете передать эти фрагменты в Ollama, например, через системный запрос, и они будут сформулированы как ответ, связанный с контекстом.

Чанкинг + экспорт JSON в FileMaker и другие базы данных

Во многих случаях структурирование может уже происходить в существующей базе данных - например, в FileMaker. Именно так и происходит в моей рабочей среде: исходные данные - например, содержимое веб-сайта, записи в службе поддержки или технические статьи - уже доступны в структурированном виде в FileMaker.

Вот как происходит этот процесс:

  1. Тексты делятся на части, например, по 300-500 символов, в FileMaker с помощью собственной логики разбиения на части.
  2. Каждому фрагменту присваивается свой идентификатор и, если необходимо, метаданные (название, категория, источник, язык и т. д.).
  3. Все фрагменты автоматически экспортируются в файлы JSON - например, в определенную директорию на сетевом диске или непосредственно на жесткий диск сервера AI.
  4. Сценарий Python на сервере считывает эти JSON-файлы и сохраняет их в базе данных Qdrant.

Пример экспортированного файла чанка (chunk_00017.json)

{
"id": "00017",
"text": "Dies ist ein einzelner Textabschnitt mit ca. 400 Zeichen, der aus einer größeren Quelle stammt. Er wurde in FileMaker vorbereitet und enthält alle relevanten Inhalte, die für eine semantische Suche benötigt werden.",
"metadata": {
"source": "support_center",
"category": "Fehlermeldung",
"language": "de",
"title": "Drucker wird nicht erkannt"
}
}

Последующий сценарий импорта может выполняться автоматически или регулярно через терминал - например, с помощью задания cron или ручного вызова:

python3 import_json_chunks.py /Users/markus/Desktop/chunks/

Скрипт считывает каждый JSON-фрагмент, генерирует соответствующий вектор (например, с помощью Ollama или SentenceTransformers) и передает запись в базу данных Qdrant.

Этот метод не только прозрачен, но и прекрасно сочетается с существующими ИТ-структурами - особенно в компаниях, которые уже используют FileMaker или предпочитают централизованно и визуально контролировать все процессы для их наглядности.

Подключите все базы данных к локальному ИИ

С помощью Ollama и Qdrant можно за короткое время создать на Mac полноценную высокопроизводительную систему RAG:

  • Локально, без облака или подписки
  • Возможность расширения за счет собственного контента
  • Безопасность данных, поскольку ничто не покидает компьютер
  • Эффективность, поскольку Qdrant остается быстрым даже при работе с большими объемами данных

Если вы хотите использовать свой ИИ не просто для общения, а как настоящую систему знаний и памяти, эта комбинация просто необходима. И это работает без особых усилий - с полным контролем над вашими собственными данными.


Текущий обзор использования локальных систем искусственного интеллекта

Что вы думаете о локальном программном обеспечении ИИ, таком как MLX или Ollama?

Перспективы: Что возможно с RAG, Ollama и Qdrant

Описанная в этой статье установка создает техническую основу для нового способа работы со знаниями - локального, контролируемого и гибко расширяемого. Но путешествие на этом ни в коем случае не заканчивается. Разобравшись во взаимодействии чанкинга, встраивания, семантического поиска и языковых моделей, вы быстро поймете, насколько универсальна эта архитектура на практике.

1. подключение к собственным базам данных

Будь то FileMaker, MySQL, PostgreSQL или MongoDB - любой контент можно регулярно извлекать, разбивать на фрагменты и автоматически вставлять в векторную базу данных с помощью целевых запросов. Таким образом, классическая база данных превращается в источник знаний с возможностью семантического поиска. Особенно в системах поддержки, архивах продуктов или электронных библиотеках, это открывает совершенно новые возможности доступа для сотрудников или клиентов.

2. автоматический импорт веб-страниц, PDF-файлов или документов

Контент не обязательно переносить вручную. С помощью таких инструментов, как BeautifulSoup, readability, pdfplumber или docx2txt, можно автоматически импортировать целые веб-сайты, PDF-руководства или документы Word, преобразовать их в текстовую форму и подготовить к разбивке на части. Например, технические вики, клиентские порталы или онлайн-документация могут регулярно обновляться и вноситься в базу данных RAG.

3. формирование долгосрочных знаний посредством структурирования

В отличие от классического приложения искусственного интеллекта, которое при каждом вопросе начинает с нуля, система RAG позволяет поэтапно расширять и пополнять базовые знания. Целенаправленный отбор и подготовка фрагментов создает собственную семантическую память, которая становится все более ценной с каждой записью.

4. связь с графами знаний (Neo4j)

Если вы хотите сделать еще один шаг вперед, вы можете не только хранить информацию семантически, но и связывать ее логически. С помощью Neo4j, базы данных графов, отношения между терминами, людьми, темами или категориями могут быть визуализированы и запрошены особым образом. Таким образом, коллекция текстов превращается в структурированный граф знаний, который может быть использован как человеком, так и искусственным интеллектом - например, для визуализации причинно-следственных цепочек, временных последовательностей или тематических кластеров.

5. использовать в собственных инструментах, приложениях или чат-ботах

После настройки логика RAG может быть интегрирована практически в любое приложение: как функция семантического поиска во внутреннем веб-приложении, как интеллектуальный инструмент ввода в CRM-системе или как чат-бот с собственным опытом на сайте компании. Благодаря использованию локальных API (например, Ollama REST и Qdrant gRPC) все компоненты остаются гибкими и расширяемыми - даже за пределами традиционных границ компании.

Те, у кого хватит смелости ознакомиться с этими инструментами, создают основу для независимых, локальных систем ИИ с реальной полезной ценностью - в духе контроля, суверенитета и технической ясности.


Актуальные темы, связанные с программным обеспечением ERP

Часто задаваемые вопросы о RAG с Ollama + Qdrant

1. Что такое база данных RAG - и для чего она нужна?

База данных RAG (Retrieval Augmented Generation) объединяет векторную базу данных с языковой моделью. Это позволяет сделать ваш собственный контент - например, документацию или веб-сайты - семантически поисковым, чтобы модели искусственного интеллекта могли обращаться к соответствующим разделам вашей собственной базы данных.

2 Что означает слово „chunking“ в данном контексте?

Чанкинг означает разбиение длинных текстов на более мелкие, осмысленно связные части (чанки) - обычно от 200 до 500 символов. Это позволяет эффективно сохранять отдельные фрагменты текста в векторной базе данных и извлекать их впоследствии при возникновении вопросов.

3. почему нельзя просто сохранять целые тексты в Qdrant?

Поскольку модели ИИ и векторный поиск работают с ограниченным объемом текста. Большие документы могут „скрыть“ важное содержание или сделать его неточным. Чанкинг повышает точность, поскольку сравниваются конкретные фрагменты, а не целые тексты.

4. могу ли я использовать материалы из любого источника?

Да, если у вас есть тексты в редактируемом виде (например, в виде обычного текста, HTML, Markdown, PDF, записей FileMaker и т. д.), вы можете подготовить их, разбить на куски и интегрировать в Qdrant. Также возможно использование смешанных источников.

5. нужно ли мне уметь программировать, чтобы создать такую систему?

Базовые знания Terminal и Python полезны, но не обязательны. Многие шаги (например, разбивка на части в FileMaker, экспорт JSON) могут быть реализованы визуально и автоматически. Сценарий импорта Qdrant можно легко настроить.

6. могу ли я управлять несколькими документами или категориями?

Да, каждый фрагмент может содержать метаданные - например, название, источник, язык или категорию. Они могут быть учтены при поиске для более точной фильтрации результатов.

7 Какие модели подходят для генерации встраивания?

Вы можете использовать либо локальную модель через Ollama (например, mistral, llama2, gemma), либо отдельную модель встраивания, например, all-MiniLM из предложения-трансформера. Важно, чтобы модель генерировала результаты встраивания в виде векторов.

8. Как запустить Qdrant на Mac?

Самый простой способ - через команду Docker:

docker run -p 6333:6333 -v qdrant_storage:/qdrant/storage qdrant/qdrant

Затем Qdrant запускается под управлением http://localhost:6333.

9. насколько большими могут быть объемы моих данных?

Qdrant очень производительна и может легко управлять десятками или сотнями тысяч чанков. Основным ограничением является объем оперативной памяти и пространства для хранения, а не их количество.

10. Работает ли это также с FileMaker?

Да, вы можете выполнить все операции по экспорту чанков и JSON непосредственно в FileMaker. Чанки экспортируются в отдельные JSON-файлы, которые затем импортируются в Qdrant с помощью сценария Python - совершенно независимо от исходной системы.

11. Могу ли я запустить это на другом сервере вместо Mac?

Безусловно. Эта система также работает на серверах Linux, Raspberry Pi или в облаке (при желании). Docker делает ее независимой от платформы. Для продуктивного использования обычно рекомендуется сервер с большим объемом оперативной памяти и поддержкой GPU.

12. Как совместить векторный поиск с Ollama?

Сначала вы создаете вектор вопроса пользователя с помощью Ollama (Embedding API), используете его для поиска наиболее релевантных фрагментов в Qdrant и передаете их языковой модели в качестве контекста. Затем Ollama обрабатывает вопрос + контекстно-значимую информацию и генерирует обоснованный ответ.

Изображение (c) geralt @ pixabay

Оставить комментарий