diff --git a/neo4j-example/src/main/java/Neo4jContentRetrieverExample.java b/neo4j-example/src/main/java/Neo4jContentRetrieverExample.java new file mode 100644 index 00000000..ce15ed2f --- /dev/null +++ b/neo4j-example/src/main/java/Neo4jContentRetrieverExample.java @@ -0,0 +1,50 @@ +import dev.langchain4j.model.chat.ChatLanguageModel; +import dev.langchain4j.rag.content.Content; +import dev.langchain4j.rag.content.retriever.neo4j.Neo4jContentRetriever; +import dev.langchain4j.rag.query.Query; +import dev.langchain4j.store.graph.neo4j.Neo4jGraph; +import org.neo4j.driver.AuthTokens; +import org.neo4j.driver.Driver; +import org.neo4j.driver.GraphDatabase; +import org.neo4j.driver.Session; +import org.testcontainers.containers.Neo4jContainer; + +import java.util.List; + +public class Neo4jContentRetrieverExample { + + private final ChatLanguageModel chatLanguageModel; + + public Neo4jContentRetrieverExample(final ChatLanguageModel chatLanguageModel) { + + this.chatLanguageModel = chatLanguageModel; + } + + public void neo4jContentRetriever() { + + try (Neo4jContainer neo4jContainer = new Neo4jContainer<>("neo4j:5.16.0") + .withoutAuthentication() + .withLabsPlugins("apoc")) { + neo4jContainer.start(); + try (Driver driver = GraphDatabase.driver(neo4jContainer.getBoltUrl(), AuthTokens.none())) { + try (Neo4jGraph graph = Neo4jGraph.builder().driver(driver).build()) { + try (Session session = driver.session()) { + session.run("CREATE (book:Book {title: 'Dune'})<-[:WROTE]-(author:Person {name: 'Frank Herbert'})"); + } + graph.refreshSchema(); + + Neo4jContentRetriever retriever = Neo4jContentRetriever.builder() + .graph(graph) + .chatLanguageModel(chatLanguageModel) + .build(); + + Query query = new Query("Who is the author of the book 'Dune'?"); + + List contents = retriever.retrieve(query); + + System.out.println(contents.get(0).textSegment().text()); // "Frank Herbert" + } + } + } + } +}