From a0d8e96c665b548d31c1a535ff14136d208269ec Mon Sep 17 00:00:00 2001 From: Martin O'Hanlon Date: Tue, 5 Mar 2024 14:20:35 +0000 Subject: [PATCH 1/6] workshop 1 structure --- .vscode/settings.json | 1 - asciidoc/courses/genai-workshop/course.adoc | 47 +++++++++++++++++++ .../lessons/1-getting-started/lesson.adoc | 19 ++++++++ .../lessons/10-next-steps/lesson.adoc | 17 +++++++ .../lessons/2-vectors/lesson.adoc | 27 +++++++++++ .../lessons/3-search-vector/lesson.adoc | 25 ++++++++++ .../lessons/4-embeddings/lesson.adoc | 28 +++++++++++ .../lessons/5-create-vector-index/lesson.adoc | 21 +++++++++ .../lessons/6-unstructured-data/lesson.adoc | 25 ++++++++++ .../7-import-unstructured-data/lesson.adoc | 21 +++++++++ .../lessons/8-knowledge-graph/lesson.adoc | 17 +++++++ .../lessons/9-build-graph/lesson.adoc | 21 +++++++++ .../1-knowledge-graphs-vectors/module.adoc | 22 +++++++++ .../2-llm-rag-python-langchain/module.adoc | 0 14 files changed, 290 insertions(+), 1 deletion(-) create mode 100644 asciidoc/courses/genai-workshop/course.adoc create mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/1-getting-started/lesson.adoc create mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/10-next-steps/lesson.adoc create mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/2-vectors/lesson.adoc create mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/3-search-vector/lesson.adoc create mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/4-embeddings/lesson.adoc create mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/5-create-vector-index/lesson.adoc create mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/6-unstructured-data/lesson.adoc create mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/7-import-unstructured-data/lesson.adoc create mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/8-knowledge-graph/lesson.adoc create mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/9-build-graph/lesson.adoc create mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/module.adoc create mode 100644 asciidoc/courses/genai-workshop/modules/2-llm-rag-python-langchain/module.adoc diff --git a/.vscode/settings.json b/.vscode/settings.json index 36060c712..4d647e835 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -20,5 +20,4 @@ "scheme": "file" } ], - "asciidoc.antora.enableAntoraSupport": true, } \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/course.adoc b/asciidoc/courses/genai-workshop/course.adoc new file mode 100644 index 000000000..9e37ba067 --- /dev/null +++ b/asciidoc/courses/genai-workshop/course.adoc @@ -0,0 +1,47 @@ += Gen-AI - Hands-on Workshops +:categories: beginners:5 +:status: unlisted +:duration: 2 hours +:caption: GenAI Beyond Chat with RAG, Knowledge Graphs and Python +:usecase: blank-sandbox +:video: https://www.youtube.com/embed/vVCHJFa01gA +:key-points: ${11:A comma, separated, list of learnings + +== Course Description + +In this Introduction to Neo4j & LLMs you will learn how to integrate Generative AI models using Python and Langchain. + +You will: + +* Use Vector indexes and embeddings in Neo4j to perform similarity and keyword search +* Use Python and Langchain to integrate with Neo4j and OpenAI +* Learn about Large Language Models (LLMs), hallucination and integrating knowledge graphs +* Explore Retrieval Augmented Generation (RAG) and its role in grounding LLM-generated content + +After completing this workshop you will be able to explain the terms LLM, RAG, grounding, and knowledge graphs. You will also have the knowledge and skills to create simple LLM-based applications using Neo4j and Python. + + +=== Prerequisites + +Before taking this course, you should have: + +* A basic understanding of Graph Databases and Neo4j +* Knowledge of Python and capable of reading simple programs + +While not essential, we completing the GraphAcademy link:/courses/neo4j-fundamentals/[Neo4j Fundamentals^] course. + +To complete the practical tasks within this course, you will need: + +* Python installed or access to gitpod.io +* A Neo4j database, we recommended signing up for a free Aura database +* An OpenAI billing account and API key + + +=== Duration + +{duration} + + +=== What you will learn + +TODO - complete \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/1-getting-started/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/1-getting-started/lesson.adoc new file mode 100644 index 000000000..a9e7182be --- /dev/null +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/1-getting-started/lesson.adoc @@ -0,0 +1,19 @@ += Getting Started +:order: 1 +:type: lesson + + +What are you going to need, where you will find it, how this works + + +Understand the tools they need and how to access them + + + + +read::Continue[] + +[.summary] +== Summary + +You learned ... \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/10-next-steps/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/10-next-steps/lesson.adoc new file mode 100644 index 000000000..03f881c67 --- /dev/null +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/10-next-steps/lesson.adoc @@ -0,0 +1,17 @@ += Next steps +:order: 10 +:type: lesson + + +Calls to action + +Learners know where to find more information and how to continue their learning + + + +read::Continue[] + +[.summary] +== Summary + +You learned ... \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/2-vectors/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/2-vectors/lesson.adoc new file mode 100644 index 000000000..bc7fb6aef --- /dev/null +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/2-vectors/lesson.adoc @@ -0,0 +1,27 @@ += Semantic Search, Vectors, and Embeddings +:order: 2 +:type: lesson + +Define the terms + +How semantic search uses vectors + +What are vectors + +What are embeddings + + +Understand the relationship between semantic search, vectors and embeddings. + + + + + + + +read::Continue[] + +[.summary] +== Summary + +You learned ... \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/3-search-vector/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/3-search-vector/lesson.adoc new file mode 100644 index 000000000..370f3526a --- /dev/null +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/3-search-vector/lesson.adoc @@ -0,0 +1,25 @@ += Search using a Vector Index +:order: 3 +:type: challenge + + +Practical exercise - find a similar movie plot + +Encode text using Cypher and search for that + +Create Cypher to find movie recommendations + + + +Can relate the theory of semantic search to a real example. + +Can explore the data in this simple example. + + + +read::Continue[] + +[.summary] +== Summary + +You learned ... \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/4-embeddings/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/4-embeddings/lesson.adoc new file mode 100644 index 000000000..1756044be --- /dev/null +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/4-embeddings/lesson.adoc @@ -0,0 +1,28 @@ += Creating Embeddings and Vector Indexes +:order: 4 +:type: lesson + + + + +How you can generate embeddings + +Look at example code using Cypher and Python + +Creating vectors indexes, dimensions, search + + +Understand the options for creating embeddings + +Know the process and information required to create a vector index in Neo4j + + + + + +read::Continue[] + +[.summary] +== Summary + +You learned ... \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/5-create-vector-index/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/5-create-vector-index/lesson.adoc new file mode 100644 index 000000000..7d6fc7196 --- /dev/null +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/5-create-vector-index/lesson.adoc @@ -0,0 +1,21 @@ += Create a Vector Index +:order: 5 +:type: challenge + +Create vector index on movie posters + + + +Can create a vector index in Neo4j + +Understands that vectors can be used for more than just text + + + + +read::Continue[] + +[.summary] +== Summary + +You learned ... \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/6-unstructured-data/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/6-unstructured-data/lesson.adoc new file mode 100644 index 000000000..6c197e7bb --- /dev/null +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/6-unstructured-data/lesson.adoc @@ -0,0 +1,25 @@ += Unstructured data +:order: 6 +:type: lesson + + +What you have to think about when importing unstructured data + +The strategies for importing unstructured data + +Why you need to chunk data and how you would approach it. + + +Understand the challenges of dealing with unstructured data + +Explore methods for dealing with unstructured data + + + + +read::Continue[] + +[.summary] +== Summary + +You learned ... \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/7-import-unstructured-data/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/7-import-unstructured-data/lesson.adoc new file mode 100644 index 000000000..77dada3ca --- /dev/null +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/7-import-unstructured-data/lesson.adoc @@ -0,0 +1,21 @@ += Import Unstructured Data +:order: 7 +:type: challenge + + + +Import unstructured data into Neo4j using Python and Langchain. + +Simple - chunk data based on paragraph, import and vector using langchain.Neo4jVector + + +Can use Python and Langchain to create data within Neo4j + + + +read::Continue[] + +[.summary] +== Summary + +You learned ... \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/8-knowledge-graph/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/8-knowledge-graph/lesson.adoc new file mode 100644 index 000000000..9ec042eeb --- /dev/null +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/8-knowledge-graph/lesson.adoc @@ -0,0 +1,17 @@ += Knowledge graph +:order: 8 +:type: lesson + + +Define the term, understand the benefits of bringing data into a graph. + + + + + +read::Continue[] + +[.summary] +== Summary + +You learned ... \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/9-build-graph/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/9-build-graph/lesson.adoc new file mode 100644 index 000000000..af8b5afce --- /dev/null +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/9-build-graph/lesson.adoc @@ -0,0 +1,21 @@ += Build Graph +:order: 9 +:type: challenge + + +Show an example of how to extend the simple graph they created using metadata. + +Give stretch goals, point to other open datasets and allow learners to experiment. + + +Can create a more complete graph in neo4j. + +Move the learner past using someone else's code to modifying and creating. + + +read::Continue[] + +[.summary] +== Summary + +You learned ... \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/module.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/module.adoc new file mode 100644 index 000000000..0706f8951 --- /dev/null +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/module.adoc @@ -0,0 +1,22 @@ += Knowledge Graphs, Unstructured Data, and Vectors + +== Workshop Overview + +In this workshop, you will: + +* Use vector indexes to search for similar data +* Create embeddings and vector indexes +* Build a graph of unstructured data using Python and Langchain + +== Workshop Structure + +How this works + + +TODO ..... + + + +If you are ready, let's get going! + +link:./1-lesson/[Ready? Let's go →, role=btn] diff --git a/asciidoc/courses/genai-workshop/modules/2-llm-rag-python-langchain/module.adoc b/asciidoc/courses/genai-workshop/modules/2-llm-rag-python-langchain/module.adoc new file mode 100644 index 000000000..e69de29bb From b5911ce598bd3cfd2e9130f39eda19a79824ee85 Mon Sep 17 00:00:00 2001 From: Martin O'Hanlon Date: Wed, 6 Mar 2024 17:07:24 +0000 Subject: [PATCH 2/6] updates --- asciidoc/courses/genai-workshop/course.adoc | 22 +-- .../lessons/1-getting-started/lesson.adoc | 68 ++++++- .../lessons/2-vectors/lesson.adoc | 43 ++++- .../lessons/3-search-vector/lesson.adoc | 51 +++++ .../lessons/3-search-vector/reset.cypher | 27 +++ .../lessons/4-embeddings/lesson.adoc | 15 +- .../lessons/5-create-vector-index/lesson.adoc | 94 +++++++++ .../5-create-vector-index/reset.cypher | 19 ++ .../lessons/6-unstructured-data/lesson.adoc | 22 +++ .../7-import-unstructured-data/lesson.adoc | 182 ++++++++++++++++++ 10 files changed, 526 insertions(+), 17 deletions(-) create mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/3-search-vector/reset.cypher create mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/5-create-vector-index/reset.cypher diff --git a/asciidoc/courses/genai-workshop/course.adoc b/asciidoc/courses/genai-workshop/course.adoc index 9e37ba067..c7084c60e 100644 --- a/asciidoc/courses/genai-workshop/course.adoc +++ b/asciidoc/courses/genai-workshop/course.adoc @@ -4,12 +4,12 @@ :duration: 2 hours :caption: GenAI Beyond Chat with RAG, Knowledge Graphs and Python :usecase: blank-sandbox -:video: https://www.youtube.com/embed/vVCHJFa01gA -:key-points: ${11:A comma, separated, list of learnings +:key-points: A comma, separated, list of learnings +:repository: martinohanlon/genai-workshop == Course Description -In this Introduction to Neo4j & LLMs you will learn how to integrate Generative AI models using Python and Langchain. +In this GenAI and Neo4j workshop, you will learn how Neo4j can support your GenAI projects. You will: @@ -18,8 +18,7 @@ You will: * Learn about Large Language Models (LLMs), hallucination and integrating knowledge graphs * Explore Retrieval Augmented Generation (RAG) and its role in grounding LLM-generated content -After completing this workshop you will be able to explain the terms LLM, RAG, grounding, and knowledge graphs. You will also have the knowledge and skills to create simple LLM-based applications using Neo4j and Python. - +After completing this workshop, you will be able to explain the terms LLM, RAG, grounding, and knowledge graphs. You will also have the knowledge and skills to create simple LLM-based applications using Neo4j and Python. === Prerequisites @@ -30,16 +29,17 @@ Before taking this course, you should have: While not essential, we completing the GraphAcademy link:/courses/neo4j-fundamentals/[Neo4j Fundamentals^] course. -To complete the practical tasks within this course, you will need: +=== Duration -* Python installed or access to gitpod.io -* A Neo4j database, we recommended signing up for a free Aura database -* An OpenAI billing account and API key +{duration} +== What you need -=== Duration +To complete the practical tasks within this workshop, you will need: -{duration} +* Python installed or access to gitpod.io (you will need a github, gitpod, or bitbucket account) +* A Neo4j database, we recommended signing up for a free Aura database +* An OpenAI billing account and API key === What you will learn diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/1-getting-started/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/1-getting-started/lesson.adoc index a9e7182be..78caf12cb 100644 --- a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/1-getting-started/lesson.adoc +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/1-getting-started/lesson.adoc @@ -1,19 +1,79 @@ = Getting Started :order: 1 :type: lesson +:lab: {repository-link} +:disable-cache: true +We have created a link:https://github.com/neo4j-graphacademy/genai-workshop[repository^] for this workshop. +It contains the starter code and resources you need. -What are you going to need, where you will find it, how this works +A blank Neo4j Sandbox instance has also been created for you to use during this course. +You can open a Neo4j Browser window throughout this course by clicking the link:#[Toggle Sandbox,role=classroom-sandbox-toggle] button in the bottom right-hand corner of the screen. -Understand the tools they need and how to access them +== Get the code +You can use Gitpod as an online IDE and workspace for this workshop. +It will automatically clone the workshop repository and set up your environment. +lab::Open `Setup Gitpod workspace`[] +[NOTE] +You will need to login with a Github, Gitlab, or Bitbucket account. -read::Continue[] +Alternatively, you can clone the repository and set up the environment yourself. + +[%collapsible] +.Setup a local environment +==== +You will need link:https://python.org[Python] installed and the ability to install packages using `pip`. + +You may want to set up a virtual environment using link:https://docs.python.org/3/library/venv.html[`venv`^] or link:https://virtualenv.pypa.io/en/latest/[`virtualenv`^] to keep your dependencies separate from other projects. + +Clone the link:https://github.com/neo4j-graphacademy/genai-workshop[github.com/neo4j-graphacademy/genai-workshop] repository: + +[source,bash] +---- +git clone https://github.com/neo4j-graphacademy/genai-workshop +---- + +Install the required packages using `pip`: + +[source,bash] +---- +cd genai-workshop +pip install -r requirements.txt +---- +==== + +== Setup the environment + +Create a copy of the `.env.example` file and name it `.env`. +Fill in the required values. + +[source] +.Create a `.env` file +---- +include::{repository-raw}/main/.env.example +---- + +Add your Open AI API key (`OPENAI_API_KEY`), which you can get from link:https://platform.openai.com[platformn.openai.com]. + +Update the Neo4j sandbox connection details: + +NEO4J_URI:: [copy]#bolt://{sandbox_ip}:{sandbox_boltPort}# +NEO4J_USERNAME:: [copy]#{sandbox_username}# +NEO4J_PASSWORD:: [copy]#{sandbox_password}# + +== Test your setup + +You can test your setup by running `test_environment.py` - this will attempt to connect to the Neo4j sandbox and the OpenAI API. + +You will see an `OK` message if you have set up your environment correctly. If any tests fail, check the contents of the `.env` file. + +read::Success - let's get started![] [.summary] == Summary -You learned ... \ No newline at end of file +You have setup your environment and are ready to start the workshop. \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/2-vectors/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/2-vectors/lesson.adoc index bc7fb6aef..da6360e97 100644 --- a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/2-vectors/lesson.adoc +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/2-vectors/lesson.adoc @@ -15,13 +15,54 @@ Understand the relationship between semantic search, vectors and embeddings. +== Semantic Search +image:images/Apple-tech-or-fruit.png[An apple in the middle with a tech icons on the left and a food on the right,width=700,align=center] +Semantic search aims to understand search phrases' intent and contextual meaning, rather than focusing on individual keywords. +Traditional keyword search often depends on exact-match keywords or proximity-based algorithms that find similar words. + +For example, if you input "apple" in a traditional search, you might predominantly get results about the fruit. + +However, in a semantic search, the engine tries to gauge the context: Are you searching about the fruit, the tech company, or something else? + +== What are Vectors + +Vectors are simply a list of numbers. +For example, the vector `[1, 2, 3]`` is a list of three numbers and could represent a point in three-dimensional space. + +image:images/3d-vector.svg[A diagram showing a 3d representation of the x,y,z coordinates 1,1,1 and 1,2,3] + +You can use vectors to represent many different types of data, including text, images, and audio. + +Using vectors with a dimensionality of hundreds and thousands in machine learning and natural language processing (NLP) is common. + +== What are Embeddings? + +When referring to vectors in the context of machine learning and NLP, the term "embedding" is typically used. +An embedding is a vector that represents the data in a useful way for a specific task. + +Each dimension in a vector can represent a particular semantic aspect of the word or phrase. +When multiple dimensions are combined, they can convey the overall meaning of the word or phrase. + +For example, the word "apple" might be represented by an embedding with the following dimensions: + +* fruit +* technology +* color +* taste +* shape + +You can create embeddings in various ways, but one of the most common methods is to use a **large language model**. + +For example, the embedding for the word "apple" is `0.0077788467, -0.02306925, -0.007360777, -0.027743412, -0.0045747845, 0.01289164, -0.021863015, -0.008587573, 0.01892967, -0.029854324, -0.0027962727, 0.020108491, -0.004530236, 0.009129008,` ... and so on. read::Continue[] [.summary] == Summary -You learned ... \ No newline at end of file +You learned about semantic search, vectors, and embeddings. + +Next, you will use a Neo4j vector index to find similar data. \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/3-search-vector/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/3-search-vector/lesson.adoc index 370f3526a..132fd2c6d 100644 --- a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/3-search-vector/lesson.adoc +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/3-search-vector/lesson.adoc @@ -1,6 +1,7 @@ = Search using a Vector Index :order: 3 :type: challenge +:sandbox: true Practical exercise - find a similar movie plot @@ -16,6 +17,56 @@ Can relate the theory of semantic search to a real example. Can explore the data in this simple example. +The sandbox contains a sample of 1000 movies. +Running the following Cypher query will return the titles and plots for the movies in the database: + +[source, cypher] +---- +MATCH (m:Movie) +RETURN m.title, m.plot +---- + +Review the movies and find a plot that you think looks interesting. + +You can adapt the query to only return a named movie by adding a filter: + +[source, cypher] +---- +MATCH (m:Movie {title: "Toy Story"}) +RETURN m.title, m.plot +---- + +== Finding similar movies + +You can view the embedding for a movie plot by running the following query: + +[source, cypher] +---- +MATCH (m:Movie {title: "Toy Story"}) +RETURN m.title, m.plotEmbedding +---- + +You can find similar movies using the embedding for the movie plot and a vector index. + +You can query the vector index to find similar movies by running the following query: + +[source, cypher] +---- +MATCH (m:Movie {title: 'Toy Story'}) + +CALL db.index.vector.queryNodes('moviePlots', 6, m.plotEmbedding) +YIELD node, score + +RETURN node.title, node.plot, score +---- + +The `db.index.vector.queryNodes` procedure takes three arguments: + +* The name of the vector index to query - `moviePlots` +* The number of results to return - `6` +* The embedding to search for - `m.plotEmbedding` + +Experiment with the query to find similar movies to the one you searched earlier. read::Continue[] diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/3-search-vector/reset.cypher b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/3-search-vector/reset.cypher new file mode 100644 index 000000000..0e71a0ba7 --- /dev/null +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/3-search-vector/reset.cypher @@ -0,0 +1,27 @@ +LOAD CSV WITH HEADERS +FROM 'https://data.neo4j.com/llm-vectors-unstructured/movies-plot-embedding.csv' AS row +MERGE (m:Movie {movieId: toInteger(row.movieId)}) +SET +m.tmdbId = toInteger(row.tmdbId), +m.imdbId = toInteger(row.imdbId), +m.released = row.released, +m.title = row.title, +m.year = toInteger(row.year), +m.plot = row.plot, +m.budget = toInteger(row.budget), +m.imdbRating = toFloat(row.imdbRating), +m.poster = row.poster, +m.runtime = toInteger(row.runtime), +m.imdbVotes = toInteger(row.imdbVotes), +m.revenue = toInteger(row.revenue), +m.url = row.url +WITH m, row +CALL db.create.setNodeVectorProperty(m, 'plotEmbedding', apoc.convert.fromJsonList(row.plotEmbedding)); + +CREATE VECTOR INDEX moviePlots IF NOT EXISTS +FOR (m:Movie) +ON m.plotEmbedding +OPTIONS {indexConfig: { + `vector.dimensions`: 1536, + `vector.similarity_function`: 'cosine' +}}; \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/4-embeddings/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/4-embeddings/lesson.adoc index 1756044be..b1eaecc40 100644 --- a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/4-embeddings/lesson.adoc +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/4-embeddings/lesson.adoc @@ -1,6 +1,6 @@ = Creating Embeddings and Vector Indexes :order: 4 -:type: lesson +:type: challenge @@ -18,6 +18,19 @@ Know the process and information required to create a vector index in Neo4j +== Embeddings + +We created the movie plot embeddings using OpenAI's `text-embedding-ada-002` embedding model. + +You can create embeddings using Python and the OpenAI API. + + +TODO - link to Python program to create an embedding. + + + + + read::Continue[] diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/5-create-vector-index/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/5-create-vector-index/lesson.adoc index 7d6fc7196..07ff32eb7 100644 --- a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/5-create-vector-index/lesson.adoc +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/5-create-vector-index/lesson.adoc @@ -13,8 +13,102 @@ Understands that vectors can be used for more than just text + +== Movie posters + +GraphAcademy has loaded a dataset of movie posters into the sandbox. +Each movie has a URL to a poster image: + +[source, cypher] +MATCH (m:Movie {title: "Toy Story"}) +RETURN m.title, m.poster + +image:https://image.tmdb.org/t/p/w440_and_h660_face/uXDfjJbdP4ijW5hWSBrPrlKpxab.jpg[Toy Story movie poster,width=250,align=center] + +The data also contains embeddings for each poster: + +[source, cypher] +MATCH (m:Movie {title: "Toy Story"}) +RETURN m.title, m.posterEmbedding + +== Create a vector index + +To search the movie poster embeddings, you must create a vector index. +Review the following Cypher to create the vector index before running it: + +[source, cypher] +---- +CREATE VECTOR INDEX moviePosters IF NOT EXISTS +FOR (m:Movie) +ON m.posterEmbedding +OPTIONS {indexConfig: { + `vector.dimensions`: 512, + `vector.similarity_function`: 'cosine' +}} +---- + +You should note the following about the index: + +- It is named `moviePosters` +- It is against the `posterEmbedding` properties on `Movie` nodes +- The vector has `512` dimensions +- The function used to compare vectors is `cosine` + +[%collapsible] +.More about dimensions +==== +The number of dimensions in the vector is determined by the model used to create the embeddings. + +In this case, we used the link:https://openai.com/research/clip[OpenAI Clip Model^], which has 512 dimensions. + +We created the movie plot embeddings using link:https://platform.openai.com/docs/guides/embeddings/embedding-models[Open AI's text-embedding-ada-002 model^], which has 1536 dimensions. + +The model used to create the embeddings determines the number of dimensions in the vector. +==== + +Run the Cypher to create the vector index. + +Check that you created the index successfully using the `SHOW INDEXES` command. + +.Show Indexes +[source,cypher] +---- +SHOW INDEXES WHERE type = "VECTOR" +---- + +Once the `state` is listed as "ONLINE", the index will be ready to query. + +The `populationPercentage` field indicates the proportion of node and property pairing. +When the `populationPercentage` is `100.0`, all the movie embeddings have been indexed. + +== Similar posters + +In the same way, you can use a vector index to find similar text; you can use a vector index to find similar images. + +[source, cypher] +---- +MATCH (m:Movie{title: "Babe"}) + +CALL db.index.vector.queryNodes('moviePosters', 6, m.posterEmbedding) +YIELD node, score + +RETURN node.title, node.poster, score; +---- + +image:images/babe-similar-posters.jpg[3 movie posters, Babe, Lassie, Before the Rain with similar images,width=700,align=center] + +Pick a different movie and write a similar Cypher query to find similar posters. + +[source, cypher] +.Find all movies +---- +MATCH (m:Movie) +RETURN m.title +---- + read::Continue[] + [.summary] == Summary diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/5-create-vector-index/reset.cypher b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/5-create-vector-index/reset.cypher new file mode 100644 index 000000000..27dbd8559 --- /dev/null +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/5-create-vector-index/reset.cypher @@ -0,0 +1,19 @@ +LOAD CSV WITH HEADERS +FROM 'https://data.neo4j.com/llm-vectors-unstructured/movies-poster-embedding.csv' AS row +MERGE (m:Movie {movieId: toInteger(row.movieId)}) +SET +m.tmdbId = toInteger(row.tmdbId), +m.imdbId = toInteger(row.imdbId), +m.released = row.released, +m.title = row.title, +m.year = toInteger(row.year), +m.plot = row.plot, +m.budget = toInteger(row.budget), +m.imdbRating = toFloat(row.imdbRating), +m.poster = row.poster, +m.runtime = toInteger(row.runtime), +m.imdbVotes = toInteger(row.imdbVotes), +m.revenue = toInteger(row.revenue), +m.url = row.url +WITH m, row +CALL db.create.setNodeVectorProperty(m, 'posterEmbedding', apoc.convert.fromJsonList(row.posterEmbedding)); \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/6-unstructured-data/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/6-unstructured-data/lesson.adoc index 6c197e7bb..5e8743b05 100644 --- a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/6-unstructured-data/lesson.adoc +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/6-unstructured-data/lesson.adoc @@ -16,6 +16,28 @@ Explore methods for dealing with unstructured data +== What is unstructured data + +Unstructured data refers to information that doesn't fit neatly into pre-defined structures and types. +For example, text files, emails, social media posts, videos, photos, audio files, and web pages. + +Unstructured data is often rich in information but challenging to analyze. + +== Vectors and Graphs + +Vectors and embeddings can represent unstructured data, making it easier to identify similarities and search for related data. + +Graphs are a powerful tool for representing and analyzing unstructured data. + +For example, you can use vectors to find the correct documentation to support a customer query and a graph to understand the relationships between different products and customer feedback. + +== Chunking + +When dealing with large amounts of data, breaking it into smaller, more manageable chunks is helpful. This process is called chunking. + +There are countless strategies for splitting data into chunks, and the best approach depends on the data and the problem you are trying to solve. + +In this workshop, you will import the unstructured data from a GraphAcademy course and chunk it into paragraphs. read::Continue[] diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/7-import-unstructured-data/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/7-import-unstructured-data/lesson.adoc index 77dada3ca..79cd2b8ec 100644 --- a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/7-import-unstructured-data/lesson.adoc +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/7-import-unstructured-data/lesson.adoc @@ -13,6 +13,188 @@ Can use Python and Langchain to create data within Neo4j + + + +You will use Python and Langchain to chunk up course content and create embeddings for each chunk. +You will then load the chunks into a Neo4j graph database. + +== Install requirement components + +To get started, you will need to install the following Python packages using pip: + +[source] +.Install packages +pip install + + +== Download the data + +You will load the content from the course link:https://graphacademy.neo4j.com/courses/llm-fundamentals/[Neo4j & LLM Fundamentals^]. + +The course content has been downloaded for you and is available in the file link:https://data.neo4j.com/llm-vectors-unstructured/llm-fundamentals.zip[data.neo4j.com/llm-vectors-unstructured/llm-fundamentals.zip^] + +[NOTE] +.courses repository +==== +Alternatively, you could clone Neo4j GraphAcademy courses repository from link:https://github.com/neo4j-graphacademy/courses[https://github.com/neo4j-graphacademy/courses]. However, all the data you will need is in the zip file. +==== + +Download the data, unzip it, and review the directory and file structure. + +You should note the following structure: + +* `asciidoc` - contains all the course content in ascidoc format +** `courses` - the course content +*** `llm-fundamentals` - the course name +**** `modules` - contains numbered directories for each module +***** `01-name` - the module name +****** `lessons` - contains numbered directories for each lesson +******* `01-name` - the lesson name +******** `lesson.adoc` - the lesson content + +== Load the content and chunk it + +You can now load the content and chunk it using Python and Langchain. + +You will split the lesson content into chunks of text, around 1500 characters long, with each chunk containing one or more paragraphs. +You can determine the paragraph in the content with two newline characters (`\n\n`). + +Review the following program before running it: + +[source,python] +---- +include::code/load_and_chunk.py[] +---- + +The program does the following: + +. Uses the link:https://api.python.langchain.com/en/latest/document_loaders/langchain_community.document_loaders.directory.DirectoryLoader.html[`DirectoryLoader`^] class to load the content from the `asciidoc` directory. +. Creates a link:https://api.python.langchain.com/en/latest/text_splitter/langchain.text_splitter.CharacterTextSplitter.html[`CharacterTextSplitter`^] object to split the content into chunks of text. +. Calls the `split_documents` method to split the documents into chunks of text based on the existence of `\n\n` and a chunk size of 1500 characters. + +Create a new Python file and run the program. + +[IMPORTANT] +.course content location +==== +You may need to modify the `COURSES_PATH` variable to point to the location of the course content on your computer. + +The program assumes that the `asciidoc` directory is in the same directory as your Python program. +==== + +The program should output a list of `Document` objects containing the _chunked up_ lesson content. + +[NOTE] +.Splitting +==== +The content isn't split simply by a character (`\n\n`) or on a fixed number of characters. +The process is more complicated. +Chunks should be up to maximum size but conform to the character split. + +In this example, the `split_documents` method does the following: + +. Splits the documents into paragraphs (using the `separator` - `\n\n`) +. Combines the paragraphs into chunks of text that are up 1500 characters (`chunk_size`) +** if a single paragraph is longer than 1500 characters, the method will not split the paragraph but create a chunk larger than 1500 characters +. Adds the last paragraph in a chunk to the start of the next paragraph to create an overlap between chunks. +** if the last paragraph in a chunk is more than 200 characters (`chunk_overlap`) it will *not* be added to the next chunk + +This process ensures that: + +* Chunks are never too small. +* That a paragraph is never split between chunks. +* That chunks are significantly different, and the overlap doesn't result in a lot of repeated content. + +Investigate what happens when you modify the `separator`, `chunk_size` and `chunk_overlap` parameters. +==== + +== Create vector index + +Once you have chunked the content, you can use the Langchain link:https://python.langchain.com/docs/integrations/vectorstores/neo4jvector[`Neo4jVector`^] class to create embeddings, a vector index, and store the chunks in a Neo4j graph database. + +Modify your Python program to include the following code: + +[source, python] +---- +from langchain_community.vectorstores.neo4j_vector import Neo4jVector +from langchain_openai import OpenAIEmbeddings + +neo4j_db = Neo4jVector.from_documents( + chunks, + OpenAIEmbeddings(openai_api_key="sk-..."), + url=NEO4J_URI, + username=NEO4J_USERNAME, + password=NEO4J_PASSWORD, + database="neo4j", + index_name="chunkVector", + node_label="Chunk", + text_node_property="text", + embedding_node_property="embedding", +) +---- + +[%collapsible] +.View the complete code +==== +[source] +---- +include::code/create_vector.py[] +---- +==== + +[IMPORTANT] +.OpenAI API Key and connection details +==== +You must update the code to include your `openai_api_key` and use the `url`, `username`, and `password` of your Neo4j sandbox. + +Sandbox connection details: + +url:: [copy]#bolt://{sandbox_ip}:{sandbox_boltPort}# +username:: [copy]#{sandbox_username}# +password:: [copy]#{sandbox_password}# +==== + +The `Neo4jVector.from_documents` method does the following: + +. Creates embeddings for each chunk using the `OpenAIEmbeddings` object. +. Creates nodes with the label `Chunk` and the properties `text` and `embedding` in the Neo4j database. +. Creates a vector index called `chunkVector`. + +Run the program to create the chunk nodes and vector index. It may take a minute or two to complete. + +== View chunks in the sandbox + +You can now view the chunks in the Neo4j sandbox. + +[source,cypher] +---- +MATCH (c:Chunk) RETURN c LIMIT 25 +---- + +You can also query the vector index to find similar chunks. +For example, you can find lesson chunks relating to a specific question, "What does Hallucination mean?": + +[source,cypher] +---- +WITH genai.vector.encode( + "What does Hallucination mean?", + "OpenAI", + { token: "sk-..." }) AS userEmbedding +CALL db.index.vector.queryNodes('chunkVector', 6, userEmbedding) +YIELD node, score +RETURN node.text, score +---- + +[IMPORTANT] +Remember to replace `sk-...` with your OpenAI API key. + + + + + + + read::Continue[] [.summary] From c0374056bdccfa5e88f6a193ca54e0b606019b55 Mon Sep 17 00:00:00 2001 From: Martin O'Hanlon Date: Fri, 8 Mar 2024 10:42:41 +0000 Subject: [PATCH 3/6] course updates --- asciidoc/courses/genai-workshop/course.adoc | 3 +- .../lessons/1-getting-started/lesson.adoc | 14 +- .../lessons/10-expand-graph/lesson.adoc | 44 ++++ .../lessons/10-next-steps/lesson.adoc | 17 -- .../lessons/11-next-steps/lesson.adoc | 20 ++ .../lessons/2-vectors/images/3d-vector.svg | 1 + .../2-vectors/images/Apple-tech-or-fruit.png | Bin 0 -> 28394 bytes .../2-vectors/images/vector-distance.svg | 1 + .../lessons/2-vectors/lesson.adoc | 34 ++-- .../lessons/3-search-vector/lesson.adoc | 24 +-- .../lessons/4-embeddings/lesson.adoc | 69 +++++-- .../images/babe-similar-posters.jpg | Bin 0 -> 239953 bytes .../lessons/5-create-vector-index/lesson.adoc | 37 ++-- .../images/graphacademy-lessons-paragraph.svg | 1 + .../lessons/6-unstructured-data/lesson.adoc | 34 ++-- .../7-import-unstructured-data/lesson.adoc | 122 +++-------- .../images/generic-knowledge-graph.svg | 1 + .../images/neo4j-google-knowledge-graph.svg | 1 + .../lessons/8-knowledge-graph/lesson.adoc | 35 +++- .../images/course-graph-result.svg | 7 + .../images/graphacademy-simple-graph.svg | 1 + .../lessons/9-build-graph/lesson.adoc | 190 +++++++++++++++++- .../1-knowledge-graphs-vectors/module.adoc | 3 +- .../2-llm-rag-python-langchain/module.adoc | 11 + 24 files changed, 468 insertions(+), 202 deletions(-) create mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/10-expand-graph/lesson.adoc delete mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/10-next-steps/lesson.adoc create mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/11-next-steps/lesson.adoc create mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/2-vectors/images/3d-vector.svg create mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/2-vectors/images/Apple-tech-or-fruit.png create mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/2-vectors/images/vector-distance.svg create mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/5-create-vector-index/images/babe-similar-posters.jpg create mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/6-unstructured-data/images/graphacademy-lessons-paragraph.svg create mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/8-knowledge-graph/images/generic-knowledge-graph.svg create mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/8-knowledge-graph/images/neo4j-google-knowledge-graph.svg create mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/9-build-graph/images/course-graph-result.svg create mode 100644 asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/9-build-graph/images/graphacademy-simple-graph.svg diff --git a/asciidoc/courses/genai-workshop/course.adoc b/asciidoc/courses/genai-workshop/course.adoc index c7084c60e..8131f1905 100644 --- a/asciidoc/courses/genai-workshop/course.adoc +++ b/asciidoc/courses/genai-workshop/course.adoc @@ -1,6 +1,5 @@ = Gen-AI - Hands-on Workshops -:categories: beginners:5 -:status: unlisted +:status: active :duration: 2 hours :caption: GenAI Beyond Chat with RAG, Knowledge Graphs and Python :usecase: blank-sandbox diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/1-getting-started/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/1-getting-started/lesson.adoc index 78caf12cb..49d33e92c 100644 --- a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/1-getting-started/lesson.adoc +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/1-getting-started/lesson.adoc @@ -16,15 +16,15 @@ You can open a Neo4j Browser window throughout this course by clicking the link: You can use Gitpod as an online IDE and workspace for this workshop. It will automatically clone the workshop repository and set up your environment. -lab::Open `Setup Gitpod workspace`[] - [NOTE] You will need to login with a Github, Gitlab, or Bitbucket account. +lab::Open `Gitpod workspace`[] + Alternatively, you can clone the repository and set up the environment yourself. [%collapsible] -.Setup a local environment +.Develop on your local machine ==== You will need link:https://python.org[Python] installed and the ability to install packages using `pip`. @@ -52,9 +52,9 @@ Create a copy of the `.env.example` file and name it `.env`. Fill in the required values. [source] -.Create a `.env` file +.Create a .env file ---- -include::{repository-raw}/main/.env.example +include::{repository-raw}/main/.env.example[] ---- Add your Open AI API key (`OPENAI_API_KEY`), which you can get from link:https://platform.openai.com[platformn.openai.com]. @@ -71,6 +71,10 @@ You can test your setup by running `test_environment.py` - this will attempt to You will see an `OK` message if you have set up your environment correctly. If any tests fail, check the contents of the `.env` file. +== Continue + +When you are ready, you can move on to the next task. + read::Success - let's get started![] [.summary] diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/10-expand-graph/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/10-expand-graph/lesson.adoc new file mode 100644 index 000000000..0b7391184 --- /dev/null +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/10-expand-graph/lesson.adoc @@ -0,0 +1,44 @@ += Expand the Graph +:order: 10 +:type: challenge +:optional: true +:sandbox: true + +In this *optional* challenge, you can extend the graph with additional data. + +== All Courses + +Currently, the graph contains data from a single course, `llm-fundamentals`, you can download the link:https://data.neo4j.com/llm-vectors-unstructured/courses.zip[lesson files for all the courses^]. + +. Download the content for all the courses - link:https://data.neo4j.com/llm-vectors-unstructured/courses.zip[data.neo4j.com/llm-vectors-unstructured/courses.zip^] +. Update the graph with the new data +. Explore the graph and find the connections between the courses + +== Additional metadata + +While the course content is unstructured, it contains metadata you can extract and include in the graph. + +Examples include: + +* The course title is the first level 1 heading in the file - `= Course Title` +* Level 2 headings denote section titles - `== Section Title` +* The lessons include parameters in the format `:parameter: value` at the top of the file, such as: +** `:type:` - the type of lesson (e.g. `lesson`, `challenge`, `quiz`) +** `:order:` - the order of the lesson in the module +** `:optional:` - whether the lesson is optional + +Explore the course content and see what other data you can extract and include in the graph. + +When you are ready to move on, click Continue. + +== Continue + +When you are ready, you can move on to the next task. + +read::Move on[] + +[.summary] +== Summary + +In this optional challenge, you extended the graph with additional data. + diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/10-next-steps/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/10-next-steps/lesson.adoc deleted file mode 100644 index 03f881c67..000000000 --- a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/10-next-steps/lesson.adoc +++ /dev/null @@ -1,17 +0,0 @@ -= Next steps -:order: 10 -:type: lesson - - -Calls to action - -Learners know where to find more information and how to continue their learning - - - -read::Continue[] - -[.summary] -== Summary - -You learned ... \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/11-next-steps/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/11-next-steps/lesson.adoc new file mode 100644 index 000000000..3b4ee705a --- /dev/null +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/11-next-steps/lesson.adoc @@ -0,0 +1,20 @@ += Next steps +:order: 11 +:type: lesson + +Congratulations on completing this workshop! + +You have: + +* Used vector indexes to search for similar data +* Created embeddings and vector indexes +* Built a graph of unstructured data using Python and Langchain + +You can learn more about Neo4j at link:graphacademy.neo4j.com[Neo4j GraphAcademy]. + +read::Finished[] + +[.summary] +== Summary + +Congratulations on completing this workshop! \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/2-vectors/images/3d-vector.svg b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/2-vectors/images/3d-vector.svg new file mode 100644 index 000000000..a4fe3a616 --- /dev/null +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/2-vectors/images/3d-vector.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/2-vectors/images/Apple-tech-or-fruit.png b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/2-vectors/images/Apple-tech-or-fruit.png new file mode 100644 index 0000000000000000000000000000000000000000..7816211c39240dac822602c6ca0063797a81a249 GIT binary patch literal 28394 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 S=xaLu8x{iAR;g36iT)pp;mP~} literal 0 HcmV?d00001 diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/2-vectors/images/vector-distance.svg b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/2-vectors/images/vector-distance.svg new file mode 100644 index 000000000..a29b92041 --- /dev/null +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/2-vectors/images/vector-distance.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/2-vectors/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/2-vectors/lesson.adoc index da6360e97..64cd4a6be 100644 --- a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/2-vectors/lesson.adoc +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/2-vectors/lesson.adoc @@ -2,23 +2,10 @@ :order: 2 :type: lesson -Define the terms - -How semantic search uses vectors - -What are vectors - -What are embeddings - - -Understand the relationship between semantic search, vectors and embeddings. - - +Machine learning and natural language processing (NLP) often use vectors and embeddings to represent and understand data. == Semantic Search -image:images/Apple-tech-or-fruit.png[An apple in the middle with a tech icons on the left and a food on the right,width=700,align=center] - Semantic search aims to understand search phrases' intent and contextual meaning, rather than focusing on individual keywords. Traditional keyword search often depends on exact-match keywords or proximity-based algorithms that find similar words. @@ -27,6 +14,9 @@ For example, if you input "apple" in a traditional search, you might predominant However, in a semantic search, the engine tries to gauge the context: Are you searching about the fruit, the tech company, or something else? +image:images/Apple-tech-or-fruit.png[An apple in the middle with a tech icons on the left and a food on the right,width=700,align=center] + + == What are Vectors Vectors are simply a list of numbers. @@ -58,7 +48,21 @@ You can create embeddings in various ways, but one of the most common methods is For example, the embedding for the word "apple" is `0.0077788467, -0.02306925, -0.007360777, -0.027743412, -0.0045747845, 0.01289164, -0.021863015, -0.008587573, 0.01892967, -0.029854324, -0.0027962727, 0.020108491, -0.004530236, 0.009129008,` ... and so on. -read::Continue[] +== How are vectors used in semantic search? + +You can use the _distance_ or _angle_ between vectors to gauge the semantic similarity between words or phrases. + +image::images/vector-distance.svg[A 3 dimensional chart illustrating the distance between vectors. The vectors are for the words "apple" and "fruit",width=700,align=center] + +Words with similar meanings or contexts will have vectors that are close together, while unrelated words will be farther apart. + +This principle is employed in semantic search to find contextually relevant results for a user's query. + +== Continue + +When you are ready, you can move on to the next task. + +read::Move on[] [.summary] == Summary diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/3-search-vector/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/3-search-vector/lesson.adoc index 132fd2c6d..79cab0d96 100644 --- a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/3-search-vector/lesson.adoc +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/3-search-vector/lesson.adoc @@ -3,21 +3,7 @@ :type: challenge :sandbox: true - -Practical exercise - find a similar movie plot - -Encode text using Cypher and search for that - -Create Cypher to find movie recommendations - - - -Can relate the theory of semantic search to a real example. - -Can explore the data in this simple example. - - -The sandbox contains a sample of 1000 movies. +The Neo4j sandbox contains a sample of 1000 movies. Running the following Cypher query will return the titles and plots for the movies in the database: [source, cypher] @@ -68,9 +54,13 @@ The `db.index.vector.queryNodes` procedure takes three arguments: Experiment with the query to find similar movies to the one you searched earlier. -read::Continue[] +== Continue + +When you are ready, you can move on to the next task. + +read::Move on[] [.summary] == Summary -You learned ... \ No newline at end of file +You learned how to use a vector index to find similar unstructured data. \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/4-embeddings/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/4-embeddings/lesson.adoc index b1eaecc40..06ac57901 100644 --- a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/4-embeddings/lesson.adoc +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/4-embeddings/lesson.adoc @@ -1,41 +1,86 @@ -= Creating Embeddings and Vector Indexes += Creating Embeddings :order: 4 :type: challenge +:sandbox: true +In this task, you will use Cypher and Python to create embeddings. +== Find a movie plot -How you can generate embeddings +In the previous task, you used a vector index to find similar movies. -Look at example code using Cypher and Python +To find a movie with a plot you define, you need to create an embedding for your text before you can query the vector index. -Creating vectors indexes, dimensions, search +For example, to find a movie about "A mysterious spaceship lands Earth", you need to: +. Create an embedding for the text "A mysterious spaceship lands Earth". +. Pass the embedding to the `db.index.vector.queryNodes` function. -Understand the options for creating embeddings +You can generate a new embedding in Cypher using the link:https://neo4j.com/docs/cypher-manual/current/genai-integrations/#single-embedding[`genai.vector.encode`^] function: -Know the process and information required to create a vector index in Neo4j +For example, you can use the `OpenAI` provider to generate an embedding passing the API key as `token` in the `configuration` map: +[source, cypher] +---- +WITH genai.vector.encode("Text to create embeddings for", "OpenAI", { token: "sk-..." }) AS embedding +RETURN embedding +---- +[IMPORTANT] +Remember to replace `sk-...` with your OpenAI API key. -== Embeddings +You can use the embedding to query the vector index to find similar movies. -We created the movie plot embeddings using OpenAI's `text-embedding-ada-002` embedding model. +[source, cypher] +---- +WITH genai.vector.encode( + "A mysterious spaceship lands Earth", + "OpenAI", + { token: "sk-..." }) AS myMoviePlot +CALL db.index.vector.queryNodes('moviePlots', 6, myMoviePlot) +YIELD node, score +RETURN node.text, score +---- -You can create embeddings using Python and the OpenAI API. +Experiment with different movie plots and observe the results. +=== OpenAI API -TODO - link to Python program to create an embedding. +You can also use the OpenAI API to create embeddings using Python. +Open the `1-knowledge-graphs-vectors\create_embeddings.py` file in the code editor. +[source, python] +---- +include::{repository-raw}/main/1-knowledge-graphs-vectors/create_embeddings.py[create] +---- +Review the code before running it and note that: +- `load_dotenv()` loads the environment variables from the `.env` file. +- `OpenAI()` creates an instance of the OpenAI class. +- `llm.embeddings.create()` creates an embedding for the input text using the `text-embedding-ada-002` model. +- The response containing the embeddings is printed to the console. +Run the code. +You should see a list of numbers representing the embedding: -read::Continue[] +[source] +---- +[-0.028445715084671974, 0.009996716864407063, 0.0017208183417096734, -0.010130099952220917, ...] +---- + +== Continue + +When you are ready, you can move on to the next task. + +read::Move on[] [.summary] == Summary -You learned ... \ No newline at end of file +You learned how to create embeddings using Cypher and Python. + +In the next task, you will learn how to create a vector index on an embedding. \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/5-create-vector-index/images/babe-similar-posters.jpg b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/5-create-vector-index/images/babe-similar-posters.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f551d595f42a30aa7d635d76829406250e2c55c9 GIT binary patch literal 239953 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 z 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 Z{#DA0XXKxSf|!20{ucHI!)O0D_y5)shLZpQ literal 0 HcmV?d00001 diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/5-create-vector-index/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/5-create-vector-index/lesson.adoc index 07ff32eb7..7b46800a7 100644 --- a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/5-create-vector-index/lesson.adoc +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/5-create-vector-index/lesson.adoc @@ -1,18 +1,9 @@ = Create a Vector Index :order: 5 :type: challenge +:sandbox: true -Create vector index on movie posters - - - -Can create a vector index in Neo4j - -Understands that vectors can be used for more than just text - - - - +Your next task is to create a vector index using Cypher. == Movie posters @@ -57,13 +48,11 @@ You should note the following about the index: [%collapsible] .More about dimensions ==== -The number of dimensions in the vector is determined by the model used to create the embeddings. +The model used to create the embeddings determines the number of dimensions in the vector. In this case, we used the link:https://openai.com/research/clip[OpenAI Clip Model^], which has 512 dimensions. We created the movie plot embeddings using link:https://platform.openai.com/docs/guides/embeddings/embedding-models[Open AI's text-embedding-ada-002 model^], which has 1536 dimensions. - -The model used to create the embeddings determines the number of dimensions in the vector. ==== Run the Cypher to create the vector index. @@ -76,6 +65,14 @@ Check that you created the index successfully using the `SHOW INDEXES` command. SHOW INDEXES WHERE type = "VECTOR" ---- +You should see a result similar to the following: + +.Show Indexes Result +|=== +| id | name | state | populationPercent | type +|1 | "moviePosters" | "ONLINE" | `100.0` | "VECTOR" +|=== + Once the `state` is listed as "ONLINE", the index will be ready to query. The `populationPercentage` field indicates the proportion of node and property pairing. @@ -99,17 +96,23 @@ image:images/babe-similar-posters.jpg[3 movie posters, Babe, Lassie, Before the Pick a different movie and write a similar Cypher query to find similar posters. +You can view all the movie titles using this Cypher: + [source, cypher] -.Find all movies ---- MATCH (m:Movie) RETURN m.title ---- -read::Continue[] +== Continue +When you are ready, you can move on to the next task. + +read::Move on[] [.summary] == Summary -You learned ... \ No newline at end of file +You learned how to create a vector index in Neo4j. + +Next, you will learn how to model unstructured data as a graph. \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/6-unstructured-data/images/graphacademy-lessons-paragraph.svg b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/6-unstructured-data/images/graphacademy-lessons-paragraph.svg new file mode 100644 index 000000000..8962d9db1 --- /dev/null +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/6-unstructured-data/images/graphacademy-lessons-paragraph.svg @@ -0,0 +1 @@ +HAS_MODULEHAS_LESSONCONTAINSCoursename:url:Modulename:order:url:Lessonname:order:text:url:Paragraphtext:embedding: \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/6-unstructured-data/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/6-unstructured-data/lesson.adoc index 5e8743b05..aac11fab8 100644 --- a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/6-unstructured-data/lesson.adoc +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/6-unstructured-data/lesson.adoc @@ -2,22 +2,6 @@ :order: 6 :type: lesson - -What you have to think about when importing unstructured data - -The strategies for importing unstructured data - -Why you need to chunk data and how you would approach it. - - -Understand the challenges of dealing with unstructured data - -Explore methods for dealing with unstructured data - - - -== What is unstructured data - Unstructured data refers to information that doesn't fit neatly into pre-defined structures and types. For example, text files, emails, social media posts, videos, photos, audio files, and web pages. @@ -37,11 +21,23 @@ When dealing with large amounts of data, breaking it into smaller, more manageab There are countless strategies for splitting data into chunks, and the best approach depends on the data and the problem you are trying to solve. -In this workshop, you will import the unstructured data from a GraphAcademy course and chunk it into paragraphs. +Later in this workshop, you will import the unstructured data from GraphAcademy course and chunk it into paragraphs. + +You can store embeddings for individual chunks and create relationships between chunks to capture context and relationships. + +When storing the course content, you will create a node for each `Paragraph` chunk and a relationship `CONTAINS` between the `Lesson` and `Paragraph` nodes. -read::Continue[] +image::images/graphacademy-lessons-paragraph.svg[A graph showing lesson and chunk nodes. Connected by `CONTAINS` relationship,width=700,align=center] + +== Continue + +When you are ready, you can move on to the next task. + +read::Move on[] [.summary] == Summary -You learned ... \ No newline at end of file +You learned about how you can store unstructured data in a graph. + +In the next task, you will use Python and Langchain to load, chunk, embed, and store unstructured data in Neo4j. \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/7-import-unstructured-data/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/7-import-unstructured-data/lesson.adoc index 79cd2b8ec..fd98cc008 100644 --- a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/7-import-unstructured-data/lesson.adoc +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/7-import-unstructured-data/lesson.adoc @@ -1,50 +1,23 @@ = Import Unstructured Data :order: 7 :type: challenge - - - -Import unstructured data into Neo4j using Python and Langchain. - -Simple - chunk data based on paragraph, import and vector using langchain.Neo4jVector - - -Can use Python and Langchain to create data within Neo4j - - - - - +:sandbox: true You will use Python and Langchain to chunk up course content and create embeddings for each chunk. You will then load the chunks into a Neo4j graph database. -== Install requirement components - -To get started, you will need to install the following Python packages using pip: - -[source] -.Install packages -pip install - -== Download the data +== The course content You will load the content from the course link:https://graphacademy.neo4j.com/courses/llm-fundamentals/[Neo4j & LLM Fundamentals^]. -The course content has been downloaded for you and is available in the file link:https://data.neo4j.com/llm-vectors-unstructured/llm-fundamentals.zip[data.neo4j.com/llm-vectors-unstructured/llm-fundamentals.zip^] +The workshop repository you cloned contains the course data. -[NOTE] -.courses repository -==== -Alternatively, you could clone Neo4j GraphAcademy courses repository from link:https://github.com/neo4j-graphacademy/courses[https://github.com/neo4j-graphacademy/courses]. However, all the data you will need is in the zip file. -==== - -Download the data, unzip it, and review the directory and file structure. +Open the `1-knowledge-graphs-vectors\data` directory in your code editor. You should note the following structure: -* `asciidoc` - contains all the course content in ascidoc format +* `asciidoc` - contains the course content in ascidoc format ** `courses` - the course content *** `llm-fundamentals` - the course name **** `modules` - contains numbered directories for each module @@ -55,38 +28,41 @@ You should note the following structure: == Load the content and chunk it -You can now load the content and chunk it using Python and Langchain. +You will load the content and chunk it using Python and Langchain. -You will split the lesson content into chunks of text, around 1500 characters long, with each chunk containing one or more paragraphs. +Your code will split the lesson content into chunks of text, around 1500 characters long, each containing one or more paragraphs. You can determine the paragraph in the content with two newline characters (`\n\n`). -Review the following program before running it: +Open the `1-knowledge-graphs-vectors/create_vector.py` file and review the program: [source,python] ---- -include::code/load_and_chunk.py[] +include::{repository-raw}/main/1-knowledge-graphs-vectors/create_vector.py[] ---- -The program does the following: +The program uses the link:https://api.python.langchain.com/en/latest/document_loaders/langchain_community.document_loaders.directory.DirectoryLoader.html[`DirectoryLoader`^] class to load the content from the `data/asciidoc` directory. -. Uses the link:https://api.python.langchain.com/en/latest/document_loaders/langchain_community.document_loaders.directory.DirectoryLoader.html[`DirectoryLoader`^] class to load the content from the `asciidoc` directory. -. Creates a link:https://api.python.langchain.com/en/latest/text_splitter/langchain.text_splitter.CharacterTextSplitter.html[`CharacterTextSplitter`^] object to split the content into chunks of text. -. Calls the `split_documents` method to split the documents into chunks of text based on the existence of `\n\n` and a chunk size of 1500 characters. +Your task is to add the code to: -Create a new Python file and run the program. +. Create a link:https://api.python.langchain.com/en/latest/text_splitter/langchain.text_splitter.CharacterTextSplitter.html[`CharacterTextSplitter`^] object to split the content into chunks of text. +. Use the `split_documents` method to split the documents into chunks of text based on the existence of `\n\n` and a chunk size of 1500 characters. -[IMPORTANT] -.course content location -==== -You may need to modify the `COURSES_PATH` variable to point to the location of the course content on your computer. +Create the CharacterTextSplitter object to split the content into paragraphs (`\n\n`). -The program assumes that the `asciidoc` directory is in the same directory as your Python program. -==== +[source,python] +---- +include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/create_vector.py[tag=splitter] +---- + +Split the documents into chunks of text. -The program should output a list of `Document` objects containing the _chunked up_ lesson content. +[source,python] +---- +include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/create_vector.py[tag=split] +---- -[NOTE] -.Splitting +[%collapsible] +.More on splitting ==== The content isn't split simply by a character (`\n\n`) or on a fixed number of characters. The process is more complicated. @@ -117,21 +93,7 @@ Modify your Python program to include the following code: [source, python] ---- -from langchain_community.vectorstores.neo4j_vector import Neo4jVector -from langchain_openai import OpenAIEmbeddings - -neo4j_db = Neo4jVector.from_documents( - chunks, - OpenAIEmbeddings(openai_api_key="sk-..."), - url=NEO4J_URI, - username=NEO4J_USERNAME, - password=NEO4J_PASSWORD, - database="neo4j", - index_name="chunkVector", - node_label="Chunk", - text_node_property="text", - embedding_node_property="embedding", -) +include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/create_vector.py[tag=vector] ---- [%collapsible] @@ -139,28 +101,10 @@ neo4j_db = Neo4jVector.from_documents( ==== [source] ---- -include::code/create_vector.py[] +include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/create_vector.py[] ---- ==== -[IMPORTANT] -.OpenAI API Key and connection details -==== -You must update the code to include your `openai_api_key` and use the `url`, `username`, and `password` of your Neo4j sandbox. - -Sandbox connection details: - -url:: [copy]#bolt://{sandbox_ip}:{sandbox_boltPort}# -username:: [copy]#{sandbox_username}# -password:: [copy]#{sandbox_password}# -==== - -The `Neo4jVector.from_documents` method does the following: - -. Creates embeddings for each chunk using the `OpenAIEmbeddings` object. -. Creates nodes with the label `Chunk` and the properties `text` and `embedding` in the Neo4j database. -. Creates a vector index called `chunkVector`. - Run the program to create the chunk nodes and vector index. It may take a minute or two to complete. == View chunks in the sandbox @@ -189,15 +133,15 @@ RETURN node.text, score [IMPORTANT] Remember to replace `sk-...` with your OpenAI API key. +Experiment with different questions and see how the vector index can find similar chunks. +== Continue +When you are ready, you can move on to the next task. - - - -read::Continue[] +read::Move on[] [.summary] == Summary -You learned ... \ No newline at end of file +You learned to use Python and Langchain to load, chunk, and vectorize unstructured data into a Neo4j graph database. \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/8-knowledge-graph/images/generic-knowledge-graph.svg b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/8-knowledge-graph/images/generic-knowledge-graph.svg new file mode 100644 index 000000000..1d672273d --- /dev/null +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/8-knowledge-graph/images/generic-knowledge-graph.svg @@ -0,0 +1 @@ +sourcesourcesourcesourcesourcesourceaboutaboutaboutrelates toSourceAchunk1chunk2chunk3SourceBchunk4chunk5chunk6topic itopic j \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/8-knowledge-graph/images/neo4j-google-knowledge-graph.svg b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/8-knowledge-graph/images/neo4j-google-knowledge-graph.svg new file mode 100644 index 000000000..b3e6ed35c --- /dev/null +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/8-knowledge-graph/images/neo4j-google-knowledge-graph.svg @@ -0,0 +1 @@ +FOUNDEDLOCATEDLOCATEDCAPITAL_OFFOUNDERWORKS_ATABOUTWRITTEN_BYOWNER_OFPUBLISHED ONREFERS_TOPUBLISHED_ONNeo4jCompanyMalmoLocationLondonLocationBlogPostArticleUnitedKingdomLocationEmilEifrémPersonneo4j.comWebsiteDatabaseTechnologyDocumentationArticle \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/8-knowledge-graph/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/8-knowledge-graph/lesson.adoc index 9ec042eeb..114677a71 100644 --- a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/8-knowledge-graph/lesson.adoc +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/8-knowledge-graph/lesson.adoc @@ -2,16 +2,45 @@ :order: 8 :type: lesson +Knowledge graphs are essential to many AI and machine learning applications. +You can use a knowledge graph to give context and ground an LLM, giving it access to structured data beyond its initial training data. -Define the term, understand the benefits of bringing data into a graph. +== What are Knowledge Graphs? +Knowledge graphs are a specific implementation of a Graph Database, where information is captured and integrated from many different sources, representing the inherent knowledge of a particular domain. +They provide a structured way to represent entities, their attributes, and their relationships, allowing for a comprehensive and interconnected understanding of the information within that domain. +Knowledge graphs break down sources of information and integrate them, allowing you to see the relationships between the data. +image::images/generic-knowledge-graph.svg[a diagram of an abstract knowledge graph showing how sources contain chunks of data about topics which can be related to other topics] -read::Continue[] +You can tailor knowledge graphs for semantic search, data retrieval, and reasoning. + +You may not be familiar with the term knowledge graph, but you have probably used one. Search engines typically use knowledge graphs to provide information about people, places, and things. + +The following knowledge graph could represent Neo4j: + +image::images/neo4j-google-knowledge-graph.svg[An example of a knowledge graph of Neo4j showing the relationships between people, places, and things] + +This integration from diverse sources gives knowledge graphs a more holistic view and facilitates complex queries, analytics, and insights. + +[TIP] +You can find more information about knowledge graphs including white papers, and free resources at link:https://neo4j.com/use-cases/knowledge-graph[neo4j.com/use-cases/knowledge-graph^]. + +Knowledge graphs can readily adapt and evolve as they grow, taking on new information and structure changes. + +In the next task, you will build a simple graph of the course data. + +== Continue + +When you are ready, you can move on to the next task. + +read::Move on[] [.summary] == Summary -You learned ... \ No newline at end of file +You learned about knowledge graphs and their benefits. + +In the next task, you will build a simple graph of the course data. \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/9-build-graph/images/course-graph-result.svg b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/9-build-graph/images/course-graph-result.svg new file mode 100644 index 000000000..ca033110b --- /dev/null +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/9-build-graph/images/course-graph-result.svg @@ -0,0 +1,7 @@ +Neo4j Graph VisualizationCreated using Neo4j (http://www.neo4j.com/)HAS_MODULEHAS_LESSONCONTAINSCONTAINSCONTAINSCONTAINSCONTAINSCONTAINSHAS_LESSONCONTAINSCONTAINSCONTAINSCONTAINSCONTAINSCONTAINSHAS_LESSONCONTAINSCONTAINSCONTAINSCONTAINSHAS_MODULEHAS_LESSONCONTAINSCONTAINSCONTAINSCONTAINSHAS_LESSONCONTAINSCONTAINSCONTAINSCONTAINSCONTAINSCONTAINSCONTAINSCONTAINSCONTAINSHAS_LESSONCONTAINSCONTAINSCONTAINSCONTAINSHAS_MODULEHAS_LESSONCONTAINSCONTAINSCONTAINSHAS_LESSONCONTAINSCONTAINSCONTAINSCONTAINSCONTAINSCONTAINSHAS_LESSONCONTAINSCONTAINSCONTAINSHAS_LESSONCONTAINSCONTAINSCONTAINSCONTAINSCONTAINSHAS_LESSONCONTAINSCONTAINSCONTAINSCONTAINSHAS_LESSONCONTAINSCONTAINSCONTAINSCONTAINSCONTAINSCONTAINSCONTAINSHAS_LESSONCONTAINSCONTAINSCONTAINSCONTAINSCONTAINSHAS_LESSONCONTAINSCONTAINSCONTAINSCONTAINSHAS_LESSONCONTAINSCONTAINSHAS_MODULEHAS_LESSONCONTAINSCONTAINSCONTAINSCONTAINSCONTAINSHAS_LESSONCONTAINSCONTAINSCONTAINSCONTAINSHAS_LESSONCONTAINSCONTAINSCONTAINSHAS_LESSONCONTAINSCONTAINS llm-fund… Cypher gener… 3-groun… 1-introdu… If your prompt sugg This approach is kn = Grounding LLM… image::i… 2-halluci… Providing You could also incl Luckily,wh… On the other = Avoiding Hall… The combi… 1-neo4j-… LLMs are fine-tu… Precision in the ta Knowled… They provide a stru = Introd… read::Co… 4-improv… 2-vector… When a user asks a By leveraging the c = Improving Se… The similarity scor 2-vector-… Run the query. The You canpr… You shouldre… Note that in… You can link:htt… .Loading the Em… [source,… = Vector Index… image::i… 1-seman… Semantic search sys Each dimension in a = Vectors Se… # Append the toolt… 7-c-neo4… 3-intro-t… = Adding theNe… By incorp… 6-retriev… `page_c… [source,… = Retrie… [TIP] .Refre… 5-conne… 'url', 'type': 'STR [source,… You can access the = Conne… However, when asked 4-agents [source, bash] +… The `Agent… Agents support mult In addition to the [source,… = Agent… state.ad… 3.5-mem… [source,--… [source,--… = Giving a Chat Mod Investig… 3-chat-m… Currently --- + +inclu… [source,… = Chat Model… alones inap… 2.5-chains Setting the `out… = Chain… == Check YourUn… 2-initialis… [NOTE] .Differing R Modify your pro… That `OpenAI` is us == Setup +… = Initialising the == Check YourUn… 1-langch… **Model Intera… = An introd… read::Co… 9-conver… 4-cypher… = Conve… Which returns the c 7-fewsh… Example… = Few + +shot Exa… MATCH (m:Movie {tit 5-specifi… Who acted inMa… Instructi… = Providing Spe… == Check YourUn… 1-cypher… Experim… . The program insta The programw… = The CypherCh… \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/9-build-graph/images/graphacademy-simple-graph.svg b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/9-build-graph/images/graphacademy-simple-graph.svg new file mode 100644 index 000000000..131fc243e --- /dev/null +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/9-build-graph/images/graphacademy-simple-graph.svg @@ -0,0 +1 @@ +HAS_MODULEHAS_LESSONCONTAINSCoursename:Modulename:Lessonname:url:Paragraphtext:embedding: \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/9-build-graph/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/9-build-graph/lesson.adoc index af8b5afce..78a881d51 100644 --- a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/9-build-graph/lesson.adoc +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/9-build-graph/lesson.adoc @@ -1,20 +1,200 @@ = Build Graph :order: 9 :type: challenge +:sandbox: true -Show an example of how to extend the simple graph they created using metadata. +In the previous task, you used the `Neo4jVector` class to create nodes in the graph. +Using `Neo4jVector` is an efficient and easy way to get started. +To create a graph where you can also understand the relationships within the data, you must incorporate the metadata into the data model. -Give stretch goals, point to other open datasets and allow learners to experiment. +In this lesson, you will create a graph of the course content using the `neo4j` Python driver and OpenAI API. +== Data Model -Can create a more complete graph in neo4j. +The data model you will create is a simplified version of the course content model you saw earlier. -Move the learner past using someone else's code to modifying and creating. +image::images/graphacademy-simple-graph.svg[Data model showing Course, Module, Lesson and Paragraph nodes and their relationships,width=700,align=center] +The graph will contain the following nodes, properties, and relationships: -read::Continue[] +- `Course`, `Module`, and `Lesson` nodes with a `name` property +- A `url` property on `Lesson` nodes will hold the GraphAcademy URL for the lesson +- `Paragraph` nodes will have `text` and `embedding` property +- The `HAS_MODULE`, `HAS_LESSON`, and `CONTAINS` relationships will connect the nodes +You can extract the `name` properties and `url` metadata from the directory structure of the lesson files. +For example, the first lesson of the Neo4j & LLM Fundamentals course has the following path: + +[source] +---- +courses\llm-fundamentals\modules\1-introduction\lessons\1-neo4j-and-genai\lesson.adoc +---- + +You can extract the following metadata from the path: + +- `Course.name` - `llm-fundamentals` +- `Module.name` - `1-introduction` +- `Lesson.name` - `1-neo4j-and-genai` +- `Lesson.url` - `graphacademy.neo4j.com/courses/{Course.name}/{{Module.name}}/{Lesson.name}` + +== Extracting the data + +Open the `1-knowledge-graphs-vectors\build_graph.py` file in your code editor. + +This starter code loads and chunks the course content. + +.Load and chunk the content +[source, python] +---- +include::{repository-raw}/main/1-knowledge-graphs-vectors/build_graph.py[] +---- + +For each chunk, you have to create an embedding of the text and extract the metadata. + +Create a function to create and return an embedding using the OpenAI API: + +.Create embeddings +[source, python] +---- +include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/build_graph.py[get_embedding] +---- + +Create a 2nd function, which will extract the data from the chunk: + +.Get course data +[source, python] +---- +include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/build_graph.py[get_course_data] +---- + +The `get_course_data` function: + +. Splits the document source path to extract the `course`, `module`, and `lesson` names +. Constructs the `url` using the extracted names +. Extracts the `text` from the chunk +. Creates an `embedding` using the `get_embedding` function +. Returns a dictionary containing the extracted data + +== Create the graph + +To create the graph, you will need to: + +. Create an OpenAI object to generate the embeddings +. Connect to the Neo4j database +. Iterate through the chunks +. Extract the course data from each chunk +. Create the nodes and relationships in the graph + +Create the OpenAI object: + +[source, python] +---- +include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/build_graph.py[openai] +---- + +Connect to the Neo4j sandbox: + +[source, python] +---- +include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/build_graph.py[neo4j] +---- + +[TIP] +.Test the connection +==== +You could run your code now to check that you can connect to the OpenAI API and Neo4j sandbox. +==== + +To create the data in the graph, you will need a function that incorporates the course data into a Cypher statement and runs it in a transaction. + +.Create chunk function +[source, python] +---- +include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/build_graph.py[create_chunk] +---- + +The `create_chunk` function will accept the `data` dictionary created by the `get_course_data` function. + +You should be able to identify the `$course`, `$module`, `$lesson`, `$url`, `$text`, and `$embedding` parameters in the Cypher statement. + +Iterate through the chunks and execute the `create_chunk` function: + +[source, python] +---- +include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/build_graph.py[create] +---- + +A new session is created for each chunk. The `execute_write` method calls the `create_chunk` function, passing the `data` dictionary created by the `get_course_data` function. + +Finally, close the driver. + +[source, python] +---- +include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/build_graph.py[close] +---- + +[%collapsible] +.Click to view the complete code +==== +[source] +---- +include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/build_graph.py[] +---- +==== + +== Explore the graph + +Run the code to create the graph. +It will take a minute or two to complete as it creates the embeddings for each paragraph. + +View the graph by running the following Cypher: + +[source, cypher] +---- +MATCH (c:Course)-[:HAS_MODULE]->(m:Module)-[:HAS_LESSON]->(l:Lesson)-[:CONTAINS]->(p:Paragraph) +RETURN * +---- + +image::images/course-graph-result.svg[Result from the Cypher, a graph showing Course, Module, Lesson and Chunk nodes and their relationships,width=700,align=center] + + +You will need to create a vector index to query the paragraph embeddings. + +[source, cypher] +.Create Vector Index +---- +CREATE VECTOR INDEX paragraphs IF NOT EXISTS +FOR (p:Paragraph) +ON p.embedding +OPTIONS {indexConfig: { + `vector.dimensions`: 1536, + `vector.similarity_function`: 'cosine' +}} +---- + +You can use the vector index and the graph to find a lesson to help with specific questions: + +[source, cypher] +.Find a lesson +---- +WITH genai.vector.encode( + "How does RAG help ground an LLM?", + "OpenAI", + { token: "sk-..." }) AS userEmbedding +CALL db.index.vector.queryNodes('paragraphs', 6, userEmbedding) +YIELD node, score +MATCH (l:Lesson)-[:CONTAINS]->(node) +RETURN l.name, l.url, score +---- + +Explore the graph and see how the relationships between the nodes can bring additional meaning to the unstructured data. + +== Continue + +When you are ready, you can move on to the next task. + +read::Move on[] [.summary] == Summary diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/module.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/module.adoc index 0706f8951..d04d1f4bb 100644 --- a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/module.adoc +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/module.adoc @@ -1,4 +1,5 @@ = Knowledge Graphs, Unstructured Data, and Vectors +:order: 1 == Workshop Overview @@ -19,4 +20,4 @@ TODO ..... If you are ready, let's get going! -link:./1-lesson/[Ready? Let's go →, role=btn] +link:./1-getting-started/[Ready? Let's go →, role=btn] diff --git a/asciidoc/courses/genai-workshop/modules/2-llm-rag-python-langchain/module.adoc b/asciidoc/courses/genai-workshop/modules/2-llm-rag-python-langchain/module.adoc index e69de29bb..97b35db96 100644 --- a/asciidoc/courses/genai-workshop/modules/2-llm-rag-python-langchain/module.adoc +++ b/asciidoc/courses/genai-workshop/modules/2-llm-rag-python-langchain/module.adoc @@ -0,0 +1,11 @@ += LLMs, RAG, Python, and Langchain +:order: 2 + +== Workshop Overview + + +== Workshop Structure + +If you are ready, let's get going! + +link:./1-lesson/[Ready? Let's go →, role=btn] From 5a4295ae6da5ffbdd9d74c1fc81f98cdff988e62 Mon Sep 17 00:00:00 2001 From: Martin O'Hanlon Date: Fri, 8 Mar 2024 10:43:13 +0000 Subject: [PATCH 4/6] coming soon --- .../modules/2-llm-rag-python-langchain/module.adoc | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/asciidoc/courses/genai-workshop/modules/2-llm-rag-python-langchain/module.adoc b/asciidoc/courses/genai-workshop/modules/2-llm-rag-python-langchain/module.adoc index 97b35db96..037b68676 100644 --- a/asciidoc/courses/genai-workshop/modules/2-llm-rag-python-langchain/module.adoc +++ b/asciidoc/courses/genai-workshop/modules/2-llm-rag-python-langchain/module.adoc @@ -1,11 +1,4 @@ = LLMs, RAG, Python, and Langchain :order: 2 -== Workshop Overview - - -== Workshop Structure - -If you are ready, let's get going! - -link:./1-lesson/[Ready? Let's go →, role=btn] +COMING SOON \ No newline at end of file From a24832ba685123c58888c6e0518f60c8aa88d1c4 Mon Sep 17 00:00:00 2001 From: Martin O'Hanlon Date: Mon, 11 Mar 2024 17:01:29 +0000 Subject: [PATCH 5/6] updates --- asciidoc/courses/genai-workshop/course.adoc | 12 +++--------- .../lessons/5-create-vector-index/lesson.adoc | 8 +++++--- .../7-import-unstructured-data/lesson.adoc | 6 ++++++ .../lessons/9-build-graph/lesson.adoc | 17 +++++++++-------- .../1-knowledge-graphs-vectors/module.adoc | 7 ++----- 5 files changed, 25 insertions(+), 25 deletions(-) diff --git a/asciidoc/courses/genai-workshop/course.adoc b/asciidoc/courses/genai-workshop/course.adoc index 8131f1905..3ba330b1b 100644 --- a/asciidoc/courses/genai-workshop/course.adoc +++ b/asciidoc/courses/genai-workshop/course.adoc @@ -1,10 +1,10 @@ -= Gen-AI - Hands-on Workshops += Gen-AI - Hands-on Workshop :status: active :duration: 2 hours :caption: GenAI Beyond Chat with RAG, Knowledge Graphs and Python :usecase: blank-sandbox :key-points: A comma, separated, list of learnings -:repository: martinohanlon/genai-workshop +:repository: neo4j-graphacademy/genai-workshop == Course Description @@ -36,11 +36,5 @@ While not essential, we completing the GraphAcademy link:/courses/neo4j-fundamen To complete the practical tasks within this workshop, you will need: -* Python installed or access to gitpod.io (you will need a github, gitpod, or bitbucket account) -* A Neo4j database, we recommended signing up for a free Aura database +* Access to gitpod.io (you will need a github, gitpod, or bitbucket account) or a local Python environment * An OpenAI billing account and API key - - -=== What you will learn - -TODO - complete \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/5-create-vector-index/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/5-create-vector-index/lesson.adoc index 7b46800a7..a0ff16190 100644 --- a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/5-create-vector-index/lesson.adoc +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/5-create-vector-index/lesson.adoc @@ -5,6 +5,8 @@ Your next task is to create a vector index using Cypher. +You previously used a vector index to find similar text; you can also use a vector index to find similar images. + == Movie posters GraphAcademy has loaded a dataset of movie posters into the sandbox. @@ -62,7 +64,7 @@ Check that you created the index successfully using the `SHOW INDEXES` command. .Show Indexes [source,cypher] ---- -SHOW INDEXES WHERE type = "VECTOR" +SHOW VECTOR INDEXES ---- You should see a result similar to the following: @@ -70,7 +72,7 @@ You should see a result similar to the following: .Show Indexes Result |=== | id | name | state | populationPercent | type -|1 | "moviePosters" | "ONLINE" | `100.0` | "VECTOR" +|4 | "moviePosters" | "ONLINE" | `100.0` | "VECTOR" |=== Once the `state` is listed as "ONLINE", the index will be ready to query. @@ -80,7 +82,7 @@ When the `populationPercentage` is `100.0`, all the movie embeddings have been i == Similar posters -In the same way, you can use a vector index to find similar text; you can use a vector index to find similar images. +You can use the `db.index.vector.queryNodes` procedure to find similar movie posters. [source, cypher] ---- diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/7-import-unstructured-data/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/7-import-unstructured-data/lesson.adoc index fd98cc008..eaf5fb758 100644 --- a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/7-import-unstructured-data/lesson.adoc +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/7-import-unstructured-data/lesson.adoc @@ -61,6 +61,9 @@ Split the documents into chunks of text. include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/create_vector.py[tag=split] ---- +[TIP] +You can run your code now to see the chunks of text. + [%collapsible] .More on splitting ==== @@ -96,6 +99,9 @@ Modify your Python program to include the following code: include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/create_vector.py[tag=vector] ---- +The code will create 'Chunk' nodes with `text` and `embedding` properties and a vector index called `chunkVector`. +You should be able to identify where you pass the `Chunk`, `text`, `embedding`, and `chunkVector` parameters. + [%collapsible] .View the complete code ==== diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/9-build-graph/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/9-build-graph/lesson.adoc index 78a881d51..879af6f34 100644 --- a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/9-build-graph/lesson.adoc +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/9-build-graph/lesson.adoc @@ -6,6 +6,7 @@ In the previous task, you used the `Neo4jVector` class to create nodes in the graph. Using `Neo4jVector` is an efficient and easy way to get started. + To create a graph where you can also understand the relationships within the data, you must incorporate the metadata into the data model. In this lesson, you will create a graph of the course content using the `neo4j` Python driver and OpenAI API. @@ -57,7 +58,7 @@ Create a function to create and return an embedding using the OpenAI API: .Create embeddings [source, python] ---- -include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/build_graph.py[get_embedding] +include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/build_graph.py[tag=get_embedding] ---- Create a 2nd function, which will extract the data from the chunk: @@ -65,7 +66,7 @@ Create a 2nd function, which will extract the data from the chunk: .Get course data [source, python] ---- -include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/build_graph.py[get_course_data] +include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/build_graph.py[tag=get_course_data] ---- The `get_course_data` function: @@ -90,14 +91,14 @@ Create the OpenAI object: [source, python] ---- -include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/build_graph.py[openai] +include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/build_graph.py[tag=openai] ---- Connect to the Neo4j sandbox: [source, python] ---- -include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/build_graph.py[neo4j] +include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/build_graph.py[tag=neo4j] ---- [TIP] @@ -111,7 +112,7 @@ To create the data in the graph, you will need a function that incorporates the .Create chunk function [source, python] ---- -include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/build_graph.py[create_chunk] +include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/build_graph.py[tag=create_chunk] ---- The `create_chunk` function will accept the `data` dictionary created by the `get_course_data` function. @@ -122,7 +123,7 @@ Iterate through the chunks and execute the `create_chunk` function: [source, python] ---- -include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/build_graph.py[create] +include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/build_graph.py[tag=create] ---- A new session is created for each chunk. The `execute_write` method calls the `create_chunk` function, passing the `data` dictionary created by the `get_course_data` function. @@ -131,7 +132,7 @@ Finally, close the driver. [source, python] ---- -include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/build_graph.py[close] +include::{repository-raw}/main/1-knowledge-graphs-vectors/solutions/build_graph.py[tag=close] ---- [%collapsible] @@ -198,4 +199,4 @@ read::Move on[] [.summary] == Summary -You learned ... \ No newline at end of file +You created a graph of the course content using the `neo4j` Python driver and OpenAI API. \ No newline at end of file diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/module.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/module.adoc index d04d1f4bb..021585163 100644 --- a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/module.adoc +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/module.adoc @@ -11,12 +11,9 @@ In this workshop, you will: == Workshop Structure -How this works - - -TODO ..... - +This workshop is hands-on, and you will be writing code. +Each section will have a brief introduction, followed by a practical activity. If you are ready, let's get going! From df8550378888f37dd09e1193ad60c764a5ce6c46 Mon Sep 17 00:00:00 2001 From: Martin O'Hanlon Date: Mon, 11 Mar 2024 17:12:12 +0000 Subject: [PATCH 6/6] moved note --- .../lessons/1-getting-started/lesson.adoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/1-getting-started/lesson.adoc b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/1-getting-started/lesson.adoc index 49d33e92c..469901a9e 100644 --- a/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/1-getting-started/lesson.adoc +++ b/asciidoc/courses/genai-workshop/modules/1-knowledge-graphs-vectors/lessons/1-getting-started/lesson.adoc @@ -16,11 +16,11 @@ You can open a Neo4j Browser window throughout this course by clicking the link: You can use Gitpod as an online IDE and workspace for this workshop. It will automatically clone the workshop repository and set up your environment. +lab::Open `Gitpod workspace`[] + [NOTE] You will need to login with a Github, Gitlab, or Bitbucket account. -lab::Open `Gitpod workspace`[] - Alternatively, you can clone the repository and set up the environment yourself. [%collapsible]