Slide 1

Slide 1 text

🚨 Safe harbour statement 🚨 ● Dieser Vortrag enthält möglicherweise persönliche Meinungen. ● Dieser Vortrag ist primär über JDBC, SQL und Cypher, und ein bisschen über GraphRAG und AI. Neo4j Inc. All rights reserved 2024 1 Michael Simons Java & Testcontainers Champion, Senior Staff Engineer bei Neo4j

Slide 2

Slide 2 text

Manchmal hab’ ich ein bisschen Angst… Neo4j Inc. All rights reserved 2024 2

Slide 3

Slide 3 text

GenAI trifft Graph-Datenbank: RAG mit Neo4j Marketing wählte diesen Titel.

Slide 4

Slide 4 text

Eine Graph-Datenbank, eine 27 Jahre alte Spezifikation und generative AI gehen in eine Bar… Bisschen sperrig. Neo4j Inc. All rights reserved 2024 4

Slide 5

Slide 5 text

SQL walks into a bar: Hey Cypher, can I join you? Neo4j Inc. All rights reserved 2024 5 Der neue Neo4j-JDBC-Treiber mit SQL-zu-Cypher-Übersetzung

Slide 6

Slide 6 text

Agenda (Falls ihr noch nicht weggelaufen seit…) 1. Was war nochmal JDBC und warum braucht es einen weiteren Treiber für Neo4j? 2. Es geht nicht ohne Architektur 3. SQL zu Cypher Translator 4. Datenbankhersteller und Vektoren 5. Knowledge Graph und RAG 6. text2cypher 7. Demo Neo4j Inc. All rights reserved 2024 6

Slide 7

Slide 7 text

Was war nochmal JDBC? Neo4j Inc. All rights reserved 2024 7 Und warum noch einen weiteren Treiber / Connector für Neo4j…

Slide 8

Slide 8 text

Wie kann ich aktuell Neo4j aus Tools und Programmen nutzen? Neo4j Inc. All rights reserved 2024 8

Slide 9

Slide 9 text

Neo4j Inc. All rights reserved 2024 9 ● Standard Bolt-Driver für Java ● Darauf aufbauende Bibliotheken (Neo4j-OGM, Spring Data Neo4j, Quarkus-Integration u.v.m.) Siehe auch “Neo4j für Java-Developer” von Gerrit Meier: https://speakerdeck.com/meistermeier/neo4j-for-java-developers ● Diverse Varianten älterer JDBC-Treiber ○ Mein persönlicher “Jon-Snow-Moment” 2024: Eine Variante davon wurde von Simba entwickelt, einer der Firmen, die hinter dem ODBC Standard stehen Neo4j für Java-Entwickler:innen

Slide 10

Slide 10 text

Neo4j Inc. All rights reserved 2024 10 Warum also noch einen Treiber? ● JDBC ist allgegenwärtig und nach über 27 Jahren einer der stabilsten Standards, um von Java aus mit Datenbanken zu sprechen ● Basis unzähliger anderer Bibliotheken mit höheren Abstraktionsgrad ○ JPA / Hibernate ○ Spring Data JDBC ○ MyBatis ○ Flyway ○ Liquibase ● Nicht-funktionale Erweiterungen wie Pooling, Retries u.ä. ● De-facto Standard für Reporting Tools und vorherrschende Schnittstelle für clientseitiges Tooling ● Ebenso in vielen Cloud-Datenbanken

Slide 11

Slide 11 text

Worauf zielen wir ab? - Datenintegrationsdienste wie - AWS Glue - Informatica - Streamsets - JDBC basierte ETL-Werkzeuge Neo4j Inc. All rights reserved 2024 - Bessere Developer-Experience - Flache Lernkurve (JDBC ist bekannt, nur die Abfragesprache muss erlernt werden) 11 - in beiden Fällen: Software (und Menschen), die “nur” SQL sprechen

Slide 12

Slide 12 text

