Baza danych grafowa Neo4j dla GraphRAG, instalacja, Cypher, wektory, operacje.

Grafy, Cypher, wektory i utwardzanie operacji.

Page content

Neo4j to narzędzie, do którego sięgamy, gdy relacje są danymi. Jeśli domena Twojego projektu wygląda jak tablica kreskowa z kółkami i strzałkami, wymuszanie jej na tabele jest bolesne.

Neo4j modeluje ten obraz jako graf właściwości i zapytuje go za pomocą języka Cypher.

Infrastruktura grafu i danych

Ten przewodnik obejmuje zastosowania Neo4j, zachowania ACID, porównanie Neo4j vs Amazon Neptune vs TigerGraph (i konkurentów), GraphRAG z indeksami wektorowymi, ścieżki instalacji lokalnej i produkcyjnej, porty i plik neo4j.conf oraz gotowe wzorce Cypher i Python do skopiowania.

Wszerszy kontekst dotyczący wyboru infrastruktury danych znajdziesz w filarze Infrastruktura danych dla systemów AI.

Do czego służy Neo4j w produkcyjnych obciążeniach grafowych?

Neo4j służy do danych połączonych, gdzie musisz zadawać pytania o relacje, wielokrotnie, w warunkach produkcyjnych. To bezpośrednia odpowiedź na pytanie do czego służy Neo4j w większości zespołów.

Model danych grafu właściwości z węzłami, relacjami i właściwościami

Neo4j używa modelu grafu właściwości: węzły reprezentują byty, relacje łączą węzły, a oba mogą mieć właściwości. Etykiety i typy relacji nadają strukturę, nie zamykając Cię w kruchym schemacie.

Możesz zacząć od cienkiego modelu, dostarczyć wartość i ewoluować graf w miarę pojawiania się nowych pytań.

Język zapytań Cypher dla dopasowania wzorców bez „zupy joinów"

Cypher jest deklaratywny i zbudowany wokół dopasowania wzorców. Opisujesz kształty podgrafów i pozwalasz planistowi je wykonać.

Jeśli SQL dotyczy zbiorów, Cypher dotyczy podgrafów. To ma znaczenie dla traversów wielokrokowych, zapytań ścieżkowych, rekomendacji, śledzenia pochodzenia oraz pytań typu „kto dotknął czego przez który system".

Czy Neo4j jest zgodne z ACID i dlaczego powinieneś się tym interesować?

Czy Neo4j jest zgodne z ACID? Tak. Tworzenie lub aktualizowanie relacji dotyka spójnej struktury; baza danych utrzymuje to w spójności w przypadku awarii i współbieżności.

Projektuj aplikacje grafowe wokół silnych gwarancji transakcyjnych, chyba że jesteś do tego zmuszony. To znacznie ułatwia debugowanie i rozumowanie o zachowaniu niż założenie rozmytego ostatecznego spójności.

Neo4j vs Amazon Neptune vs TigerGraph: porównanie inżyniera seniora

Pytanie „Neo4j vs X" zazwyczaj oznacza „W którym ekosystemie będziemy żyć przez lata?".

Krótki, opiniowany pogląd – o czasie inżynieryjnym, nie slajdach z benchmarków.

Produkt Model rdzeniowy i styl zapytań Gdzie wygrywa Gdzie boli
Neo4j Graf właściwości i Cypher Świetna ergonomia dla danych połączonych, dojrzałe narzędzia, graf i wyszukiwanie wektorowe Modelowanie grafu to umiejętność, w którą musisz zainwestować
Amazon Neptune Zarządzany graf na AWS (Gremlin, openCypher, SPARQL dla RDF) Kontrakty i operacje skupione na AWS Mieszanka języków zapytań może wydawać się dyktowana przez platformę
TigerGraph GSQL i wzorce powiązane z OpenCypher Obciążenia analityczne i podejścia kompilowane Inny model myślowy; nie jest to wszechstronne Cypher
JanusGraph Rozproszony graf z zewnętrznymi backendami pamięci Open source z wymiennymi backendami Ty zarządzasz stackiem backendu
ArangoDB Wielomodelowy (dokumenty, KV, graf) Jedna baza danych dla mieszanych kształtów Głębokość grafu różni się w porównaniu do silników graf-first
Memgraph Graf właściwości, kompatybilny z Cypher Przepływy strumieniowe i dane świeże Zachowanie silnika się różni; kompatybilność nie tożsama z tożsamością

Co zdecydować przed wyborem bazy danych grafowej?

Najpierw wybierz język zapytań i model operacyjny.

Jeśli Twój zespół chce Cyphera i przepływu pracy skupionego na grafie, Neo4j jest silnym domyślnym wyborem. Jeśli masz już ekspercką wiedzę na temat Gremlina, Neptune lub JanusGraph mogą się sprawdzić. Jeśli chcesz jedną magazynek wielomodelowy, ArangoDB może zmniejszyć liczbę ruchomych części.

Bądź szczery co do operacji. „Będziemy uruchamiać rozproszony backend pamięci" to łatwe do powiedzenia, dopóki nie zostaniesz wybudzony o 03:00 z powodu kompaktacji lub presji na JVM.

Neo4j dla RAG i GraphRAG: wyszukiwanie wektorowe plus kontekst grafu

Wiele stosów RAG zaczyna się jako wyszukiwanie wektorowe plus prompt. To działa, dopóki nie potrzebujesz śledzenia pochodzenia, rozwiązywania bytów, kontekstu wielokrokowego lub jednoznacznego rozróżniania – wtedy ryzykujesz budowanie grafu wiedzy w kodzie aplikacji.

Jak GraphRAG poprawia generowanie uzupełnione odzyskiwaniem (RAG)? Używa grafu do pobrania strukturalnego kontekstu – bytów, relacji, sąsiedztw – których same podobieństwa często nie wychwycą, co pomaga w uziemieniu i wiarygodności.

Indeks wektorowy Neo4j do wyszukiwania podobieństwa osadzeń (embeddingów)

Czy Neo4j potrafi wyszukiwanie wektorowe dla RAG? Tak. Neo4j obsługuje indeksy wektorowe do podobieństwa w osadzeniach (zazwyczaj HNSW-style przybliżone wyszukiwanie najbliższych sąsiadów).

Wektory znajdują „rzeczy, które wyglądają podobnie". Same w sobie nie kodują „w jaki sposób są powiązane" w Twojej domenie. Neo4j pozwala połączyć podobieństwo z traversami.

Używanie podklauzuli SEARCH do dopasowania wzorców z ograniczeniami wektorowymi

Podklauzula SEARCH w Neo4j pozwala ograniczyć wzorzec MATCH w Cypher, używając trafień przybliżonych najbliższych sąsiadów z indeksu wektorowego. To jest ergonomiczny most dla hybrydowego odzyskiwania.

Praktyczny wzorzec: odzyskiwanie wektorowe dla kandydatów, a następnie rozszerzanie grafu dla kontekstu, filtrów i wyjaśnień.

GraphRAG w Pythonie z neo4j-graphrag

Pakiet neo4j-graphrag od Neo4j dla Pythona łączy sterownik, odzyskiwacz i interfejs LLM w przepływie GraphRAG. Możesz nadal używać zewnętrznych magazynów wektorowych, jeśli chcesz rozdzielić odpowiedzialności.

Jak zainstalować Neo4j lokalnie i w produkcji

Jak zainstalować Neo4j lokalnie? Dopasuj opcję do swojego profilu ryzyka.

Instalacja Neo4j z Dockerem do rozwoju lokalnego

Docker to najszybsza droga do powtarzalnego serwera.

# Minimalne uruchomienie. Dane NIE są utrzymywane między restartami.
docker run \
  --restart always \
  --publish=7474:7474 --publish=7687:7687 \
  neo4j:5

Do prawdziwej pracy ustaw począstowe hasło i zamontuj wolumin danych.

docker run \
  --restart always \
  --publish=7474:7474 --publish=7687:7687 \
  --env NEO4J_AUTH=neo4j/your_password \
  --volume=$HOME/neo4j/data:/data \
  neo4j:5

Docker Compose do konfiguracji przyjaznej zespołowi

services:
  neo4j:
    image: neo4j:5
    ports:
      - "7474:7474"
      - "7687:7687"
    environment:
      - NEO4J_AUTH=neo4j/your_password
    volumes:
      - $HOME/neo4j/logs:/logs
      - $HOME/neo4j/config:/config
      - $HOME/neo4j/data:/data
      - $HOME/neo4j/plugins:/plugins
    restart: always

Neo4j Desktop

Neo4j Desktop jest świetne do prototypowania i nauczania – projekty, interfejs graficzny, instancje lokalne. Do CI i testów integracyjnych zazwyczaj wygrywa Docker.

Serwery Linux, Windows lub macOS

Dla hostów działających długoterminowo, postępuj zgodnie z oficjalnymi ścieżkami instalacji dla systemu operacyjnego. W końcu będziesz dbać o zarządzanie usługami, logami, pamięcią, kopiami zapasowymi i aktualizacjami.

Neo4j AuraDB (zarządzane)

Jeśli wolisz dostarczanie produktu niż uruchamianie baz danych, AuraDB to zarządzana opcja chmurowa Neo4j.

Kubernetes z Helm

Jeśli platformą jest Kubernetes, użyj wdrożenia opartego na Helm i naraż porty Bolt oraz HTTP przez usługi. Wdrażaj bazy danych na K8s tylko wtedy, gdy Twoja organizacja może tam niezawodnie obsługiwać stan.

Podstawy konfiguracji Neo4j: porty, konektory i neo4j.conf

Ustawienia znajdują się w neo4j.conf (klucz=wartość, komentarze #). Ścisła walidacja pomaga wykryć literówki przed udostępnieniem ruchu.

Domyślne porty i konektory Neo4j

Jakie są domyślne porty Neo4j? Bolt 7687, HTTP 7474, HTTPS 7473 domyślnie. W produkcji narażaj tylko to, czego potrzebujesz; często Bolt na sieci prywatnej i interfejs HTTP ograniczony.

Przykład utwardzania (dostosuj IP i TLS do swojego środowiska):

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

Ustawienia transakcji ograniczające nieograniczone szkody

Użyteczne dźwignie w przeglądach obejmują db.transaction.timeout dla zbiegłych zapytań i db.transaction.concurrent.maximum, aby uniknąć efektu grzmotów.

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

Praktyczne przykłady Cypher i indeksów wektorowych dla RAG

Tworzenie indeksu wektorowego i przechowywanie osadzeń (embeddingów)

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

Odzyskiwanie wektorowe, a następnie rozszerzanie grafu

  1. Wyszukiwanie wektorowe dla kandydatów.
  2. Przejście do sąsiadów, śledzenie pochodzenia i ograniczeń.
  3. Formatowanie kontekstu dla LLM z wyraźnymi granicami.

Przykład używający SEARCH wewnątrz MATCH (składnia może się nieznacznie różnić w zależności od wersji Neo4j – sprawdź podręcznik dla wersji swojego serwera):

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;

Minimalny GraphRAG w Pythonie

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", "password"))

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="Jak wykonuję wyszukiwanie podobieństwa w Neo4j?", retriever_config={"top_k": 5})
print(response.answer)

Praktyczne przypadki użycia Neo4j: oszustwa, rekomendacje i grafy wiedzy

Wykrywanie oszustw i grafy ryzyka

Oszustwo rzadko jest jednym wierszem. To wzorce między kontami, urządzeniami, IP, sprzedawcami, tożsamościami i czasem. Grafy wyrażają sąsiedztwa i ścieżki wielokrokowe bez dziesięciokrotnych labiryntów joinów.

Rekomendacje z zachowaniem i jawnymi relacjami

Produkcyjne rekomendacje łączą skorowane kandydaty z inwentaryzacją, ograniczeniami, hierarchiami i możliwością wyjaśnienia. Grafy pomagają zwracać ścieżki, które ludzie mogą zrozumieć.

Grafy wiedzy dla RAG i agentów

RAG potrzebuje uziemienia; agenci potrzebują pamięci, śledzenia pochodzenia i ograniczeń. Graf wiedzy przechowuje byty, relacje, źródła i osadzenia w jednym modelu – naturalne dopasowanie dla GraphRAG.

Kiedy wybrać Neo4j zamiast Amazon Neptune lub TigerGraph?

Kiedy wybrać Neo4j zamiast Amazon Neptune lub TigerGraph? Wybierz Neo4j dla grafu pierwszego w kolejności Cypher i wektora + traversu w jednym produkcie. Wybierz Neptune, gdy AWS i Gremlin lub RDF pasują do Twojej organizacji. Wybierz TigerGraph, gdy GSQL i obciążenia analityczne są głównym zakładem.

Przydatne linki