Графовая база данных Neo4j для GraphRAG: установка, Cypher, векторы, операции.

Графы, Cypher, векторы и усиление операций.

Содержимое страницы

Neo4j — это то, что вы выбираете, когда связи и есть данные. Если ваша предметная область выглядит как доска с кружками и стрелками, то попытка запихнуть её в таблицы будет болезненной.

Neo4j моделирует эту картину как граф свойств и запрашивает его с помощью Cypher.

Инфраструктура графов и данных

Это руководство охватывает области применения Neo4j, поведение ACID, сравнение Neo4j с Amazon Neptune и TigerGraph (и аналогами), GraphRAG с векторными индексами, способы установки для локальной разработки и продакшена, настройки портов и neo4j.conf, а также готовые шаблоны Cypher и Python.

Для более широкого контекста выбора инфраструктуры данных см. раздел Инфраструктура данных для систем ИИ.

Для чего используется Neo4j в продакшен-нагрузках графов

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

Модель данных графа свойств с узлами, связями и атрибутами

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

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

Язык запросов Cypher для сопоставления паттернов без «супа из JOIN»

Cypher — это декларативный язык, построенный вокруг сопоставления паттернов. Вы описываете формы подграфов, а планировщик выполняет их.

Если SQL занимается множествами, то Cypher — подграфами. Это имеет значение для многошаговых обходов, запросов путей, рекомендаций, отслеживания происхождения и вопросов типа «кто что трогал через какую систему».

Соответствует ли Neo4j принципам ACID и почему это важно

Соответствует ли Neo4j принципам ACID? Да. Создание или обновление связей затрагивает целостную структуру; база данных сохраняет эту согласованность при сбоях и параллельных операциях.

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

Neo4j против Amazon Neptune против TigerGraph: сравнение от старшего инженера

Вопрос «Neo4j против X» обычно означает: «В какой экосистеме мы будем жить годами?».

Краткий, субъективный взгляд — о времени разработки, а не о слайдах с бенчмарками.

Продукт Основная модель и стиль запросов Где выигрывает Где проигрывает
Neo4j Граф свойств и Cypher Отличная эргономика для связанных данных, зрелые инструменты, граф плюс векторный поиск Моделирование графа — это навык, в который нужно инвестировать
Amazon Neptune Управляемый граф на AWS (Gremlin, openCypher, SPARQL для RDF) Контракты и операции, ориентированные на AWS Смешение языков запросов может ощущаться как диктат платформы
TigerGraph GSQL и паттерны, связанные с OpenCypher Аналитические рабочие нагрузки и подходы к компиляции запросов Другая ментальная модель; не везде можно использовать Cypher как drop-in
JanusGraph Распределенный граф с внешними бэкендами хранения Open source с подключаемыми бэкендами Вы сами управляете стеком бэкенда
ArangoDB Мульти-модельная (документы, KV, граф) Одна база данных для смешанных структур Глубина графовых функций варьируется по сравнению с графо-ориентированными движками
Memgraph Граф свойств, совместим с Cypher Потоковые и свежие данные Поведение движка отличается; совместимость не означает идентичность

Что нужно решить перед выбором графовой базы данных

Сначала выберите язык запросов и модель операций.

Если ваша команда хочет Cypher и графо-ориентированный рабочий процесс, Neo4j — сильный вариант по умолчанию. Если у вас уже есть опыт работы с Gremlin, подойдут Neptune или JanusGraph. Если вам нужна одна мульти-модельная хранилище, ArangoDB может сократить количество компонентов.

Будьте честны насчет операций. Фраза «мы запустим распределенный бэкенд хранения» легко сказать, пока вас не разбудят в 03:00 из-за проблем с компакцией или давления на JVM.

Neo4j для RAG и GraphRAG: векторный поиск плюс контекст графа

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

Как GraphRAG улучшает генерацию с расширенным поиском? Он использует граф для извлечения структурированного контекста — сущностей, связей, окрестностей, — который часто упускается при простом поиске по схожести, что помогает заземлению и надежности.

Векторный индекс Neo4j для поиска по схожести эмбеддингов

Может ли Neo4j выполнять векторный поиск для RAG? Да. Neo4j поддерживает векторные индексы для поиска по схожости эмбеддингов (обычно поиск приближенных ближайших соседей типа HNSW).

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

Использование подзапроса SEARCH для паттернов, ограниченных векторами

Подзапрос SEARCH в Neo4j позволяет ограничить паттерн MATCH в Cypher с помощью приближенных ближайших соседей из векторного индекса. Это эргономичный мост для гибридного поиска.

Практический паттерн: векторный поиск для кандидатов, затем расширение графа для контекста, фильтров и объяснений.

GraphRAG на Python с neo4j-graphrag

Пакет neo4j-graphrag для Python связывает драйвер, retriever и интерфейс LLM в поток GraphRAG. Вы все еще можете использовать внешние векторные хранилища, если хотите разделить ответственность.

Как установить Neo4j локально и в продакшене

Как установить Neo4j локально? Выберите вариант, соответствующий вашему профилю рисков.

Установка Neo4j с Docker для локальной разработки

Docker — самый быстрый путь к повторяемому серверу.

# Минимальный запуск. Данные НЕ сохраняются между перезапусками.
docker run \
  --restart always \
  --publish=7474:7474 --publish=7687:7687 \
  neo4j:5

Для реальной работы установите начальный пароль и подключите том данных.

docker run \
  --restart always \
  --publish=7474:7474 --publish=7687:7687 \
  --env NEO4J_AUTH=neo4j/ваш_пароль \
  --volume=$HOME/neo4j/data:/data \
  neo4j:5

Docker Compose для удобной настройки команды

services:
  neo4j:
    image: neo4j:5
    ports:
      - "7474:7474"
      - "7687:7687"
    environment:
      - NEO4J_AUTH=neo4j/ваш_пароль
    volumes:
      - $HOME/neo4j/logs:/logs
      - $HOME/neo4j/config:/config
      - $HOME/neo4j/data:/data
      - $HOME/neo4j/plugins:/plugins
    restart: always

Neo4j Desktop

Neo4j Desktop отлично подходит для прототипирования и обучения — проекты, GUI, локальные экземпляры. Для CI и интеграционных тестов обычно выигрывает Docker.

Серверы Linux, Windows или macOS

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

Neo4j AuraDB (управляемая)

Если вы предпочитаете выпускать продукт, а не управлять базами данных, AuraDB — это облачный управляемый вариант Neo4j.

Kubernetes с Helm

Если платформа — Kubernetes, используйте развертывание на основе Helm и экспонируйте Bolt и HTTP через сервисы. Разворачивайте базы данных на K8s только если ваша организация может надежно управлять состоянием там.

Основы настройки Neo4j: порты, коннекторы и neo4j.conf

Настройки хранятся в neo4j.conf (ключ=значение, # комментарии). Строгая валидация помогает отлавливать опечатки до начала обслуживания трафика.

Порты и коннекторы Neo4j по умолчанию

Какие порты Neo4j используются по умолчанию? Bolt 7687, HTTP 7474, HTTPS 7473 по умолчанию. В продакшене экспонируйте только то, что нужно; часто это Bolt в частной сети и ограниченный доступ к HTTP-интерфейсу.

Пример усиления настроек (адаптируйте IP и TLS под вашу среду):

server.bolt.listen_address=10.0.1.10:7687
server.http.listen_address=127.0.0.1:7474
server.https.enabled=true
server.https.listen_address=10.0.1.10:7473

Настройки транзакций, ограничивающие безграничный ущерб

Полезные рычаги при ревью включают db.transaction.timeout для бесконечных запросов и db.transaction.concurrent.maximum для предотвращения «грохота толпы» (thundering herd).

db.transaction.timeout=10s
db.transaction.concurrent.maximum=1000

Практические примеры Cypher и векторных индексов для RAG

Создание векторного индекса и сохранение эмбеддингов

CREATE VECTOR INDEX doc_embeddings
FOR (d:Document) ON (d.embedding)
OPTIONS {indexConfig: {
  `vector.dimensions`: 1536,
  `vector.similarity_function`: "cosine"
}};

Векторный поиск и расширение графа

  1. Векторный поиск для поиска узлов-кандидатов.
  2. Обход для соседей, происхождения и ограничений.
  3. Форматирование контекста для LLM с четкими границами.

Пример использования SEARCH внутри MATCH (синтаксис может незначительно отличаться в зависимости от версии Neo4j — проверьте документацию для вашей версии сервера):

MATCH (d:Document)
  SEARCH d IN (
    VECTOR INDEX doc_embeddings
    FOR $queryEmbedding
    LIMIT 10
  ) SCORE AS score
MATCH (d)-[:MENTIONS]->(e:Entity)
RETURN d.id AS doc_id, score, collect(distinct e.name) AS entities
ORDER BY score DESC
LIMIT 5;

Минимальный GraphRAG на Python

from neo4j import GraphDatabase
from neo4j_graphrag.retrievers import VectorRetriever
from neo4j_graphrag.embeddings import OpenAIEmbeddings
from neo4j_graphrag.llm import OpenAILLM
from neo4j_graphrag.generation import GraphRAG

driver = GraphDatabase.driver("neo4j://localhost:7687", auth=("neo4j", "пароль"))

embedder = OpenAIEmbeddings(model="text-embedding-3-large")
retriever = VectorRetriever(driver, "doc_embeddings", embedder)

llm = OpenAILLM(model_name="gpt-4o", model_params={"temperature": 0})

rag = GraphRAG(retriever=retriever, llm=llm)

response = rag.search(query_text="Как выполнить поиск по схожести в Neo4j?", retriever_config={"top_k": 5})
print(response.answer)

Реальные кейсы использования Neo4j: мошенничество, рекомендации и графы знаний

Обнаружение мошенничества и графы рисков

Мошенничество редко ограничивается одной строкой. Это паттерны между учетными записями, устройствами, IP-адресами, продавцами, идентификаторами и временем. Графы выражают окрестности и многошаговые пути без лабиринтов из десяти JOIN.

Рекомендации с учетом поведения и явных связей

Продакшен-рекомендации сочетают оцененных кандидатов с ассортиментом, ограничениями, иерархиями и объяснимостью. Графы помогают возвращать пути, которые люди могут логически осмыслить.

Графы знаний для RAG и агентов

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

Когда следует выбрать Neo4j вместо Amazon Neptune или TigerGraph?

Когда следует выбрать Neo4j вместо Amazon Neptune или TigerGraph? Выбирайте Neo4j для графа с приоритетом Cypher и комбинации векторов + обход в одном продукте. Выбирайте Neptune, если AWS и Gremlin или RDF соответствуют вашей организации. Выбирайте TigerGraph, если GSQL и аналитические рабочие нагрузки являются основной ставкой.

Полезные ссылки