Neo4j Inc. All rights reserved 2024 12 Was war nochmal JDBC? (1) ● Java Database Connectivity, ursprünglich 1997(!) mit dem JDK 1.1 veröffentlicht: “…an API for Java which defines how a client may access a database.” ● JDBC ist nicht Teil des SQL Standards ● SQL/CLI (Call-Level Interface https://en.wikipedia.org/wiki/Call_Level_Interface) ist eine Erweiterung zu SQL:1999 ● Maßgeblicher Ideengeber und Einfluss auf JDBC

Slide 13

Slide 13 text

Neo4j Inc. All rights reserved 2024 13 Was war nochmal JDBC? (2) ● 4 verschiedene Typen von JDBC Treibern: ○ Typ 1: JDBC-ODBC bridge (Open Database Connectivity) ○ Typ 2: Direkte, native Datenbank API (z.B. DuckDB JDBC Treiber nutzt die eingebettete Datenbank über JNI) ○ Typ 3: Middleware basiert (JDBC-Aufrufe werden an eine Middleware geschickt und dort in native Aufrufe übersetzt) ○ Typ 4: Netzwerk- und Datenbankprotokolle direkt in Java implementiert

Slide 14

Slide 14 text

Neo4j Inc. All rights reserved 2024 14 Was war nochmal JDBC? (3) ● ⚠ Basis-Package ist zwar java.sql.* mit unzähligen Bezügen zu SQL-Konzepten, ist aber am Ende nicht strikt an relationale Datenbanken gebunden ● Verschiedene Statement stellen Möglichkeiten bereit, Abfragen auszuführen ○ Ergebnisse sind zeilenorientiert (Genau wie Standard-Neo4j-Treiber) ○ Zeilen sind spaltenorientiert (Neo4j denkt in “Properties”) ○ Typen sind überwiegend Standard SQL Type, können aber auch komplexe Objekte sein ● Abfragen werden üblicherweise als “SQL” bezeichnet, sind aber reine String Objekte: Go wild… 🤪

Slide 15

Slide 15 text

Neo4j Inc. All rights reserved 2024 15

Slide 16

Slide 16 text

Neo4j-JDBC Features ● JDBC 4.3 ● Typ 4: Netzwerk- und Datenbankprotokolle direkt in Java implementiert ● Implementiert DatabaseMetaData und ResultSetMetaData ○ So fern es möglich ist für eine schemalose Datenbank ○ Hinreichend für viele ETL Tools Neo4j Inc. All rights reserved 2024 16 ● “Pluggable”, d.h. es wurden keine Dinge implementiert, die es als Aufsatz gibt (Pools etc.) ● SQL zu Cypher Übersetzung ○ Für equivalente Cypher-Konzepte ○ Konfigurierbar für Mappings (Label zu Tabellen etc.) ○ Unterstützung unterschiedlicher SQL-Dialekte ● SPI für eigene Übersetzungs-Module ● Natürlich auch “plain” Cypher

Slide 17

Slide 17 text

Es geht nicht ohne Architektur Neo4j Inc. All rights reserved 2024 17

Slide 18

Slide 18 text

Neo4j Inc. All rights reserved 2024 18 Drei Säulen Erweiterbarkeit ● Translator SPI ○ Plugin-System auf Basis von ServiceLoader ● Implementierungen: ○ SQL To Cypher ○ Natürliche Sprache als Eingabe (text2cypher) Netzwerkstack und Typsystem ● Internal package im Core-Modul, nicht exportiert ● Neo4j-Typ-System als öffentliche API Metadaten ● Nutzung von Neo4j Metadata (db.info, db.schema, SHOW INDEXES, SHOW CONSTRAINTS) über DatabaseMetaData und ResultSetMetaData ● Pluggable Cypher-Queries

Slide 19

Slide 19 text

Modules… überall! Vollständige Unterstützung des Java module system Neo4j Inc. All rights reserved 2024 19

Slide 20

Slide 20 text

Java module system, warum? Neo4j Inc. All rights reserved 2024 20 ● Großartige Lösung für API Grenzen (exports und co.) ● Auf dem Klassenpfad nur eine Warnung, aber diese erlaubt uns zu sagen: “Wir haben euch gewarnt!” 🤷 ● Besser für ○ Uns, da unsere Tests als Integrationstests auf dem Modulpfad laufen und wir ohne weiteres Tooling in API Grenzen gezwungen werden ○ Uns, da Javas default Sichtbarkeit ausreicht, APIs klar abzugrenzen, ohne zusätzliche Module und Buildtools zu benötigen ○ Benutzer, da diese eine klare API Beschreibung bekommen

Slide 21

Slide 21 text

SQL zu Cypher Translator Neo4j Inc. All rights reserved 2024 21

Slide 22

Slide 22 text

Full Circle nach 7 Jahren Neo4j Inc. All rights reserved 2024 22

Slide 23

Slide 23 text

Wie funktioniert der Translator? Neo4j Inc. All rights reserved 2024 23 SELECT title FROM movie WHERE name = ? Parsed Eingabe in einen SQL expression tree Select> statement Standard Tree-Traversal Neo4j Cypher-DSL A Cypher-Builder heavily inspired by jOOQ + (Augmented) Datenbankschema var m1 = Cypher.match(statement .$from() .stream().map( this::resolveTableOrJoin).toList()); var m2 = m1.where(condition( x.$where())); Neo4j Cypher-DSL Renderer MATCH (movie:movie) WHERE movie.name = $1 RETURN movie.title

Slide 24

Slide 24 text

Neo4j Inc. All rights reserved 2024 24 Features ● “On-Demand” Übersetzung via Connection#nativeSQL oder für alle Statements ● Übersetzung des unqualifzierten Asterisks * in Attribute von Entitäten ● Konfigurierbare SQL Dialekte ● Opinionated Mapping von Joins ● Konfigurierbare “Label to table” Mappings ● Push down predicates ● Parameter ● -> Hilft uns, ihn besser zu machen! ETL und Desktop Analytics haben viel Spaß mit nested Queries etc, wir können nicht alle kennen!

Slide 25

Slide 25 text

Datenbankhersteller und Vektoren Neo4j Inc. All rights reserved 2024 25

Slide 26

Slide 26 text

Large Language Models (LLMs) ● Wahrscheinlichkeitsmodell aus dem Bereich der linguistischen Datenverarbeitung ● Vorhersage von Ähnlichkeiten ● Grundlage von Natural Language Processing (NLP) und Generierung von Texten und anderen Darstellungen (Bilder, Video, Audio) ● LLMs ○ Spalten Eingabetexte in Text.Tokens ○ Transformieren diese Tokens in embeddings Neo4j Inc. All rights reserved 2024 26

Slide 27

Slide 27 text

Embeddings aka Vektoren ● Embeddings sind homogene, mathematische Repräsentationen von heterogenen Werten (Texte, Bilder, Audio) ● Können von Machine Learning Models (ML) und semantischen Suchmechanismen gleichermaßene verwendet werden ● Embeddings werden idR als Vektoren von float Werten dargestellt ● Embeddings sind keine willkürlichen Collections ○ Uniformer Datentyp ○ Uniforme Dimensionen (Neo4j unterstützt 1 bis 4096) Neo4j Inc. All rights reserved 2024 27

Slide 28

Slide 28 text

Funktionalität von LLMs basiert auf Vektoren ● Kombinationen ○ Vektoraddition und Subtraktion (“König-Mann+Frau=Königin”) ● Euklidischer Abstand, Kosinus-Ähnlichkeit ● Generierung neuer Embeddings über Word2Vec, seq2seq oder moderne Ansätze die Kontext bezogen arbeiten (BERT, GPT) ● Datenbank-Unterstützung für ○ Storage ○ Indizierung ○ Vektormathematik ○ Suche und Abfragen Neo4j Inc. All rights reserved 2024 28 Euklidischer Abstand Skalarprodukt

Slide 29

Slide 29 text

Neo4j und Embeddings ● Vektor Indizes ○ CREATE VECTOR INDEX film_index ○ db.index.vector.queryNodes ● GenAI Integration ○ genai.vector.encode (Support für OpenAI, Azure, Bedrock u.a.) ● Zukünftig direkte Integration externer Vektordatenbanken (Weaviate, Pinecone u.a.) Neo4j Inc. All rights reserved 2024 29

Slide 30

Slide 30 text

Weitergehende Texte und Vorträge ● https://www.golem.de/news/kuenstliche-intelligenz-so-funktioniert-chatgpt-230 2-171644.html ● https://de.wikipedia.org/wiki/Large_Language_Model ● https://jalammar.github.io/illustrated-word2vec ● https://www.algolia.com/blog/ai/an-introduction-to-transformer-models-in-neura l-networks-and-machine-learning/ ● https://en.wikipedia.org/wiki/Seq2seq ● https://link.springer.com/article/10.1007/s10676-024-09775-5 ● https://www.youtube.com/watch?v=Pv0cfsastFs (Beyond the Hype: A Realistic Look at Large Language Models von Jodie Burchell) Neo4j Inc. All rights reserved 2024 30

Slide 31

Slide 31 text

Probleme mit LLMs ● Energieaufwand für die Erstellung und für Training ist gigantisch ○ Microsoft möchte z.B. gerne Three Mile Island wieder in Betrieb nehmen ● Sozialer Art ○ Training bias, kodifizierung sozialer und rassistischer Vorurteile ○ Training im globalen Süden ○ GTA (Grand Theft Autocomplete… Scraping all the things) ● Inhaltlicher Art ○ “Cut off dates”: Keine aktuellen Daten ○ Mangelnde Verifizierbarkeit / Erklärbarkeit ○ “Halluzinationen” (Ergebnis klingt realistisch, ist aber falsch / unwahr) ○ Bias Neo4j Inc. All rights reserved 2024 31

Slide 32

Slide 32 text

Knowledge Graph und RAG zur Rettung Neo4j Inc. All rights reserved 2024 32

Slide 33

Slide 33 text

Retrieval Augmented Generation: RAG Neo4j Inc. All rights reserved 2024 33 Quelle: https://neo4j.com/developer-blog/fine-tuning-vs-rag/

Slide 34

Slide 34 text

Wissensdatenbank als Grundlage für RAG ● Graphendatenbanken eignen sich hervorragend für stark vernetzte Themen ● Neo4j ist eine sehr gute Wahl, um einen “Knowledge Graph” zu speichern ● Knowledge Graphs existieren in unterschiedlicher Form ○ Lexical Graph (Repräsentation von großen Objekten in kleinen Häppchen (“Chunks”), als Container für Embeddings ○ Domain spezifischer Graph (Beinhaltet Domänenspezifisches Wissen, i.e. Entitäten und ihrer Beziehungen zueinander) ○ Kombination aus beiden: Lexical Graph mit Beziehungen zu Domain Entitäten Neo4j Inc. All rights reserved 2024 34

Slide 35

Slide 35 text

Knowledge graphs als Grundlage für RAG Neo4j Inc. All rights reserved 2024 35 Lexical Graph Lexical Graph mit Entitäten https://graphr.ag/reference/knowledge-graph/lexical-graph/

Slide 36

Slide 36 text

Neo4j und RAG ● Smarte Anfragen über db.index.vector.queryNodes ● Zusammenstellen von “Dokumenten” ● Übergabe an System- und Benutzerprompt Neo4j Inc. All rights reserved 2024 36

Slide 37

Slide 37 text

Weiterführendes Neo4j Inc. All rights reserved 2024 37 Beleuchtet viele Stellen, an denen AI wenig fördlicher für eine offene Gesellschaft ist. Graph-Algorithmen ohne “AI” mit plausiblen Ergebnissen GraphRAG im Detail https://graphr.ag

Slide 38

Slide 38 text

text2cypher Neo4j Inc. All rights reserved 2024 38 RAG Usecase im Neo4j-JDBC text2cypher Modul.

Slide 39

Slide 39 text

text2cypher ● Nutzt einen Domain-Graphen (das Datenbank Schema) ○ JDBC Metadata oder erweiterte Datenbankfunktionen ● Nachbearbeitung der generierten Statements mit Cypher-DSL ○ Preparsing des Statements ○ Überprüfung, ob kein keine Labels oder Relations erfunden wurden ○ Überprüfung der Richtung ● Implementiert mit langchain4j Neo4j Inc. All rights reserved 2024 39

Slide 40

Slide 40 text

text2cypher: Erstellung des Models Neo4j Inc. All rights reserved 2024 40 String baseUrl = (String) config.get(CONFIG_KEY_OPEN_AI_BASE_URL); var model = OpenAiChatModel.builder() .baseUrl(baseUrl) .modelName(modelName) .temperature(temperature) .apiKey(openAIApiKey) .build(); this.cypherExpert = AiServices. builder(CypherExpert. class) .chatLanguageModel (model).build(); Default: gpt-4-turbo Wir arbeiten gerade an einem optimierten text2cypher Model!

Slide 41

Slide 41 text

text2cypher: CypherExpert Neo4j Inc. All rights reserved 2024 41 interface CypherExpert { @SystemMessage (""" Given an input question, translate it to a Cypher query. Respond without formatting and pre-amble." "") @UserMessage(""" Based on the Neo4j graph schema below, write a Cypher query that would answer the user's question: {{schema}} Question: {{question}} """ ) String translate(@V("schema") Schema schema, @V("question") String question); }

Slide 42

Slide 42 text

RAG in text2cypher Neo4j Inc. All rights reserved 2024 42 var schema = Schema.from(optionalDatabaseMetaData.getConnection()); var cypher = this.cypherExpert.translate( schema, question); LOGGER.log(Level.INFO, "Intermediate query ''{0}''" , new Object[] { cypher }); cypher = schema.enforceRelationships (cypher); LOGGER.log(Level.INFO, "Final query ''{0}''" , new Object[] { cypher }); “Retrieve” Schema Augment and Generate Postprocessing

Slide 43

Slide 43 text

Demo Neo4j Inc. All rights reserved 2024 43

Slide 44

Slide 44 text

Dankeschön! Neo4j Inc. All rights reserved 2024 44 Kontakt michael.simons@neo4j.com (Un)soziale Medien @rotnroll666(@mastodon.social) Profil https://github.com/michael-simons Neo4j-JDBC https://github.com/neo4j/neo4j-jdbc Ich schreibe Bücher: