From a6b3ba8b8e43ca53c65da915a39553e48a8c7c87 Mon Sep 17 00:00:00 2001 From: Martin O'Hanlon Date: Wed, 26 Nov 2025 16:41:18 +0000 Subject: [PATCH 1/9] in progress --- .../2-rag/lessons/2-vector-search/lesson.adoc | 2 +- asciidoc/courses/workshop-genai2/course.adoc | 31 + .../1-what-is-genai/images/confused-llm.svg | 1 + .../images/genai-model-process.svg | 1 + .../1-what-is-genai/images/llm-blackbox.svg | 1 + .../images/llm-missing-data.svg | 1 + .../images/llm-prompt-document-results.svg | 1 + .../images/llm-prompt-document.svg | 1 + .../images/llm-prompt-interaction.svg | 1 + .../lessons/1-what-is-genai/lesson.adoc | 160 ++ .../llm-news-agency-knowledge-graph.svg | 1 + .../2-graphrag/images/llm-news-agency.svg | 1 + .../2-graphrag/images/llm-rag-process.svg | 1 + .../images/llm-rag-vector+graph-process.svg | 1 + .../images/llm-text-to-cypher-process.svg | 1 + .../lessons/2-graphrag/lesson.adoc | 215 +++ .../images/generic-knowledge-graph.svg | 1 + .../images/neo4j-google-knowledge-graph.svg | 1417 +++++++++++++++++ .../images/org-principles-with-data.svg | 1 + .../images/org-principles.svg | 1 + .../lessons/3-knowledge-graph/lesson.adoc | 98 ++ .../lessons/4-neo4j-graphrag/lesson.adoc | 89 ++ .../modules/1-generative-ai/module.adoc | 24 + .../images/neo4j-wiki.png | Bin 0 -> 110167 bytes .../lesson.adoc | 164 ++ .../images/neo4j_graphdatabase.json | 97 ++ .../images/neo4j_graphdatabase.svg | 1 + .../lessons/2-extract-schema/lesson.adoc | 73 + .../images/entities-graph.png | Bin 0 -> 70361 bytes .../images/kg-builder-default-model.json | 130 ++ .../images/kg-builder-default-model.svg | 444 ++++++ .../images/kg_builder_pipeline.png | Bin 0 -> 203548 bytes .../lessons/3-create-a-graph/lesson.adoc | 128 ++ .../lessons/4-chunk-size/lesson.adoc | 81 + .../4-chunk-size/questions/1-chunk-size.adoc | 19 + .../lessons/5-define-a-schema/lesson.adoc | 159 ++ .../images/kg-builder-structured-model.json | 154 ++ .../images/kg-builder-structured-model.svg | 622 ++++++++ .../lessons/6-structured-data/lesson.adoc | 127 ++ .../module.adoc | 17 + .../lessons/1-vectors/apple-embedding.adoc | 1 + .../lessons/1-vectors/images/3d-vector.svg | 1 + .../images/llm-rag-create-vector.svg | 1 + .../images/llm-rag-vector-process.svg | 1 + .../1-vectors/images/vector-distance.svg | 1 + .../3-retrieval/lessons/1-vectors/lesson.adoc | 157 ++ .../2-vector-cypher-retriever/lesson.adoc | 126 ++ .../3-text-to-cypher-retriever/lesson.adoc | 79 + .../questions/1-text2cypher.adoc | 19 + .../modules/3-retrieval/module.adoc | 17 + .../modules/4-agents/module.adoc | 11 + asciidoc/courses/workshop-genai2/summary.adoc | 19 + 52 files changed, 4699 insertions(+), 1 deletion(-) create mode 100644 asciidoc/courses/workshop-genai2/course.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/confused-llm.svg create mode 100644 asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/genai-model-process.svg create mode 100644 asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/llm-blackbox.svg create mode 100644 asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/llm-missing-data.svg create mode 100644 asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/llm-prompt-document-results.svg create mode 100644 asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/llm-prompt-document.svg create mode 100644 asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/llm-prompt-interaction.svg create mode 100644 asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/lesson.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/2-graphrag/images/llm-news-agency-knowledge-graph.svg create mode 100644 asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/2-graphrag/images/llm-news-agency.svg create mode 100644 asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/2-graphrag/images/llm-rag-process.svg create mode 100644 asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/2-graphrag/images/llm-rag-vector+graph-process.svg create mode 100644 asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/2-graphrag/images/llm-text-to-cypher-process.svg create mode 100644 asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/2-graphrag/lesson.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/3-knowledge-graph/images/generic-knowledge-graph.svg create mode 100644 asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/3-knowledge-graph/images/neo4j-google-knowledge-graph.svg create mode 100644 asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/3-knowledge-graph/images/org-principles-with-data.svg create mode 100644 asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/3-knowledge-graph/images/org-principles.svg create mode 100644 asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/3-knowledge-graph/lesson.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/4-neo4j-graphrag/lesson.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/1-generative-ai/module.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/1-knowledge-graph-construction/images/neo4j-wiki.png create mode 100644 asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/1-knowledge-graph-construction/lesson.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/2-extract-schema/images/neo4j_graphdatabase.json create mode 100644 asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/2-extract-schema/images/neo4j_graphdatabase.svg create mode 100644 asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/2-extract-schema/lesson.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/3-create-a-graph/images/entities-graph.png create mode 100644 asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/3-create-a-graph/images/kg-builder-default-model.json create mode 100644 asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/3-create-a-graph/images/kg-builder-default-model.svg create mode 100644 asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/3-create-a-graph/images/kg_builder_pipeline.png create mode 100644 asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/3-create-a-graph/lesson.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/4-chunk-size/lesson.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/4-chunk-size/questions/1-chunk-size.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/5-define-a-schema/lesson.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/6-structured-data/images/kg-builder-structured-model.json create mode 100644 asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/6-structured-data/images/kg-builder-structured-model.svg create mode 100644 asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/6-structured-data/lesson.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/module.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/1-vectors/apple-embedding.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/1-vectors/images/3d-vector.svg create mode 100644 asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/1-vectors/images/llm-rag-create-vector.svg create mode 100644 asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/1-vectors/images/llm-rag-vector-process.svg create mode 100644 asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/1-vectors/images/vector-distance.svg create mode 100644 asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/1-vectors/lesson.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/2-vector-cypher-retriever/lesson.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/3-text-to-cypher-retriever/lesson.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/3-text-to-cypher-retriever/questions/1-text2cypher.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/3-retrieval/module.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/4-agents/module.adoc create mode 100644 asciidoc/courses/workshop-genai2/summary.adoc diff --git a/asciidoc/courses/genai-fundamentals/modules/2-rag/lessons/2-vector-search/lesson.adoc b/asciidoc/courses/genai-fundamentals/modules/2-rag/lessons/2-vector-search/lesson.adoc index 96cceedc4..1d7480c0b 100644 --- a/asciidoc/courses/genai-fundamentals/modules/2-rag/lessons/2-vector-search/lesson.adoc +++ b/asciidoc/courses/genai-fundamentals/modules/2-rag/lessons/2-vector-search/lesson.adoc @@ -154,6 +154,6 @@ include::questions/1-embeddings.adoc[leveloffset=+1] [.summary] == Lesson Summary -In this lesson, you learned about vectors and embeddings, and how they can be used in RAG to find relevent information. +In this lesson, you learned about vectors and embeddings, and how they can be used in RAG to find relevant information. In the next lesson, you will use a vector index in Neo4j to find relevant data. diff --git a/asciidoc/courses/workshop-genai2/course.adoc b/asciidoc/courses/workshop-genai2/course.adoc new file mode 100644 index 000000000..64c8b636c --- /dev/null +++ b/asciidoc/courses/workshop-genai2/course.adoc @@ -0,0 +1,31 @@ += Neo4j and Generative AI Workshop +:status: active +:duration: 3 hours +:caption: Learn how Neo4j and GraphRAG can support your Generative AI projects +:usecase: blank-sandbox +:video: https://www.youtube.com/embed/vVCHJFa01gA +:key-points: Generative AI, GraphRAG, Knowledge Graph Construction, Vectors and Text to Cypher Retrievers, Agents +:categories: workshops +:repository: neo4j-graphacademy/workshop-genai2 + + +== Course Description + + +Welcome to this Neo4j course. + +=== Prerequisites + +To take this course we recommend that you have taken these beginner courses in GraphAcademy: + +* link:/courses/neo4j-fundamentals/[Neo4j Fundamentals^] + + +=== Duration + +{duration} + + +=== What you will learn + +* Generative AI diff --git a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/confused-llm.svg b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/confused-llm.svg new file mode 100644 index 000000000..7dd0f1976 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/confused-llm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/genai-model-process.svg b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/genai-model-process.svg new file mode 100644 index 000000000..013292b00 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/genai-model-process.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/llm-blackbox.svg b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/llm-blackbox.svg new file mode 100644 index 000000000..b40be224a --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/llm-blackbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/llm-missing-data.svg b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/llm-missing-data.svg new file mode 100644 index 000000000..7804baee7 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/llm-missing-data.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/llm-prompt-document-results.svg b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/llm-prompt-document-results.svg new file mode 100644 index 000000000..6ca24a39a --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/llm-prompt-document-results.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/llm-prompt-document.svg b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/llm-prompt-document.svg new file mode 100644 index 000000000..744beda38 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/llm-prompt-document.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/llm-prompt-interaction.svg b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/llm-prompt-interaction.svg new file mode 100644 index 000000000..4b457cbfb --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/images/llm-prompt-interaction.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/lesson.adoc new file mode 100644 index 000000000..56cf47753 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/lesson.adoc @@ -0,0 +1,160 @@ += What is Generative AI +:order: 1 +:type: lesson +:slides: true + +[.slide] +== GenAI + +Generative AI (or GenAI) refers to artificial intelligence systems designed to create new content that resembles human-made data. The data could be text, images, audio, or code. + +[.transcript-only] +==== +These models, like GPT (for text) or DALL-E (for images), are trained on large datasets and use patterns learned from this data to generate new output. +==== + +image::images/genai-model-process.svg[A diagram showing the process of Generative AI, where a model is trained on a large dataset, learns patterns, and generates new content based on those patterns.] + +[.transcript-only] +==== +Generative AI is widely used in applications such as chatbots, content creation, image synthesis, and code generation. +==== + +[.slide.discrete] +== GenAI + +Generative AI models are not "intelligent" in the way humans are: + +. They do not understand or comprehend the content they generate +. They rely on statistical patterns and correlations learned from their training data. + +While Generative AI models can produce coherent and contextually relevant outputs, they lack understanding. + +[.slide] +== Large Language Models (LLMs) + +This course will focus on text-generating models, specifically Large Language Models (LLMs) + +LLMs are a type of generative AI model designed to understand and generate human-like text. + +These models are trained on vast amounts of text data and can perform various tasks, including answering questions, summarizing data, and analyzing text. + +[.slide.discrete] +== LLM Responses + +The response generated by an LLM is a probabilistic continuation of the instructions it receives. + +The LLM provides the most likely response based on the patterns it has learned from its training data. + +If presented with the instruction: + + "Continue this sequence - A B C" + +An LLM could respond: + + "D E F" + +[.slide.col-2] +== Prompts + +[.col] +==== +To get an LLM to perform a task, you provide a **prompt**. + +A prompt should specify your requirements and provide clear instructions on how to respond. +==== + +[.col] +image::images/llm-prompt-interaction.svg["A user asks an LLM the question 'What is an LLM? Give the response using simple language avoiding jargon.', the LLM responds with a simple definition of an LLM."] + +[.slide.discrete] +== Caution + +While GenAI and LLMs provide a lot of potential, you should also be cautious. + +At their core, LLMs are highly complex predictive text machines. LLM’s don’t know or understand the information they output; they simply predict the next word in a sequence. + +The words are based on the patterns and relationships from other text in the training data. + +[.slide] +== Access to Data + +The sources for this training data are often the internet, books, and other publicly available text. +The data could be of questionable quality or even incorrect. + +Training happens at a point in time, the data is static, and may not reflect the current state of the world or include any private information. + +[.slide.discrete] +== Access to Data + +When prompted to provide a response, relating to new or data not in the training set, the LLM may provide a response that is not accurate. + +image::images/llm-missing-data.svg["A diagram of an LLM returning out of data information."] + +[.slide.col-2] +== Accuracy + +[.col] +==== +LLMs are designed to create human-like text and are often fine-tuned to be as helpful as possible, even if that means occasionally generating misleading or baseless content, a phenomenon known as **hallucination**. + +For example, when asked to _"Describe the moon."_ an LLM may respond with _"The moon is made of cheese."_. +While this is a common saying, it is not true. +==== + +[.col] +image::images/confused-llm.svg["A diagram of a confused LLM with a question mark thinking about the moon and cheese."] + +[.transcript-only] +==== +While LLMs can represent the essence of words and phrases, they don't possess a genuine understanding or ethical judgment of the content. +==== + +[.slide.discrete] +== Improving LLM responses + +You can improve the accuracy of responses from LLMs by providing _context_ in your prompts. + +The context could include relevant information, data, or details that help the model generate more accurate and relevant responses. + +[.slide.col-2] +== Avoiding hallucination + +[.col] +==== +Providing context can help minimize hallucinations by anchoring the model’s response to the facts and details you supply. + +If you ask a model to summarize a company's performance, the model is more likely to produce an accurate summary if you include a relevant stock market report in your prompt. +==== + +[.col] +image::images/llm-prompt-document.svg["A diagram of an LLM being passed a stock market report and being asked to summarise a company's performance."] + +[.slide.col-2] +== Access to data + +[.col] +==== +LLMs have a fixed knowledge cutoff and cannot access real-time or proprietary data unless it is provided in the prompt. + +If you need the model to answer questions about recent events or organization-specific information, you must supply that data as part of your prompt. This ensures that the model’s responses are up-to-date and relevant to your particular use case. + +You could also provide statistics or data points in the prompt to help the model include useful facts in its response. +==== + +[.col] +image::images/llm-prompt-document-results.svg["A diagram of an LLM being passed a stock market report and the annual results, being asked to summarize a company's performance. The response includes a specific profit figure from the annual results."] + +[.slide] +== Supplying context + +Supplying context in your prompts helps LLMs generate more *accurate*, *relevant*, and *trustworthy* responses by *reducing hallucinations* and *compensating for the lack of access to data*. + +read::Continue[] + +[.summary] +== Lesson Summary + +In this lesson, you learned about Generative AI models, their capabilities, constraints, and how providing context in your prompts can help improve the accuracy of LLM responses. + +In the next lesson, you will learn about Retrieval-Augmented Generation (RAG), GraphRAG, and how they can be used to provide context to LLMs. diff --git a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/2-graphrag/images/llm-news-agency-knowledge-graph.svg b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/2-graphrag/images/llm-news-agency-knowledge-graph.svg new file mode 100644 index 000000000..35a15f919 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/2-graphrag/images/llm-news-agency-knowledge-graph.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/2-graphrag/images/llm-news-agency.svg b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/2-graphrag/images/llm-news-agency.svg new file mode 100644 index 000000000..77f805538 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/2-graphrag/images/llm-news-agency.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/2-graphrag/images/llm-rag-process.svg b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/2-graphrag/images/llm-rag-process.svg new file mode 100644 index 000000000..22235d46d --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/2-graphrag/images/llm-rag-process.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/2-graphrag/images/llm-rag-vector+graph-process.svg b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/2-graphrag/images/llm-rag-vector+graph-process.svg new file mode 100644 index 000000000..d988c79e4 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/2-graphrag/images/llm-rag-vector+graph-process.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/2-graphrag/images/llm-text-to-cypher-process.svg b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/2-graphrag/images/llm-text-to-cypher-process.svg new file mode 100644 index 000000000..0b7254062 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/2-graphrag/images/llm-text-to-cypher-process.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/2-graphrag/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/2-graphrag/lesson.adoc new file mode 100644 index 000000000..69c9a3b1f --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/2-graphrag/lesson.adoc @@ -0,0 +1,215 @@ += GraphRAG? +:order: 1 +:type: lesson + +[.slide] +== Retrieval-Augmented Generation + +Retrieval-Augmented Generation (RAG) is an approach that enhances the responses of LLMs by providing them with relevant, up-to-date information retrieved from external sources. + +RAG helps generate more accurate and tailored answers, especially when the required information is not present in the model’s training data. + +[.slide.col-2] +== The Retrieval-Augmented Generation (RAG) Process + +[.col] +==== +The RAG process typically involves three main steps: + +. **Understanding the User Query** ++ +The system first interprets the user’s input or question to determine what information is needed. +. **Information Retrieval** ++ +A _retriever_ searches external data sources (such as documents, databases, or knowledge graphs) to find relevant information based on the user’s query. +. **Response Generation** ++ +The retrieved information is inserted into the prompt, and the language model uses this context to generate a more accurate and relevant response. +==== + +[.col] +image::images/llm-rag-process.svg["A diagram showing the RAG process. A question from a user is sent to a retriever, which searches for relevant information. The retrieved information is then combined with the original question and sent to a language model, which generates a response."] + +[.slide.col-2.discrete] +== The RAG Process + +[.col] +==== +RAG systems can provide responses that are both contextually aware and grounded in real, up-to-date information. + +If building a chatbot for a news agency, you could use RAG to pull real-time headlines or results from a news API. + +When a user asks, "What’s the latest news on the Olympics?", the chatbot, can provide a current headline or summary from the most recent articles, ensuring the response is timely and accurate. + +[NOTE] +.Grounding +===== +The process of providing context to an LLM to improve the accuracy of its responses and reduce the likelihood of hallucinations is known as _Grounding_. +===== +==== + +[.col] +image::images/llm-news-agency.svg["A news agency chatbot, showing the user asking a question, the chatbot grounding the question with a news API, and the chatbot responding with the latest news."] + + +[.slide] +== Retrievers + +The retriever is a key component of the RAG process. A retriever is responsible for searching and retrieving relevant information from external data sources based on the user’s query. + +A retriever typically takes an *unstructured input* (like a question or prompt) and searches for structured data that can provide context or answers. + +Neo4j support various methods for building retrievers, including: + +* Full-text search +* Vector search +* Text to Cypher + +You will explore these methods in the rest of the course. + +[.slide] +== Data sources + +The data sources used in the RAG process can vary widely, depending on the application and the type of information needed. Common data sources include: + +* **Documents** ++ +Textual data sources, such as articles, reports, or manuals, that can be searched for relevant information. +* **APIs** ++ +External services that can provide real-time data or specific information based on user queries. +* **Knowledge Graphs** ++ +Graph-based representations of information that can provide context and relationships between entities. + +[.slide.col-2.discrete] +== Data sources + +[.col] +==== +The news agency chatbot could use the following data sources: + +* A news API to retrieve the latest articles or headlines. +* A knowledge graph to understand the relationships between different news topics, such as how they relate to each other or their historical context. This would help the chatbot provide more in-depth and contextual responses. +* A document database to store and retrieve articles, reports, or other textual data that can be used to answer user queries. +==== + +[.col] +image::images/llm-news-agency-knowledge-graph.svg["A news agency chatbot, showing the user asking a question, the chatbot grounding with the addition of data from a knowledge graph"] + +[.transcript-only] +==== +[TIP] +.Learn more about knowledge graphs +===== +You will learn more about knowledge graphs and their construction in the next module. +===== +==== + +[.slide.discrete] +== GraphRAG + +GraphRAG (Graph Retrieval Augmented Generation) is an approach that uses the strengths of graph databases to provide relevant and useful context to LLMs. + +GraphRAG can be used in conjunction with vector RAG. + +While vector RAG uses embeddings to find contextually relevant information, GraphRAG enhances this process by leveraging the relationships and structure within a graph. + +[.slide.discrete] +== GraphRAG + +Benefits of GraphRAG: + +* *Richer Context* ++ +Graphs capture relationships between entities, enabling retrieval of more relevant and connected information. +* *Improved Accuracy* ++ +By combining vector similarity with graph traversal, results are more precise and context-aware. +* *Explainability* ++ +Graphs provide clear paths and connections, making it easier to understand why certain results were retrieved. +* *Flexible Queries*: ++ +GraphRAG supports complex queries, such as combining full-text, vector, and text-to-cypher searches. +* *Enhanced Reasoning* ++ +Graphs enable reasoning over data, supporting advanced use cases like recommendations and knowledge discovery. + +[.slide.col-60-40] +== Graph-Enhanced Vector Search + +[.col] +==== +A common approach to GraphRAG is to use a combination of vector search and graph traversal. + +This allows for the retrieval of relevant documents based on semantic similarity, followed by a graph traversal to find related entities or concepts. + +The high-level process is as follows: + +. A user submits a query. +. The system uses a vector search to find nodes similar to the users query. +. The graph is then traversed to find related nodes or entities. +. The entities and relationships are added to the context for the LLM. +. The related data could also be scored based on its relevance to the user query. +==== + +[.col] +image::images/llm-rag-vector+graph-process.svg[A diagram showing a user question being passed to a vector search to find semantically similar data. The results are then used to find related nodes or entities in the graph. The most relevant results are used as context for the LLM.] + +[.slide] +== Full Text Search + +Full text search is another powerful technique that can be combined with graph-enhanced search to further improve information retrieval. + +While vector search excels at finding semantically similar content, full text search allows users to match specific keywords or phrases within documents or nodes. + +If the user is looking for a movie or actor by name, full text search can quickly locate those entities based on exact text matches. + +Full text search can be used as a replacement for or in conjunction with vector search. + +When used in conjunction with vector search, full text search can refine results by filtering out irrelevant content based on specific keywords or phrases. + +[TIP] +.Learn more about full text search +Full text search is available in Neo4j using link:https://neo4j.com/docs/cypher-manual/current/indexes/semantic-indexes/full-text-indexes/[full-text indexes^]. + +[.slide.col-2] +== Text to Cypher + +[.col] +==== +Text to Cypher is an alternative approach in GraphRAG that allows users to express their information needs in natural language, which is then automatically translated into Cypher queries. + +You leverage the power of LLMs to interpret user intent and generate precise graph queries, enabling direct access to structured data and relationships within the graph. + +You can use text to Cypher to turn users' queries into complex searches, aggregations, or traversals, making advanced graph querying more accessible and flexible. + +Text to Cypher works by passing the user's query and the graph schema to an LLM, which generates a Cypher query that can be executed against the graph database. +==== + +[.col] +image::images/llm-text-to-cypher-process.svg[A diagram showing a user question being passed to an LLM, which generates a Cypher query based on the graph schema. The generated Cypher query is then executed against the graph database to retrieve relevant data.] + +[.transcript-only] +==== +[IMPORTANT] +.Exercise caution with LLM-generated queries +===== +Caution should always be taken when executing LLM-generated Cypher queries, as they may not always be safe or efficient. + +You are trusting the generation of Cypher to the LLM. +It may generate invalid Cypher queries that could corrupt data in the graph or provide access to sensitive information. + +In a production environment, you should ensure that access to data is limited, and sufficient security is in place to prevent malicious queries. +===== +==== + +read::Continue[] + +[.summary] +== Lesson Summary + +In this lesson, you learned about RAG and GraphRAG techniques, and how they can be used to enhance information retrieval. + +In the next lesson, you will learn about knowledge graphs and how they represent real-world entities and their relationships. \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/3-knowledge-graph/images/generic-knowledge-graph.svg b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/3-knowledge-graph/images/generic-knowledge-graph.svg new file mode 100644 index 000000000..1d672273d --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/3-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/workshop-genai2/modules/1-generative-ai/lessons/3-knowledge-graph/images/neo4j-google-knowledge-graph.svg b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/3-knowledge-graph/images/neo4j-google-knowledge-graph.svg new file mode 100644 index 000000000..1e16b5dae --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/3-knowledge-graph/images/neo4j-google-knowledge-graph.svg @@ -0,0 +1,1417 @@ + + + + + + + + + + + + + + + + + FOUNDED + + + + + + + + + + + + + + LOCATED + + + + + + + + + + + + + + LOCATED + + + + + + + + + + + + + + CAPITAL_OF + + + + + + + + + + + + + + FOUNDER + + + + + + + + + + + + + + WORKS_AT + + + + + + + + + + + + + + ABOUT + + + + + + + + + + + + + + WRITTEN_BY + + + + + + + + + + + + + + OWNER_OF + + + + + + + + + + + + + + PUBLISHED ON + + + + + + + + + + + + + REFERS_TO + + + + + + + + + + + + + + + + + + + PUBLISHED_ON + + + + + + + + + + + + + Neo4j + + + + + + + Company + + + + + + + + + + + + + + + Malmo + + + + + + + Location + + + + + + + + + + + + + + + London + + + + + + + Location + + + + + + + + + + + + + + + Blog + Post + + + + + + + Article + + + + + + + + + + + + + + + United + Kingdom + + + + + + + Location + + + + + + + + + + + + + + + Emil + Eifrém + + + + + + + Person + + + + + + + + + + + + + + + neo4j.com + + + + + + + Website + + + + + + + + + + + + + + + Database + + + + + + + Technology + + + + + + + + + + + + + + + Documentation + + + + + + + Article + + + + + + + + + + + REFERS_TO + + + + + diff --git a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/3-knowledge-graph/images/org-principles-with-data.svg b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/3-knowledge-graph/images/org-principles-with-data.svg new file mode 100644 index 000000000..2f18e8b7a --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/3-knowledge-graph/images/org-principles-with-data.svg @@ -0,0 +1 @@ +HAS_MODULEHAS_LESSONTYPE_OFTYPE_OFTYPE_OFTYPE_OFHAS_LESSONTYPE_OFTYPE_OFTYPE_OFTYPE_OFTYPE_OFCoursename:Neo4j & LLMModulename:Generative AIorder:1Lessonname:Neo4j & Generative AIorder:1Typename:quizTypename:challengeTypename:videoTypename:practicalContentLessonname:Grounding LLMSorder:2 \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/3-knowledge-graph/images/org-principles.svg b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/3-knowledge-graph/images/org-principles.svg new file mode 100644 index 000000000..4bf0f05c9 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/3-knowledge-graph/images/org-principles.svg @@ -0,0 +1 @@ +TYPE_OFTYPE_OFTYPE_OFTYPE_OFTypename:quizTypename:challengeTypename:videoTypename:practicalContent \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/3-knowledge-graph/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/3-knowledge-graph/lesson.adoc new file mode 100644 index 000000000..56e9bff8a --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/3-knowledge-graph/lesson.adoc @@ -0,0 +1,98 @@ += What is a Knowledge Graph +:order: 1 +:type: lesson + + +[.slide.discrete] +== Knowledge Graphs +[quote] +A knowledge graph is an organized representation of real-world entities and their relationships. + +Knowledge graphs provide a structured way to represent entities, their attributes, and their relationships, allowing for a comprehensive and interconnected understanding of the information. + +Knowledge graphs are useful for Generative AI applications because they provide structured, interconnected data that enhances context, reasoning, and accuracy in generated responses. + +[.slide.discrete.col-2] +== Search Engines + +[.col] +==== +Search engines typically use knowledge graphs to provide information about people, places, and things. + +This knowledge graph could represent Neo4j: +==== + +[.col] +image::images/neo4j-google-knowledge-graph.svg["An example of a knowledge graph of Neo4j showing the relationships between people, places, and things", width=90%] + +[.slide.discrete.col-2] +== Data sources + +[.col] +==== +Knowledge graphs can break down sources of information and integrate them, allowing you to see the relationships between the data. + +This integration from diverse sources gives knowledge graphs a more holistic view and facilitates complex queries, analytics, and insights. + +Knowledge graphs can readily adapt and evolve as they grow, taking on new information and structure changes. +==== + +[.col] +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] + +[.transcript-only] +==== +Neo4j is well-suited for representing and querying complex, interconnected data in Knowledge Graphs. +Unlike traditional relational databases, which use tables and rows, Neo4j uses a graph-based model with nodes and relationships. +==== + +[.slide.col-2] +== Organizing principles + +[.col] +==== +A knowledge graph stores data and relationships alongside frameworks known as organizing principles. + +The organizing principles are the rules or categories around the data that provide structure to the data. +Organizing principles can range from simple data descriptions, for example, describing a GraphAcademy course as `course -> modules -> lessons`, to a complex vocabulary of the complete solution. + +Knowledge graphs are inherently flexible, and you can change the organizing principles as the data grows and changes. + +The organizing principles describing the content in GraphAcademy could look like this: +==== + +[.col] +image::images/org-principles.svg[A Graph showing 4 types of content] + +[.slide.discrete.col-40-60] +== Organizing principles + +[.col] +==== +The organizing principles are stored as nodes in the graph and can be stored alongside the actual data. + +This integration of organizing principles and data allows for complex queries and analytics to be performed. + +Mapping the organizing principles to the lesson content in GraphAcademy could look like this: +==== + +[.col] +image::images/org-principles-with-data.svg[A Graph showing the organizing principles and the lesson content] + +[.slide] +== Generative AI applications + +In Generative AI applications, knowledge graphs play a crucial role by capturing and organizing important domain-specific or proprietary company information. They are not limited to strictly structured data—knowledge graphs can also integrate and represent less organized or unstructured information. + +GraphRAG can use knowledge graphs for context, forming the foundation for applications that leverage proprietary or domain-specific data. By grounding responses in a knowledge graph, these applications can provide more accurate answers and greater _explainability_, thanks to the rich context and relationships present in the data. + +read::Continue[] + +[.summary] +== Lesson Summary + +In this lesson, you learned about knowledge graphs and how they are an organized representation of real-world entities and their relationships. + +You can learn more in the Neo4j blog post link:https://neo4j.com/blog/what-is-knowledge-graph[What Is a Knowledge Graph?^]. + +In the next lesson, you will setup your development environment to use Neo4j's GraphRAG capabilities. diff --git a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/4-neo4j-graphrag/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/4-neo4j-graphrag/lesson.adoc new file mode 100644 index 000000000..ea927e86a --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/4-neo4j-graphrag/lesson.adoc @@ -0,0 +1,89 @@ += GraphRAG for Python +:order: 1 +:type: lesson +:branch: new-workshop +:repository-dir-name: workshop-genai2 + +The link:https://neo4j.com/docs/neo4j-graphrag-python/current/[GraphRAG for Python^] package (`neo4j-graphrag`) allows you to access Neo4j Generative AI functions including: + +- Retrievers +- GraphRAG pipelines +- Knowledge graph construction + +The purpose is to provide a first party package to developers, where Neo4j can guarantee long term commitment and maintenance as well as being fast to ship new features and high performing patterns and methods. + +You will use the `neo4j-graphrag` package to create a knowledge graph, retrievers and implement simple applications that use GraphRAG to provide context to LLM queries. + +You must set up a development environment to run the code examples and exercises. + +include::../../../../../../shared/courses/codespace/get-started.adoc[] + +[%collapsible] +.Develop on your local machine +==== +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:{repository-link}[github.com/neo4j-graphacademy/{repository-dir-name}] repository: + +[source,bash] +---- +git clone https://github.com/neo4j-graphacademy/{repository-dir-name} +---- + +Install the required packages using `pip`: + +[source,bash] +---- +cd neo4j-graphacademy/{repository-dir-name} +pip install -r requirements.txt +---- + +You do not need to create a Neo4j database as you will use the provided sandbox instance. + +The sandbox uses Neo4j's GenAI functions, you can find out more about how to configure them in the link:https://neo4j.com/docs/cypher-manual/current/genai-integrations/[Neo4j GenAI integration documentation^]. +==== + +== 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 +---- +OPENAI_API_KEY="sk-..." +NEO4J_URI="{instance-scheme}://{instance-ip}:{instance-boltPort}" +NEO4J_USERNAME="{instance-username}" +NEO4J_PASSWORD="{instance-password}" +NEO4J_DATABASE="{instance-database}" +---- + +Add your Open AI API key (`OPENAI_API_KEY`), which you can get from link:https://platform.openai.com[platform.openai.com^]. + +// Update the Neo4j sandbox connection details: + +// NEO4J_URI:: [copy]#{instance-scheme}://{instance-ip}:{instance-boltPort}# +// NEO4J_USERNAME:: [copy]#{instance-username}# +// NEO4J_PASSWORD:: [copy]#{instance-password}# +// NEO4J_DATABASE:: [copy]#{instance-database}# + +== Test your setup + +You can test your setup by running `{repository-dir-name}/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. + +== Continue + +When you are ready, you can move on to the next task. + +read::Success - let's get started![] + +[.summary] +== Summary + +You have setup your environment and are ready to start coding. + +In the next module, you will ... diff --git a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/module.adoc b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/module.adoc new file mode 100644 index 000000000..8ba2d1399 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/module.adoc @@ -0,0 +1,24 @@ += Generative AI +:order: 1 + +== Module Overview + +In this module, you will learn: + +* What Generative AI is and how it works: +* What Large Language Models (LLMs) are and how they differ from other AI models. +* The limitations of Generative AI models, including _hallucination_ and _access to data_. +* How providing context can improve the responses from Generative AI models. + +* What Retrieval Augmented Generation (RAG) is and how you can use it to improve GenerativeAI model responses. +* About GraphRAG techniques, and how they can be used to enhance information retrieval. + + +* What knowledge graphs are and how they represent real-world entities and their relationships. +* The benefits of using knowledge graphs for organizing, integrating, and querying complex information. + + + +If you are ready, let's get going! + +link:./1-what-is-genai/[Ready? Let's go →, role=btn] diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/1-knowledge-graph-construction/images/neo4j-wiki.png b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/1-knowledge-graph-construction/images/neo4j-wiki.png new file mode 100644 index 0000000000000000000000000000000000000000..ad16f46d1fc1b53060fb937c23b898169028eded GIT binary patch literal 110167 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�SOI$GLOLeiHB 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 literal 0 HcmV?d00001 diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/1-knowledge-graph-construction/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/1-knowledge-graph-construction/lesson.adoc new file mode 100644 index 000000000..f2d02f6bf --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/1-knowledge-graph-construction/lesson.adoc @@ -0,0 +1,164 @@ += Constructing knowledge graphs +:type: lesson +:order: 1 + +In this lesson, you will review the process of constructing knowledge graphs from unstructured text using an LLM. + +== The construction process + +When constructing a knowledge graph from unstructured text, you typically follow these steps: + +. Gather the data +. Chunk the data +. _Vectorize_ the data +. Pass the data to an LLM to extract nodes and relationships +. Use the output to generate the graph + +=== Gather your data sources + +The first step is to gather your unstructured data. +The data can be in the form of text documents, PDFs, publicly available data, or any other source of information. + +Depending on the format, you may need to reformat the data into a format (typically text) that the LLM can process. + +The data sources should contain the information you want to include in your knowledge graph. + +=== Chunk the data + +The next step is to break down the data into _right-sized_ parts. +This process is known as _chunking_. + +The size of the chunks depends on the LLM you are using, the complexity of the data, and what you want to extract from the data. + +You may not need to chunk the data if the LLM can process the entire document at once and it fits your requirements. + +=== Vectorize the data + +Depending on your requirements for querying and searching the data, you may need to create *vector embeddings*. +You can use any embedding model to create embeddings for each data chunk, but the same model must be used for all embeddings. + +Placing these vectors into a link:https://neo4j.com/docs/cypher-manual/current/indexes/semantic-indexes/vector-indexes/[Vector index^] allows you to perform semantic searches, similarity searches, and clustering on the data. + +[TIP] +.Chunking, Vectors, and Similarity Search +You can learn more about how to chunk documents, vectors, similarity search, and embeddings in the GraphAcademy course link:https://graphacademy.neo4j.com/courses/llm-vectors-unstructured/1-introduction/2-semantic-search/[Introduction to Vector Indexes and Unstructured Data^]. + +=== Extract nodes and relationships + +The next step is to pass the unstructured text data to the LLM to extract the nodes and relationships. + +You should provide a suitable prompt that will instruct the LLM to: + +- Identify the entities in the text. +- Extract the relationships between the entities. +- Format the output so you can use it to generate the graph, for example, as JSON or another structured format. + +Optionally, you may also provide additional context or constraints for the extraction, such as the type of entities or relationships you are interested in extracting. + + +=== Generate the graph + +Finally, you can use the output from the LLM to generate the graph by creating the nodes and relationships within Neo4j. + +The entity and relationship types would become labels and relationship types in the graph. +The _names_ would be the node and relationship identifiers. + +== Example + +If you wanted to construct a knowledge graph based on the link:https://en.wikipedia.org/wiki/Neo4j[Neo4j Wikipedia page^], you would: + +. **Gather** the text from the page. + ++ +image::images/neo4j-wiki.png["A screenshot of the Neo4j wiki page"] +. Split the text into **chunks**. ++ + Neo4j is a graph database management system (GDBMS) developed + by Neo4j Inc. ++ +{sp} ++ + The data elements Neo4j stores are nodes, edges connecting them, + and attributes of nodes and edges... + +. Generate **embeddings** and **vectors** for each chunk. ++ + [0.21972137987, 0.12345678901, 0.98765432109, ...] + +. **Extract** the entities and relationships using an **LLM**. ++ +Send the text to the LLM with an appropriate prompt, for example: ++ + Your task is to identify the entities and relations requested + with the user prompt from a given text. You must generate the + output in a JSON format containing a list with JSON objects. + + Text: + {text} ++ +Parse the entities and relationships output by the LLM. ++ +[source, json] +---- +{ + "node_types": [ + { + "label": "GraphDatabase", + "properties": [ + { + "name": "Neo4j", "type": "STRING" + } + ] + }, + { + "label": "Company", + "properties": [ + { + "name": "Neo4j Inc", "type": "STRING" + } + ] + }, + { + "label": "Programming Language", + "properties": [ + { + "name": "Java", "type": "STRING" + } + ] + } + ], + "relationship_types": [ + { + "label": "DEVELOPED_BY" + }, + { + "label": "IMPLEMENTED_IN" + } + ], + "patterns": [ + ["Neo4j", "DEVELOPED_BY", "Neo4j Inc"], + ["Neo4j", "IMPLEMENTED_IN", "Java"], + ] +} +---- +. **Generate** the graph. ++ +Use the data to construct the graph in Neo4j by creating nodes and relationships based on the entities and relationships extracted by the LLM. ++ +[source, cypher, role=noplay nocopy] +.Generate the graph +---- +MERGE (neo4jInc:Company {id: 'Neo4j Inc'}) +MERGE (neo4j:GraphDatabase {id: 'Neo4j'}) +MERGE (java:ProgrammingLanguage {id: 'Java'}) +MERGE (neo4j)-[:DEVELOPED_BY]->(neo4jInc) +MERGE (neo4j)-[:IMPLEMENTED_IN]->(java) +---- + +read::Continue[] + +[.summary] +== Lesson Summary + +In this lesson, you learned about how to construct a knowledge graph. + +In the next lesson, you will extract a graph schema from a piece of text and review the results. diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/2-extract-schema/images/neo4j_graphdatabase.json b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/2-extract-schema/images/neo4j_graphdatabase.json new file mode 100644 index 000000000..cdd281bf0 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/2-extract-schema/images/neo4j_graphdatabase.json @@ -0,0 +1,97 @@ +{ + "style": { + "font-family": "sans-serif", + "background-color": "#ffffff", + "background-image": "", + "background-size": "100%", + "node-color": "#ffffff", + "border-width": 4, + "border-color": "#000000", + "radius": 50, + "node-padding": 5, + "node-margin": 2, + "outside-position": "auto", + "node-icon-image": "", + "node-background-image": "", + "icon-position": "inside", + "icon-size": 64, + "caption-position": "inside", + "caption-max-width": 200, + "caption-color": "#000000", + "caption-font-size": 50, + "caption-font-weight": "normal", + "label-position": "inside", + "label-display": "pill", + "label-color": "#000000", + "label-background-color": "#ffffff", + "label-border-color": "#000000", + "label-border-width": 4, + "label-font-size": 40, + "label-padding": 5, + "label-margin": 4, + "directionality": "directed", + "detail-position": "inline", + "detail-orientation": "parallel", + "arrow-width": 5, + "arrow-color": "#000000", + "margin-start": 5, + "margin-end": 5, + "margin-peer": 20, + "attachment-start": "normal", + "attachment-end": "normal", + "relationship-icon-image": "", + "type-color": "#000000", + "type-background-color": "#ffffff", + "type-border-color": "#000000", + "type-border-width": 0, + "type-font-size": 16, + "type-padding": 5, + "property-position": "outside", + "property-alignment": "colon", + "property-color": "#000000", + "property-font-size": 16, + "property-font-weight": "normal" + }, + "nodes": [ + { + "id": "n0", + "position": { + "x": -223, + "y": 0 + }, + "caption": "Neo4j", + "style": { + "radius": 100 + }, + "labels": [ + "GraphDatabase" + ], + "properties": {} + }, + { + "id": "n1", + "position": { + "x": 286.5, + "y": 0 + }, + "caption": "Neo4j", + "style": { + "radius": 100 + }, + "labels": [ + "Company" + ], + "properties": {} + } + ], + "relationships": [ + { + "id": "n0", + "type": "DEVELOPED_BY", + "style": {}, + "properties": {}, + "fromId": "n0", + "toId": "n1" + } + ] +} \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/2-extract-schema/images/neo4j_graphdatabase.svg b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/2-extract-schema/images/neo4j_graphdatabase.svg new file mode 100644 index 000000000..73b4ebbf5 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/2-extract-schema/images/neo4j_graphdatabase.svg @@ -0,0 +1 @@ +DEVELOPED_BYNeo4jGraphDatabaseNeo4jCompany \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/2-extract-schema/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/2-extract-schema/lesson.adoc new file mode 100644 index 000000000..48f113c9a --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/2-extract-schema/lesson.adoc @@ -0,0 +1,73 @@ += Extracting a schema from text +:type: lesson +:order: 2 +:branch: new-workshop + +The link:https://neo4j.com/docs/neo4j-graphrag-python/current/[GraphRAG for Python^] package (`neo4j-graphrag`) allows you to access Neo4j Generative AI functions. + +During this course you will use the `neo4j_graphrag` package to build a knowledge graph and retrievers to extract information from the graph using LLMs. + +In this lesson you will review how a graph schema can be extracted from text using an LLM. + +== Using the SchemaFromTextExtractor + +Open `workshop-genai/extract_schema.py` + +[source, python] +.extract_entities.py +---- +include::{repository-raw}/{branch}/workshop-genai/extract_schema.py[] +---- + +The code uses the `SchemaFromTextExtractor` class to extract a schema from a given text input. + +The extractor: + +. Creates a prompt instructing the LLM to: +.. Identify entities and relationships in any given text +.. Format the output as JSON +. Passes the prompt and text to the LLM for processing +. Parses the JSON response to create a schema object + +Given the text, _"Neo4j is a graph database management system (GDBMS) developed by Neo4j Inc."_, a simplified version of the extracted schema would be: + +[source,text] +.Extracted Schema +---- +node_types=( + NodeType(label='GraphDatabase), + NodeType(label='Company') +) +relationship_types=( + RelationshipType(label='DEVELOPED_BY'), +) +patterns=( + ('GraphDatabaseManagementSystem', 'DEVELOPED_BY', 'Company') +) +---- + +Run the program and observe the output. You will see a more detailed schema based on the text provided. + +This schema can be used to store the data held within the text. + +image::images/neo4j_graphdatabase.svg["a graph schema with a Neo4j GraphDatabase node connected to a Neo4j Inc Company node via a DEVELOPED_BY relationship"] + +Experiment with different text inputs to see how the schema extraction varies based on the content provided, for example: + +* "Python is a programming language created by Guido van Rossum." +* "The Eiffel Tower is a wrought-iron lattice tower on the Champ de Mars in Paris, France." +* "Large Language Models (LLMs) are a type of artificial intelligence model designed to understand and generate human-like text." + +When you have experimented with the schema extraction, you can continue. + +read::Continue[] + +[.summary] +== Lesson Summary + +In this lesson, you: + +* Learned how to extract a graph schema from unstructured text using an LLM. +* Explored how different text inputs can lead to different schema extractions. + +In the next lesson, you will create a knowledge graph construction pipeline using the `SimpleKGPipeline` class. diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/3-create-a-graph/images/entities-graph.png b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/3-create-a-graph/images/entities-graph.png new file mode 100644 index 0000000000000000000000000000000000000000..58c527cc5d750f9140a80649376b975bf3b6b848 GIT binary patch literal 70361 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

6N+!6N2fsfdtga)9Ir7-rM-Rd*Pe6xUN68 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 literal 0 HcmV?d00001 diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/3-create-a-graph/images/kg-builder-default-model.json b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/3-create-a-graph/images/kg-builder-default-model.json new file mode 100644 index 000000000..7ce5bca1d --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/3-create-a-graph/images/kg-builder-default-model.json @@ -0,0 +1,130 @@ +{ + "style": { + "font-family": "sans-serif", + "background-color": "#ffffff", + "background-image": "", + "background-size": "100%", + "node-color": "#ffffff", + "border-width": 4, + "border-color": "#000000", + "radius": 50, + "node-padding": 5, + "node-margin": 2, + "outside-position": "auto", + "node-icon-image": "", + "node-background-image": "", + "icon-position": "inside", + "icon-size": 64, + "caption-position": "inside", + "caption-max-width": 200, + "caption-color": "#000000", + "caption-font-size": 50, + "caption-font-weight": "normal", + "label-position": "inside", + "label-display": "pill", + "label-color": "#000000", + "label-background-color": "#ffffff", + "label-border-color": "#000000", + "label-border-width": 4, + "label-font-size": 40, + "label-padding": 5, + "label-margin": 4, + "directionality": "directed", + "detail-position": "inline", + "detail-orientation": "parallel", + "arrow-width": 5, + "arrow-color": "#000000", + "margin-start": 5, + "margin-end": 5, + "margin-peer": 20, + "attachment-start": "normal", + "attachment-end": "normal", + "relationship-icon-image": "", + "type-color": "#000000", + "type-background-color": "#ffffff", + "type-border-color": "#000000", + "type-border-width": 0, + "type-font-size": 16, + "type-padding": 5, + "property-position": "outside", + "property-alignment": "colon", + "property-color": "#000000", + "property-font-size": 16, + "property-font-weight": "normal" + }, + "nodes": [ + { + "id": "n0", + "position": { + "x": 3.8117408928910077e-32, + "y": 47.03686581561153 + }, + "caption": "Document", + "style": {}, + "labels": [], + "properties": { + "path": "", + "createdAt": "" + } + }, + { + "id": "n1", + "position": { + "x": -1.1723460390943958e-32, + "y": 378.9796534081454 + }, + "caption": "Chunk", + "style": {}, + "labels": [], + "properties": { + "index": "", + "text": "", + "embedding": "" + } + }, + { + "id": "n2", + "position": { + "x": 331.942787592534, + "y": 378.9796534081454 + }, + "caption": "Entity", + "style": { + "property-position": "outside" + }, + "labels": [ + "__Entity__" + ], + "properties": {} + } + ], + "relationships": [ + { + "id": "n0", + "type": "FROM_DOCUMENT", + "style": {}, + "properties": {}, + "fromId": "n1", + "toId": "n0" + }, + { + "id": "n1", + "type": "FROM_CHUNK", + "style": {}, + "properties": {}, + "fromId": "n2", + "toId": "n1" + }, + { + "id": "n2", + "type": "", + "style": { + "attachment-start": "right", + "attachment-end": "top" + }, + "properties": {}, + "fromId": "n2", + "toId": "n2" + } + ] +} \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/3-create-a-graph/images/kg-builder-default-model.svg b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/3-create-a-graph/images/kg-builder-default-model.svg new file mode 100644 index 000000000..8c3c63f56 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/3-create-a-graph/images/kg-builder-default-model.svg @@ -0,0 +1,444 @@ + + + + + + + + + + + + + + + + + FROM_DOCUMENT + + + + + + + + + + + + + + FROM_CHUNK + + + + + + + + + + + + + + + Document + + + + + + + + + path: + + createdAt: + + + + + + + + + + + + + + + + Chunk + + + + + + + + + index: + + text: + + embedding: + + + + + + + + + + + + + + + + Entity + + + + + + + __Entity__ + + + + + + + + diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/3-create-a-graph/images/kg_builder_pipeline.png b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/3-create-a-graph/images/kg_builder_pipeline.png new file mode 100644 index 0000000000000000000000000000000000000000..5237da994b1ce7ed031b372ae9f8b2a4e3a6e6ec GIT binary patch literal 203548 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 z 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%0D2M85=QSk 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, `(Organization)-[LOCATED_IN]->(Location)` + +[TIP] +.Iterate your schema +==== +You don't have to define nodes, relationships, and patterns all at once. You can start with just nodes or just relationships and expand your schema as needed. + +For example, if you only define nodes, the LLM will find any relationships between those nodes based on the text. + +This approach can help you iteratively build and refine your knowledge graph schema. +==== + +== Nodes + +Open `workshop-genai/kg_builder_schema.py` and review the code: + +[source, python] +.kg_builder_schema.py +---- +include::{repository-raw}/{branch}/workshop-genai/kg_builder_schema.py[] +---- + +You define the `NODES` as a list of node labels and pass the list to the `SimpleKGPipeline` when creating the pipeline instance. + +[source, python] +.NODES +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/kg_builder_schema.py[tag=simple_nodes] +---- + +[TIP] +.Define relevant nodes +==== +You should define the node labels that are relevant to your domain and the information you want to extract from the text. +==== + +You can also provide a description for each node label and associated properties to help guide the LLM when extracting entities. + +[source, python] +.Node descriptions and properties +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/kg_builder_schema.py[tag=node_types] +---- + +Run the program to create the knowledge graph with the defined nodes. + +[TIP] +.Remember to delete the existing graph before re-running the pipeline +==== +[source, cypher] +.Delete the existing graph +---- +MATCH (n) DETACH DELETE n +---- +==== + +The graph created will be constrained to only include the defined node labels. + +[source, cypher] +.View the entities extracted from each chunk +---- +MATCH p = (c:Chunk)-[*..3]-(e:__Entity__) +RETURN p +---- + +== Relationships + +You express required relationship types by providing a list of relationship types to the `SimpleKGPipeline`. + +[source, python] +.RELATIONSHIP_TYPES +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/kg_builder_schema.py[tag=relationship_types] +---- + +You can also provide patterns that define how nodes types are connected by relationships. + +[source, python] +.PATTERNS +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/kg_builder_schema.py[tag=patterns] +---- + +Nodes, relationships and patterns are all passed to the `SimpleKGPipeline` as the `schema` when creating the pipeline: + +[source, python] +.schema +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/kg_builder_schema.py[tag=kg_builder] +---- + +Review the `data/genai-fundamentals_1-generative-ai_1-what-is-genai.pdf` PDF document and experiment by creating a set of nodes, relationships and patterns relevant to the data. + +== Process all the documents + +When you are happy with the schema, you can modify the program to process all the PDF documents from the link:https://graphacademy.neo4j.com/courses/genai-fundamentals[Neo4j and Generative AI Fundamentals course^]: + +[source, python] +.All PDFs +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/kg_builder_schema.py[tag=all_documents] +---- + +You can run the program to create a knowledge graph based on all the documents using the defined schema. + +[%collapsible] +.Reveal the complete code +==== +[source, python] +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/kg_builder_schema.py[tag=**,!simple_nodes] +---- +==== + +[TIP] +.OpenAI Rate Limiting? +==== +When using a free OpenAI API key, you may encounter rate limiting issues when processing multiple documents. You can add a `sleep` between document processing to mitigate this. +==== + +Review the knowledge graph and observe how the defined schema has influenced the structure of the graph. + +[source, cypher] +.Documents, Chunks, and Entity counts +---- +RETURN + count{ (:Document) } as documents, + count{ (:Chunk) } as chunks, + count{ (:__Entity__) } as entities +---- + +read::Continue[] + +[.summary] +== Lesson Summary + +In this lesson, you learned how to define a custom schema for the knowledge graph. + +In the next lesson, you will learn how to add structured data to the knowledge graph. diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/6-structured-data/images/kg-builder-structured-model.json b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/6-structured-data/images/kg-builder-structured-model.json new file mode 100644 index 000000000..7aa3cb453 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/6-structured-data/images/kg-builder-structured-model.json @@ -0,0 +1,154 @@ +{ + "style": { + "font-family": "sans-serif", + "background-color": "#ffffff", + "background-image": "", + "background-size": "100%", + "node-color": "#ffffff", + "border-width": 4, + "border-color": "#000000", + "radius": 50, + "node-padding": 5, + "node-margin": 2, + "outside-position": "auto", + "node-icon-image": "", + "node-background-image": "", + "icon-position": "inside", + "icon-size": 64, + "caption-position": "inside", + "caption-max-width": 200, + "caption-color": "#000000", + "caption-font-size": 50, + "caption-font-weight": "normal", + "label-position": "inside", + "label-display": "pill", + "label-color": "#000000", + "label-background-color": "#ffffff", + "label-border-color": "#000000", + "label-border-width": 4, + "label-font-size": 40, + "label-padding": 5, + "label-margin": 4, + "directionality": "directed", + "detail-position": "inline", + "detail-orientation": "parallel", + "arrow-width": 5, + "arrow-color": "#000000", + "margin-start": 5, + "margin-end": 5, + "margin-peer": 20, + "attachment-start": "normal", + "attachment-end": "normal", + "relationship-icon-image": "", + "type-color": "#000000", + "type-background-color": "#ffffff", + "type-border-color": "#000000", + "type-border-width": 0, + "type-font-size": 16, + "type-padding": 5, + "property-position": "outside", + "property-alignment": "colon", + "property-color": "#000000", + "property-font-size": 16, + "property-font-weight": "normal" + }, + "nodes": [ + { + "id": "n0", + "position": { + "x": 3.8117408928910077e-32, + "y": 47.03686581561153 + }, + "caption": "Document", + "style": {}, + "labels": [], + "properties": { + "path": "", + "createdAt": "" + } + }, + { + "id": "n1", + "position": { + "x": -1.1723460390943958e-32, + "y": 378.9796534081454 + }, + "caption": "Chunk", + "style": {}, + "labels": [], + "properties": { + "index": "", + "text": "", + "embedding": "" + } + }, + { + "id": "n2", + "position": { + "x": 331.942787592534, + "y": 378.9796534081454 + }, + "caption": "Entity", + "style": { + "property-position": "outside" + }, + "labels": [ + "__Entity__" + ], + "properties": {} + }, + { + "id": "n4", + "position": { + "x": 331.942787592534, + "y": 47.03686581561152 + }, + "caption": "Lesson", + "style": {}, + "labels": [], + "properties": { + "name": "", + "module": "", + "course": "", + "url": "" + } + } + ], + "relationships": [ + { + "id": "n0", + "type": "FROM_DOCUMENT", + "style": {}, + "properties": {}, + "fromId": "n1", + "toId": "n0" + }, + { + "id": "n1", + "type": "FROM_CHUNK", + "style": {}, + "properties": {}, + "fromId": "n2", + "toId": "n1" + }, + { + "id": "n2", + "type": "", + "style": { + "attachment-start": "right", + "attachment-end": "top" + }, + "properties": {}, + "fromId": "n2", + "toId": "n2" + }, + { + "id": "n3", + "type": "PDF_OF", + "style": {}, + "properties": {}, + "fromId": "n0", + "toId": "n4" + } + ] +} \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/6-structured-data/images/kg-builder-structured-model.svg b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/6-structured-data/images/kg-builder-structured-model.svg new file mode 100644 index 000000000..7b39dedec --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/6-structured-data/images/kg-builder-structured-model.svg @@ -0,0 +1,622 @@ + + + + + + + + + + + + + + + + + FROM_DOCUMENT + + + + + + + + + + + + + + FROM_CHUNK + + + + + + + + + + + + + + + + PDF_OF + + + + + + + + + + + + + Document + + + + + + + + + path: + + createdAt: + + + + + + + + + + + + + + + + Chunk + + + + + + + + + index: + + text: + + embedding: + + + + + + + + + + + + + + + + Entity + + + + + + + __Entity__ + + + + + + + + + + + + + + + Lesson + + + + + + + + + name: + + module: + + course: + + url: + + + + + + + + + diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/6-structured-data/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/6-structured-data/lesson.adoc new file mode 100644 index 000000000..43c39ae0c --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/6-structured-data/lesson.adoc @@ -0,0 +1,127 @@ += Add structured data to the knowledge graph +:type: lesson +:order: 6 +:branch: new-workshop + +The knowledge graph you created is solely based on unstructured data extracted from documents. You may have access to structured data sources such as databases, CSV files, or APIs that contain valuable information relevant to your domain. + +Combining the structured and unstructured data can enhance the knowledge graph's richness and usefulness. + +[NOTE] +.Lexical and Domain Graphs +The unstructured part of your graph is known as the link:https://graphrag.com/reference/knowledge-graph/lexical-graph/[Lexical Graph], while the structured part is known as the link:https://graphrag.com/reference/knowledge-graph/domain-graph/[Domain Graph]. + +== Load from CSV file + +The repository contains a sample CSV file `workshop-genai/data/docs.csv` which contains metadata about the lessons the documents were created from. + +[source, csv] +.Sample docs.csv +---- +filename,course,module,lesson,url +genai-fundamentals_1-generative-ai_1-what-is-genai.pdf,genai-fundamentals,1-generative-ai,1-what-is-genai,https://graphacademy.neo4j.com/courses/genai-fundamentals/1-generative-ai/1-what-is-genai +genai-fundamentals_1-generative-ai_2-considerations.pdf,genai-fundamentals,1-generative-ai,2-considerations,https://graphacademy.neo4j.com/courses/genai-fundamentals/1-generative-ai/2-considerations +... +---- + +You can use the CSV file as input and a structured data source when creating the knowledge graph. + +Open `workshop-genai/kg_structured_builder.py` and review the code. + +[source, python] +.kg_structured_builder.py +---- +include::{repository-raw}/{branch}/workshop-genai/kg_structured_builder.py[] +---- + +The key differences are: + +. The `docs.csv` file is loaded using `csv.DictReader` to read each row as a dictionary: ++ +[source, python] +.Load docs.csv +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/kg_structured_builder.py[tag=load_csv] +---- +. The path of the PDF document is constructed using the `filename` field from the CSV: ++ +[source, python] +.PDF path +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/kg_structured_builder.py[tag=pdf_path] +---- +. A `cypher` statement is defined to create `Lesson` nodes with properties from the CSV data: ++ +[source, python] +.Cypher statement +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/kg_structured_builder.py[tag=cypher] +---- ++ +The `pdf_path` is used as the key to match the `Document` nodes created from the PDF files. +. A `Lesson` node is created for each document using the `cypher` statement and the CSV data: ++ +[source, python] +.Lesson nodes +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/kg_structured_builder.py[tag=create_structured_graph] +---- + +The resulting knowledge graph will now contain `Lesson` nodes connected to the `Document` nodes created from the PDF files: + +image::images/kg-builder-structured-model.svg["A data model showing Lesson nodes connected to Document nodes using a PDF_OF relationship."] + +Run the program to create the knowledge graph with the structured data. + +[TIP] +.Clear the graph before importing +==== +Remember to clear the database before running the program to avoid inconsistent data. + +[source, cypher] +.Delete all +---- +MATCH (n) DETACH DELETE n +---- +==== + +== Explore the structured data + +The structured data allows you to query the knowledge graph in new ways. + +You can find all lessons that cover a specific technology or concept: + +[source, cypher] +.Find lessons about Knowledge Graphs +---- +MATCH (kg:Technology) +MATCH (kg)-[:FROM_CHUNK]->(c)-[:FROM_DOCUMENT]-(d)-[:PDF_OF]-(l) +WHERE toLower(kg.name) CONTAINS "knowledge graph" +RETURN DISTINCT toLower(kg.name), l.name, l.url +---- + +The knowledge graph allows you to summarize the content of each lesson by specific categories such as technologies and concepts: + +[source, cypher] +.Summarize lesson content +---- +MATCH (lesson:Lesson)<-[:PDF_OF]-(:Document)<-[:FROM_DOCUMENT]-(c:Chunk) +RETURN lesson.name, + [ (c)<-[:FROM_CHUNK]-(tech:Technology) | tech.name ] AS technologies, + [ (c)<-[:FROM_CHUNK]-(concept:Concept) | concept.name ] AS concepts +---- + +Spend some time exploring the knowledge graph and experiment with adding additional data. + +read::Continue[] + +[.summary] +== Lesson Summary + +In this lesson, you learned: + +* About benefits of adding structured data to a knowledge graph. +* How to load structured data from a CSV file. +* How to create nodes from structured data and connect them to unstructured data nodes. + +In the next module, you will create retrievers to query the knowledge graph. diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/module.adoc b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/module.adoc new file mode 100644 index 000000000..ec0522ff6 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/module.adoc @@ -0,0 +1,17 @@ += Knowledge Graph Construction +:order: 2 + + + +== Module Overview + +In this module, you will learn: + +* The process of creating knowledge graphs from unstructured text. +* How to use the `SimpleKGPipeline` class to create a knowledge graph from unstructured data. +* The stages of the pipeline and how they work together. +* How to modify the configuration to define the schema and data model. + +If you are ready, let's get going! + +link:./1-knowledge-graph-construction/[Ready? Let's go →, role=btn] diff --git a/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/1-vectors/apple-embedding.adoc b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/1-vectors/apple-embedding.adoc new file mode 100644 index 000000000..2d135976e --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/1-vectors/apple-embedding.adoc @@ -0,0 +1 @@ +`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, -0.021451797, 0.002030382, 0.030813828, 9.744976e-05, 0.0019172973, -0.02568733, -0.020985752, -0.008066699, 0.02134214, -0.01222684, 0.0009980568, 0.005105939, 0.009999417, -0.000107408916, 0.015845545, -0.012980737, 0.020574536, -0.016160812, -0.018518453, 0.005263572, -0.019286057, -0.009293495, -0.012096621, -0.008854863, -0.005753605, -0.006157968, 0.010540851, 0.007724018, -0.0065554776, 0.00052944134, -0.023453051, 0.011089141, -0.021671113, -0.00061425474, -0.012754567, 0.015489157, -0.0054520466, -0.0020355221, -0.015050527, -0.0052944133, -0.0028082666, 0.0027431573, -0.019450543, 0.0063807103, -0.010725899, 0.0049243183, 0.005266999, 0.01513277, -0.027921606, 0.0055754115, -0.009183837, 0.00380718, -0.013624975, -0.0084710615, 0.012905347, 0.015667351, 0.033363372, 0.013268588, 0.014036193, 0.0063464423, 0.004454846, 0.0014820931, -0.03396649, -0.0062779062, -0.00314238, 0.01818948, 0.0075389706, -0.02637269, 0.009574492, 0.024974553, 0.024823774, 0.009882905, -0.021657405, 0.010109074, -0.007970748, 0.0028887964, 0.011849891, 0.0054726074, 0.0078336755, 0.016448664, -0.026975807, 0.016599443, -0.012713445, 0.026345275, 0.004667308, -0.03736588, 0.0009834929, 0.006089432, -0.028730331, -0.011198798, -0.020396343, 0.0019738395, 0.012459862, -0.003738644, 0.015448036, -0.019902883, 0.0064389664, 0.00926608, 0.021945259, -0.051648803, -0.016448664, -0.01744929, -0.009499103, 0.0021743076, -0.022795105, -0.035556525, 0.034021318, 0.025892938, 0.038407627, -0.008752059, 0.013446782, -0.0032640316, -0.01779197, -0.009567639, -0.0011205651, -0.013947096, 0.04707059, 0.008100967, 0.019491665, 0.016448664, -0.017846799, 0.019573908, -0.02223311, 0.015489157, -0.0057433248, -0.033445615, 0.010554559, 0.014694139, -0.01239818, 0.0070660715, -0.011226213, 0.023686076, 0.02360383, 0.022753984, -0.005215597, 0.0070866323, 0.010753313, -0.024110999, -0.003909984, 0.005462327, 0.0017459571, 0.0057981536, -0.016983245, -0.0021777344, -0.0039373985, 0.003772912, -0.006634294, 0.008614987, -0.006579465, -0.008841156, 0.0017699447, 0.024412557, 0.011856745, 0.013522171, -0.016051153, -0.00951281, -0.016133398, 0.004177275, -0.010691631, 0.01296703, 0.00886857, 0.016078569, 0.004434285, 0.012734006, -0.0067850733, 0.0006545197, 0.0011317023, -0.0046090526, 0.023096664, 0.01946425, -0.016640564, 0.014899747, 0.004701576, -0.010568266, 0.005530863, -0.019231228, 0.032047477, 0.02041005, -0.00397852, -0.014419994, -0.684703, -0.020643072, 0.00603803, -0.00033582686, 0.033993904, 0.03188299, 0.022287939, -0.0012739147, -0.018381381, -0.010396926, 0.0018042127, 0.0032863058, 0.00886857, 0.009519664, 5.9969083e-05, -0.022287939, 0.016284177, -0.023658661, -0.010431194, 0.02489231, -0.012261108, -0.014351458, -0.008841156, -0.029717252, 0.0036564006, 0.019628737, 0.019957712, -0.014022485, -0.019560201, 0.021767065, -0.008238039, -0.00048146606, 0.027291073, 0.0060140425, 0.037393294, 0.0072031436, -0.04416466, 0.013940242, 0.009663589, 0.03415839, -0.02065678, -0.020423757, 0.013563293, -0.0065246364, -0.015872959, -0.0009278074, 0.013254881, 0.005637094, -0.00071491714, -0.025344647, 0.03484375, 4.8269758e-05, 0.010787581, 0.008409379, 0.021780772, 0.008738352, 0.023124078, -0.008745206, -0.001522358, 0.016448664, -0.022370182, -0.0034011037, -0.034734093, -0.02523499, -0.020547122, 0.010636802, -0.009190691, 0.0076417746, 0.005434912, -0.01951908, 0.021492919, 0.022438718, -0.02306925, -0.007059218, -0.0031115387, 0.01705178, 0.023576416, -0.00148809, -0.027071757, 0.0047461246, -0.0023867695, -0.009389445, 0.0049414523, -0.027537804, 0.03158143, 0.0054246318, -0.024042463, -0.011301602, 0.013926535, -0.02371349, 0.034130976, 0.023932805, 0.0028682356, -0.019148985, -0.014570774, -0.0053423885, -0.032376453, -0.019244935, -0.0021434664, -0.019930298, 0.016530907, -0.0056302403, 0.00943742, 0.0067679393, 0.024028756, 0.013474196, -0.019477958, 0.014570774, 0.03673535, -0.020437464, -0.0076623354, -0.012631202, 0.008587573, -0.00869723, 0.025824402, -0.03125246, 0.010629948, -0.00761436, 0.021067996, -0.032952156, 0.025399476, -0.00438631, 0.011863599, 0.003027582, -0.01059568, 0.018463625, -0.0045405165, -0.030978315, -0.0034884873, -0.0059420797, 0.008018723, 0.0052190237, 0.007299094, -0.006250492, 0.02390539, 0.0004050055, 0.009965149, -0.020670487, 0.011993817, -0.02508421, -0.016969537, 0.007991308, 0.000463047, -0.00052258774, 0.0012704879, -0.01232279, -0.028511016, -0.016887294, -0.010862971, 0.0052361577, -0.008861717, 0.005530863, -0.0017579509, 0.021506626, 0.022589497, -0.015900373, 0.0028596686, -0.0233571, 0.0009406579, 0.016229348, 0.010205025, 0.028182043, -0.009026204, 0.0042218235, 0.0150368195, -0.035803255, 0.0068193413, 0.0018727488, -0.017846799, -0.029251205, 0.01340566, -0.016887294, -0.008190064, 0.008286014, -0.014748968, 0.0039888006, -0.0149682835, 0.007477288, 0.01015705, 0.002385056, 0.0054314854, 0.008861717, 0.0021023448, 0.0016602869, 0.030896071, 0.020053662, 0.0016157385, 0.04767371, -0.020218149, 0.0008228615, -0.013467343, 0.019820638, 0.0053252545, 0.0016525766, -0.013816877, -0.008477915, -0.0059592137, 0.013398807, -0.0009586486, 0.01150721, 0.023973927, -0.0029007902, 0.011246773, -0.0022873923, 0.013775756, -0.03292474, 0.003995654, -0.005369803, 0.011294749, 0.03459702, -0.0022771119, -0.028593259, -0.0066068796, -0.020451171, 0.012357058, 0.034185804, 0.002359355, 0.012185718, 0.0009329476, -0.007984455, 0.0016688539, -0.0047666854, 0.00047204236, -0.0036769616, -0.0074567273, 0.0034833471, 0.010115928, 0.03328113, -0.003368549, -0.026071131, -0.0035535966, -0.004986001, -0.00934147, -0.0125215445, 0.004143007, 0.014872333, 0.004146434, -0.010979483, 0.02223311, -0.0009552218, -0.0140499, 0.014502238, 0.026687955, -0.0020286685, 0.007621214, -0.0132617345, 0.045946598, 0.008169503, -0.004143007, -0.0022634047, -0.003240044, -0.025769573, -0.030759, 0.010479169, -0.00090467645, -0.024618166, 0.02350788, 0.022397596, 0.022877349, 0.0408201, 0.0032965862, -0.0034679265, -0.012946469, 0.0059763477, -0.020286685, -0.00019372156, -0.001281625, -0.013672951, 0.0028082666, 0.004146434, 0.013316563, -0.0002972753, 0.024933431, -0.010218732, 0.0067473785, 0.00096807233, -0.017600069, 0.0047495514, 0.0053458153, -0.012453008, -0.021698527, -0.02745556, 0.009060472, 0.003961386, -0.006867317, 0.008950814, -0.028949646, -0.0059455065, -0.005777593, 0.014748968, -0.0032948728, 0.021629991, 0.008320282, 0.020094784, 0.020423757, -0.01380317, 0.031362116, -0.0109863365, 0.005198463, -0.0062025166, 0.00017980016, 0.004968867, -0.019477958, -0.003947679, 0.03942196, -0.0048317946, -0.00595236, -0.024357729, 0.012679177, -0.002345648, -0.025413183, 0.0046227598, -0.015996324, -0.01809353, -0.0029864605, 0.016558321, -0.0055034487, -0.017161438, 0.04071044, -0.0025855242, -0.012644909, -0.01788792, -0.014255508, 0.007943333, 0.06513671, 0.02542689, -0.0109520685, 0.023727197, -0.0055925455, 0.027674876, -0.011945842, -0.006791927, 0.029059304, -0.00075818057, -0.0014101302, -0.008806888, 0.014776383, -0.018449917, 0.023891684, 0.011294749, -0.002393623, -0.020135906, -0.0056816423, -0.008203771, 0.00051230734, -0.014598188, 0.010650509, 0.0055205827, 0.01720256, 0.0057638856, 0.018751476, 0.029196376, -0.005195036, -0.024535922, -0.0060825786, -0.006243638, 0.015297256, -0.006226504, -0.001954992, 0.022301646, 0.017161438, 0.015955202, 0.0059489333, 0.0052601453, 0.012178864, 0.010616241, -0.0037249369, -0.02637269, 0.007792554, -0.011459235, -0.014611895, 0.032568354, -0.0012088054, -0.013810024, 0.024672994, 0.01627047, 0.0050511104, -0.0055891187, -0.00022102891, 0.026729077, -0.0074704345, 0.0031526603, 0.010307829, -0.025659915, -0.0055377167, -0.019998834, 0.0032880192, 0.014502238, -0.0012936188, -0.005650801, -0.011376992, -0.018669233, -0.0068536093, -0.011616868, -0.000986063, -0.026358983, -0.011390699, 0.0077308714, 0.033144057, 0.008217478, 0.020889802, 0.0057261907, 0.0069838283, 0.03489858, -0.008306575, -0.014803797, 0.004742698, -0.014474823, -0.022973299, 0.019094156, -0.001972126, -0.013145223, 0.011671697, 0.008649255, 0.013755195, -0.0060448837, 0.02958018, 0.0045028217, -0.0120897675, -0.00046004856, 0.017833091, 0.011986963, -0.019327179, -0.011829331, 0.00795704, -0.010410633, -0.0026334994, -0.008005016, 0.014666725, 0.014653017, 0.019738395, 0.012535252, -0.025276111, 0.0037146565, 0.02760634, -0.004441139, 0.014831211, -0.0109863365, 0.01222684, 0.0138305845, -0.008786327, -0.0074156057, -0.0052190237, -0.015900373, -0.02099946, -0.04997652, 0.014255508, 0.02094463, -0.014104729, 0.020464879, -0.004986001, -0.007970748, -0.020889802, 0.012219986, -0.008710938, -0.0025820974, -0.0013553012, -0.013857999, -0.033555273, -0.027016928, -0.01646237, 0.020862387, 0.0009629321, -0.017435582, -0.020272978, 0.018271724, 0.008155796, -0.024878602, -0.02834653, -0.049181502, 0.011431821, 0.003176648, 0.0035056213, 0.02952535, -0.015283549, 0.017572654, -0.006905012, 0.014214386, -0.026208203, -0.022164574, -0.028428772, 0.00012647052, 0.03829797, 0.018258017, 0.020423757, 0.014077314, 0.016640564, -0.00020646499, 0.0044616996, -0.008587573, 0.0029898873, 0.012219986, -0.018518453, 0.013679804, 0.014557066, 0.015859252, 0.0027071757, 0.012919054, -0.0039750934, 0.012788836, 0.0042560915, -0.0023353675, -0.027990142, -0.005404071, -0.004451419, -0.009444274, -0.019848052, 0.01008166, 0.0092455195, -0.024316607, 0.019162692, 0.009087887, 0.0017819385, -0.02922379, 0.025043089, -0.009972002, 0.021328432, 0.01141126, 0.0053903637, -0.026701663, -0.006685696, 0.008827449, -0.007477288, 0.015146477, -0.0068775974, 0.007792554, -0.014515945, -0.0074361665, 0.0058358484, 0.041149072, -0.025591379, -0.022356475, 0.0068570366, -0.04188926, -0.0053766565, -0.006411552, -0.009663589, -0.016092276, 0.001164257, 0.013556439, 9.952459e-06, 0.0003868006, -0.0058358484, -0.017367046, 0.0061682486, 0.020135906, 0.029991396, 0.0025769572, 0.035227552, 0.021602577, -0.0034576461, -0.019573908, 0.0022548377, -0.009533371, -0.011610014, 0.026454933, 0.01488604, 0.012315936, -0.007209997, -0.0028511016, 0.0045370897, -0.010239293, -0.0096430285, 0.035008237, 0.01769602, 0.016188227, -0.027976435, -0.031115387, -0.01946425, 0.026729077, -0.0048352215, -0.002503281, -0.015091648, -0.03829797, -0.01116453, 0.026331568, -0.01232279, 0.019505372, 0.004180702, -0.013912828, 0.01513277, -0.011849891, -0.02489231, 0.00088068884, -0.0026095118, 0.02740073, -0.02405617, 0.018203188, -0.0012859085, 0.005318401, -0.006349869, -0.007758286, 0.004674162, 0.03169109, -0.02785307, -0.0008571296, 0.0026369262, 0.015077941, 0.010623095, -0.012103475, -0.022260524, -0.009204398, -0.0028733758, -0.027976435, 0.010013124, 0.0077788467, -0.021013167, -0.011150823, 0.008244893, -0.006247065, -0.0062402114, 0.0027979861, 0.01372778, -0.0007671759, -0.013426221, 0.016928416, -0.0016191653, 0.0033668356, 0.026975807, -0.0121240355, -0.010705338, 0.023768319, -0.020793851, 0.00081129605, 0.0079022115, 0.0023096665, -0.024028756, 0.009937734, -0.0037592049, -0.0038483017, 0.020204442, -0.019546494, -0.012267961, -0.004338335, 0.0074361665, 0.016201934, 0.0024775798, 0.0061339806, 0.013248027, -0.008532744, -0.0019669859, -0.012713445, -0.030183297, 7.549679e-05, -0.012473569, -0.002210289, 0.02075273, -0.003116679, -0.0025872376, -0.003793473, 0.007299094, 0.0136592435, -0.024522215, -0.03391166, -0.021410676, 0.020506, -0.01463931, 0.00017551666, -0.020643072, -0.002201722, -0.022109745, 0.003632413, -0.0009286641, 0.00044891142, 0.0027191697, 0.014666725, 0.013391953, 0.02386427, -0.009039911, 0.0021348994, -0.013837438, -0.021410676, -0.021602577, -0.0059146653, 0.0048729163, 0.017983872, 0.01961503, -0.021917844, -0.028839989, -0.00808726, -0.03983318, -0.03254094, -0.005739898, 0.013248027, -0.00070206664, 0.006140834, 0.010013124, 0.0055411435, 0.0063841376, 0.016791344, -0.047564052, -0.0010725899, 0.004989428, -0.020917216, 0.022370182, -0.022959592, -0.020451171, -0.023233736, 0.001032325, 0.008094113, 0.0010777301, 0.01116453, 0.00038637224, -0.0033188604, -0.00886857, 0.022150867, 0.006394418, -0.00013310995, 0.009300348, -0.01883372, -0.009553932, 0.0032109162, -0.0007637491, -0.023727197, 0.0063258815, 0.009122155, 0.008327136, 0.008066699, 0.0013090394, -0.0051539144, 0.00975954, -0.020026248, -0.005873543, -0.011308456, -0.018765183, 0.014310337, -0.024412557, -0.017942749, -0.012535252, 0.010342097, -0.0243029, -0.010198171, 0.026838735, -0.0081078205, -0.0144337015, -0.010568266, 0.022301646, -0.03489858, -0.008066699, -0.0028802294, -0.023110371, -0.024193242, 0.03829797, 0.0029898873, -0.008361404, -0.0076280674, 0.014611895, 0.009560785, -0.0039716666, -0.004297213, 0.013446782, -0.022507254, -0.013337124, 0.008423086, -0.018600697, -0.023850562, 0.003947679, 0.0113838455, -0.0022788253, -0.0041909823, 0.20747247, -0.007059218, 0.016599443, 0.03988801, -0.0005011702, -0.0007568955, 0.015543986, 0.013145223, -0.0038825697, 0.0050339764, -0.014817504, 0.011767647, -0.015242428, 0.007299094, 0.010890386, -0.007580092, -0.03489858, -0.0089713745, -0.016393835, -0.0060825786, 0.023658661, -0.011459235, -0.011610014, -0.011514064, 0.02897706, 0.003108112, -0.02927862, 0.009889758, 0.018641818, 0.010150196, -0.00020453741, -0.004146434, -0.0039339717, -0.002090351, -0.008361404, -0.0001941499, -0.0075389706, 0.024165828, 0.02745556, 0.026920978, -0.0015789003, -0.00090638985, -0.007888504, -0.0035570234, -0.028127214, 0.0142966295, -0.008457354, -0.007360777, 0.023041835, 0.021753358, -0.047838196, -0.003755778, 0.025221283, 0.025111625, 0.0014692425, 0.0071346075, 0.0026900417, 0.012727153, -0.00223599, -0.0020423757, -0.00744302, 0.018998206, 0.0012841951, 0.019094156, -0.024330314, -0.0043074936, -0.034240633, 0.005839275, -0.009300348, -0.008738352, 0.0038654357, -0.020739023, -0.007545824, 0.00035017662, -0.030128468, -0.0408201, 0.024083585, 0.026098546, 0.014598188, 0.022493547, -0.006867317, 0.009252373, -0.006140834, -0.0022942459, -0.006147688, -0.016667979, 0.03223938, -0.00544862, -0.0058872504, -0.003844875, -0.005582265, -0.015448036, 0.004454846, -0.02603001, 0.0056987763, 0.017421875, -0.015790716, 0.01946425, -0.01042434, -0.00070120994, -0.0040641907, -0.017956456, 0.01769602, -0.010095367, -0.008080406, 0.024069877, 0.0029898873, 0.009403152, 0.0057913, 0.006870744, -0.012809397, -0.011424967, 0.01256952, -0.011178237, 0.033829417, 0.009725272, -0.002683188, -0.029086718, 0.017956456, -0.0010940074, 0.0075526778, -0.01868294, 0.0020612231, 0.017517826, -0.01439258, -0.021150239, -0.020780144, 0.00021256898, 0.0167091, -0.028483601, -0.003478207, -0.0048043802, 0.004454846, 0.0034936275, 0.008752059, 0.0024930006, 0.004828368, -0.017654898, -0.0015009405, -0.009320909, 0.0013458775, 0.013816877, 0.020560829, 0.007319655, 0.0035433162, -0.0028168336, 0.002784279, -0.00032833073, -0.023343394, -0.021314725, -0.018792598, 4.789495e-05, -0.018792598, -0.006689123, 0.04213599, -0.01769602, -0.034076147, -0.027592633, -0.01084241, 0.013734634, -0.022753984, -0.01479009, 0.023110371, -0.011795062, -0.04150546, -0.007340216, -0.18016769, 0.027565219, -0.0068775974, 0.0007757429, 0.018299138, 0.0038003265, 0.01676393, 0.009807515, -0.0063601495, 0.0019224375, 0.021259896, 0.0033102934, -0.028922232, -0.011054873, 0.024015049, -0.011596307, -0.004824941, 0.015996324, 0.025166454, 0.011123409, 0.01642125, -0.010047392, 0.01414585, -0.019957712, 0.009999417, 0.023453051, -0.025673622, 0.0014469683, -0.012007524, -0.016284177, -0.014159557, -0.015297256, 0.011260481, 0.0115826, 0.0128299575, -0.007621214, -0.014022485, -0.012363912, 0.0014512518, 0.023644954, 0.02158887, 0.01971098, 0.0078336755, 0.004705003, 0.0062607722, 0.020190734, 0.02006737, -0.019107863, 0.011952695, -0.019327179, 0.019628737, -0.013556439, -0.0066137332, 0.027825655, 0.00047289906, 0.009649882, -0.015406914, -0.0034216645, -0.020684194, -0.0065554776, -0.01266547, -0.010753313, 0.02016332, -0.018806305, -0.0072579724, -0.016818758, -0.013762048, -0.0081078205, -0.032952156, 0.01661315, -0.012219986, -0.011514064, 0.03169109, -0.024261778, 0.0005153058, -0.0007594656, -0.01818948, 0.026098546, 0.007648628, -0.0021006314, -0.005918092, 0.02143809, -0.017380754, -0.00031376682, -0.0059455065, 0.012219986, -0.0068604634, 0.004283506, -0.027291073, -0.030238125, 0.017750848, -0.019327179, -0.003810607, -0.021602577, 0.021465505, 0.036707934, 0.011801915, 0.004382883, -0.0028151202, 0.0036461202, -0.0018761756, -0.0021880148, -0.030046225, 0.015763301, 0.03563877, -0.0028408212, -0.006127127, 0.01971098, 0.018902255, -0.0025152748, -0.002325087, 0.020889802, 0.031142801, 0.028894817, -0.007429313, 0.0017313932, 0.011438674, -0.025509134, 0.005842702, -0.011856745, 0.025056796, 0.0007873084, 0.019546494, 0.014611895, -0.005088805, -0.011116555, -0.09907578, -0.04421949, 0.009972002, 0.0136935115, 0.015297256, 0.025015675, -0.005164195, 0.022959592, -0.012487276, 0.038709186, 0.0028562418, -0.021396969, -0.00061596814, 0.0077308714, 0.0115826, -0.00037137998, -0.027674876, -0.011555186, -0.022630619, 0.013638683, -0.013851145, -0.016873587, -0.010444901, -0.019217521, -8.918393e-07, 0.00072348415, -0.035254966, 0.028894817, 0.03662569, 0.007038657, 0.030238125, -0.02153404, 0.021301018, -0.038078655, 0.0019464251, 0.007991308, -0.018724062, 0.00628476, 0.019930298, -0.028593259, -0.001396423, 0.0003814462, 0.015516572, -0.03001881, 0.010773874, -0.02213716, 0.00027500108, 0.0010991476, 0.012007524, -0.013241174, -0.013097248, 0.018710354, -0.0021211922, -0.014735261, 0.0070146695, -0.020862387, -0.014063607, 0.0059832013, -0.018737769, 0.004228677, 0.006229931, -0.019628737, -0.00041314415, 0.013556439, 0.022260524, 0.0019738395, -0.0149682835, -0.001852188, 0.004776966, -0.018614404, -0.0011445528, -0.012219986, -0.02681132, 0.0461385, -0.021136532, -0.0007084919, -0.019724688, -0.020204442, 0.01365239, -0.032869913, -0.0044308584, -0.030594513, 0.0014675291, -0.008190064, 0.012377619, -0.0052258773, -0.003896277, 0.0078062615, 0.0057124835, -0.034624435, 0.03328113, 0.0022394168, 0.025892938, -0.011925281, -0.025097918, -0.002141753, -0.011445528, -0.0019190107, 0.032020062, -0.01739446, -0.0038174605, -0.0042526647, -0.08059845, 0.021109117, -0.002631786, -0.0049071843, 0.0144337015, 0.0035673038, 0.015982617, -0.036762763, -0.0062402114, -0.0041361535, -0.022041209, 0.010760167, -0.0057810196, -0.010019978, -0.00223599, -0.024878602, 0.019532787, 0.005465754, 0.030621927, 0.016010031, 0.012761421, 0.011308456, 0.019286057, -0.001992687, -0.013028712, 0.00768975, -0.016654272, 0.0029367716, 0.0019464251, -0.020423757, 0.00803243, -0.006428686, -0.014419994, 0.04268428, -0.0003623846, -0.008190064, -0.0047975266, 0.0011676837, -0.00454737, 0.006805634, -0.0066582817, -0.01710661, 0.01788792, -0.018011287, -0.011013751, -0.012014378, -0.011246773, 0.011692258, 0.016476078, -0.013056126, 0.015955202, 0.025796987, -0.016325299, -0.017682312, -0.017983872, -0.054691803, 0.023987634, -0.0020166747, -0.0060311765, -0.016476078, -0.0011616868, 0.033198886, 0.015763301, -0.0074498737, 0.008251746, -0.008477915, -0.016489785, -0.015173892, 0.03234904, -0.019985126, 0.000744045, -0.021410676, 0.016791344, -0.015242428, -0.002912784, -0.0014058467, -0.004824941, -0.0035673038, -0.008320282, 0.025344647, 0.013076687, -0.004735844, -0.034130976, 0.017312218, 0.016832465, 0.017380754, -0.02508421, -0.00808726, 0.013522171, 0.012439301, 0.014707847, 0.017147731, 0.006517783, -0.0010854404, 0.013782609, 0.008512183, -0.009451128, -0.014378873, 0.010636802, 0.023891684, 0.01809353, -0.012946469, -0.014337751, -0.011644282, -0.0018453344, 0.012069207, 0.0038585821, -0.020478586, -0.011843038, 0.02208233, 0.022109745, 0.005753605, -0.005650801, 0.022904763, -0.02119136, 0.017462997, -0.0059283725, -0.008662962, -0.015585108, 0.035227552, 0.05249865, 0.007634921, 0.015489157, -0.012781982, 0.021026874, 0.013741488, 0.0053423885, -0.024330314, 0.018724062, -0.008450501, 0.008025576, -0.01824431, -0.014762675, -0.014173265, -0.020793851, -0.0004604769, 0.014214386, 0.020670487, -0.019656152, 0.072593436, -0.0074224593, -0.0040539103, 0.00272431, 0.006336162, 0.021013167, 0.006805634, 0.016681686, -0.019203814, -0.009848637, 0.012857372, 0.015077941, 0.011959549, -0.017929042, -0.009320909, -0.0033120068, -0.023192614, 0.008985083, -0.022603204, 0.0060003353, 0.025207575, 0.02445368, 0.008827449, -0.006007189, -0.027647462, -0.010602534, 0.011150823, -0.0067131105, -0.0045884917, -0.041286144, 0.019395715, -0.006212797, -0.053293668, -0.01912157, 0.018326553, -0.016530907, -0.011198798, 0.0027448707, 0.027784534, -0.0013390239, -0.024508508, 0.023754612, -0.021259896, -0.017257389, 0.022027502, -0.012103475, -0.013535879, -0.015667351, 0.0061511146 diff --git a/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/1-vectors/images/3d-vector.svg b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/1-vectors/images/3d-vector.svg new file mode 100644 index 000000000..5d01727c8 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/1-vectors/images/3d-vector.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/1-vectors/images/llm-rag-create-vector.svg b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/1-vectors/images/llm-rag-create-vector.svg new file mode 100644 index 000000000..ea6fba21d --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/1-vectors/images/llm-rag-create-vector.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/1-vectors/images/llm-rag-vector-process.svg b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/1-vectors/images/llm-rag-vector-process.svg new file mode 100644 index 000000000..9a8ffa067 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/1-vectors/images/llm-rag-vector-process.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/1-vectors/images/vector-distance.svg b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/1-vectors/images/vector-distance.svg new file mode 100644 index 000000000..a4f44b66d --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/1-vectors/images/vector-distance.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/1-vectors/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/1-vectors/lesson.adoc new file mode 100644 index 000000000..086ad7893 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/1-vectors/lesson.adoc @@ -0,0 +1,157 @@ += Vector RAG +:order: 2 +:type: lesson + +[.slide.discrete] +== Vector RAG +You previously learned about **Retrieval Augmented Generation** (RAG) and the role of retrievers in finding relevant information. + +One of the challenges of RAG is understanding what the user is asking for and finding the correct information to pass to the LLM. + +In this lesson, you will learn about semantic search and how vector indexes can help you find relevant information from a user's question. + +[.slide] +== Semantic Search + +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? + +The results are tailored based on the term and the perceived intent. + +[.slide.col-2] +== Vectors + +[.col] +==== +You can represent data as **vectors** to perform semantic search. + +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. + +You can use vectors to represent many different types of data, including text, images, and audio. + +The number of dimensions in a vector is called the **dimensionality** of the vector. +A vector with three numbers has a dimensionality of 3. +Higher dimensionality captures more fine-grained meaning but is more expensive computationally and similarly, lower dimensionality is faster and cheaper to compute, but offers less nuance. +==== + +[.col] +image::images/3d-vector.svg["A diagram showing a 3d representation of the x,y,z coordinates 1,1,1 and 1,2,3", width=95%] + +[.slide] +== Embeddings + +When referring to vectors in the context of machine learning and NLP, the term "embedding" is typically used. Embeddings are numerical translations of data objects, for example images, text, or audio, represented as vectors. +This way, LLM algorithms will be able to compare two different text paragraphs by comparing their numerical representations. + +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 + +When applied in a search context, the vector for "apple" can be compared to the vectors for other words or phrases to determine the most relevant results. + +You can create embeddings in various ways, but one of the most common methods is to use an *embedding model*. + +[.transcript-only] +==== +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. + +[%collapsible] +.Reveal the completed embeddings for the word "apple"! +===== +[source] +---- +include::apple-embedding.adoc[] +---- +===== + +[NOTE] +.Embedding models +===== +OpenAI's `text-embedding-ada-002` embedding model created this embedding - a vector of 1,536 dimensions. + +LLM providers typically expose API endpoints that convert a _chunk_ of text into a vector embedding. +Depending on the provider, the shape and size of the vector may differ. +===== +==== + +[.slide.discrete] +== Embeddings + +While it is possible to create embeddings for individual words, embedding entire sentences or paragraphs is more common, as the meaning of a word can change based on its context. + +For example, the word _bank_ will have a different vector in _river bank_ than in _savings bank_. + +Semantic search systems can use these contextual embeddings to understand user intent. + +Embeddings can represent more than just text. +They can also represent entire documents, images, audio, or other data types. + +[.slide.col-2] +== How are vectors used in semantic search? + +[.col] +==== +You can use the _distance_ or _angle_ between vectors to gauge the semantic similarity between words or phrases. + +Words with similar meanings or contexts will have vectors that are close together, while unrelated words will be farther apart. +==== + +[.col] +image::images/vector-distance.svg[A 3 dimensional chart illustrating the distance between vectors. The vectors are for the words "apple" and "fruit", width=90%] + +[.slide] +== RAG + +Semantic search is employed in vector-based RAG to find contextually relevant results for a user's question. + +An embedding model is used to create a vector representation of the source data. + +image::images/llm-rag-create-vector.svg["A diagram showing data being processed by an embedding model to create a vector representation of the data. The data is then stored in a vector index."] + +[.slide.discrete.col-2] +== RAG + +[.col] +==== +When a user submits a question, the system: + +. Creates an embedding of the question. +. Compares the question vector to the vectors of the indexed data. +. The results are scored based on their similarity. +. The most relevant results are used as context for the LLM. +==== + +[.col] +==== +image::images/llm-rag-vector-process.svg[A diagram showing a user question being processed by an embedding model to create a vector representation of the question. The question vector is then compared to the vectors of the indexed data. The most relevant results are used as context for the LLM.] +==== + +[.transcript-only] +==== +[TIP] +.Learn more about vectors and embeddings +===== +You can learn more about vectors, embeddings, and semantic search in the GraphAcademy course link:https://graphacademy.neo4j.com/courses/llm-vectors-unstructured/[Introduction to Vector Indexes and Unstructured Data^] +===== +==== + + +[.summary] +== Lesson Summary + +In this lesson, you learned about vectors and embeddings, and how they can be used in RAG to find relevant information. + +In the next lesson, you will use a vector index in Neo4j to find relevant data. diff --git a/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/2-vector-cypher-retriever/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/2-vector-cypher-retriever/lesson.adoc new file mode 100644 index 000000000..ff7bba4f7 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/2-vector-cypher-retriever/lesson.adoc @@ -0,0 +1,126 @@ += Vector + Cypher retriever +:type: lesson +:order: 2 +:branch: new-workshop + +The chunks in the knowledge graph include vector embeddings that allow for similarity search based on vector distance. + +You can create a vector retriever that uses these embeddings to find the most relevant chunks for a given query. + +The retriever can then use the structured and unstructured data in the knowledge graph to provide additional context. + +== Create the Vector Index + +You will need to create a vector index on the `Chunk` nodes `embedding` properties: + +[source, cypher] +---- +CREATE VECTOR INDEX chunkEmbedding IF NOT EXISTS +FOR (n:Chunk) +ON n.embedding +OPTIONS {indexConfig: { + `vector.dimensions`: 1536, + `vector.similarity_function`: 'cosine' +}}; +---- + +A vector index named `chunkEmbedding` will be created for nodes with a `Chunk` label, indexing the `embedding` property. +The index is configured to 1536 dimensions (as provided by the `text-embedding-ada-002` embedding model) and use cosine similarity for distance calculations. + +You can search the vector index by creating an embedding for a search term: + +[source, cypher] +---- +WITH genai.vector.encode( + "Retrieval Augmented Generation", + "OpenAI", + { token: "sk-..." }) AS userEmbedding +CALL db.index.vector.queryNodes('chunkEmbedding', 5, userEmbedding) +YIELD node, score +RETURN node.text, score +---- + +[IMPORTANT] +.OpenAI token +==== +You will need to update the `$token` with your OpenAI API key. +==== + +== Create a Vector + Cypher GraphRAG pipeline + +The `neo4j_graphrag` package includes a `VectorCypherRetriever` class that combines vector similarity search with Cypher retrieval. + +You can use this retriever to create a `GraphRAG` pipeline to: + +. Perform a vector similarity search to find the most relevant chunks for a given query. +. Use a Cypher query to add additional information to the context. +. Pass the context to an LLM to generate a response to the original query. + +Open `genai-graphrag-python/vector_cypher_rag.py` and review the code: + +[source, python] +.vector_cypher_rag.py +---- +include::{repository-raw}/{branch}/genai-graphrag-python/vector_cypher_rag.py[] +---- + +The retriever is configured to use the `chunkEmbedding` vector index you just created. + +[source, python] +.Retriever initialization +---- +include::{repository-raw}/{branch}/genai-graphrag-python/solutions/vector_cypher_rag.py[tag=retriever] +---- + +When you run the code: + +. The `VectorCypherRetriever` uses the vector index to find chunks similar to the query: ++ +_"Where can I learn more about knowledge graphs?"_ +. The `GraphRAG` pipeline passes the text from those chunks as context to the LLM. +. The response from the LLM is printed: ++ +_You can learn more about knowledge graphs in the Neo4j blog post linked here: link:https://neo4j.com/blog/what-is-knowledge-graph[What Is a Knowledge Graph?^]_ + +You can print the context passed to the LLM by adding the following to the end of the code: + +[source, python] +.Print context +---- +include::{repository-raw}/{branch}/genai-graphrag-python/solutions/vector_cypher_rag.py[tag=print_context] +---- + +== Retrieval Cypher Query + +The `VectorCypherRetriever` also allows you to define a Cypher query to retrieve additional context from the knowledge graph. + +Adding additional context can help the LLM generate more accurate responses. + +Update the `retrieval_query` to add additional information about the lessons, technologies, and concepts related to the chunks: + +[source, python] +.Enhanced retrieval query +---- +include::{repository-raw}/{branch}/genai-graphrag-python/solutions/vector_cypher_rag.py[tag=retrieval_query] +---- + +The retriever will execute the Cypher query adding more context. + +Running the code again for the same query, _"Where can I learn more about knowledge graphs?"_, will produce a more detailed response: + +_You can learn more about knowledge graphs in the Neo4j blog post linked here: link:https://neo4j.com/blog/what-is-knowledge-graph[What Is a Knowledge Graph?^]. Additionally, you can explore further lessons on knowledge graphs on the GraphAcademy website, specifically in the course "GenAI Fundamentals," including the sections "What is a Knowledge Graph" and "Creating Knowledge Graphs."_ + +The retrieval query includes additional context relating to technologies and concepts mentioned in the chunks. + +Experiment asking different questions relating to the knowledge graph such as _"What technologies and concepts support knowledge graphs?"_. + +[.summary] +== Lesson Summary + +In this lesson, you: + +* Created a vector index on the `Chunk` nodes in the knowledge graph. +* Used the `VectorCypherRetriever` to perform vector similarity search and Cypher retrieval. +* Created a `GraphRAG` pipeline to generate responses with context from the knowledge graph. + +In the next lesson, you will use the `Text2CypherRetriever` retriever to get information from the knowledge graph based on natural language questions. diff --git a/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/3-text-to-cypher-retriever/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/3-text-to-cypher-retriever/lesson.adoc new file mode 100644 index 000000000..807a04f24 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/3-text-to-cypher-retriever/lesson.adoc @@ -0,0 +1,79 @@ += Text to Cypher retriever +:type: lesson +:order: 2 +:branch: new-workshop + + +The `Text2CypherRetriever` retriever allows you to create `GraphRAG` pipelines that can answer natural language questions by generating and executing Cypher queries against the knowledge graph. + +Using text to cypher retrieval can help you get precise information from the knowledge graph based on user questions. For example, how many lessons are in a course, what concepts are covered in a module, or how technologies relate to each other. + +== Create a Text2CypherRetriever GraphRAG pipeline + +Open `genai-graphrag-python/text2cypher_rag.py` and review the code. + +[source, python] +---- +include::{repository-raw}/{branch}/genai-graphrag-python/text2cypher_rag.py[] +---- + +The retriever is configured to use your database connection and given an example of how to query nodes by name: + +[source, python] +---- +include::{repository-raw}/{branch}/genai-graphrag-python/solutions/text2cypher_rag.py[tag=examples] + +include::{repository-raw}/{branch}/genai-graphrag-python/solutions/text2cypher_rag.py[tag=retriever] +---- + +The response includes the Cypher statement that the LLM generated and the results from executing the query: + +[source, python] +---- +include::{repository-raw}/{branch}/genai-graphrag-python/solutions/text2cypher_rag.py[tag=print_response] +---- + +Running the code for the query, _"How many technologies are mentioned in the knowledge graph?"_, will produce a response similar to: + +_114 technologies are mentioned in the knowledge graph._ + +The context shows that the LLM generated and executed the following Cypher query: + +[source, cypher] +---- +MATCH (t:Technology) RETURN count(t) AS technologyCount +---- + +The following data was returned from the knowledge graph and passed as context to the LLM: + +[source, python] +---- +[RetrieverResultItem(content='', metadata=None)] +---- + +== Experiment with Different Questions + +The `Text2CypherRetriever` passed the graph schema to the LLM to help it generate accurate Cypher queries. + +Try asking different questions about the knowledge graph such as: + +* _How does Neo4j relate to other technologies?_ +* _What entities exist in the knowledge graph?_ +* _Which lessons cover Generative AI concepts?_ + +Review the responses, the generated Cypher queries, and the results passed to the LLM. + +[.quiz] +== Check your understanding + +include::questions/1-text2cypher.adoc[leveloffset=+2] + +[.summary] +== Lesson Summary + +In this lesson, you: + +* Created a `GraphRAG` pipeline using the `Text2CypherRetriever`. +* Used natural language questions to generate and execute Cypher queries against the knowledge graph. + +In the next module you will explore how to customize the `SimpleKGPipeline` to create knowledge graphs for different types of data, scenarios, and use cases. diff --git a/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/3-text-to-cypher-retriever/questions/1-text2cypher.adoc b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/3-text-to-cypher-retriever/questions/1-text2cypher.adoc new file mode 100644 index 000000000..24794cb6b --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/3-text-to-cypher-retriever/questions/1-text2cypher.adoc @@ -0,0 +1,19 @@ +[.question] += When would you use the Text2CypherRetriever in a GraphRAG pipeline? + +* [ ] When you want to combine vector similarity with additional context from related graph nodes +* [x] When you want to get precise information from the knowledge graph using natural language questions +* [ ] When you need to validate and correct automatically generated Cypher queries before execution +* [ ] When you want to find semantically similar content across multiple document chunks + +[TIP,role=hint] +.Hint +==== +Think about what makes text-to-cypher different from vector retrieval - what type of questions is it best suited for? +==== + +[TIP,role=solution] +.Solution +==== +**Text2CypherRetriever is used when you want to get precise information from the knowledge graph using natural language questions**. It generates and executes Cypher queries to answer specific questions like "How many lessons are in a course?", "What concepts are covered in a module?", or "How do technologies relate to each other?". This is different from vector retrieval, which finds similar content, or entity extraction, which processes raw documents. +==== diff --git a/asciidoc/courses/workshop-genai2/modules/3-retrieval/module.adoc b/asciidoc/courses/workshop-genai2/modules/3-retrieval/module.adoc new file mode 100644 index 000000000..795fd58be --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/3-retrieval/module.adoc @@ -0,0 +1,17 @@ += Retrieval +:order: 3 + + +== Module Overview + +In this module, you will learn: + +* How to use retrieval techniques to find relevant information from a knowledge graph. +* How vector, vector + cypher, and text to cypher retrievers can be used to get relevant data from a knowledge graph. + +[TIP] +The link:https://graphacademy.neo4j.com/courses/genai-fundamentals[GraphAcademy Neo4j and Generative AI course^] includes more information on retrievers and how to use them with graphs. + +If you are ready, let's get going! + +link:./1-vector-cypher-retriever/[Ready? Let's go →, role=btn] diff --git a/asciidoc/courses/workshop-genai2/modules/4-agents/module.adoc b/asciidoc/courses/workshop-genai2/modules/4-agents/module.adoc new file mode 100644 index 000000000..32943fb05 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/4-agents/module.adoc @@ -0,0 +1,11 @@ += Agents +:order: 4 + +In this module, you will: + +* Learn about agents and their capabilities. +* Review how agents process user input and make decisions. +* Create a simple agent using Neo4j, Python, and LangChain. +* Integrate schema, vector + cypher, and text to Cypher retrievers into your agent. + +link:./1-what-is-an-agent/[Ready? Let's go →, role=btn] diff --git a/asciidoc/courses/workshop-genai2/summary.adoc b/asciidoc/courses/workshop-genai2/summary.adoc new file mode 100644 index 000000000..213bc9a6b --- /dev/null +++ b/asciidoc/courses/workshop-genai2/summary.adoc @@ -0,0 +1,19 @@ += Course Summary + +Congratulations on completing the Neo4j and Generative AI workshop. + +You have learned: + +* The basics of Generative AI and Large Language Models (LLMs) +* What Retrieval-Augmented Generation (RAG) is and why it is important +* How GraphRAG can improve the quality of LLM-generated content +* How to construct knowledge graphs from structured and unstructured data +* How to use Vectors in Neo4j for similarity search +* To build different types of retrievers using the `neo4j-graphrag` for Python package. +* To create a simple agent using Neo4j, Python, and LangChain. + +Continue your learning with the following resources: + +* link:https://graphacademy.neo4j.com[GraphAcademy^] - Free online training for Neo4j +* link:https://graphacademy.neo4j.com/courses/genai-fundamentals[Neo4j and Generative AI Fundamentals^] - Learn how Neo4j and GraphRAG can support your Generative AI projects +* link:https://graphacademy.neo4j.com/courses/genai-integration-langchain[Using Neo4j with LangChain^] - Learn how to use Neo4j in your GenAI applications with LangChain From 8541fd9968178d92d0c3b1f3750efa36546cb264 Mon Sep 17 00:00:00 2001 From: Martin O'Hanlon Date: Thu, 27 Nov 2025 15:22:56 +0000 Subject: [PATCH 2/9] in progress update --- .../lessons/4-neo4j-graphrag/lesson.adoc | 5 +- .../lessons/5-define-a-schema/lesson.adoc | 2 +- .../2-vector-cypher-retriever/lesson.adoc | 54 +++++++- .../3-text-to-cypher-retriever/lesson.adoc | 15 +-- .../questions/1-text2cypher.adoc | 19 --- .../modules/3-retrieval/module.adoc | 2 +- .../images/agent-process.svg | 1 + .../lessons/1-what-is-an-agent/lesson.adoc | 46 +++++++ .../lessons/2-langchain-agent/lesson.adoc | 94 ++++++++++++++ .../lessons/3-agent-search-lesson/lesson.adoc | 117 ++++++++++++++++++ .../lessons/4-agent-query-db/lesson.adoc | 101 +++++++++++++++ 11 files changed, 420 insertions(+), 36 deletions(-) delete mode 100644 asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/3-text-to-cypher-retriever/questions/1-text2cypher.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/4-agents/lessons/1-what-is-an-agent/images/agent-process.svg create mode 100644 asciidoc/courses/workshop-genai2/modules/4-agents/lessons/1-what-is-an-agent/lesson.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/4-agents/lessons/2-langchain-agent/lesson.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/4-agents/lessons/3-agent-search-lesson/lesson.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/4-agents/lessons/4-agent-query-db/lesson.adoc diff --git a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/4-neo4j-graphrag/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/4-neo4j-graphrag/lesson.adoc index ea927e86a..4ca8dade0 100644 --- a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/4-neo4j-graphrag/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/4-neo4j-graphrag/lesson.adoc @@ -28,6 +28,7 @@ You may want to set up a virtual environment using link:https://docs.python.org/ Clone the link:{repository-link}[github.com/neo4j-graphacademy/{repository-dir-name}] repository: [source,bash] +[subs="verbatim,attributes"] ---- git clone https://github.com/neo4j-graphacademy/{repository-dir-name} ---- @@ -35,6 +36,7 @@ git clone https://github.com/neo4j-graphacademy/{repository-dir-name} Install the required packages using `pip`: [source,bash] +[subs="verbatim,attributes"] ---- cd neo4j-graphacademy/{repository-dir-name} pip install -r requirements.txt @@ -51,6 +53,7 @@ Create a copy of the `.env.example` file and name it `.env`. Fill in the required values. [source] +[subs="verbatim,attributes"] .Create a .env file ---- OPENAI_API_KEY="sk-..." @@ -71,7 +74,7 @@ Add your Open AI API key (`OPENAI_API_KEY`), which you can get from link:https:/ == Test your setup -You can test your setup by running `{repository-dir-name}/test_environment.py` - this will attempt to connect to the Neo4j sandbox and the OpenAI API. +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. diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/5-define-a-schema/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/5-define-a-schema/lesson.adoc index 20f871b41..86fa32c06 100644 --- a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/5-define-a-schema/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/5-define-a-schema/lesson.adoc @@ -113,7 +113,7 @@ Review the `data/genai-fundamentals_1-generative-ai_1-what-is-genai.pdf` PDF doc == Process all the documents -When you are happy with the schema, you can modify the program to process all the PDF documents from the link:https://graphacademy.neo4j.com/courses/genai-fundamentals[Neo4j and Generative AI Fundamentals course^]: +Optionally, when you are happy with the schema, you can modify the program to process all the PDF documents from the link:https://graphacademy.neo4j.com/courses/genai-fundamentals[Neo4j and Generative AI Fundamentals course^]: [source, python] .All PDFs diff --git a/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/2-vector-cypher-retriever/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/2-vector-cypher-retriever/lesson.adoc index ff7bba4f7..ff0d130a8 100644 --- a/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/2-vector-cypher-retriever/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/2-vector-cypher-retriever/lesson.adoc @@ -56,12 +56,12 @@ You can use this retriever to create a `GraphRAG` pipeline to: . Use a Cypher query to add additional information to the context. . Pass the context to an LLM to generate a response to the original query. -Open `genai-graphrag-python/vector_cypher_rag.py` and review the code: +Open `workshop-genai/vector_cypher_rag.py` and review the code: [source, python] .vector_cypher_rag.py ---- -include::{repository-raw}/{branch}/genai-graphrag-python/vector_cypher_rag.py[] +include::{repository-raw}/{branch}/workshop-genai/vector_cypher_rag.py[] ---- The retriever is configured to use the `chunkEmbedding` vector index you just created. @@ -69,7 +69,7 @@ The retriever is configured to use the `chunkEmbedding` vector index you just cr [source, python] .Retriever initialization ---- -include::{repository-raw}/{branch}/genai-graphrag-python/solutions/vector_cypher_rag.py[tag=retriever] +include::{repository-raw}/{branch}/workshop-genai/solutions/vector_cypher_rag.py[tag=retriever] ---- When you run the code: @@ -87,7 +87,7 @@ You can print the context passed to the LLM by adding the following to the end o [source, python] .Print context ---- -include::{repository-raw}/{branch}/genai-graphrag-python/solutions/vector_cypher_rag.py[tag=print_context] +include::{repository-raw}/{branch}/workshop-genai/solutions/vector_cypher_rag.py[tag=print_context] ---- == Retrieval Cypher Query @@ -101,7 +101,7 @@ Update the `retrieval_query` to add additional information about the lessons, te [source, python] .Enhanced retrieval query ---- -include::{repository-raw}/{branch}/genai-graphrag-python/solutions/vector_cypher_rag.py[tag=retrieval_query] +include::{repository-raw}/{branch}/workshop-genai/solutions/vector_cypher_rag.py[tag=retrieval_query] ---- The retriever will execute the Cypher query adding more context. @@ -114,6 +114,50 @@ The retrieval query includes additional context relating to technologies and con Experiment asking different questions relating to the knowledge graph such as _"What technologies and concepts support knowledge graphs?"_. +== Generalize entity retrieval + +The retriever currently uses the knowledge graph to add additional context related to technologies and concepts. +The specific entities allow for targeted retrieval, however you may also want to generalize the retrieval to include all related entities. + +You can use the node labels and relationship types to create a response that includes details about the entities. + +This cypher query retrieves all related entities between the chunks: + +[source, cypher] +.Related entities +---- +MATCH (c:Chunk)<-[:FROM_CHUNK]-(entity)-[r]->(other)-[:FROM_CHUNK]->() +RETURN DISTINCT + labels(entity)[2], entity.name, entity.type, entity.description, + type(r), + labels(other)[2], other.name, other.type, other.description +---- + +The output uses the node labels, properties, and relationship types to output rows which form statements such as: + +* `Concept` "Semantic Search" `RELATED_TO` `Technology` "Vector Indexes" +* `Technology` "Retrieval Augmented Generation" `HAS_CHALLENGE` "Understanding what the user is asking for and finding the correct information to pass to the LLM"` + +These statements can be used to create additional context for the LLM to generate responses. + +Modify the `retrieval_query` to include all entities associated with the chunk: + +[source, python] +.Enhanced retrieval query with all related entities +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/vector_cypher_rag.py[tag=advanced_retrieval_query] +---- + +[TIP] +.Format the context +==== +The Cypher functions `reduce` and `coalesce` are used to format the associated entities into readable statements. The `reduce` function adds space characters between the values, and `coalesce` replaces null values with empty strings. +==== + +Experiment running the code again with different queries to see how the additional context changes the responses. + +read::Continue[] + [.summary] == Lesson Summary diff --git a/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/3-text-to-cypher-retriever/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/3-text-to-cypher-retriever/lesson.adoc index 807a04f24..1b3ec7733 100644 --- a/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/3-text-to-cypher-retriever/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/3-text-to-cypher-retriever/lesson.adoc @@ -10,27 +10,27 @@ Using text to cypher retrieval can help you get precise information from the kno == Create a Text2CypherRetriever GraphRAG pipeline -Open `genai-graphrag-python/text2cypher_rag.py` and review the code. +Open `workshop-genai/text2cypher_rag.py` and review the code. [source, python] ---- -include::{repository-raw}/{branch}/genai-graphrag-python/text2cypher_rag.py[] +include::{repository-raw}/{branch}/workshop-genai/text2cypher_rag.py[] ---- The retriever is configured to use your database connection and given an example of how to query nodes by name: [source, python] ---- -include::{repository-raw}/{branch}/genai-graphrag-python/solutions/text2cypher_rag.py[tag=examples] +include::{repository-raw}/{branch}/workshop-genai/solutions/text2cypher_rag.py[tag=examples] -include::{repository-raw}/{branch}/genai-graphrag-python/solutions/text2cypher_rag.py[tag=retriever] +include::{repository-raw}/{branch}/workshop-genai/solutions/text2cypher_rag.py[tag=retriever] ---- The response includes the Cypher statement that the LLM generated and the results from executing the query: [source, python] ---- -include::{repository-raw}/{branch}/genai-graphrag-python/solutions/text2cypher_rag.py[tag=print_response] +include::{repository-raw}/{branch}/workshop-genai/solutions/text2cypher_rag.py[tag=print_response] ---- Running the code for the query, _"How many technologies are mentioned in the knowledge graph?"_, will produce a response similar to: @@ -63,10 +63,7 @@ Try asking different questions about the knowledge graph such as: Review the responses, the generated Cypher queries, and the results passed to the LLM. -[.quiz] -== Check your understanding - -include::questions/1-text2cypher.adoc[leveloffset=+2] +read::Continue[] [.summary] == Lesson Summary diff --git a/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/3-text-to-cypher-retriever/questions/1-text2cypher.adoc b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/3-text-to-cypher-retriever/questions/1-text2cypher.adoc deleted file mode 100644 index 24794cb6b..000000000 --- a/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/3-text-to-cypher-retriever/questions/1-text2cypher.adoc +++ /dev/null @@ -1,19 +0,0 @@ -[.question] -= When would you use the Text2CypherRetriever in a GraphRAG pipeline? - -* [ ] When you want to combine vector similarity with additional context from related graph nodes -* [x] When you want to get precise information from the knowledge graph using natural language questions -* [ ] When you need to validate and correct automatically generated Cypher queries before execution -* [ ] When you want to find semantically similar content across multiple document chunks - -[TIP,role=hint] -.Hint -==== -Think about what makes text-to-cypher different from vector retrieval - what type of questions is it best suited for? -==== - -[TIP,role=solution] -.Solution -==== -**Text2CypherRetriever is used when you want to get precise information from the knowledge graph using natural language questions**. It generates and executes Cypher queries to answer specific questions like "How many lessons are in a course?", "What concepts are covered in a module?", or "How do technologies relate to each other?". This is different from vector retrieval, which finds similar content, or entity extraction, which processes raw documents. -==== diff --git a/asciidoc/courses/workshop-genai2/modules/3-retrieval/module.adoc b/asciidoc/courses/workshop-genai2/modules/3-retrieval/module.adoc index 795fd58be..87cd37b7d 100644 --- a/asciidoc/courses/workshop-genai2/modules/3-retrieval/module.adoc +++ b/asciidoc/courses/workshop-genai2/modules/3-retrieval/module.adoc @@ -14,4 +14,4 @@ The link:https://graphacademy.neo4j.com/courses/genai-fundamentals[GraphAcademy If you are ready, let's get going! -link:./1-vector-cypher-retriever/[Ready? Let's go →, role=btn] +link:./1-vectors/[Ready? Let's go →, role=btn] diff --git a/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/1-what-is-an-agent/images/agent-process.svg b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/1-what-is-an-agent/images/agent-process.svg new file mode 100644 index 000000000..24961a411 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/1-what-is-an-agent/images/agent-process.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/1-what-is-an-agent/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/1-what-is-an-agent/lesson.adoc new file mode 100644 index 000000000..73ae1d6ac --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/1-what-is-an-agent/lesson.adoc @@ -0,0 +1,46 @@ +# What is an Agent? +:order: 1 +:type: lesson + +An **AI agent** is a system that combines a Large Language Model (LLM) with the ability to take actions in the real world. Unlike a simple chatbot that can only respond with text, an agent can interact with external systems, retrieve information, and execute tasks autonomously. + +## Key Components + +**LLM Core**: The agent uses an LLM for reasoning, planning, and decision-making. + +**Tools**: Agents have access to a set of _tools_ that extend their capabilities beyond text generation. Tools are typically retrievers that can: + +* Access databases +* Make API calls to external services +* Undertake File system operations +* Search the web +* Execute code + +**Decision Making**: The agent uses the LLM to analyze tasks, determine which tools are needed, and coordinate their use to achieve goals. + +## How Agents Work + +1. **Receive a task** or query from a user +2. **Plan and reason** using the LLM to break down complex tasks +3. **Select and execute tools** based on what's needed +4. **Observe and process results** and determine next steps +5. **Iterate** until the task is complete or provide a final response + +This autonomous capability makes agents particularly powerful for complex, multi-step tasks that require both reasoning and real-world interaction. + +image::./images/agent-process.svg[A flowchart showing the agent process from user input to LLM reasoning, tool selection, tool execution, and final output.] + +## Creating an Agent + +You will use Neo4j, Python, and link:https://www.langchain.com/[LangChain^] to build an agent that will use the retrievers you've already learned about as tools. + +You will progressively add more tools to the agent, starting with a simple schema introspection tool, then adding document retrieval, and finally text-to-Cypher capabilities. + +read::Continue[] + +[.summary] +== Lesson Summary + +In this lesson, you learned how agents use reasoning and tools to perform complex tasks autonomously. + +In the next lesson, you review a simple Python agent that uses LangChain to interact with Neo4j. diff --git a/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/2-langchain-agent/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/2-langchain-agent/lesson.adoc new file mode 100644 index 000000000..26116d236 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/2-langchain-agent/lesson.adoc @@ -0,0 +1,94 @@ +# LangChain Agent +:order: 2 +:type: challenge +:branch: new-workshop + +You will be updating a LangChain agent, adding a set of tools, to interact with Neo4j. + +## Agent + +Open `workshop-genai/agent.py`. + +[source, python] +.agent.py +---- +include::{repository-raw}/{branch}/workshop-genai/agent.py[] +---- + +Review the code and try to answer the following questions: + +. What is the agent's function? +. What do you think the response to the `query` will be? +. How could you extend the agent? + +Run the agent to see what it does. + +## Review + +This program is a LangChain agent that uses a Neo4j database. +The agent has access to a single tool which retrieves the database schema. +The agent uses this tool to answer questions about the database structure. + +The code: + +. Creates an `OpenAI` LLM `model`. ++ +[source, python] +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/agent.py[tag=model] +---- +. Connects to your Neo4j database. ++ +[source, python] +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/agent.py[tag=driver] +---- +. Defines a `Get-graph-database-schema` tool. ++ +[source, python] +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/agent.py[tag=tools] +---- ++ +The tool uses the Neo4j driver to get the database schema and return it as a string. ++ +[NOTE] +.Determine what tool to use +==== +The agent will use the tool's name (`Get-graph-database-schema`), and docstring (`Get the schema of the graph database.`) to determine whether it should execute the tool to resolve a user's query. +==== +. Creates a react (Reasoning and Acting) agent using the `model` and `tools`. ++ +[source, python] +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/agent.py[tag=agent] +---- +. Runs the agent, passing the `query` and streams the response. ++ +[source, python] +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/agent.py[tag=run] +---- ++ +When you run the agent, you will see: + +** The messages between `Human`, `AI`, and `Tool` +** The context of the database schema +** The agent's final response + +## Experiment + +Experiment with agent, modify the `query` to ask different questions, for example: + +* `"What questions can I answer using this graph database?"` +* `"How are concepts related to other entities?"` +* `"How does the graph model relate technologies to benefits?"` + +read::Continue[] + +[.summary] +== Lesson Summary + +In this lesson, you reviewed an agent which can answer questions about a Neo4j database schema. + +In the next lesson, you will add a vector + cypher tool to the agent to enable semantic search capabilities. diff --git a/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/3-agent-search-lesson/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/3-agent-search-lesson/lesson.adoc new file mode 100644 index 000000000..14ff03822 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/3-agent-search-lesson/lesson.adoc @@ -0,0 +1,117 @@ += Search lesson content +:order: 3 +:type: challenge +:branch: new-workshop + +You will enhance your agent by adding a search lesson retrieval tool that combines semantic search and vectors with graph traversal using cypher. + +The agent decides automatically which tool is best for each question: + +**Schema Tool:** + +- Understanding database structure +- "What entities exist in the graph?" +- "How are technologies related to concepts?" + +**Lesson Retrieval Tool:** + +- Finding content within lessons +- "What are the benefits of using GraphRAG?" +- "THow are Knowledge Graphs associated with other technologies?" + +== Search lessons tool + +You will modify the `agent.py` code to: + +. Create a `VectorCypherRetriever` retriever that uses the `Chunk` vector index. +. Define a new `tool` function that uses this retriever to search for lesson content. +. Add the new tool to the agent's list of available tools. + +== Update the agent + +Open `workshop-genai\agent.py` and make the following changes: + +. Add an embedding model for the retriever to convert the user query into a vector. ++ +[source,python] +.embedder +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/agent_vector.py[tag=import_embedder] + +include::{repository-raw}/{branch}/workshop-genai/solutions/agent_vector.py[tag=embedder] +---- +. Create a `retrieval_query` that the retriever will use to add additional context to the vector search results. ++ +[source,python] +.retrieval_query +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/agent_vector.py[tag=retrieval_query] +---- +. Create a `VectorCypherRetriever` using the `chunkEmbedding` index, Neo4j `driver`, and `embedder`. ++ +[source,python] +.retriever +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/agent_vector.py[tag=import_retriever] + +include::{repository-raw}/{branch}/workshop-genai/solutions/agent_vector.py[tag=retriever] +---- +. Define a tool function to search for lesson content using the retriever. ++ +[source,python] +.Search-lesson-content tool +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/agent_vector.py[tag=search_lessons] +---- ++ +[NOTE] +.Tool description +==== +The tool name `search-lesson-content` and docstring `Search for lesson content related to the query.` help the agent decide when to use this tool. +==== +. Update the `tools` list to include the new lesson search tool. ++ +[source,python] +.tools +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/agent_vector.py[tag=tools] +---- +. Modify the `query` variable to test the new lesson search tool. ++ +[source,python] +.query +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/agent_vector.py[tag=query] +---- + +[%collapsible] +.Reveal the complete code +==== +[source, python] +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/agent_vector.py[tag=**,!example_queries] +---- +==== + +Run the agent. The agent should decide to use the new tool based on the query. + +## Experiment + +Experiment with agent, modify the `query` to ask different questions, for example: + +* `"How are Knowledge Graphs associated with other technologies?"` +* `"Summarize what concepts are associated with Knowledge Graphs?"` +* `"How would you minimize hallucinations in LLMs?"` + +Asking questions related to the graph schema should still use the schema tool, for example: + +* `"What entities exist in the graph?"` + +read::Continue[] + +[.summary] +== Lesson Summary + +In this lesson, you modified the agent to use an additional tool for searching lesson content using a vector + Cypher retriever. + +In the next lesson, you will add tool that can query the database directly using a text to Cypher retriever. diff --git a/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/4-agent-query-db/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/4-agent-query-db/lesson.adoc new file mode 100644 index 000000000..fff36f86c --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/4-agent-query-db/lesson.adoc @@ -0,0 +1,101 @@ +# Query database +:order: 4 +:type: challenge +:branch: new-workshop + +You are going to add a tool to your agent so it can query the database directly. + +The tool will use a `TextToCypherRetriever` retriever to convert user queries into Cypher statements and return the results as context. + +Text to Cypher tools are useful for "catch all" scenarios where the user may ask a question not covered by other tools, such as: + +* Finding specific data in the graph. +* Performing aggregations or calculations. +* Exploring relationships between entities. + +== Query database tool + +You will modify the `agent.py` code to: + +. Create a `Text2CypherRetriever` retriever that uses and `llm` to convert user queries into Cypher. +. Define a new `tool` function that uses this retriever to query the database. +. Add the new tool to the agent's list of available tools. + +Open `workshop-genai\agent.py` and make the following changes: + +. Instantiate a `llm` that will be used to generate the Cypher. ++ +[source,python] +.Cypher generating llm +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/agent_text2cypher.py[tag=import_llm] + +include::{repository-raw}/{branch}/workshop-genai/solutions/agent_text2cypher.py[tag=llm] +---- +. Create a `Text2CypherRetriever` using the `llm` and Neo4j `driver`. ++ +[source,python] +.Text2CypherRetriever +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/agent_text2cypher.py[tag=import_retriever] + +include::{repository-raw}/{branch}/workshop-genai/solutions/agent_text2cypher.py[tag=retriever] +---- +. Define a tool function to query the database using the retriever. ++ +[source,python] +.Query-database tool +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/agent_text2cypher.py[tag=query_database] +---- +. Update the `tools` list to include the new database query tool. ++ +[source,python] +.tools +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/agent_text2cypher.py[tag=tools] +---- +. Modify the `query` variable to test the new database query tool. ++ +[source,python] +.query +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/agent_text2cypher.py[tag=query] +---- + +[%collapsible] +.Reveal the complete code +==== +[source, python] +---- +include::{repository-raw}/{branch}/workshop-genai/solutions/agent_text2cypher.py[tag=**,!example_queries] +---- +==== + +Run the agent. The agent should use the new database query tool to answer the question. + +You can see the Cypher query generated in the tool context's metadata. + +## Experiment + +Experiment with agent, modify the `query` to ask different questions, for example: + +* `"Each lesson is part of a module. How many lessons are in each module?"` +* `"Search the graph and return a list of challenges."` +* `"What benefits are associated to the technologies described in the knowledge graph?"` + +Asking questions related to the graph schema or lesson content should still use the other tools, for example: + +* `"What entities exist in the graph?"` +* `"What are the benefits of using GraphRAG?"` + +You may find that the agent will execute multiple tools to answer some questions. + +read::Continue[] + +[.summary] +== Lesson Summary + +In this lesson, you added a query database tool to your agent using a text to Cypher retriever. + +Congratulations on completing the Agents module! \ No newline at end of file From e8b7134762b4496a5b3ef33d12f28b6b09a88c40 Mon Sep 17 00:00:00 2001 From: Martin O'Hanlon Date: Fri, 28 Nov 2025 12:20:37 +0000 Subject: [PATCH 3/9] in progress updates --- .../images/entities-graph.png | Bin 70361 -> 61655 bytes .../lessons/3-chunk-size/lesson.adoc | 19 ++++- .../lessons/4-define-a-schema/lesson.adoc | 8 ++- .../lessons/5-structured-data/lesson.adoc | 4 +- .../1-vector-cypher-retriever/lesson.adoc | 2 +- .../2-text-to-cypher-retriever/lesson.adoc | 2 + asciidoc/courses/workshop-genai2/course.adoc | 1 - .../lessons/1-what-is-genai/lesson.adoc | 9 ++- .../lessons/4-neo4j-graphrag/lesson.adoc | 2 +- .../modules/1-generative-ai/module.adoc | 19 ++--- .../lesson.adoc | 68 ++++++++++++++++-- .../lessons/2-extract-schema/lesson.adoc | 29 ++++++++ .../images/entities-graph.png | Bin 70361 -> 61655 bytes .../lessons/3-create-a-graph/lesson.adoc | 36 +++++++--- .../lessons/4-chunk-size/lesson.adoc | 35 +++++++-- .../lessons/5-define-a-schema/lesson.adoc | 35 +++++++-- .../lessons/6-structured-data/lesson.adoc | 22 +++++- .../2-vector-cypher-retriever/lesson.adoc | 34 +++++++-- .../3-text-to-cypher-retriever/lesson.adoc | 13 +++- .../lessons/1-what-is-an-agent/lesson.adoc | 26 +++++-- .../lessons/2-langchain-agent/lesson.adoc | 25 +++++-- .../lessons/3-agent-search-lesson/lesson.adoc | 23 ++++-- .../lessons/4-agent-query-db/lesson.adoc | 15 +++- 23 files changed, 352 insertions(+), 75 deletions(-) diff --git a/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/2-create-a-graph/images/entities-graph.png b/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/2-create-a-graph/images/entities-graph.png index 58c527cc5d750f9140a80649376b975bf3b6b848..c4ec1a2703718f30ea346441d21e05e1b573fe3b 100644 GIT binary patch literal 61655 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 literal 70361 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

6N+!6N2fsfdtga)9Ir7-rM-Rd*Pe6xUN68 zhtuv&3Y@}28d8gkUbCO05!C&m`1094(`m3j%?$=4den90Y3%v9D`e3s!Fn|nD8%(# z*D7sA#?+jR9Ud30_4*2c?ekX2F`VQ-GE4eGW@CNhUWEv2VzTuLuHO-RmBRq{WsegC zc%SovQQz#`JoDYn3WCaDE50Y@OByY7)zs94o~fz1bDlHDn?1TshKm^(bSy3|rblBN zz-D_#ZV&r-{S>;^MVwY6cLl=>gpZkQOCy+VZ?2$@N~ybe{!S$z`$*HkhSIdC#~T*- zTQ^pafZ+H091GU_M1eU+0?iS+RfFgSqVi9B7@QcZoV5x0^aFcn9(0=eHj59pG47A% z{fpm45eh&jAKHW0RYH*oC}+~UFII36bY6S*qgg*$M za5thG6}9%_v*%*2)5=^e0$p%H_ln{o_2?7E=oZ$7x$RjED;{=b8#B>8;t;_w`R6x% zdUAKX!b2)Kq^4J-2D)tfM``Q!_`%D-YjSM8NJcusbIBJjd@9uP3|)#pKrXvJIgRI> zV^7WcM&w-(!M^Z@tjGRUB40JX&HE<;(=n8s+qAoaKC>6XKb$dzcs<`qxW|foC%G}* zAQVNyN1c8DIdsHMHs>!hS_RS>-)C!G8DL4~5IIk87&Xu;8t6MV-rz5L)PfJLn{%Ua z;;UnMoNufa)6?U*Qo^siYMH&yE+{Si!m#VA%qhixT5i1sr{zj5sd3FHQxRe4f>{y< ztTXk=z!%rZI^*9vFG)$4M1N=%q3samOVe6Zi(wBTU7fDHK}~p z5Kz;)3u9>kZ- zC>~#0#vjJj3fgf8y(JYhU>v;|E9{OxIKm!ruXSk`Eeo$FEZT3a+(>c|gjU2n;SCP$ z-!+)=eeTy#TONs0ZDyX+J^y~n3DwlM7QSR(?EVI0lU~-$GFFf*L97y9O%6o}bbDBoPD8mrChhVHSozhz@`kzV&;N2Qm;#5&fseJRu+UI)r3Ju?~6ims;QRfge0{f$#5ft zhcESKsy@3JvJUDz{hSde>>bigf<}4>=>;M_u<{ZSuwhfL-8PtqK#o z6xx9}(}XSW#f%}ZpeWCwA@2KQQO#2j%M6OY>jH`TB+5mnKjS*Cp;7y14;~)gVB-AQ zB-@Mld?z}|NI%H+(Uey1w~(|A<9pKM+3ak-=NVhWP+`i=SRrS49xgxRb(*WmKZEG- zg#)6$`iIEGb6BQaxyouL*O+3yard(0YvWZW*uP2>+MkMlC)kpAHxoZ|PZ^-Et??~W2j&S4e{6ExB<5=-rD^(hiqfE z@dpKl`+C1S5ZO@3Dee4Z(vp%0?r*mOh6L5P8V)88BvL8!J7TbG@kJ-@`R z)$ZpznQt(YEa;DCskE+Em$OZomiC7g@;9_?=>ST3IB5D29sS3mqUrz40)XFi#q-jgZ_rkO36?B8dDY zDph7dNl7t}s;PdT366cP))sD`u!Mw&!n(6!1WsS!!FLnz^LNKrsW%`%{R?kPG$@RK z!z@}GU?V%KU|HQV!PbInS;NN&0p`v1m^aR4B{HGw#Gt+yPbSyvqvX%`PhiqwTV!I` zPw`f0m*M{?qr6aE3BM%fJ638#QX4-4#EI-iH&r8}wbv8rCtK3>WT%^w$A05ytVbjf zt$gLKO~vL={A!+r_pzkDjjH7#7=cNZ*!9nkG+AMY;r1EM{!4rW3*Q#?FC;m_v7;y`%5uyI^YQmD;v}H|g6|Xpc?5@> zA0M)g^LpOSSW?=*xMC{ZX*2I+36;HFxqhyg-66(f5Bp5|yf&($dROhP&NUNbrRsQ( zH`2PH=SkIY&8%}&)+8J_Q@!O#ppmz@u!eHf2Ma6=FW}2i&j!c)k7_*2*3$BSof>Q) z>w<%{QeP^!Hh6dnNAhc40=~zxoveb*Vbk=m&RS8^pe#S|@k~$);;3#j^X?bl(vfuj z*6_rYm8D$+_2rA)$O1zB)@U4DFD-+bij$blFCK^Z15#S@<%(`Y|aX@86hNuyIf*x`LFst0(up zyoh+15KH(*Ab^mPMM_cL@o;!01OaQEx9Ga|k22F6Z94Xe-+(f<<8~g}C96&+>|H3g z&mq0$aEO9wYkbiPyx;QEg~RujT0;CSHnC#d1{QIyF?T}!;Cdy|2snDMVt8H52hEBZ z?Wps5$*~szXxptt{ugM#0%?H-cEk6+EH;p`;^7OOqMG`oEV;h9qI?^JlH0Yp#chA& zmq_64Ipfd5OBhLLpA`v|&QaX7xO;W-WZ4bSG1@(cC033PYKV1no%4X&)vvqpV*9Rl zn}ZNOnbh3n&n)0G%Wt~p?zxoLLiNM!d~sW#u?ebNSzG_%qc&w}?iO@I;ceYN>ky%{ z{-1F(3LG2T#kCYAHW)(`NTepT)naR{%X^dg3j5%s8wGX_s19;id-4KLH=S`iacQ@* z4QzTn#6D%@wx899DIdoK(7cqsB$uvT)|MEKwnwlZO$^!RUlTd3V^S7rvdvUV8W9ZY ziuNWrAI?827e5Vjm;j8|MueuUEXHKpd+KM0$H9M`Ht#s+e;*c*o?td|{N5K>B%x6{ zD&o&T$Sa?F)y(XvEqPe$?weG6CL^BM(Q%Cbz^{p8mP2zJ*?M4Qx~b6ImHNa?pXg{Z zZ2EIkd%rr|A(i)$iuHN59DncfDsn2m4J`JP9t{T@hc}4PX<;CTbB0&%d$BOSaXk&$ zY?5DB@73`7n<=5oJMXfUcc%~QtM*ZWYB zY`*eUdB|r__NAfThx%Opw&qz{xrWwuGjSeV+_!D1pA-DkVFi#!R|JStRR= zA$dQeRvB*aAMj4XVHOb#{##*j&26Tos0;BLw@r(YIcO7Ahg&BdV{Hb z^lo*YoKO&#P;Q6+IH7A!fiP!e#ErK6bi;UKjG_nwV90F#BVHHw<}AOYWRn)BPF=n~ z{}s{Gtmx-qwUz1TWz7#~WX+7Yr%eB{Zt2AuJ8EtJnuZQA1qF@X2@r{qqU@7=0qlWp z>k;FX7ahh}A$gIySndx=)Z$samTz>5M*{9gi?(x(6Hf=nc!_B|j}*qf$3b0MP`ftx zMXB>x2@`s^#KK{-w$gMp7QPMTj%E7y{-b;1=xx^piJc}Ax)<^d+tjB>K#%}+eg~jc z_)XqaUl0Prfr3+Ijm+Tp8E1i0A}=n?YaCb-cN^Bb)p~N(F4<298nkLhw08aJ{FiU^ zn$4W8tgL(istiVNuQNQ7vnbfcKez$R`iG3jg5jE1PeTP549Bnw{u*~WmFtCmZ|Bdy zM!e&eNE7h77*%ZMAUy@t$xAvfWxSk1`_Hdg=toQ_LERsb_I3{U zss0yopLW<@d>~Y_l?466r5l#b5Ac`gB=yfS$|A)d5dR&)A9Uadc)gjE5CcC`0mRBQ z*fJ1?I;M(72*(Mkjxy89y_bx@8nfePO4VcDnMI$SQ{~(T^_3qAZ&jB;N2Eo-dD8~B z|E|b=SRQ0!eiuHhTE<^e@_TL{jpCVg$nchmk60ms(Kvda z**SK<53jy@{lA4k%!?4vf2lY$K!YW67sUH27dD2F_kc_fQ;hD7UZwR?G~rvks2>r( zatUNPKS=xULNttQs|NKd!vmfMJrI)9sXn2dss+JJgByAhh#l($xM^~Vy4MszG-035I})+WM<(?0>5t%4obWlzI5($d|=RUmEd(lw%JM0v1EBI6xoHfjWj>sxJY`K!0 z?D)jj=lL{eJ6pS#>MQcC@yX-lXqrBkWlp6ydioAN*K=46XP|>CH2h$AU#33yU->s0yznjf~^ z>1ex|!RV#E~QQv2wRM=v_N5c!2SU)bR`GL=hA+T)Q=iIs!@h*Htw{ z1K_G(Llh9gnE*Ej7|xE2eW~lolm?w0QqeiO!mKZ_}jhir-Zwf%28QrPXIxtv#F^2@A6X5H%s4HKy_RD zCG^Ccdy#+8=B=6Hwh~H<8ongr1}l9~lpjXOou$SF{w%PWa5;eQP&u#A*!&H?vVO@V z2e(k>+ffz-a!6WyBNH7K6U0^yL*rWiZdb9i8XjB(N0#I z@`D?V(pFK!$MC_3RVWC5hq86VW26zQBxZitOv!ESX7qj6AGwbDOSs-^GCor&y#h`) z0p^MEP~Qdq;g`Ni&5u%XH7sOA(M(5x&v(;jNb z2v?aN(rzqwM5ge0Dv9RtU5Is6Bceu zu-R7U(_}2@^L=S5^HJO68cGxqMuTOo43CdGg8j~ZU7KNc6nW<0!2`6RN?NKm8srOgjeorj}jQ|8`Wa`7;^QX*}dA5cWb&Wc^jrZ zFSHg2gAfh?aI;$YFjLUsoxy13g-^Acr*@FBeIOA|*c9^zy4~Lp@6CQ2PKEm1NJt2s zEe?4luPE>JV;~qw1k@6P2I3}#S(+uwL4_!@qGxv|cNXF1w8Kr{jb32T{B-rY4^R8( zee}AJ(}W14jy~4)YG*8h3=S%+0ia=&tHueJjzin|0lRPNZY+b|f=lj$CObjbrdw~o zR^Z2uQJszp-e5tfwf4x1_8;)arfFX;)xv^4_W}!dK>!x67o?Yp82F1EVCTb-&&QX0 zEBXR^U;V`;rqePu{|9uruzBc$aPg5^mA!sXQ8nS2_%)q^E1m=r{oz)Di(&J^^%xyO zP?Mk*s7p=7gkJy2(98Q&?X99ku@Fu-g-M~`9lM4l-@ncIW`9G_6U*G$6wkNn4aR@q z0}m1{VDX{%KLZ+M)y#5UI6V{v3r?}*FhD@-#rOIQ#3C}Lr6U!DGP*-FR+ZR7YgQ^` z>S{7hNJ9Im^ViI#7iZo(+w`o=JT^`!-7YyX@G)K`v|X3WjCz+bfxw%*ueb-$?_6R6|Q|3VJv`coQg_upC5* zXn)IS5A`xkM3Zir2im36Nz4_7K3GOTzm-cj1n&9cefNX|RmV)-Xk+dQ{{hkD7d$vHjI8X)s@F#46)m1HGzRm9^{ZA! z=G~Qd4lCw(x{Z%)n*HI^gRfapXTkIEUHpWE`*x+jH;ZRTiV~j@wxHeXLjyh8i3OOL z57(JXYZ=Z%gfrpeCgX^ge!1W<`T9@HPhE zuz7yytwImi1P`mJp#^*X@wV@~c6<}+L5VAdN8|Ur5qlkD6VB0VO#7h9TND588r?Ht zR)y8K{FBJtM;(0)J`}MDAA5XJBQ~Mnf&wcS<%>`Ei1~x9SF}OelTM@jT=tsSw=$2@KUGlxq z5mRqKGqo1JY}0Hfsg&CMj;kITY!4A=08(Aa2}3e{_y8z|r-#Zf9&afmv{aNmB2(%% zE?I)4+RPk{)LO$HHdtGg(JX(0ZJo4h|0C4QX+2L=QCCz($bE3>#k50R?r0lyz@b!G))?Ia3T(XzDhSTzb)Te^C!a9Tff6o zxZCv)ZZnc7j6B0ueB;}7t%o1kfD6U|2#KMXeLFQP1T1R^sA8^MOB(Fx+E_U+wu)}yU|&Z zJ#5KC%_F}id z>*yi`9s#tVsEM>k7JoXIpiYe8kpwoSbx>`L2i9~MKG_Y{0IDSfhnYe?7k{|<+Cfe%uH=(@StC}2X+pM38-09GVrFVtBBFA+lNOO%*AGuzYAuXtd zydpq&6%L7?e6?GNgTm>@xM!-}>Js~|CZ?5(`MM;<|8%R)o0?t=K5&!@Si;4X7$qjy zND`QG;Y|wQjql1-rut@p*bJdIBnzyX`X0s*O@N#jdeDq)oF11R&(Y3Z(9rZ`TH%K) zwsy&4mGS%ZgG^MrYsQ3W5c&=^_*|bM?P;R2^UeK>)zElhj7ay5g_z5E zPv8a_3UJXHkz!QfrA429&!~kEmj`q5C}J%@y1dw@*GoFT<=|Zy1D!Oc$Z3~_Ly`b> zFu^yKgn#S=_IE4gBbV^L6YmuxLoD?LvjeQ$MeS4Z{xj;yDhnD{0o3PcOcM>5soXc8 z=)vba%!GX$OWX1M1G=-nR~QeNn4oN!>46ZV*;a> z05v%f^kzr`q!R|cvj#1OlC-dT6SEd0C2X|M4zKY{LhES$hgE5_Vr^o8+Aiv+F?l2q=;~Y$f%7HtNiS1&jCjR#Xpqu{v%`e~l6E1<* z^Lg^4a6aHg%ra>97Q7JF%zLcW%jalOllGC0hvK7*LwyeFWD!x5Z3!-DX~9fLNI zqjJU2)?CQZ7+IF<9fJ`@_)Q_NAR@^?WPV;IMNojRi5BkMN4w7HBU7Y1O9%Chfl#3x z*f1{5C0+?5JCFo0gM1NAej55^s7Y5$)XRiC|G~BYgVw4&j!U7QiOofim3z!H}FOOZz8y7Ps zMJzanBAu<9Y971_sDwh?$5Flv;p}Ulh0>|w0>huETt0)&cQHQiwW+9bePxN!t3Hn4 z5QRTT6Yk7|$)~R?0$pIKhk`5=WqvVY-~#9Yd3i=hCAO>xxg`YA1~*OiU$-1qP!q^uSy0+_|XmlA`8& zJ#v0_D?@YY_K(O}_W2>>dM}Z}!pGn#1_{iT|8zj;gY~B2aXN8VnqEJSkFEMGrLgSR zd+LrU*R3I)WkEWLVF;|Tw+f~0r_?x_iD7ae3NMsF-F)3{iSvu#-fhLVRQs1~(FR?( zU>2sk8%GEh=7KZ5j^Xz#v>l35?Fd^~&2OSc zofP9FL`{~ma3Ohwzqm+-S=K|Z%T9ig0oLuJXKefZU2@*CGVneqH+Wz zHG9fC#KMy3XfyoB%5Az~Mrg$6>o=Z5cG$b0g?FE}29v6D&A8gQqpH$`p5t&(IQ-R< zWsTJy@t>0qT6PC;S`vJGerpM8&YAw%S@8##eItPz<}G-?#1g)b&6qdq$e1 zfn8zBVC+5Us6zU>GCNCRlpw=!HmbuWAJp;@o`AM&2?6*Jn`@koMG32i*&4lgOE%|+ zuv+C3FOou$^)jHjHT9|mXSG@6J0jEy+j)<)g}DH65xb0T znrJ|=b$MX6S(=HjM)92gaJS=QZ10ft%)Ow8$$2}QvD;f(T|vKu488gj+E*=pq==+? z0YsSP-M#sGvwJ7FYRtXO&)#Ug{;w=AlLh2_QZP5Vj#O)y!AkE~x#?_xhDzBPC!5F! z{Oeq$wW$kl@b&9__e)}L1WuImXJ=Wc2EO*bc$lRW?xndcEaCOzPAM~SD(2GI4}Rc+ zOeUSarLm!-sLOL}nW5*cdj%%52f2Vw`#-d%X^e6&%oQ2Xm4R#Y>LJ1%@Yqw>BzxkM zzK|Tqpd}rl@#^wo$e?4|j)+_sJ^%(fkkvfHkg4~n0*~|64W)yDE2N&7GS8~v>5c+M zeswu_ey`dbq576mCccBwS7)KE@O_DpUk9Fzogo(RigVVb=nX;K^r5(gR*FFv<5pse zE2-;W`qH)#^LVFhShgM5QMC~&RtXn`iu!2?Sm;dFH|Bqv_ymYe$>V?7RU?D8}ho4<5 z-?lbEG4QM`4`8P6U%dNn(7KuIBI*Pn4NXTdpzRt9Tb-Fitaj-EyI|+_#~as-U?T+x z(2#;gD>n%AG&$~KfK~{_h%ndX?1^FTo!J;P!E#tp8BkhK`n2%DQ=aal`Lf;-Nxsi1 z`>Ce0EN|P*ldP^v)yA~>-s&2O5R7Tt=g{7Adz*AUUVj6+fT!Z5t)rH(Hko$!w z^;0^2u#}^qP4bjBl%@lKKNbI3~g%n?dfzgYZ>D^h$cLlH$ zzxg2KTa3NkHF?G`=|=_&-v_V%G*{$Z=z(KUdS{#7(yB`h3s6ne{QOJ-C_A_p(m*b( z1t>1@OhXmNWaC;6rK_fn;jj-3I!C)a?c*?Qy=LeL4z7nYAd*>(grVNVl^BCK0_AP8 zg}pk8^ETZ-x?Y?yN8YLv8OOl?V$=QlIi&OF^Dy1rV6EbF#?X9NRf2IhACWIzkYAR2 zvoq|pg5DH0^$@@FA!mSw@R0P}8$w)nd&yad_hB0(Gva51L#vj+8bAUxxy~2J-4!S*9uj&5Gf0?Uv@yQUC6;@T_pE(sX z)kj9T!ta{ zk0j6q!W@a3r1O>P_Zs;WoYmjw`b@keq<4}5LvBRQCATq))m3NB@*=>j#EuA{fSS?U z0Ie9>@sK?30-IcP>ZtLM+(VGlP^?zv&nlg@kUeO-O+ zyFRRo!fkw_C|cg>3w-1Z>!bONBD6e4;ud%`l{9%o|KWN-KI^{R2UZot!J2P$s!{)4 zF{ybEO^pA2AQ^sI^81PDOAet2gu!wKg8od@OKsZ%+YXaz^&i*e*P`!-M@D|Ndpskl zvX*rH+I{`u(VR(rSv{uh=SAcp0Tm70zEB`5;mWnEboi&Vnw(v7P;JF>?KlSDzKkIy1LbKg z$FnZ1kxQoV)sSXhA|2!3TP!ZpSr}!DeyFd^mO*ZoHCKoQj>aL2X-ADWm2OND85ZYi zH(VN`^6dEMq$gqXWWL#>4<8i4C%5%HhL1%4mwG7NA5GpKLOv_M>t1KELP^DmRUB)o%n!3gv$XXcOLZwU-UZOz@wKGE5@%8h{jiAI~9neo1swgEJfb`Y{z;>8l0ehS}bA>3esozRAADD~rGX{5pl_H$NWT>)XH|HyI_y^8V@Z~m;4n2H~ zXnC*~&yc6*ki>__J4v6jX*wz5c2WFf*R7h0$~KI9k`}UYq%v#F?|m~m`zt-2l8^In z8#gN%tJRxA7!Nl?BnF#n^|3u;79`Oz=^(JjhxZ~|IDvGmxF3c8yzmfDZx(_u_&`r? zqzt&5MRbIG=Pq(D!|{$&qm`DKmwQ2^p5qAY9SI*l#u&7W^e6G#(&D$DO&1m_3$%pU z$X~Nx;8ze9$9Z{n>V_Q)e0@&)dh2{nyP)M6V}$7Qk*CP02*U?E*W5Z*zaT(7nN6Kx zcqUmUiA|QB>~{zLW~D^kHg?4av(4K6Yy+DiMbjLb_NnRU?V=`Ades_NJ<079tmZ8` zkG}Lq!ughpfn|u{$|KroMBB6PIl~>S{Rgf24 zqC1FMy+0iw^Eo#t_QEOGXxqaId1A`7h$UR)8kyzPP>S9uruXS`&vn_a*Wq)4i4%@h zl*1QlY4tHp1A<%#m_(&tfu$IQd2zZ1p)HN^8c>^Lr(Hykv^Lx)chM@1$}Ed+ps_lA z@`C*Kz6~9J*zp{f9`mhp#7Oji#gfX~Ygs$k@^Fr0*$7_HiT^y(aycE$ta#yTc@d>k zv065goS*nTK`2Rh%XBpLOcR6(wu}hX&(ADlU`b@39vt~SMAnmI7nM7IdP#hZ&eR`a zo%5!AQxBX+KfTOgD!!E2>h*5-L90C3J-{%kmfzZ=SuC@8T_1ewMTUL?;S}gx#nYjJ zZ!BWLD7x3vL0#22FOS1_4_pBpHg2$C3h&{u0VVU++1MQO$?Lhg8NTnlyb+{0=(|V<8agRw*N~15 z=hBcIx*YW{DV^I484DM6UiTRP{LMG}v}>RBD(&u85gHCvXuzVJ${vJJV{P2!(Jl2d z!B0XBP`6-^StGh7Q{Zh1E{e(Ymx+OJ<>KsYg;a;Th9O%sobX#LJ4fOlt;?MdnVZ6J zVFOyfc$;$f*UjGCD8giEc+VLcsr$ z$3T=%y44d~2Cn%W6b?SdLO4CJv`s_su1xq11Vr=HbwoPBOS75H&gT#0mmB*JK zzq^W%e+Hl%_G{iOCb*PbNmJ$QZJ>fx@8l8Z$4aO1q@*8jIkWzbweNgU4A~%f0~2zL zGZ~$HDF!PvV5-(tRIU-NeEqd5zWVA4ycWJ5q~)H};8vrt^DjeF-JpU)J#Gp)R=F%liqR)XAywg1Eis*AW>r@wPP zcVwPj?`ex*cKw5P2`RCO9Fx8!_?K!JsqCg|l@sakta$AQMpstW%96w!2L92gt2!fo zKP$^bV9f&Gc=z*L;EsPCEv~b;v-IVo{6`J#>b^mCTQYUqS>@i9r~uue52fd* zBO6XKQ9Sl<-3eX>kdJEluLSg42V;fZJJN-EX;AW;d1vqr-e>0GaM)E8!?m1{!IrC&FWi84 zaUk=;D5ye&(GdoV8Ir)G2jor21R8wz&~^9q3->bA&Q%+1Fs-T#-_^JlPTTzbfU?M& ze3|#PON-?^zI;WQ?v?q_2zuefWAu+l=W4p`m7XYlvDrHn(LK`0UDNU{W3w?eG3#Jh zG{z)8llKFfPG@;bgB`cPot1;Sf`UYR`@zQ?$BeKGKHS1)8}A~U=m1V*mL_)V!7Kgg z)|J*<^G74-7_vcA61ixPG64%N|gZ`J(#0del2nzvtZ$YA$YB zi?aK|MrVehq)WO%x?8$IQYn${F6jmdX+)6jlt6S|*V@M2>2ueWCKoTWXIbqi?s`V9IGu;s53h%gfQbw3;Jd3Va=r}ogMGB@ z&M?JS2WBFRq^*#FW*nRv#W-fdC%X9)Kp3Gz5;i2V>;G36I6YcXe;?I*JOLbzc*d6| zf$&m5(rzWK?RtFXI?57#>wogIHH-Y^>XkgS1-lC@xV$!wt#`Svi1%2!+r^*VWH>|m zknH1d5p^|rl`5CHa8^;3<)Z2JuabRlq!jLP7FKEh~Jq^Lo`z9n9 z5EJc`z%-mT{@k#D4o|(8?x17b_Ix3lL+sLTpVBP#;Yo6f!Ccm1|K&TH@uAa2&M!ju z#^dQEshU{+-lvCO?Y^FCT%Y-y-yp;!XB^yKXWk)N`q$8NRMhb_0BwJN%%Wp(&!go)ZLcrct8kncZ|vUv3(cXXkjWG#uZJ5ef#tA zMS7@x8HrkE-1I7W(q|TfHqmLKE5`>{OU1IFYy#)MIHP;6r~Im>p2HDobFb!?Bq5_<*Y!~}llNGyVM#EGxkflB3E)@G?Yt42*RC_w!pP_X1RJ;FDiR9#P z*wgE9Lo3WJA}n+_I5mQ%69RnBT%Hy6?+P6coC9)yjJsi2bT*gGkk{lkENpPJ^R|cX z>iJ3&sEF)b#{hmzaDUQQ7&ROOq?pJ{UY z98a#;U1H=es=A!t0S3R~u4xGDCq9m4d*}X#V=hXz$F|MGqg1W2spsf$JG3B0>QXlC z)2q*(wY({lz56dW>n1*E`}6oeu!?kyKO&6k^3-RK&JxkZ<>qy@u;C7~W^&ak`R@RG zyM^Q41wufh*am|L17}a5mGY}`SZ=n;$5q-oGv>>$4h?)=*BTle^*X#@Ij?qA(q=Fp zlvVlii_pED4cvh8l3ze2Y_?4pxl6d5t7ot2p`RD|+vf1veUaM%TI>O!$h>CAvqC+@ z|1_*4k(|ZjfNv!AJKwCaTj2P?AYI~ssmK@bnGf7`Tcf&{&8tZ`WZG&@OMna!nAJXq z?p{L^jD$Or!1}QBygQl__s!Sfljx6sliGr+`C2{SG0nin z$~K@$#GT_x6ZEK_T{hm3uh}WQUi8NvYI5A+!;No24m|2t$do)>Y0leNU4+xM`C%BT zt97Y06Z7W#FCbr3g47g%&I}08ZzE&F`%`rWeCa-eNzxcN4!(jGaMZA5#2$32KcZRq z`Ano}Pr$MFJotWc5sU>~3Ug- zmHHeo`2&~f@q^W8SfXjgaD&y+%~ z&_O?l0USFfMP%fU7pg}SAJo(nHkfwUzR9kBlt)hSmB4R2O`1KxxMc(&+$mKahLPG%reUlNv$R zs=0v|4s`{88$ACg4DR=mRX@B(zhO#7{OHRGRup6C@aQ4b9)*tOCu9G=^?Pzu2!Oy( z!9%E_m5#^air?rm1s;woB9c;e;$$;La9^XrwFxTk$JkOHMOB5{VXg3iQU+4e+}pap zne!HTMqx-Qt-=Q}Y0aiE4SVnF%-%tdy3a=nOVhktAb(<8uNOs6YZHAzXF<23r#m@iEgF$5Hg80>qWHBw>q^bV1L{U%v2_+XwO%QJr=MlfR#2Wbae}OW4)^ zsYp3y4w0^We*ellZ$Z~Ge>kScp}RF6o6~=CxhlHLd#=49%S;et$+T`O@Jzu7rUjMW!Iq0fWZrDGmZR4iM z2Mthu>MIpv1xUhKa_TC1f_Pls^bGHQ;{k{3AO%xB$*3&!~-MLO||8f@16m-KTz? z!+{JV{kZLH_aP-nQhCXB8otQ|w4!7f8q`n0G8lc$N-R=wgp}??0#uOx_(FUqQkPv% zzM~3(E9MsPU%$?RUw+@Do!`p9p;_@YWU(Q{u}!*?m8?tuFb`FPCHULk*;q0^wYyxau4Ak8~M#aoVJ#E9vB#j5}w z|Ma-TJIy9jJS(U7u6oD;Lvn+y3(+?u3o6<=4Dv*elI{m4jCBio=q3elFt* z{|OBy{;)tr_r_CUIqpfcYP#QON^JUcT^_-!XB4eyIPQ0=`N3t?M%ZP+&4`dYmwl|U zGoxMzRjPudNs*N8!)K2oEc&^(UI{gZUa2ys7}^5&yLFX`1kWKro^Jr591DkT&L;Q` zcLio_Q`stU9ogDTY?Alzf|1+8L0YpT5KHUdl)oIZtz!!#G3Ky6n-%)HDcCy;&t4!r zhySJ(cI|Q1Pu|%)!qNK+xw?slgmR4Kskr!jkzPKSDv*{(A-6F%Cnv93gXL>itieOT zuWM>7oX)(ejfTSpqjOX~?0!0<$A{bXYVFcv;N7nEfz}D99~>XKn|%O|N$7FRz-c-8 z)M+McrT!&ut-bTGzuWQr`(yk=|G+;X8UzBc(9GLQ+xq=14Y*~XY`yu@&VZgtB07L! zA*krjBiibmYGir*dUH7T`g8Xh3=Z;c=reu)rXuUP_o7HzGMJ%{pK2;HJo=RUqqEb2 zIv%F_lV~PFCtVsluqTxk5sOIi*Jn2j>Y9g}uG)_CEdy_(_@>1SP#H`!7H32>M}C`U ziZ{FDE5yL(2wqu1K=?P50-U9&_(P}-APtS=uvY)v`~ry*y%Be{XV*v|NLp%U?QOvX z0VQqyABvakO|Ww3p71;>#T0gSXM6td%+=2V9iLAi4&}mZ7mg zu+%Zl1(Axz$C@rBY!GQu4_;+g6>_Hqz{7Y%{q?2l+5#KRmp?m3>XsfHq_JGPGCV0a zBMj2rEg&KO1|BruPc|<$w?(@J1?||qNas-S;8iGS4>?y{2Z3*2xqE=NbsX@l)T=rJ zP>?K|Ug#(+$Olq&?K%B3&$+EGvwa8IFIr_(}la) zEBA-3g`Vx`+tWEr*{D8AX`ejBysv+>i~%+4b7Bw~Zt6HZJ>zDn)!VxhkTwpNgkctx z1kh4>&62&HD`z^uzK;&0Qxc-CHO~?QggsBXRe+C?yfUrEoZ|}2O{M*4&F!$LEdB0VT-8ym6G?ta2Vn)mDmY%kk%N8=0~NqB9fw>12}lG3 zkOp%e2|4c;EBUl1efhPMu%D%a`2&O%;8Xa2)2#3SQW`O?*|07yR(VTo3xDrzfhigiD4;-G8%gRcisnSpD2(bT3sFL8K!qI%n(mNb%I**vvFBqE>hPT6TkuOipe55K<*wr84R0GCmYm?F zwXw~Yg+=vEE%TY@xwr%l*~|`vftg{KInJBQ-pcBc<$1-ins|YfUj8Qm$gpxtIU9qI zO{x9(3Hs*%W^p7kX%546G>ZWRA$4V?KO1v71|esZ}X7U=+J(6 zWGg_!)F{W$kmVqAX!v>(2SSiq&0!d-<0}Q>1?1(JpYJB~M@6t(Oz>2_Ee=;rFzkgG zTOMB{W*ezVn$!>|oh;PA5x{tCiDY#SL7Yc#M!KTx=T}M!4kd+Rw&;k3#_k-2tXD!d zWi1^C!k`hd65(nPXZ_+kQk-XmO%%$KmQ-mSV3+RSfhlj4_#W`psKTfrp8*w$aro2~ zHM@<*#x2ONtY+dv|8k(W*F*eKV$|}oan4Shk~g1&1#-4;9oM@m+IOq8si1=c^y~~( z8JrOq42(Mak+}bU!P7b|HUQgXK3|-WS|>m{w2u&6vB>@G)qHf>`Yk1MUZmP@z34*? zMf&qvgL3|~9DDfFPyFb6)Y2~fy5rthVvkJWKRtL*e3P*&(9#v z!`Ky&l&3TD(LgjD$b>TBVK@Vac-`_Pn(~EgJv6AhgDh5dV6wk&E$rE?R^99-nfyBo zi0Pw$9~PZzqRr;Xl6Z>B_i+6<1}Jt+08IdLV?MSjGgk7w^#;GW+~?YO>DSp{97JUg zmc$u_Iu{bK{?GORmP^RqE1)jWGCBg8=m4ZSq8aepL4-O@0NA89t}uG&)O`!=JDa)XA`} zJ#au3i5C~2hzsc${1}4mjz?SLK{fW4MCO;Zc~qnTENTn%u>M;-CDK?q4GEYU@Co=| znBzF@?-5#dZ;cH)RFauyeG?dQ$P0}0PtSK5r44qGphGRiApF;{WQg7$4bC=VH2Ldx z*a=LNYGMl#pFJX~g3*-G_gMb~H2Xla6J`3@ui)XC-&YxV2}#b>$0QG7L-r-RNL`4F z$Xzci2^dL-@Ec;MdEXlOfDGei-X`BJqTXh004hid1SB~K0bC>nHg=lW4%3%QobRh_ zHG1J0mTSMkI0G$jK3v)R15)rL4D(z8DHlkPsGNHdX{{jJUD5E?2dfCZ!>{+#+_O~W z^_6eNSAVyr3g#`Kws&{^RO;utGLf!(%V4I@Vf=%5xSn<$c%ua~x%SVpB(tp(gCP`d z3kYPwb9bVc)^j!1@0ADr3Q+DM6@Y_rlN7@i^ArZ;0yy-(&BjoMg$|Rk?t`@+p}3cB z69H*^&k0XxK!LQe6+*fW)%M_Dp)Yh zjpdjaX+{ri4ZbzmB(Nz}tZ;V2CzsaEtPIoA0Rp_hxZR(|i)JQ41hxX5TRV`8R`*{K zhgts&?5E4%6t565P`x>66CbD=F&Wb~Oh;esYFMDf zTtd!0hD+TpDd(|Zz5n{K<+w`4o&`7N0KRL(yWoYqh0pC2Kjq@4 zDS!=(Xr<%`LCkr_>rx!7l@I=>1rV#WIZA_iEo>>@%fpXrS|%|_WPd|SXnXBhhc#YQ zrAa6G3(9^EF}yvTJMjCuG}Kk}%p*zsFyP#JgIzz(%rPDz1m_|XtA zPhzzQx>=TbON{1Mzvyh_XnI6twk-OCUlJ*Y|cm3dIv@5Lb_)O;%6JN@7S zH7;w*cN|lIO!GHE06M&hKjz-6TzLvhc3!wM(y;wpE^;`JSXO1vN?{)E`g;1N6U!iG z?~kXT+tK~U6wXtEEIKncazAYYm(ls+Yq*wf6I zFaz6vji&*Cw*+F(;w#lnl)&dt!RI|;z~DP}TBlHK`z#>}6YDi7O&oLx6HcgqOF8Xq zU6k)2xP8r8KxLQy<+S;}tG@fYp(RQ*s0}{IrDk+pC_2STUI_+4s4zA(Zdqg~SAGd} z{kHyF+?X{GcN>T@6mcOebnIK_o<)`loy#XF$HGB`Sr>C3{o_1s%_9f)``xF)%S8-B zAIw(jPn$EMr437L{ygV$eu=f=saH%(is##fDr{EmG)yqMnrz8P>d|D+9w#!tE5AtQ zoc+Ruuc?|=rhCSiUz+s0#NPi|CmOI$9Z984q(I)MbxyFRtdt*gGf11fcrgEf+i&^J z8%IG6u6qndL6$4<`Q-xF9jT7a7s6Mx6!|1BXI}^3i0&b^PxH9uB{viG#`{#%36TEE zq!4<&QB5O0bn#9;$c z-hYvus7RLlYyU;{3!h|g?ZLBvB#=+>XvW2yN_^&+mPljmaQk;R`09l+oj$``r1KSD z`>m8}^wt4XGaPorU~eDRt?23st+RiFFvKn?0K2?=YZ1=bhlJbt=2|f5XqF&;8tc7? z5%=8-3&RmUQX^ekH`YK}1u{W(!OtRajUKH+qNd&|#v&Ks_+%lIXyfmmPT#>%H7iEIR1l#c@ajo-z3yI@V+cQbI+^ z5JfgsoQZkQr*tqO6OKUN0j>@O!2-mwYfGNEv9@V{^C%DY?O_5-5n^sh8Nl&+5$YN} zD{Lw*du8pArood_8fIiue$nzqRsnl%Irw`f0R92fsS5_K1WOLBNr;#rPIA4qy+BvW zzAf*IA&yTeTg3^$_YbSTPS`VK-cbMm zOi!xoQcOZeOQs|T-ICc3dzTt?^c-I9vf|N<{A)_iUc~+cty*MlhmtWt%{$*U2NP=b zMr68;Q?igRz?+m26h8}n7Uq#l)&J>rMK_ykLxq?U%$EI8g%WT2+i~sdZ*2OL^Iq?E z*$iiz!G1{Dbm%bA@2(HmTe9zL6gL0Q$P$((Q&dm}e7qaYlQ~d>SnXuv^(-UIRmk{_ z-s3;RoZXkp_R`+gZ8*Ybk3IFAAhVU79OlGB6`AK#{N)b5Q*k1M7;Lx}36C*La&Xcc z&Y&ZHMd*qro+0JGYuQBzHIYjF@ptc#o*G}UyXtGo z5;$lpOfZiZk)c6sXQ-3zX$@rU={wGX4hPS;!CVP&hFiYy$QZY}BTb9KD>IzmDza~u zI@&*Ny1Xn9HP>p>T~m8EuMCdQ8@;RgxPelxWcndw07NKe2opTe!_gGy3zGICfmLZwR&!smsUdXV~a~&`1wVG zoeuUCICM9+Rv#bWm^3swCLe(}PJZ(Lw=2s}yRy8?Hr~$;e&q6#&1%17GNWKZFyrL1 zU!IH`wR6vqKz;Z5K>57Skc7$#5fT~X+Ns{_AbCo&vSH=i@@#Cx>zO9v?uhZ)7GM6` z_6lO&p^mh$@0%xF-h>Q?Q3Ouo3l$R!n!rmsCt!+m?f{HNexeal_j$9G{hyn$KeOsT zh3Q+Y>b_;{^htbd79Nft{a=&69EAQ5Xt#C(>|!$mer7Vv@wK8Htvc4!nLM1mSEqm% z;M!$4oOuGIfs?Rx-u#hVK@AuSYM)P5zo*`8@m%xPpVTpS5P;hh!+GrNrq%S++&Q^K zQ4E!Ox1C1jU^I0C0s`$lKw~7kZ}VneBPTG9zDbfrQWz<>bs!QY%eM6SQ)l5*|9ZF* za1(m<4Z>Lik%s(S56tdN*y?IqshFvlCvAs+5+>izCf;Bq=Wu|Yb2|FBEPA>sYz$kl9!Hu=2*XEjNl+I(`yISd{o*5Sx zSN7(Hg<=gO+bQ8i+nd*K_%B1#9G2UA(>p6)V3&MwbZ3@@+(F~$VcaueItL)8ilkPqP@bXtG zd5dVG^GTV@6i;}ru20TDjL8(yY=3@E=jL?k{5C@{>ofPSxUc>$yI)_%ynrmKzkQ)(hxXx znSRe5uffO}%R7}R z>%U1NmrvmA@|{CCuQ>A6HDUj9Wtj+mZxI|nUN8>$K|oCS0`mj`bQoBj8aOL=yh4ZZ z!>5{>1O7t}GKD&)YT|+0g6zAE9SKOc;eNMK?r6B`wyQvqYfgf23wpBa28evuSun$! zgk%fuIRd$8k9f=$m|twhQ)IU4(hcu(#+{YqV|bw125m_EeunsMGCdbtDLso1&B*I8 zpMN*i(&7mLajA09L5;)3<|EAzcX0b3G~sRt>0@id}#yL*NWmnvrS`=`_dn}ic0m$H88C#al z%k?0)1nR=SMkPT31};D{D3YEMDbRx!SYsokDT6R%Cv#53kDxNjy#PQxN-z2{ps2@Q z>24S;$^H^QTZA`%Musf5erI*(SFo|A zh`3GUFQU)Nn2Z<1gM$fu+@x0*zDTGBP>$7&L?OZ;qxmpikKT?va}s3x38*OpsiU*zV+gti9WAIYC*++F>( zJ<>bW8IR6dd|Y%ZaJkM=VXj4P1hJUKf&&rvu`MwB^-t6)^i)SW8wJuD`vvlQe_?;H zm=ACO>>{&D>L`J3bgFn|!VIwZi%~beCDb5rZ3U8{x7L<<)}qznn;(Eqzwe_!g ze=kRQa^ANPV5t564^ATD0Ok+`j`XC&#DFF;YkM}i zy(O>h(FT_0zx!+$%;ka~z<~NYzcr(_MMBd3h>+dp5v{LCL}lS{on<+Iuw*vXH;+w4 zhsa@JQNe+oV2?0IpNY_gC}?5=R_wn#?xv~Vjr;wsC;fBoKC-d7es@SOcb^EE^&wJf zp;e=M+;gn`dUoT#Bl0n2f$$cU_Z_=fB0CQ$SR&`Q179v#6lzw#Kx5wB-cS2_LPj$~ z&ahellSc?gCynaJPymn>^smFJG&5Uzs%+jli=v##8{C!F8=1C{Bm#jgWp1qja;5o^*P%hdm{FFb=4*AqI0x|!Am>m(O zr>}LlpUr|Qa?FKDm}SkxX?TX0)Rx$#FkLow(C)7B=FrbT7-97i)arAXOHZ-HKIW&g-)mK_o#PpB3(xVa7Z8wK?W~fPMXILTi}-Om^xF#s-o) zatN5ql$+Ojc}u!e^KR{S z&PFFE>N!wBk2&^0P_TgmjS8JcnGExt^MC*j@mZGOwCzpbipwA{YGPs{`h-vF-v_mj130&JB^4M$Zde3`m~WF|hFZflHO}bW(vb5Da15n`X0B-vF7LrQ$(jWQFV(XP9#jYbCNbOOht9bm*L@ z8W+nIC+kvoD+kJ2KXs|l4hRoeb0w5_r|cZmnWPS83&x;K1s@=+BOtseY|SuJB2*kY z#fbWZ*H?JBT$teJjC@tnX4(StS95!4Ss$e000Q=y-Ba3Nm!uEDhltW*q9R1IpW7Qc z`n3q|kGx$wUB_xvMavGwI+m*(yq03#*|lVuZ@yk{JXpGG1z?G`Fi~k@C^~ht3R3ch ztDy7CcLo-7l@-WJ7KUF(H%P_^AJ*n&0W9H2x-ciYC-E~F!Hug+U!a3M*d2nIUFj&8I$E#eORIDIUunR}cc ziSaX69w7%wyW@-@cGb4%Z)j-VbUK6z68<;L(djAcP`O#h-2rCNgUf6Z8&O^~fS1u9MOU)4X z+k4_%e@zWFZ($CYWU#{8b~3ZshH{#?7{)NkiyrB+>(B^o=}KO`JnLF}fq>EWgDD$h z-+g0w0}6r`FjO$7)jxsBRS1iciO-)K=c0t3wWZMtJ2_)rGY@RsYPU{T8zLrw^_ADApKH70hU}M!76$o)WEp~%-hJduM2O?p@iPFie>Gf6EXHP2$Da*fi>$DaOvM` zP6t;|^+7<>ZftU`(V^|7WhofN^bDzHbb+E5&!#XKzT<2SF~4hP(G(Q$SJi1Ld+#>B zdrZ{1{T%Ywma+hdp}GtVNryJzgz+w#hj2~EzBGt3?&jSP9Tt6f4)|`tmN(9AH|T$97)!h1oZHK@ zO#g@LxS_TWQyR65*%R>0OtgjV*dlbsAZa#!pD7qK0M!9k;B$f&33R3Za&{d_VWt-EHYZc<+ z*G1XO&hE>O2hvJ2Tkn61Z!L*+5k%G(?Tlo#%YbX`@xW-y1nsTOX_sO4L+9lA{1cNo zBt;*}eYsaDasw6rbOUe0?+dmD8t&sO>LwqMdAXN$CRLX_@ji_QsiIKBjZjxa^v;8p zz+d5fxBgi3O&2)zm&>;ld&wX3e*hCcmyXRQ34jegtmJ_e$(fBZT+j_+uvE7w=PLZA zRK}lDddnVT1EgNUr|b?zL>(w|EUt-r8Sb2zbcM>VF25qAt|Z{#H&2~wOjt=^P`j~T z%k(xmU8p2R$(@s>R=cP_d>}2@oz_SvnU5tRu}M3CAPgLKawe++qd=4;hgWL9o+CtKWCRjlX5AT{nC=p#M9q;7@#dkLUAh_Z*jRF!d)~u zj~UItMfdoON>?)Kosvrw)@yjFxfM1Qs$@obCm~6iD z$e%=I`Z@VKP49Fw9=~Fqu(CM)*{c10xHU6Re<6Dd7I;g{fJ3ou*w+l=M?n~d*nUTQ zLjU2VY%T}<5Wthw<95BxT5P7*H;(>Ohtrkdi{9~ppcq5~Iz$^QzKCJP>Px`GN7$>5 zd|tk1c2>vBzN+XhxVy$O@^(_kEc6YsM^qQv%YU?zKnch0j1I;cOJ8&7H;?EBG3`+O zXA;TsN^=d=3KveVYogp!8xF$i38Z760wy4xPX%1Ti5q~mjwYdFs2X7Y`7NMTSjDo$ zM)S;~!8&X_`?KY5yd;4~9S*JwI4kC12fM33t@+EhN%QaH&kD;j@Fc@SPfXfw44^HO zyUOi67m`cu60Mgjl(OXhXdJMCUU#2|?!`;#+bKH-+tHa6{n4tvO>$hA72;s z#G$U!=7os$;2 z73LA<_!oV^d+;I|k z*ZUZtLG45R;FnyJHrB21W6Z@0ZgT)_68!XH#fjl#{vzVt@CeI@Mq@4)Moi6|entAy z>-VS8b%D*dlVnJ&EoBgmF*5HVZw$9oHM<@86Zbw{c#N`0k|bspgN&YY*Q< z2iLy{FWXh+=~JGgHx3&OXg220CRbWR^X6%+a1J+JUjYD;{|wKm9xN+#C1FQ&=T zZj!&o`PoFW$7iD*CTjHcT+(>a+kO;StNWp+`|@?X=kX5-?!W9!3*1w-@QqO+N+KH` zDv_gl(n$Pzv=?VW&+61IJvC#iGa*HV1<2)DfV?^nH{-3Q?zTfA3Khbwi0<$(pRS~Z)VJN6cpZ(|ws z&ouy|7rVRSq;g%D7?mOdv;M1=J} z7t+fQtkJ|LP%0C1`x#`~d|M5TS;1Y9%l%B$sOHf_QoFW}_dQxc<@72K9jgc zAjxl6Oz3|eTb`~rHP_G1#P_JlUe3bC(#BW9Q&o2%XL*C!Mebw2h2|Y0OeQiq#KfOP za2fOoHPlGU3I2-q+r;c>rtdA?qDf_On%q!)yZx5YF{W0VHR_a*6Z6~^Qx~xY%}&|t zJl2Pw$2;N8*A_NkZ3Yzz7l+rzJ!}OER&*g9HSwK$OCNUSjtu}va%0iP`CqU;5PQP2 zRRh?0n3j}4WV_)aFak1pQwz1)LR?gYby4y0vV>J_SH5CDxD?!{^lXE(jg_ZRoM>vFs<)$ZX78a53 ztE`SNKdqGoZ^@GFAD`Rck#^BrT7ldS*GB~47C&$6a2}oL!^9U3o z3Lm`2nkT!{f95aY(LUgX_ern)#g8=Dz=`8n@z6e}98>vd<{f2+M;K&QE9s+{5$JfRy`M${*Rv&vWtR0sX`odri@@G`>7OpK0>sY!lU zp$G~v^NtX$6W)n)FWXIvF@e(SKmXMHpB4c5=#Ed{^P$23<0YTJ&9ATPDJfxRbv0{* zZ;E;13^2oi@$!L9bO2Sd#FhgEM!IH+0jwoevc(~=ljEdZt^CidgyF;<%LPHc-B-cg zj}#KmLZZjb%pNi{F>L)^%WL22;j|xlL)<&BU0D-4D%#xr|oHzQgyu8@f4u zORskwPugW@2MQJuabKvq3a9D#!m52zBw0^=rxoB8SO&03Mu+<}R09LUooK3^Q&Not ztJ;axW)koD+pJLbd2q@eRA2vj)bfePJpYSAd#Qm%u9X){(LfgzDOA339x|P~s5vPl>sNF}3)vIkiX`$} z95r^nPI>mn0i*)(mc|uh$~p#hW$7PobJ$H6?>oudGUCd$24@(*=cO)Fqa^2GhIJe_ zzv-`=E*f$W349V*SiX(!7r*6LPj`tuEibICeUAc+BmYdZ>|qyl;F->;-VovA-|lvn zGPSEmC-0-k9uBO0cOSx69d3yM-t zJn_5P`Ew31*LPBuLTVhP+tZq?#js5y+%R*{nY&)+L5UtIlU~za@jb~*qJx;n+}3;j z@mK!H94wfq_oNZ}7tL>Kv8l58pBXQDTWTQ+Cxnfhx4c=grOEU8^i!EUS?5us_tKesWBh>$K6%>WV`YM0)qLB?V zAKAZqxp7V#w8IOd!x7J$(N0zl4h=WnPWV2zX$QH>G8u;MW#orY+~kb{HT0c1@wK22XG)n)P5f~su77u@^uW+vmtL5kcIkVq_l&o`39YSFhE z993U)^BoUH+;HJ|ax8$!zPqo43!44btaSDDmzUAfPY42V#0=Rx5KpZ!wae7CzbihX zjC%moo1M8(`hk;jWDx<5^e$YiP>o8gTn&uw=s&hxR5W1jk(6Q#P?=Ue?8ZjikT{ys za#Y&wR_{m|(L4R+7mdRK2w7c6lq-$YiwQ6hw+`M(16ywTW`j4!DBh#33?w7BfQF{y zr6~R2c7R^9iL$rs;_)khJIr$^Rh{_*1d*Cj!1%{ z3Y?D+lWu~@#I^C{+ZyMhVN(iYI)7gbp^1vGf<#qmgK8d&O?fHJ`MGuU1eK^#jZg5O z;`LL7f}V-N3Ftd{p=uXOHko}t2`lc5Ol=@`zr5@Ig8>&LH@TDQ7@^04)7AP@U9_ov zk+#lR?$M;;&##4D`8d5}mx|Gip{t+x3w?sIGt-Z->r-+I!j=d*n30{nj)fKq{IS7B z0(3$6p8KeA;4_ssV!`pxk>Sn=`HZ^FpvL#;B3Fj8lP1~Y-VqUw`}9eZA|FzZMl;>w z;LI&ik}J+V-&`g;(g~HZqB{QnxPPV)USG>az4^So^r>Qxa0RiZ7AarHh=BA z=&Agp<`l_Ai75&#v9^v3w@M$~7osRxsDPF*`wBDpVU-~;Y?={wJ{n8ET9G_heh2dN zGOK=^yb3>(EeK2h_-UzoM14G-jtVhK3wKy1$%@T+?pt zQv~3zDb5E*Zu;SaM$gbEH_5{sQve|!_wsV3)Fd$~g15}q*;fb|ec5#`?tilKI3DH* z{5nyZ{r0oGFZSm1GSwgvXSh}X!)Agsc7_V6^RS+Cy^H@9{4mcdO2; z5i&#?~BsL-g6)+0#=iLZp9J}J!g4`wWdRT1?0cRwA=%#Ja^A9A0(PcXkz@-g`(<`2Uyomy#v}r+)L)CQhgnszgmflx_N!<#@%+V z4)C;37gFR&zDmAJ!w5_)#Q7iX1Nlb}Fm_dZAmoSwg_R=z(PcM4S~XzI)ooow-aP}o z`{lT+SE~bF>L~5-j&`Tu`@?AG6xY6ZZ9-+6f?7tC>%7MsxbZziwZ4Q zcO0N@dEuP7&jj*dlJ0F<(-CrOCa>I-#ffk{85rSgef-ec9iQ`P^ovTU9GlHg?$ zvj1!JmtIq5#pHdmrZCA3u2G@&x2HvJ4ehI^MFDBL_s5c&otU>kltk>h83iha(FPYawfDY*19!XY^+ek-s&M8o?tpu# zh|`rV`0qgjgOXgap$}&9&pf% zU`kNqH9*I`^o?u%@vFg&_`7^r1slt`|MV5>22eT;hTw7djFaP(*hnOCuE(*&WZuTK z?%f@>$W=7K;KBbYGO6vS`^G(2E=i|;fwWH+hY6{E(pk*ulfMS$lO~8!5O}2^k$b|F z-POa|Q5wpnMCU_Pz1U+A%U0%SR|gd$8C%pH1qB)x*+D|CHnJbmeC>;TnYnMc53KnK zY^d^shTgW-#|%}w9k%o>TilZKWEqw-vaysbX-F*1;e3i_8?d;}LSfePL#?~P2z!33 zTkPi0V}GhRG%TuvlcBAzJD1?Fj->-n8lf3e#;X+tw{xu%f1Ga*M>hg7Gk^C+tuY|5 zw5w@+%V`j0cKE39MeKCk05Y@f>4>Rp zr4`>y5&wrf%azJRfynCdf3;C5q50ici~42X6Q6!UIAoBNgv;{271oy{o3U*%Qz}0$ zZAdgUMp^O5+E`Qb{+6_}&l5;mt7?=>pBUX!0HMuxBLT&NNn_?a^rUzWhDY@cRjovP zmC=|NgR}bHc5g;IJ`T~^xbo!8E<%*(3i>`D<* z%Xd37Eb;k~lj}D?(Rm4({T?4P9+lENsLB)DS>|=bf^jWdKF%-5g$@|W+;5&|#m07+ zXmpREQh5L#$En=y1&&~}*uSz3N1>Fe>!@;b<`^4l}Mxu$uo;81DRiM#li3)kKxtUcE zF0*(_@b=^y@zHODTZzfKXrL?uu~2*m=9p9$!fayh(SU{C~L|(POPP3si`hiatJ8~Sd{TMHNep?RRJ{Kc3bEQimSs@&`g;lK++bfin5Buk9L!29nl5zIqi zlcO&2aPK9u;gD@@u5|xL!MO044J34=#ZAo4VONXXpTXEt50+fA%UC%`*=-KtEQON$ zuZ65IWTb6(k1y#1MhQHk0yqq919Kh1&h?RWOg@>CZRbDoyYxM@Y#LWc*uA>DU+=|@vuXd@;CgZ0?7{;u zy8$xAeSrp>a3%9TKM|xg_#I~;^tC+P ztJHX%AGrRQ@w4i05SQsu86G&t05X+D!9jpDk`8!`J5X*F`30xa1uC_c(8Bt*%v1SK z!kQcq$xI38DKOoi_Oz82r&}W185#P)RRyl?`<4^>e8=t=HAl3t7)G`f`^Hz6cN(JJ z@5M`Ar0czYXUV6gGH0Pj! z02cf|eZ6H=m21>4ynscDq;xkZDcy_iQ0eZJlI}&fDBUeB-HixHgEUAe-QD#)%f0t| z-tnC=j=vm3$9nFV_l#>^b51zUbp&GF!l|~#+l^QEew~N#M1TH{5{2=90NCCD5zvHg z3IMa=5YD4&EYnTV#RzCz(fC0##AA2F6Y#y8;-s^NmL$ zVXt*rTf?LDf4?K~5+Snj;lrse?yjDZt(Iormd4_F+8?KRJgvb0m${yCOwNQGi zJ#fBs;=_s4?cbDRklRNLLkS#Y}{OT=ueEa5)!+WRkYs>gE zfFD??WLB_aAvFy(@k}>a4Q~zkLP`1 zhQO%i`HpuwcA?)uO2;klj+EA~N(H~;v)hIts3EKlJm140^;>d9z|FI?a@P`!fQ^~` z4l_R{UyCGZzzdmOajTJBN?!c`f(Zw!{aJ1^!cdMdyv~xk4yc&+cOO%2>xq>`eMxkp z;eml2yxewpIgI}Dcgkcb&%TA26@O;yxV~Bm+L04vy1aY9&^?91A$XN98GU^`eiGTP zKWugVa`{kn9O`f=w_y7O42Ek$<}uXP(P`lb{kHdl$qlnBp#xcoe%uO+oQrywj`tVG-r~=rVS-W_d^@V}>K2TN(0-6mqXS!kl)u`p zYLSWFKg19}AUO>2qyp6X97{lNH=dis*;R_QWDCQ^=j~NHLF0L#LG(76MpLE9=K0eO zUJ9effrs(VWY5Rrc;RnM3}QQ;a!el=RrsyD_&}BqD^KlDSCyjPq9gXFS7JnZd^w5#3vbox76*o)Ca%TPTGXZ;0BcdjLkr+@JQp}*7i#KUCx1ufFUbGhG< zr-FyquLVR2eNMyKLqy>xu(DsdnmZp1HqFtin$PIVuIj*d?ytrK36qa)&S^03{xwSx zFb4d09hC^6zr0|85xZ4zi8}&^(uLRCqlJlpB{Y*~UZmZ`L4;hYx<1*y?qy3MF1g)* z;oDnf_=m&@m3PLj+TXF~HM<$PNc)I@dDS>?XGZva+LU@??<0Yo6DEu9iS5wO zCsnfykwNb3FDcl};tPsK)y;q2Bevs2^Ok$9<#CuIxwmE>^GLiv_^VkpU{PS=s#zM= z_Fu5l4#WnqOUm|}4g~d{XOM!e#%KJOz6X!UpS4rEhSNV}NB+qZrA5mIDqe-ddp_Qg zCJmy7&H9`^_zDtLYfNpZ0HTYTZX#5cEf;n0QK-KVgK1!51@Fa1MLzv}rdkw*H7o zGzY2`wycjiUo-YnU|# z1sA?r0x%oGebEm-^Nc}wJbo4yii4u+MCUJ{?x?%_?b}C&R)u+G0=i2)A;C~B%^j9 zCTdu~&~yERHUgyn<}NfrD?J^4=|B=q5hD3is?D zf%}}9{hLu+U)M^6W0Y};i?=%mzh`I1moJZ%`GQ8MU5-UmbNl1Yod{YoaioJzrTX_$ z2pA>;^l>j(Q{A^RZ4V-V{gjE>bSFJGyd>qd*YnLg-9B{s2LrgA*x|;`@8>s_(VJ>| zJpGG91w;A)Fs{n9DN>#4lPb7$WZ?w8rLse&X>7VD>0uW;|CxrloMzU@FsJPUXS_%63GOxlaO{-6ED064*N9L__ zpwp{>F~sZaa*lixjfpa)exzYl45&}`;yf=lk*wkqohlxBrfl$5L&FRGBI=K4(lIR_ zN}9*b?$hmZqDDhw-7ZbkB2Y13F9*ICRDF;dr4d~>&B1w9OMaOo9Vj3)rr z3P}gz#5sDO*V-s9nD7B#>bD@1wdIb|x3ZR|0T_a*Zwkl}&d7cpFVRdnXFEkkkhWRB zX=~)Ea_82bJb3X&Q;OP_w=~N)R_AHDh~k3(_{XB0^Al|`$0e)LgytNu1mpplA%L;#P{)cw)38k3aMYwdwyz;!tz77&SzsYIV6J$Xuk9D&q5(o_2mWQ z75HhNRO(`W%*>i2g+Br=AEy!{ZQnNlj4!ns2Vx_^ph3;Y4mUu!mNM~j`_qM5S?}0^4pck> zbyWg@Yb{9D%=ZHRM23>ET$oSsoF59S>G(_*&>pm=S~r`KD)rR1lcam;{N9Na0U;>I zI%h_Ys4@|9P+EA=B2!Oox{zV=RHh9ueX*+5HT1MV(3-**dhfMwmkO^g@_OYVjDSPx zW{VE6C6}}LOG34I`TouF*QFd&3dRP!@XcwX{YhB`rcz^TzgN`H@|8 z=FycyWM`xKSY+*ovmzWKhsCRxjhw0bqRXm23Uz!RAGQGCYzZtd3Bb7KV;bg?)L2?C z^gQdtk}|>HOxDUdvbqoa*c#3^YQ!ivGzwUakJ%Pe7yFHb>UOKw}B&k`wOMdvtHJfA9b;5 zep#8CtCP_WujJ8&IGxd0Y5s7$%ww>UAk#3=NvN{JtT{z1WZWd!On4zovGF%4O{*Zzj_mRPI?3v zHCwwnJ96Ki@~yV>?lVrMvC$*U#*vQUzdWt~Mb&78ap5nQ%Hx6HxH2CLhL;DG^DFLB zM8sWl>#s(m`%@(5QGkv0264>*f4m)x*khA%M2C8s-uf8f>9CDaS zzwZ=H$$a;z4^3)(jzn^LgKqL6!T@pV5W!>nP5%ngxW^o#Gb9Y|J~xukG#$Sa0NB|A zE_4AQXtKW}s3bw|_}W?M8-1!uEdXR4d~50WEZQ~raqtU+#yjcG1RVDnRM)fb(^0S7 zb1*snj#Ztb0iNeoxGWNIUq-n93vR#}7`_lh)nJ7%8QrJjWtq?TKm6%&7x|_BWtgu( z4$#sBgvJ-QD)I53Fd=xh9aImeb;3LyhJPblHpF9<_Y68@((C4^F~A^ zV|{t*iP$BMUaO`bx+%XeV@svT29tZNfA;l~j61-`mI=5(6d4=OR*PKHRx^KUJEAPh z^}C!AiC-p+5%}Jn`=GIY%xtJIgZC=-QeuLL8M)kyp~ zAsa((5sPrLOYN=DgY-! zxEtW3vQUnvfJ5V-(7&vmAM2pvy`Y(tYqa*8pCriD}|rmAH;+P9Y>Ci74wKsF`RneHvHUn zWl{Zif`wpAcfj8i3HqIV96;7ou`BuB)iZ=F!E~p*YS{38dxxC&@ZNrU^}gSPO^*m^ z;}S|NwmB4WH3t4rXA921=CxXC47#21sg2MF3sA;R93|6YdYBr#Mf7T{IWk z^qUGuoF9-s=TiwCjS9}X1(qwjV*{`Q@?`PVvR8BR%F*ms>?+zOYNdDsG->_6ne#Da zlA*>vxAL)pjMoP!R-*u}mhtIxx<4xiyPjeU&&{ zkmVJz@8*lA)B@KpZ-t~epCg*`fksq0U&`OR;q?c50u`@l(AIFLtl71?Bf9$Ak_uG) zL3D2h$JDWd^STAq45jyJpana2!e5PTO+Q3xuHv_VHV35BJ)iI4x{_~yS;zKjr%*S> zqcjDHt(}{8_`K*ESN<^1VUNN_EL^Tot1|dlV@evX4udbd`~mt9qeBpIs3Y`PC^Nz% z!J#hhHa0GA0U$X3C=OS72|XCpjlI`*zytpKrG5c0zr~tbTkhC2u`|7O~la zuF~E=o~H~gLD3q{S&hA~4_}hZ^WRvqPvlc-8O3$WC&1H>LG zc6QHf#ft<8E9+%ymei{wS3WWT4GEfEDan7HWC`>jv@hhi?0)SWxNqTX`#Z+2g$+;? ztw#$A>*6`R;L_m*Q7p%50C5=h$L$JiWtpLCk3Mce%4}18HK_Lf0{)-;s%>>VVMY~D zv%o+YdP1C%ec_pLaBE%*aPnVpY9eT@I}7&r8C{dnTMs4xvFvpTSWI-(dYR zLSZ&mB8uv5Fr*w8Wok+Ze6~-!yc)i&I|Oh95+QqXCx&%>`uNU;K~o6BZ8>dqKMu(V zXJc26H2W__zhZQ;`Py5Cam4||*So`?;#f};Tk<3nvt5^ze&VB3`On`r11f+Q77R>p z8~fE{CF`CwfQ-oG-a$&h^*+#{}8xV$i}bzw!mMyGbQ)vkW}{OaLx9r@ug zxY%CXJoF{Xj~vHqqe^#=u%$6naI)d^x6dHgK}S!Ef@fXDgJn4`8VMUAPtI=kE#7+J!pRp}HC*>@bF#*mjSH;33+sf7pwZz1G z?&EqQj_vfN6nMD zyp`U$vZlYWP#yLsBvk`2@F2d?uYUEtWvtpjuxP2G6x|v#CLwk)Qny=D|6Z3u)DY-X z=4Pazmu+L%9@UL!#N4o@8})~nS#ETZ7?SsnyzS_tcV)+81Idd`O@d|rtyh^FYO_=N z{gUnrb{clsIYQz&F_4{5DTaWZdbO_ZF2u8%s5%7u^}qa|?+H*YC`T{TXfU)Hb!uu# zOQ-nB9@IEzH{(5$@zs4gtu~i&4599a{gAcj1=ljax9xqc7$bsJ?otvb@A3)G!Bg6v z!f04&68moi5CgRMqn59VAXwUZY16RD@wc+lyZXw}BSqHh$ z=~kUk(0us1Jkg8H+q6N!qRTW)T?kg(#R)yd01Pq~6I|uklM1ME!EWXibv^gsb>gdR z!ra0upd%#jqFplsy-s6e!=Vm4i_zxYvs33v6_|_?#6Tkg<(~j1f-Re5-LH6 zdulu_Cke*9gtG8iI%c=nkgr`@S*|osrf521BywDQwNX(TNo1VH5?}XlI_Q07!kFCU ze-4bb16~oz4|Jn)*+>eiPt@Qx?#Ch!dd-%uzwJyydq>N(k-%b>gPmaRYa$g_y9d`{ z9}1`_uvXo;T&h%#_WH;EF23*fwOMhBWH`DMFgbXLgFa1$rAd~ljxvvS*x2Re%L@UQ zKdb;DhMdi4yvBuhqFTMUIYM?!U9un}P6o-j0U~ur6J(DjyiKni*Cz5b0y>1>zH-x5 zmaB20rKy|aMAAC}C=k$H-5NAv zXgZ*Z@;w2f{&htReXPQOg-BC5tBs{_G=9IlwBhl!i61yx`_jkOGj5|U8^56<4otrlteJ?CRAvwF2@m@(yu+Cr9kr8(f*FEt z4Lg|2@*BhohvJlYA>uG*FaNYeD?0%AL>$t@fyKfU76Bq(N&C8+*Q>wNYJK?3gbGdZD z5wOhA-RU&CYvJ0LBs1wkjgB^ ztZ{?&+I zvzkwoUCxjc^RdZ(kzOrM-G==!?e^QNWwa2z%cu`R)t79K(Godzx%(0z8DbeHp~RmR z=Zf66qi>w+TD4%^mLMpSz+34mo`}fBlGTS_*6AdOHa+0kW2AXkT=BIvJk=)E$y=;L zJ>8o9``XtFHaJuIGDm#HY7Js>7ch15tdMI;$WI<@V8+^}Qh7v|T4-8$*L`T1pMt6( z#~XQJ<&YOGW``;Bu@`fn`C!@cFQ~EzDL*%o*FzvKKs&$NMYxUu``XKhQHj&9Numv# zT2WG-M8ggXXU+_?hHuQ!+B#a~p%&1c58i&GG@rHiyw4;1vxxGwrkN(1v!$;r2p^OEC2r}|@M2lgEMyO;b$}~d!UD7{?-wj8@h(2t2czH&O6qhln%Co; zA8koDyc1fM4$mKhq^E*B6NE+G!za#>FT8B`k^?*ipzy6DyWBS9nXZ~QyJOVH&x|%C zy&u23S_~)vvIW_>t+}8yld&*AortcC>c=B9I%TF42440bMc_pF5b&?WyQ0Aw<$e~? zd8H&djJW#*NN;_*japWSc@Iof2fir=eA7b} zFI&889enTSfAm$bDhi^hRKLN@@wR1op@rYb3oFN`m8IX3_P~2mXQND4ijoB4>83ln zCOuYCI&(B$0Y%Yb?qO{|&KQv%lR1}BHhR46#SPa=dU6X<&V3ctKkUc%q0|Hzng!tF z5`gmZ#0CBq9toY@dLmub0hH^mDl#|s7&>4Eul3cG*WRyx{VIw)JcgypGi{NHyXA=L zdUP>eiR6KUeOkDwovmzjOo&`|dQ+*1a#c{$xgDP^dKyO9O5lz}S(Rh_h9hW`1Y(0j zdz$xWpP%e;NhuHo6~^Za07S@Y^-qKg)h9*xX^|%#yt=Zkqb8bM$-2{z3T#>D zey{6Y@w_(%ZzZO=>a&Pi0ZXAWp5BqQYrQzj=lI=*J_C`mvdiM@QOTIuyyo=GlG4lO z{hJxFfuEF4@d`P0#uHf*AJ=dA;l9=Onnuy15d&u&45Tuy7UpMbrWv)mQ3rf8~+B<9bC`2;UsW4>C$jI53Nh-zDa z{x`?yA_hq|oGN$=JlpM92w;B9hkZ&)PvflLebCgLofYm@zCfK*|*xdt49lCOt&;!3vI%A^f@b`G^sx`m+TRq~>{pJA!(o+iiH8@F^< zpwA%PL_8t)^ZrG?j^Zf#|yMqlG_-hkyv20Osx`Fj{5I#<}co1!61{uz`()Sk;z@Y0Mh>OM&QiRdxXwxD zDivBO+#aC}hk7y9Td_x2ocolZpS;f5{4@NmG}WK0fo-7#Py*(1Lm#H5-owY<+&__k zvX;^V26qdrZ{l~qxe;y!sFyu-QYFs7w=LM$8sKa>wtVO;FFb_0e6ukjhGX=UZc(XR z*fOkq{iyrNp#P?dUZ%$cA4|4LMiNDk+z}pS-&jBP!_^+- zeKbq5^0-B^Zs2aPm_nxOo^$wERP~fAQFV8>bP!|g*q}P;vTI&c&zq=IuFk8OZ|<(J z82#Jw=&8{ciJdRLcs`ntAAW1a>y56wa3-AEQhPmk;PJF(Nn!R2{+(ABE;eCka9JPwkByGRbH#nOz#+TQ9 zE-i|*MP!Uw(Af7x7EV#U_+e`|vvNBMGvH@v%>k&zK!Qm6hih!-1kcN+;j`^`e)Ao_ zYMc@HjGoYaPGZLvlFe+C7Lh9-Ywc3ElT51l$fT~I z(n{TcH!~9l)q&4*cn$|zpP~nN^`QaC&)?hLBB76TX;+{M+k@PZt)9|VGTQ0TU%dWX zZGOxNI1Gadut|g80rS(c=-(z?R}e%sk-hK9-@@0hw0CBEhjj$a%dqaW`m+#@%az)l zA3IHE_a-M3LtZket;BQd{@oapm#?2i-vQ#yjNp0sySm<3z<)^PX`S9lR{Y)jjP*%~ z=_#S1-M>4OwJEvM8KIcltDB+D_}A%t)PxvIg4xC~cAMIOZczul zJCVo9suH`IO3f7mI{_Y{YK-RD%&3;T?86Ci$Zf89XLHf;w1wQiZUW4xg@29+09-D= z&d#eDGGO+06XkQH%@=d!<^zTA^mUWR6wB(~$sIKOT4B(QHTVMu^S5xE=fHP2w^9gCZJTb8i;2EK+P0tug566Og7*!v) za26%)tgU`#;l+w_%A*!9AZ|ZZEtY=>(<+iL_t@WgBcCRvi_wCIwl&W-_&{sjyP#ln zw96ePpo;;1%9j=|941^wmPYb1=RD4<@)1W%-7WWdR?t(j|HDx3fWG1hsAvnedCloJ7fMTdK!G&mWa?W z)WTO+R9M&-mz_-^n@~8;x17dpDkdK^xVsK$vn=^gq=?kNk3SZ^iR&%h0vzi?RvTv~ zu7F;3&d3~Mvgu>*gHM<(WuT_Gm1!MO>na>uw|0l`0UW8*ukeNkpYD0FuM_(=m^lqE z)bHLeZf+7X!+ojmov+=9OprCiAOdoT3_{X^kFiJeg))#E(d;R7=C_?qJ%@&lGQn;*Z`;|BV zYWj9{zJvC&4el*l8yB1Vm>l_O0cijt3I5WsqPtYu^>T$V3hT3J40}}aV;lj5;)h>1 z%U$D0s*~8GOgZ_^{VsfOxXxdUufCo-7ugXO1c%P+3)w3h7rZxXgM|{5vM{%X0B~!z zv4JquaI~ueKK){WoPRf} zS&~ovQR2Oa0~(mVudxmc*|9r%Q7?6Y@p+g@E2s~E@yS@cJKuf&{Bm-h>1BcP0T6!I zIpDr<`9{!*QDOPRFQ>KO?%y;!^ozdjM~Quy_m|AUTgYV-1f2h3$$nmmwwKvY{-||n z+P=;Hm366tI`G+#39~+}BVL(A9}-BTow4YgpwNt zQ0T<2Nz5ToCR8APDS}h1Su8(w(8he(mS>?Yk9$)KrU~z6FY>=WjNOXCf`2}!pSn$GBRi>Bw2)b?u#L89Z z2yc)$uY$he7r&s))2FPjR#$I4S5mk;^25W+zM|DAwyPf#%?>c3Cg$d5+gj4PQQ{Vz zR;gT~5bPY&KuyL0+Co1W8hw~Qa~3)=`bI}LIK$S##}~6rX+aLAd`Guy_a*|q04Y52 z0FonDuhk)6tJN{=v7O6uGEOCOp#b>EHKf$n7iH|IgW;LIrdw+CR5if>7~3TYJM1?c zba+%)4)EzkV*-@I?dEOp8(?bEp)Og_g0GtIx9}10eN;CEbX#9zy0QD-V&>-;iZJ6v z;~#@Mof76ADIRWO28R-#7m7}=MTKwHp(3r!^QsBelxDb}MxtphzpYCF*P+4e!9AAY ziC(r#Xdx01{tgXsi~tX!ZU_J*Kj^<(zEYsbx&&BU!C1W zY6AMiv0G|p3@3+)PF(HgUg~=jNwA-&LW-*KSnVh}0XR9K!0zr(l$=r8_h3B`aRe@M5_eEi($I(1VzJ#ZN8=tKm*^4nm_R3nZTjJ)iMpAX26daR0E?Xj2C!(n z8IVCa|I{@@6jJmG?G*Kg>G3D>mZ-T5sQz#$JC{YctVNrunmSaK(~WQ{9^jm>Ds=#A9Hk4=-7@ zhH;DAju~GW2bnFlACzk<;rzl`l6ti_HgrwVq%-KE|3fY0v>;@N)Ok$K{i78VpJ_kC z`i6AFHhK&n=|hFZ5+I$t$85qngW(x5BZIU5D82d_ULzK$#B5&;Hx1AZ@Z5V;m_%>|^p$Vkht{1S{~ICGnfZF~?Pw$z-PXH4QWK@Ov*9_x+kPClIJ zdKHUZ*S@3@v^^IjFRu#&$j27Uz{x4XG^z`#mzJQdtKlf+uMq|;dCIq(P#+;i3=i%i%RI?o0rPai}kPK8u_1DmaX2wolmsSg(H4w z&tsg$EH3sCHF?J&`!XOdH0}ZEc(tA~TBY>U9P*QvwYBisLVV?e%D#S-3=BBvB8No* z>6BnasJ0AE1M9N4l^ z--veNsgwx*h5ZM75tQQ$t?Qqym`EZFft-^EmwWnU+jsl{$OisKT3se3aKHW02Q6tz zxXcf)=SiNI8kzxB_D1Z$qKV6ms5Mc76^zPyoC3w=>7e_Lc8cuwxMk~~yqCQ+2IysS zGb3K1ZZC4G^i|WZqT1|ikXDuNldKivf5`>ozt^hENG&9aK!bDLUcCC*Ok?R|NxPJ% z4!HfMfX*17yTH8=H>w1ukygCL+AJieHu$`AqL=37*-yVlR%=NySJP^ah^^Rpezx`9 zs^S+5QTi35wgK?7E@Yfb$>rDBeeJD$tv}|jY@}1F{_=b%01H1QLnax570v{AFr^Yw z9T;HD;rgD?^8MJkN9l7KO&RfY{R+?Fapeca?l4{~)la`q?l}?Td6fpg?2!wFyfBAD zVA$ngLVAi~9{lxZqSkz%n*14US}+6+KrPu3Bbk{B$pb9HY?*K?6x)Y`h|bBjUuMp&LOyp8N4t$)vkUxb~-Sm|TtA4wpO${tBqd&EMRCETGBzaBjX4 z3wuvCUKW-v?1edJCWy%{BPxKz3p|VNNBzO>-*ETi)3n0tSFb1(tdX$kSN0u8Oy#HN zJB6!IJTS{Q&DAvgu&6|cDkR{ak^JgGxbIPtWR$NE^7{U5Pv{i1Sx_tQ2EM1gBY zR$T^eQ~-W4qax&`W6Tat6d#oz^W<7Htx4?*ZmSG_XG%nPTaW;q6n0(F*T5}|a}WGN z0c6gNCrA%M82A%UR2L^9VMfX?D*~+t-0HWi3_kRsO_H#+3&FoeAS7oXq64FglhY#IPpBfzS5LwIlt?`n{np?(|E=m>t z%ibWGQNZ))vpx2YXN0K>0< zoowbMv_MYj*+MnG?INt$wE=H~35S#&zi}eOAT+G7nj3?8v2xMwh4CT-qcGmP>gqxm zR9QR7_Vg)q%buK5rUHlK$d)D*7498yx8pC&696Sl4zHw~+^}UAc|0cpC1f*KYZ=2L zzoW0JuR2zh+8}@3|i=S~4U_Yuu^1B_CrTrGOK_DDXIY}|KoiK`zoS`AS0}sBow&^1!5@9BN z*kLkhe_FJs&fhdE*#Kx<1k(4sz>^n9!yO&zV0|3U=;J6-lhD~{4p0(RC0QN z!Pv}#KF~0$p5w%7Se&HGiaX3yX4RcjDC^p#`Zvn>O-f%XC#DRx>c!PlG6M@G76f>z z+`cCpGGJ1iEUErCEBnhaO#c3OjUP$pjos+Zk5ov7ihIzbFH=pIyneafJJ~(YzYOVE zt)H!ah1GT3;ak1STU0l)AN=S`5%uM3_pdfv_dCUWo*|D>xE{e_kd4y!_-x;0`kL$H z&S;xUdM=3uMj5ljWQWMmn0Y(m%+V*h@!E;?d3A)j8~xqg_Hh&Iqs3%F_lC|_N4z|) zDZU1AnM;?fhjvKpE)6Yb<)+6E{PZ;WEMMi2$q6?ECE3ipUeZhUNWcFZzrir%L;yqf z`Wn3r%=E*u%HlsG#3&}4{Uc@6SvgO5FjRN>i|50-0ZCV`@2!g!Wl$~TOTG%^MAxB_ zZE>=rPV{a%*=|VWssUVg8?W-_VSvHz`TC}Q>q6QfV!ljR`+j9vU1}n#cH#z`B$U=X z)ZV!nO{J;*= zXgh1Xg19TT!QrUtysqpd_b9d@j6F>lN*vF19Pl8N#g_k@hUc$Z2HxU14BZgckm5oO zKtbi=M`J@e8AKUb2)l9tZcWZ|+}g3(($S6Gr8&EStF8<{ZcPcjtYnxk(OzGNGRJOp zSly(|S4{lYkq>^AKTr+)hx1iDVA;ZIvQgMRY<1ZZBwgd?oeP%T=9%8MAVCU|d=^2! z^@0<-PDd19|G?VM6Fg8GXdn9hyI$RiV{8(bX9Nr9y=W<)=a83C19mSMOiWfGp0}NJ zVx22+wD|M!zAuS|&*^yelFldd3J_CM$N8)oP^fdH<+fr>!&GhAJIECeLh;BSaOb&9 z3)?3Ycfgl5|JPmOzskA6PIDzB_d)~O?Ooknt@Imq+!A+}Q3i4f=6Zh(EDCj7 zMkv1dd1=f-lpI5{;#c&LlVWxN2ex`sSoCK%>zJd=F2Co36gy8~8)%dWaR^`U zT74W{MK`iSm>V;(UYslvUf8K!I)IzHL=Qb=@i858KNvA{#I(k|1i_bUalRVb8`1F} z_}h$)68tt65V#Ue=YhFka9U=_Ea&xdR^iMIIb`;;%%6!^(Y}+^R6E1I`XIqT2Hyps zo#yiu-`NeOoNjZ!h2%5U?A)Rtq$d&VA}G9C)=o*v^g9uYItLd4L+WwsiFN!@VW@s4 zd|5j|x3(pVz2nYi%Tb4|F16QMrC&&5w%>xAOb*Z9;zk8!#;m&Qd%9t-l zCA;_vgp@K$rlws@Pb^~cZ=+LjNGwdHnW{_1V}*Z$)b?=4qF%{ZC5iV~I~5k?F^1q^ z2u@2E?McCpqAXHQBMqV(m8$EV{_SgM&3$3f!VvKX)KE=^3Y4IW1>Y!KoA2SpTT?X8q;>O5uaw;su0Q%%IP&D3~ zl)_-t00+P?eoVm`kWMj+uXW__nxy7ZNd2uyn7rY3G@rouZ?z-}94^dkgQXH)1ViG7 zxUtdsi%r-n;e+(Gfssw%Sm4+;L;@`tlj9tIEeN>S?GU%jD?cKpy;R!P>kRQDJUGqE>Zpv>a%Ue3ergP@^ z%x4;>_Zsx1dozuO*f<#zf}T&^K$Zh2wW+YUsXOV8S`Iq;6*!Ua^k-GfPAS`sV8f0^ zrs1i)H@3g0tA;uDF4E%~A4W<2Yv=#hE%X7BRnZHoh^$`3IILq^tL1Hr=r!%9^ypuq zNe7HvcZB7=l@I5!WKzGc7*|7yQIE3aEzdX-(#K~EEA1?B4;}UOU#Zglu78W#f`a^l zIDgCsAsKtyD(J4wP2(cM2X)sKO+fxep8$NXQ&B7fQKhtlCb>(ehF(%M~g2_?NJcU zcMWmq({oBHhRFjzdIQDb)y9F}X^7t>ey`)a2L;_d1#&v(azZmnYK$a!55^@Hlc6Fv z^IHc)LW2D6u0UC%*YG@nuZJ$rPtVhgZUwb*5BAF||^Y zh@JtxzFtb2nOVW`y#8(XhAx9zT35f~&G%~(xQA8+PY2-obMWnu9IdjK$uPWkfV2cY zgG;uN)i2pgP+u7wZCCtnr`DD=s(%~u1CA|hvQ~@+$HXh}rC83qwg*kn(MN&;z&7g) zuadLdA#JBGwQ?MdG%h6H(3v+gu5}N~UvZ!OF{bYX)`d%{c*t6`%9Odllp}L~6s!H* z`%rdPd4DR4<_^k-Nm&(CB(6lk%OnBl2klQ7JSLXK)3&z&rRCeyk z1A}=oOjv>!<|zk5Cty#cE;7P^stOZ6hEwq%hNP*{VKW1!WBW&lW$l1~qtNYv z&KnnJ)wc3rv2D%!E1b}5@J>kjPum?EO8?F;3ZlxKE>ZAM9$F2|vKXx}Md^eRaG?`GG^RJBb z6sUcqO1(~?gM-O2=^>1ND{+96t#W_?A|%vcMOmmFkHT43zz|%T&A0Q*Oq{hF3V4>u zFroWn0;XhdbR7E+!^FsMDG;wUIUFq+2^3SZH{1*@87HVU{=Fi=KLH3JSSdjGFAYQl zj6%rYV?lgfjA^DhXUI@CSk!O2`pR4%IQdG;<8~&b)e$Ihlh63iFGq!1%W)O|$aw)F z?2gJ;!m*4upS5?gtZ#*Y^bbthfS&>tz$MH=P*O6w-1>)W5ejUO^P;(IOVNGo;S2@4 z)=pBn`_0y;*B$kre}f0fzy8BOO^<7!h7e$DzGF#krGWm=?~Ee=+qqChoPaT(VBk%N z_@EC6VU6@9(_yNUzQz~bA(bpbT=tuioG17uzR9(cC=MQ2ssXkHaY!S~C$O`YOu-6g z39v}sL$dgVt6Mp6B^~XJ%;o3)?8YZxy^JF}(BauLOnFTwg0AFLCP8?fpq;|#!N{^ZC23jsdc@voHktgjV>KW_Ho zt3OCQeNpI~$rq@#UO03iC!o9~BfLQxI}n5(4WE0|`Bwj15D1{6{IGYRH$eAWjiHN< zPJWWW@Rw{32^=~*H75KDZ;ty>tE|N%j!p-C@*X3IH;6+xH^B5obaysra7p{al0m_5gH0et>9ylu0;Axp40mHredJa{C_tEI-a;(W*mm@pf*GT~;l}Gh z6~>fHkmmMo#b-4yU)i7+Xczo9b1a-6_$||qYNTjzYgkqv_&z`eNkO>Jb8fk-S{Q3< zPB{>)xZA(e7di7l7FzS43@NcRsB@SH^>iLvcAn9o{`WI~c|fO;C;=}Ra#;3ELxZ41 z0`2tTh(Er5=;ExZIX!s6mR#}E!KHbWx~pW(H{glNk*@x{;xA~Y-;K-hKPFfbaD-?B zlB>ia4uE3$81+Ibbu?PeYeKq9hh8Xd$Bk_^ihg3^bJxtyWNm^$dm*ls07CwGPgrTH zwYG-&&9mDHTKWGjk2V{)yn(+>7yzV(&v_Gq1}+S=LL)4qf1?G6?#}>qU*Rm3_+kn1 zFgc^LA?`tVMPquBE}2kk{5xZ?C{&%OCrtC5oSf}GLik_s7AB^B^nf0!-ecGef#{+5 zsB7`nQJewbmI&e2cRE=DWuogcagVp^2@ExZL%eh^E51jN1xOb;qr+`+ZVSo(ieAM; zFQ+PGaQoD93yIyjn=_})`ft4{QNVgPON-2CfCLUyLH=ih@5Qtv#__x&pRlswwy4>0 z6s1>y`;njVDord`9~Y`q(hK;Nu{3TIcZDHv2(u-e4?PsYgf)2E)#8HgU}@k(>l2Ri z(;wCUtO_bjmw(HXmlvlb2QMUrHT37tUzn`)pMSz8w{D59Rs}8W}nA z<{BF}2n#^z&KzwvR-jWSM#Lk*6X1Pgj-u_(VYU0&XEtBOty<12`R9dBK&8LI9=Ys%PD%qIYr5Aj$QLHo4^i}44(Ls1p{DbhM@OcQS90?GjmrWGdDA5#zZ4v=BA-R5Ev3zGr zOVew9PCh9qB)#YTaG0n6pKh)JHkz`JChPN`dizhlf+2x`WlfAF pux$EPcpSt3&g=jD6D9l;W^DuXzHR=G6$tnvC#5V|A#N1-{{e@LE{p&G diff --git a/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/3-chunk-size/lesson.adoc b/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/3-chunk-size/lesson.adoc index e231dd2ad..5da5d6498 100644 --- a/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/3-chunk-size/lesson.adoc +++ b/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/3-chunk-size/lesson.adoc @@ -3,7 +3,11 @@ :order: 3 :branch: main -The graph created by the `SimpleKGPipeline` is based on chunks of text extracted from the documents. By default, the chunk size is quite large, which may result in fewer, larger chunks. The larger the chunk size, the more context the LLM has when extracting entities and relationships, but it may also lead to less granular data. +The graph created by the `SimpleKGPipeline` is based on chunks of text extracted from the documents. + +By default, the chunk size is quite large, which may result in fewer, larger chunks. + +The larger the chunk size, the more context the LLM has when extracting entities and relationships, but it may also lead to less granular data. In this lesson, you will modify the `SimpleKGPipeline` to use a different chunk size. @@ -51,15 +55,19 @@ include::{repository-raw}/{branch}/genai-graphrag-python/solutions/kg_builder_sp Run the modified pipeline to recreate the knowledge graph with the new chunk size. +== Explore + +You can view the documents and the associated chunk using the following Cypher query: + [source, cypher] .View the documents and chunks ---- MATCH (d:Document)<-[:FROM_DOCUMENT]-(c:Chunk) -RETURN d.path, c.index, c.text +RETURN d.path, c.index, c.text, size(c.text) ORDER BY d.path, c.index ---- -You can experiment with different chunk sizes to see how it affects the entities extracted and the structure of the knowledge graph. +View the entities extracted from each chunk using the following Cypher query: [source, cypher] .View the entities extracted from each chunk @@ -68,6 +76,11 @@ MATCH p = (c:Chunk)-[*..3]-(e:__Entity__) RETURN p ---- +[TIP] +==== +You can experiment with different chunk sizes to see how it affects the entities extracted and the structure of the knowledge graph. +==== + [.quiz] == Check your understanding diff --git a/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/4-define-a-schema/lesson.adoc b/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/4-define-a-schema/lesson.adoc index 3f1fe4ef1..3b739e9f4 100644 --- a/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/4-define-a-schema/lesson.adoc +++ b/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/4-define-a-schema/lesson.adoc @@ -3,14 +3,18 @@ :order: 4 :branch: main -The knowledge graph you created is unconstrained, meaning that any entity or relationship can be created based on the data extracted from the text. This can lead to graphs that are non-specific and may be difficult to analyze and query. +The knowledge graph you created is unconstrained, meaning that any entity or relationship can be created based on the data extracted from the text. + +This can lead to graphs that are non-specific and may be difficult to analyze and query. In this lesson, you will modify the `SimpleKGPipeline` to use a custom schema for the knowledge graph. == Schema -When you provide a schema to the `SimpleKGPipeline`, it will pass this information to the LLM instructing it to only identify those nodes and relationships. This allows you to create a more structured and meaningful knowledge graph. +When you provide a schema to the `SimpleKGPipeline`, it will pass this information to the LLM instructing it to only identify those nodes and relationships. + +This allows you to create a more structured and meaningful knowledge graph. You define a schema by expressing the desired nodes, relationships, or patterns you want to extract from the text. diff --git a/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/5-structured-data/lesson.adoc b/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/5-structured-data/lesson.adoc index a5c0baa1e..3c258cd6c 100644 --- a/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/5-structured-data/lesson.adoc +++ b/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/5-structured-data/lesson.adoc @@ -11,7 +11,7 @@ Combining the structured and unstructured data can enhance the knowledge graph's .Lexical and Domain Graphs The unstructured part of your graph is known as the link:https://graphrag.com/reference/knowledge-graph/lexical-graph/[Lexical Graph], while the structured part is known as the link:https://graphrag.com/reference/knowledge-graph/domain-graph/[Domain Graph]. -== Load from CSV file +== Structured data source The repository contains a sample CSV file `genai-graphrag-python/data/docs.csv` which contains metadata about the lessons the documents were created from. @@ -24,6 +24,8 @@ genai-fundamentals_1-generative-ai_2-considerations.pdf,genai-fundamentals,1-gen ... ---- +=== Load from CSV file + You can use the CSV file as input and a structured data source when creating the knowledge graph. Open `genai-graphrag-python/kg_structured_builder.py` and review the code. diff --git a/asciidoc/courses/genai-graphrag-python/modules/3-retrieval/lessons/1-vector-cypher-retriever/lesson.adoc b/asciidoc/courses/genai-graphrag-python/modules/3-retrieval/lessons/1-vector-cypher-retriever/lesson.adoc index 7083ef8c5..ea4752c5c 100644 --- a/asciidoc/courses/genai-graphrag-python/modules/3-retrieval/lessons/1-vector-cypher-retriever/lesson.adoc +++ b/asciidoc/courses/genai-graphrag-python/modules/3-retrieval/lessons/1-vector-cypher-retriever/lesson.adoc @@ -5,7 +5,7 @@ The chunks in the knowledge graph include vector embeddings that allow for similarity search based on vector distance. -You can create a vector retriever that uses these embeddings to find the most relevant chunks for a given query. +In this lesson you will create a vector retriever that uses these embeddings to find the most relevant chunks for a given query. The retriever can then use the structured and unstructured data in the knowledge graph to provide additional context. diff --git a/asciidoc/courses/genai-graphrag-python/modules/3-retrieval/lessons/2-text-to-cypher-retriever/lesson.adoc b/asciidoc/courses/genai-graphrag-python/modules/3-retrieval/lessons/2-text-to-cypher-retriever/lesson.adoc index 224c24708..16a577d90 100644 --- a/asciidoc/courses/genai-graphrag-python/modules/3-retrieval/lessons/2-text-to-cypher-retriever/lesson.adoc +++ b/asciidoc/courses/genai-graphrag-python/modules/3-retrieval/lessons/2-text-to-cypher-retriever/lesson.adoc @@ -8,6 +8,8 @@ The `Text2CypherRetriever` retriever allows you to create `GraphRAG` pipelines t Using text to cypher retrieval can help you get precise information from the knowledge graph based on user questions. For example, how many lessons are in a course, what concepts are covered in a module, or how technologies relate to each other. +In this lesson, you will create a text to cypher retriever and use it to answer questions about the data in knowledge graph. + == Create a Text2CypherRetriever GraphRAG pipeline Open `genai-graphrag-python/text2cypher_rag.py` and review the code. diff --git a/asciidoc/courses/workshop-genai2/course.adoc b/asciidoc/courses/workshop-genai2/course.adoc index 64c8b636c..aaf6c3a88 100644 --- a/asciidoc/courses/workshop-genai2/course.adoc +++ b/asciidoc/courses/workshop-genai2/course.adoc @@ -3,7 +3,6 @@ :duration: 3 hours :caption: Learn how Neo4j and GraphRAG can support your Generative AI projects :usecase: blank-sandbox -:video: https://www.youtube.com/embed/vVCHJFa01gA :key-points: Generative AI, GraphRAG, Knowledge Graph Construction, Vectors and Text to Cypher Retrievers, Agents :categories: workshops :repository: neo4j-graphacademy/workshop-genai2 diff --git a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/lesson.adoc index 56cf47753..03bfdd019 100644 --- a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/1-what-is-genai/lesson.adoc @@ -67,14 +67,21 @@ A prompt should specify your requirements and provide clear instructions on how [.col] image::images/llm-prompt-interaction.svg["A user asks an LLM the question 'What is an LLM? Give the response using simple language avoiding jargon.', the LLM responds with a simple definition of an LLM."] -[.slide.discrete] +[.slide.discrete.col-2] == Caution +[.col] +==== While GenAI and LLMs provide a lot of potential, you should also be cautious. At their core, LLMs are highly complex predictive text machines. LLM’s don’t know or understand the information they output; they simply predict the next word in a sequence. The words are based on the patterns and relationships from other text in the training data. +==== + +[.col] +image::images/llm-blackbox.svg["An LLM as a black box, responding to the question 'How did you determine that answer?' with 'I don't know.'"] + [.slide] == Access to Data diff --git a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/4-neo4j-graphrag/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/4-neo4j-graphrag/lesson.adoc index 4ca8dade0..f7bdc1ebd 100644 --- a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/4-neo4j-graphrag/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/lessons/4-neo4j-graphrag/lesson.adoc @@ -89,4 +89,4 @@ read::Success - let's get started![] You have setup your environment and are ready to start coding. -In the next module, you will ... +In the next module, you will use the `neo4j-graphrag` package to create a knowledge graph from structured and unstructured data using an LLM. diff --git a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/module.adoc b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/module.adoc index 8ba2d1399..03a16f7b5 100644 --- a/asciidoc/courses/workshop-genai2/modules/1-generative-ai/module.adoc +++ b/asciidoc/courses/workshop-genai2/modules/1-generative-ai/module.adoc @@ -5,18 +5,13 @@ In this module, you will learn: -* What Generative AI is and how it works: -* What Large Language Models (LLMs) are and how they differ from other AI models. -* The limitations of Generative AI models, including _hallucination_ and _access to data_. -* How providing context can improve the responses from Generative AI models. - -* What Retrieval Augmented Generation (RAG) is and how you can use it to improve GenerativeAI model responses. -* About GraphRAG techniques, and how they can be used to enhance information retrieval. - - -* What knowledge graphs are and how they represent real-world entities and their relationships. -* The benefits of using knowledge graphs for organizing, integrating, and querying complex information. - +* What Generative AI is and how it works, including: +** What Large Language Models (LLMs) are and how they differ from other AI models. +** The limitations of Generative AI models, including _hallucination_ and _access to data_. +** How providing context can improve the responses from Generative AI models. +* How you can use Retrieval Augmented Generation (RAG) to improve GenerativeAI model responses. +* The benefits of GraphRAG techniques for enhancing information retrieval. +* How knowledge graphs structure data to represent real-world entities and their relationships. If you are ready, let's get going! diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/1-knowledge-graph-construction/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/1-knowledge-graph-construction/lesson.adoc index f2d02f6bf..148803336 100644 --- a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/1-knowledge-graph-construction/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/1-knowledge-graph-construction/lesson.adoc @@ -2,8 +2,12 @@ :type: lesson :order: 1 +[.slide.discrete] +== Lesson Overview + In this lesson, you will review the process of constructing knowledge graphs from unstructured text using an LLM. +[.slide] == The construction process When constructing a knowledge graph from unstructured text, you typically follow these steps: @@ -14,6 +18,7 @@ When constructing a knowledge graph from unstructured text, you typically follow . Pass the data to an LLM to extract nodes and relationships . Use the output to generate the graph +[.transcript-only] === Gather your data sources The first step is to gather your unstructured data. @@ -23,6 +28,7 @@ Depending on the format, you may need to reformat the data into a format (typica The data sources should contain the information you want to include in your knowledge graph. +[.transcript-only] === Chunk the data The next step is to break down the data into _right-sized_ parts. @@ -32,6 +38,7 @@ The size of the chunks depends on the LLM you are using, the complexity of the d You may not need to chunk the data if the LLM can process the entire document at once and it fits your requirements. +[.transcript-only] === Vectorize the data Depending on your requirements for querying and searching the data, you may need to create *vector embeddings*. @@ -43,6 +50,7 @@ Placing these vectors into a link:https://neo4j.com/docs/cypher-manual/current/i .Chunking, Vectors, and Similarity Search You can learn more about how to chunk documents, vectors, similarity search, and embeddings in the GraphAcademy course link:https://graphacademy.neo4j.com/courses/llm-vectors-unstructured/1-introduction/2-semantic-search/[Introduction to Vector Indexes and Unstructured Data^]. +[.transcript-only] === Extract nodes and relationships The next step is to pass the unstructured text data to the LLM to extract the nodes and relationships. @@ -55,7 +63,7 @@ You should provide a suitable prompt that will instruct the LLM to: Optionally, you may also provide additional context or constraints for the extraction, such as the type of entities or relationships you are interested in extracting. - +[.transcript-only] === Generate the graph Finally, you can use the output from the LLM to generate the graph by creating the nodes and relationships within Neo4j. @@ -63,27 +71,66 @@ Finally, you can use the output from the LLM to generate the graph by creating t The entity and relationship types would become labels and relationship types in the graph. The _names_ would be the node and relationship identifiers. +[.slide.col-40-60] == Example +[.col] +==== If you wanted to construct a knowledge graph based on the link:https://en.wikipedia.org/wiki/Neo4j[Neo4j Wikipedia page^], you would: +==== -. **Gather** the text from the page. + -+ -image::images/neo4j-wiki.png["A screenshot of the Neo4j wiki page"] +[.col] +image::images/neo4j-wiki.png["A screenshot of the Neo4j wiki page", width=80%] + +[.slide.discrete] +== Gather + +. **Gather** the text from the page. + + Neo4j is a graph database management system (GDBMS) developed by + Neo4j Inc. + + The data elements Neo4j stores are nodes, edges connecting them + and attributes of nodes and edges. Described by its developers + as an ACID-compliant transactional database with native graph + storage and processing... + +[.slide.discrete] +== Chunk +[start=2] . Split the text into **chunks**. + - Neo4j is a graph database management system (GDBMS) developed + Neo4j is a graph database management system (GDBMS) developed by Neo4j Inc. + {sp} + - The data elements Neo4j stores are nodes, edges connecting them, - and attributes of nodes and edges... + The data elements Neo4j stores are nodes, edges connecting them + and attributes of nodes and edges. ++ +{sp} ++ + Described by its developers as an ACID-compliant transactional + database with native graph storage and processing... +[.slide.discrete] +== Embeddings +[start=3] . Generate **embeddings** and **vectors** for each chunk. + [0.21972137987, 0.12345678901, 0.98765432109, ...] ++ +{sp} ++ + [0.34567890123, 0.23456789012, 0.87654321098, ...] ++ +{sp} ++ + [0.45678901234, 0.34567890123, 0.76543210987, ...] +[.slide.discrete] +== Extract +[start=4] . **Extract** the entities and relationships using an **LLM**. + Send the text to the LLM with an appropriate prompt, for example: @@ -97,6 +144,8 @@ Send the text to the LLM with an appropriate prompt, for example: + Parse the entities and relationships output by the LLM. + +[.transcript-only] +==== [source, json] ---- { @@ -140,6 +189,11 @@ Parse the entities and relationships output by the LLM. ] } ---- +==== + +[.slide.discrete] +== Generate +[start=5] . **Generate** the graph. + Use the data to construct the graph in Neo4j by creating nodes and relationships based on the entities and relationships extracted by the LLM. diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/2-extract-schema/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/2-extract-schema/lesson.adoc index 48f113c9a..bfe15c839 100644 --- a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/2-extract-schema/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/2-extract-schema/lesson.adoc @@ -3,21 +3,28 @@ :order: 2 :branch: new-workshop +[.slide.discrete] +== Overview + The link:https://neo4j.com/docs/neo4j-graphrag-python/current/[GraphRAG for Python^] package (`neo4j-graphrag`) allows you to access Neo4j Generative AI functions. During this course you will use the `neo4j_graphrag` package to build a knowledge graph and retrievers to extract information from the graph using LLMs. In this lesson you will review how a graph schema can be extracted from text using an LLM. +[.slide.discrete] == Using the SchemaFromTextExtractor Open `workshop-genai/extract_schema.py` +[.transcript-only] +==== [source, python] .extract_entities.py ---- include::{repository-raw}/{branch}/workshop-genai/extract_schema.py[] ---- +==== The code uses the `SchemaFromTextExtractor` class to extract a schema from a given text input. @@ -29,8 +36,16 @@ The extractor: . Passes the prompt and text to the LLM for processing . Parses the JSON response to create a schema object +[.slide.discrete.col-40-60] +== Output + +[.col] +==== Given the text, _"Neo4j is a graph database management system (GDBMS) developed by Neo4j Inc."_, a simplified version of the extracted schema would be: +==== +[.col] +==== [source,text] .Extracted Schema ---- @@ -45,20 +60,34 @@ patterns=( ('GraphDatabaseManagementSystem', 'DEVELOPED_BY', 'Company') ) ---- +==== +[.slide.discrete.col-40-60] +== Execute + +[.col] +==== Run the program and observe the output. You will see a more detailed schema based on the text provided. This schema can be used to store the data held within the text. +==== +[.col] image::images/neo4j_graphdatabase.svg["a graph schema with a Neo4j GraphDatabase node connected to a Neo4j Inc Company node via a DEVELOPED_BY relationship"] +[.slide.discrete] +== Experiment + Experiment with different text inputs to see how the schema extraction varies based on the content provided, for example: * "Python is a programming language created by Guido van Rossum." * "The Eiffel Tower is a wrought-iron lattice tower on the Champ de Mars in Paris, France." * "Large Language Models (LLMs) are a type of artificial intelligence model designed to understand and generate human-like text." +[.transcript-only] +==== When you have experimented with the schema extraction, you can continue. +==== read::Continue[] diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/3-create-a-graph/images/entities-graph.png b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/3-create-a-graph/images/entities-graph.png index 58c527cc5d750f9140a80649376b975bf3b6b848..c4ec1a2703718f30ea346441d21e05e1b573fe3b 100644 GIT binary patch literal 61655 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 literal 70361 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

6N+!6N2fsfdtga)9Ir7-rM-Rd*Pe6xUN68 zhtuv&3Y@}28d8gkUbCO05!C&m`1094(`m3j%?$=4den90Y3%v9D`e3s!Fn|nD8%(# z*D7sA#?+jR9Ud30_4*2c?ekX2F`VQ-GE4eGW@CNhUWEv2VzTuLuHO-RmBRq{WsegC zc%SovQQz#`JoDYn3WCaDE50Y@OByY7)zs94o~fz1bDlHDn?1TshKm^(bSy3|rblBN zz-D_#ZV&r-{S>;^MVwY6cLl=>gpZkQOCy+VZ?2$@N~ybe{!S$z`$*HkhSIdC#~T*- zTQ^pafZ+H091GU_M1eU+0?iS+RfFgSqVi9B7@QcZoV5x0^aFcn9(0=eHj59pG47A% z{fpm45eh&jAKHW0RYH*oC}+~UFII36bY6S*qgg*$M za5thG6}9%_v*%*2)5=^e0$p%H_ln{o_2?7E=oZ$7x$RjED;{=b8#B>8;t;_w`R6x% zdUAKX!b2)Kq^4J-2D)tfM``Q!_`%D-YjSM8NJcusbIBJjd@9uP3|)#pKrXvJIgRI> zV^7WcM&w-(!M^Z@tjGRUB40JX&HE<;(=n8s+qAoaKC>6XKb$dzcs<`qxW|foC%G}* zAQVNyN1c8DIdsHMHs>!hS_RS>-)C!G8DL4~5IIk87&Xu;8t6MV-rz5L)PfJLn{%Ua z;;UnMoNufa)6?U*Qo^siYMH&yE+{Si!m#VA%qhixT5i1sr{zj5sd3FHQxRe4f>{y< ztTXk=z!%rZI^*9vFG)$4M1N=%q3samOVe6Zi(wBTU7fDHK}~p z5Kz;)3u9>kZ- zC>~#0#vjJj3fgf8y(JYhU>v;|E9{OxIKm!ruXSk`Eeo$FEZT3a+(>c|gjU2n;SCP$ z-!+)=eeTy#TONs0ZDyX+J^y~n3DwlM7QSR(?EVI0lU~-$GFFf*L97y9O%6o}bbDBoPD8mrChhVHSozhz@`kzV&;N2Qm;#5&fseJRu+UI)r3Ju?~6ims;QRfge0{f$#5ft zhcESKsy@3JvJUDz{hSde>>bigf<}4>=>;M_u<{ZSuwhfL-8PtqK#o z6xx9}(}XSW#f%}ZpeWCwA@2KQQO#2j%M6OY>jH`TB+5mnKjS*Cp;7y14;~)gVB-AQ zB-@Mld?z}|NI%H+(Uey1w~(|A<9pKM+3ak-=NVhWP+`i=SRrS49xgxRb(*WmKZEG- zg#)6$`iIEGb6BQaxyouL*O+3yard(0YvWZW*uP2>+MkMlC)kpAHxoZ|PZ^-Et??~W2j&S4e{6ExB<5=-rD^(hiqfE z@dpKl`+C1S5ZO@3Dee4Z(vp%0?r*mOh6L5P8V)88BvL8!J7TbG@kJ-@`R z)$ZpznQt(YEa;DCskE+Em$OZomiC7g@;9_?=>ST3IB5D29sS3mqUrz40)XFi#q-jgZ_rkO36?B8dDY zDph7dNl7t}s;PdT366cP))sD`u!Mw&!n(6!1WsS!!FLnz^LNKrsW%`%{R?kPG$@RK z!z@}GU?V%KU|HQV!PbInS;NN&0p`v1m^aR4B{HGw#Gt+yPbSyvqvX%`PhiqwTV!I` zPw`f0m*M{?qr6aE3BM%fJ638#QX4-4#EI-iH&r8}wbv8rCtK3>WT%^w$A05ytVbjf zt$gLKO~vL={A!+r_pzkDjjH7#7=cNZ*!9nkG+AMY;r1EM{!4rW3*Q#?FC;m_v7;y`%5uyI^YQmD;v}H|g6|Xpc?5@> zA0M)g^LpOSSW?=*xMC{ZX*2I+36;HFxqhyg-66(f5Bp5|yf&($dROhP&NUNbrRsQ( zH`2PH=SkIY&8%}&)+8J_Q@!O#ppmz@u!eHf2Ma6=FW}2i&j!c)k7_*2*3$BSof>Q) z>w<%{QeP^!Hh6dnNAhc40=~zxoveb*Vbk=m&RS8^pe#S|@k~$);;3#j^X?bl(vfuj z*6_rYm8D$+_2rA)$O1zB)@U4DFD-+bij$blFCK^Z15#S@<%(`Y|aX@86hNuyIf*x`LFst0(up zyoh+15KH(*Ab^mPMM_cL@o;!01OaQEx9Ga|k22F6Z94Xe-+(f<<8~g}C96&+>|H3g z&mq0$aEO9wYkbiPyx;QEg~RujT0;CSHnC#d1{QIyF?T}!;Cdy|2snDMVt8H52hEBZ z?Wps5$*~szXxptt{ugM#0%?H-cEk6+EH;p`;^7OOqMG`oEV;h9qI?^JlH0Yp#chA& zmq_64Ipfd5OBhLLpA`v|&QaX7xO;W-WZ4bSG1@(cC033PYKV1no%4X&)vvqpV*9Rl zn}ZNOnbh3n&n)0G%Wt~p?zxoLLiNM!d~sW#u?ebNSzG_%qc&w}?iO@I;ceYN>ky%{ z{-1F(3LG2T#kCYAHW)(`NTepT)naR{%X^dg3j5%s8wGX_s19;id-4KLH=S`iacQ@* z4QzTn#6D%@wx899DIdoK(7cqsB$uvT)|MEKwnwlZO$^!RUlTd3V^S7rvdvUV8W9ZY ziuNWrAI?827e5Vjm;j8|MueuUEXHKpd+KM0$H9M`Ht#s+e;*c*o?td|{N5K>B%x6{ zD&o&T$Sa?F)y(XvEqPe$?weG6CL^BM(Q%Cbz^{p8mP2zJ*?M4Qx~b6ImHNa?pXg{Z zZ2EIkd%rr|A(i)$iuHN59DncfDsn2m4J`JP9t{T@hc}4PX<;CTbB0&%d$BOSaXk&$ zY?5DB@73`7n<=5oJMXfUcc%~QtM*ZWYB zY`*eUdB|r__NAfThx%Opw&qz{xrWwuGjSeV+_!D1pA-DkVFi#!R|JStRR= zA$dQeRvB*aAMj4XVHOb#{##*j&26Tos0;BLw@r(YIcO7Ahg&BdV{Hb z^lo*YoKO&#P;Q6+IH7A!fiP!e#ErK6bi;UKjG_nwV90F#BVHHw<}AOYWRn)BPF=n~ z{}s{Gtmx-qwUz1TWz7#~WX+7Yr%eB{Zt2AuJ8EtJnuZQA1qF@X2@r{qqU@7=0qlWp z>k;FX7ahh}A$gIySndx=)Z$samTz>5M*{9gi?(x(6Hf=nc!_B|j}*qf$3b0MP`ftx zMXB>x2@`s^#KK{-w$gMp7QPMTj%E7y{-b;1=xx^piJc}Ax)<^d+tjB>K#%}+eg~jc z_)XqaUl0Prfr3+Ijm+Tp8E1i0A}=n?YaCb-cN^Bb)p~N(F4<298nkLhw08aJ{FiU^ zn$4W8tgL(istiVNuQNQ7vnbfcKez$R`iG3jg5jE1PeTP549Bnw{u*~WmFtCmZ|Bdy zM!e&eNE7h77*%ZMAUy@t$xAvfWxSk1`_Hdg=toQ_LERsb_I3{U zss0yopLW<@d>~Y_l?466r5l#b5Ac`gB=yfS$|A)d5dR&)A9Uadc)gjE5CcC`0mRBQ z*fJ1?I;M(72*(Mkjxy89y_bx@8nfePO4VcDnMI$SQ{~(T^_3qAZ&jB;N2Eo-dD8~B z|E|b=SRQ0!eiuHhTE<^e@_TL{jpCVg$nchmk60ms(Kvda z**SK<53jy@{lA4k%!?4vf2lY$K!YW67sUH27dD2F_kc_fQ;hD7UZwR?G~rvks2>r( zatUNPKS=xULNttQs|NKd!vmfMJrI)9sXn2dss+JJgByAhh#l($xM^~Vy4MszG-035I})+WM<(?0>5t%4obWlzI5($d|=RUmEd(lw%JM0v1EBI6xoHfjWj>sxJY`K!0 z?D)jj=lL{eJ6pS#>MQcC@yX-lXqrBkWlp6ydioAN*K=46XP|>CH2h$AU#33yU->s0yznjf~^ z>1ex|!RV#E~QQv2wRM=v_N5c!2SU)bR`GL=hA+T)Q=iIs!@h*Htw{ z1K_G(Llh9gnE*Ej7|xE2eW~lolm?w0QqeiO!mKZ_}jhir-Zwf%28QrPXIxtv#F^2@A6X5H%s4HKy_RD zCG^Ccdy#+8=B=6Hwh~H<8ongr1}l9~lpjXOou$SF{w%PWa5;eQP&u#A*!&H?vVO@V z2e(k>+ffz-a!6WyBNH7K6U0^yL*rWiZdb9i8XjB(N0#I z@`D?V(pFK!$MC_3RVWC5hq86VW26zQBxZitOv!ESX7qj6AGwbDOSs-^GCor&y#h`) z0p^MEP~Qdq;g`Ni&5u%XH7sOA(M(5x&v(;jNb z2v?aN(rzqwM5ge0Dv9RtU5Is6Bceu zu-R7U(_}2@^L=S5^HJO68cGxqMuTOo43CdGg8j~ZU7KNc6nW<0!2`6RN?NKm8srOgjeorj}jQ|8`Wa`7;^QX*}dA5cWb&Wc^jrZ zFSHg2gAfh?aI;$YFjLUsoxy13g-^Acr*@FBeIOA|*c9^zy4~Lp@6CQ2PKEm1NJt2s zEe?4luPE>JV;~qw1k@6P2I3}#S(+uwL4_!@qGxv|cNXF1w8Kr{jb32T{B-rY4^R8( zee}AJ(}W14jy~4)YG*8h3=S%+0ia=&tHueJjzin|0lRPNZY+b|f=lj$CObjbrdw~o zR^Z2uQJszp-e5tfwf4x1_8;)arfFX;)xv^4_W}!dK>!x67o?Yp82F1EVCTb-&&QX0 zEBXR^U;V`;rqePu{|9uruzBc$aPg5^mA!sXQ8nS2_%)q^E1m=r{oz)Di(&J^^%xyO zP?Mk*s7p=7gkJy2(98Q&?X99ku@Fu-g-M~`9lM4l-@ncIW`9G_6U*G$6wkNn4aR@q z0}m1{VDX{%KLZ+M)y#5UI6V{v3r?}*FhD@-#rOIQ#3C}Lr6U!DGP*-FR+ZR7YgQ^` z>S{7hNJ9Im^ViI#7iZo(+w`o=JT^`!-7YyX@G)K`v|X3WjCz+bfxw%*ueb-$?_6R6|Q|3VJv`coQg_upC5* zXn)IS5A`xkM3Zir2im36Nz4_7K3GOTzm-cj1n&9cefNX|RmV)-Xk+dQ{{hkD7d$vHjI8X)s@F#46)m1HGzRm9^{ZA! z=G~Qd4lCw(x{Z%)n*HI^gRfapXTkIEUHpWE`*x+jH;ZRTiV~j@wxHeXLjyh8i3OOL z57(JXYZ=Z%gfrpeCgX^ge!1W<`T9@HPhE zuz7yytwImi1P`mJp#^*X@wV@~c6<}+L5VAdN8|Ur5qlkD6VB0VO#7h9TND588r?Ht zR)y8K{FBJtM;(0)J`}MDAA5XJBQ~Mnf&wcS<%>`Ei1~x9SF}OelTM@jT=tsSw=$2@KUGlxq z5mRqKGqo1JY}0Hfsg&CMj;kITY!4A=08(Aa2}3e{_y8z|r-#Zf9&afmv{aNmB2(%% zE?I)4+RPk{)LO$HHdtGg(JX(0ZJo4h|0C4QX+2L=QCCz($bE3>#k50R?r0lyz@b!G))?Ia3T(XzDhSTzb)Te^C!a9Tff6o zxZCv)ZZnc7j6B0ueB;}7t%o1kfD6U|2#KMXeLFQP1T1R^sA8^MOB(Fx+E_U+wu)}yU|&Z zJ#5KC%_F}id z>*yi`9s#tVsEM>k7JoXIpiYe8kpwoSbx>`L2i9~MKG_Y{0IDSfhnYe?7k{|<+Cfe%uH=(@StC}2X+pM38-09GVrFVtBBFA+lNOO%*AGuzYAuXtd zydpq&6%L7?e6?GNgTm>@xM!-}>Js~|CZ?5(`MM;<|8%R)o0?t=K5&!@Si;4X7$qjy zND`QG;Y|wQjql1-rut@p*bJdIBnzyX`X0s*O@N#jdeDq)oF11R&(Y3Z(9rZ`TH%K) zwsy&4mGS%ZgG^MrYsQ3W5c&=^_*|bM?P;R2^UeK>)zElhj7ay5g_z5E zPv8a_3UJXHkz!QfrA429&!~kEmj`q5C}J%@y1dw@*GoFT<=|Zy1D!Oc$Z3~_Ly`b> zFu^yKgn#S=_IE4gBbV^L6YmuxLoD?LvjeQ$MeS4Z{xj;yDhnD{0o3PcOcM>5soXc8 z=)vba%!GX$OWX1M1G=-nR~QeNn4oN!>46ZV*;a> z05v%f^kzr`q!R|cvj#1OlC-dT6SEd0C2X|M4zKY{LhES$hgE5_Vr^o8+Aiv+F?l2q=;~Y$f%7HtNiS1&jCjR#Xpqu{v%`e~l6E1<* z^Lg^4a6aHg%ra>97Q7JF%zLcW%jalOllGC0hvK7*LwyeFWD!x5Z3!-DX~9fLNI zqjJU2)?CQZ7+IF<9fJ`@_)Q_NAR@^?WPV;IMNojRi5BkMN4w7HBU7Y1O9%Chfl#3x z*f1{5C0+?5JCFo0gM1NAej55^s7Y5$)XRiC|G~BYgVw4&j!U7QiOofim3z!H}FOOZz8y7Ps zMJzanBAu<9Y971_sDwh?$5Flv;p}Ulh0>|w0>huETt0)&cQHQiwW+9bePxN!t3Hn4 z5QRTT6Yk7|$)~R?0$pIKhk`5=WqvVY-~#9Yd3i=hCAO>xxg`YA1~*OiU$-1qP!q^uSy0+_|XmlA`8& zJ#v0_D?@YY_K(O}_W2>>dM}Z}!pGn#1_{iT|8zj;gY~B2aXN8VnqEJSkFEMGrLgSR zd+LrU*R3I)WkEWLVF;|Tw+f~0r_?x_iD7ae3NMsF-F)3{iSvu#-fhLVRQs1~(FR?( zU>2sk8%GEh=7KZ5j^Xz#v>l35?Fd^~&2OSc zofP9FL`{~ma3Ohwzqm+-S=K|Z%T9ig0oLuJXKefZU2@*CGVneqH+Wz zHG9fC#KMy3XfyoB%5Az~Mrg$6>o=Z5cG$b0g?FE}29v6D&A8gQqpH$`p5t&(IQ-R< zWsTJy@t>0qT6PC;S`vJGerpM8&YAw%S@8##eItPz<}G-?#1g)b&6qdq$e1 zfn8zBVC+5Us6zU>GCNCRlpw=!HmbuWAJp;@o`AM&2?6*Jn`@koMG32i*&4lgOE%|+ zuv+C3FOou$^)jHjHT9|mXSG@6J0jEy+j)<)g}DH65xb0T znrJ|=b$MX6S(=HjM)92gaJS=QZ10ft%)Ow8$$2}QvD;f(T|vKu488gj+E*=pq==+? z0YsSP-M#sGvwJ7FYRtXO&)#Ug{;w=AlLh2_QZP5Vj#O)y!AkE~x#?_xhDzBPC!5F! z{Oeq$wW$kl@b&9__e)}L1WuImXJ=Wc2EO*bc$lRW?xndcEaCOzPAM~SD(2GI4}Rc+ zOeUSarLm!-sLOL}nW5*cdj%%52f2Vw`#-d%X^e6&%oQ2Xm4R#Y>LJ1%@Yqw>BzxkM zzK|Tqpd}rl@#^wo$e?4|j)+_sJ^%(fkkvfHkg4~n0*~|64W)yDE2N&7GS8~v>5c+M zeswu_ey`dbq576mCccBwS7)KE@O_DpUk9Fzogo(RigVVb=nX;K^r5(gR*FFv<5pse zE2-;W`qH)#^LVFhShgM5QMC~&RtXn`iu!2?Sm;dFH|Bqv_ymYe$>V?7RU?D8}ho4<5 z-?lbEG4QM`4`8P6U%dNn(7KuIBI*Pn4NXTdpzRt9Tb-Fitaj-EyI|+_#~as-U?T+x z(2#;gD>n%AG&$~KfK~{_h%ndX?1^FTo!J;P!E#tp8BkhK`n2%DQ=aal`Lf;-Nxsi1 z`>Ce0EN|P*ldP^v)yA~>-s&2O5R7Tt=g{7Adz*AUUVj6+fT!Z5t)rH(Hko$!w z^;0^2u#}^qP4bjBl%@lKKNbI3~g%n?dfzgYZ>D^h$cLlH$ zzxg2KTa3NkHF?G`=|=_&-v_V%G*{$Z=z(KUdS{#7(yB`h3s6ne{QOJ-C_A_p(m*b( z1t>1@OhXmNWaC;6rK_fn;jj-3I!C)a?c*?Qy=LeL4z7nYAd*>(grVNVl^BCK0_AP8 zg}pk8^ETZ-x?Y?yN8YLv8OOl?V$=QlIi&OF^Dy1rV6EbF#?X9NRf2IhACWIzkYAR2 zvoq|pg5DH0^$@@FA!mSw@R0P}8$w)nd&yad_hB0(Gva51L#vj+8bAUxxy~2J-4!S*9uj&5Gf0?Uv@yQUC6;@T_pE(sX z)kj9T!ta{ zk0j6q!W@a3r1O>P_Zs;WoYmjw`b@keq<4}5LvBRQCATq))m3NB@*=>j#EuA{fSS?U z0Ie9>@sK?30-IcP>ZtLM+(VGlP^?zv&nlg@kUeO-O+ zyFRRo!fkw_C|cg>3w-1Z>!bONBD6e4;ud%`l{9%o|KWN-KI^{R2UZot!J2P$s!{)4 zF{ybEO^pA2AQ^sI^81PDOAet2gu!wKg8od@OKsZ%+YXaz^&i*e*P`!-M@D|Ndpskl zvX*rH+I{`u(VR(rSv{uh=SAcp0Tm70zEB`5;mWnEboi&Vnw(v7P;JF>?KlSDzKkIy1LbKg z$FnZ1kxQoV)sSXhA|2!3TP!ZpSr}!DeyFd^mO*ZoHCKoQj>aL2X-ADWm2OND85ZYi zH(VN`^6dEMq$gqXWWL#>4<8i4C%5%HhL1%4mwG7NA5GpKLOv_M>t1KELP^DmRUB)o%n!3gv$XXcOLZwU-UZOz@wKGE5@%8h{jiAI~9neo1swgEJfb`Y{z;>8l0ehS}bA>3esozRAADD~rGX{5pl_H$NWT>)XH|HyI_y^8V@Z~m;4n2H~ zXnC*~&yc6*ki>__J4v6jX*wz5c2WFf*R7h0$~KI9k`}UYq%v#F?|m~m`zt-2l8^In z8#gN%tJRxA7!Nl?BnF#n^|3u;79`Oz=^(JjhxZ~|IDvGmxF3c8yzmfDZx(_u_&`r? zqzt&5MRbIG=Pq(D!|{$&qm`DKmwQ2^p5qAY9SI*l#u&7W^e6G#(&D$DO&1m_3$%pU z$X~Nx;8ze9$9Z{n>V_Q)e0@&)dh2{nyP)M6V}$7Qk*CP02*U?E*W5Z*zaT(7nN6Kx zcqUmUiA|QB>~{zLW~D^kHg?4av(4K6Yy+DiMbjLb_NnRU?V=`Ades_NJ<079tmZ8` zkG}Lq!ughpfn|u{$|KroMBB6PIl~>S{Rgf24 zqC1FMy+0iw^Eo#t_QEOGXxqaId1A`7h$UR)8kyzPP>S9uruXS`&vn_a*Wq)4i4%@h zl*1QlY4tHp1A<%#m_(&tfu$IQd2zZ1p)HN^8c>^Lr(Hykv^Lx)chM@1$}Ed+ps_lA z@`C*Kz6~9J*zp{f9`mhp#7Oji#gfX~Ygs$k@^Fr0*$7_HiT^y(aycE$ta#yTc@d>k zv065goS*nTK`2Rh%XBpLOcR6(wu}hX&(ADlU`b@39vt~SMAnmI7nM7IdP#hZ&eR`a zo%5!AQxBX+KfTOgD!!E2>h*5-L90C3J-{%kmfzZ=SuC@8T_1ewMTUL?;S}gx#nYjJ zZ!BWLD7x3vL0#22FOS1_4_pBpHg2$C3h&{u0VVU++1MQO$?Lhg8NTnlyb+{0=(|V<8agRw*N~15 z=hBcIx*YW{DV^I484DM6UiTRP{LMG}v}>RBD(&u85gHCvXuzVJ${vJJV{P2!(Jl2d z!B0XBP`6-^StGh7Q{Zh1E{e(Ymx+OJ<>KsYg;a;Th9O%sobX#LJ4fOlt;?MdnVZ6J zVFOyfc$;$f*UjGCD8giEc+VLcsr$ z$3T=%y44d~2Cn%W6b?SdLO4CJv`s_su1xq11Vr=HbwoPBOS75H&gT#0mmB*JK zzq^W%e+Hl%_G{iOCb*PbNmJ$QZJ>fx@8l8Z$4aO1q@*8jIkWzbweNgU4A~%f0~2zL zGZ~$HDF!PvV5-(tRIU-NeEqd5zWVA4ycWJ5q~)H};8vrt^DjeF-JpU)J#Gp)R=F%liqR)XAywg1Eis*AW>r@wPP zcVwPj?`ex*cKw5P2`RCO9Fx8!_?K!JsqCg|l@sakta$AQMpstW%96w!2L92gt2!fo zKP$^bV9f&Gc=z*L;EsPCEv~b;v-IVo{6`J#>b^mCTQYUqS>@i9r~uue52fd* zBO6XKQ9Sl<-3eX>kdJEluLSg42V;fZJJN-EX;AW;d1vqr-e>0GaM)E8!?m1{!IrC&FWi84 zaUk=;D5ye&(GdoV8Ir)G2jor21R8wz&~^9q3->bA&Q%+1Fs-T#-_^JlPTTzbfU?M& ze3|#PON-?^zI;WQ?v?q_2zuefWAu+l=W4p`m7XYlvDrHn(LK`0UDNU{W3w?eG3#Jh zG{z)8llKFfPG@;bgB`cPot1;Sf`UYR`@zQ?$BeKGKHS1)8}A~U=m1V*mL_)V!7Kgg z)|J*<^G74-7_vcA61ixPG64%N|gZ`J(#0del2nzvtZ$YA$YB zi?aK|MrVehq)WO%x?8$IQYn${F6jmdX+)6jlt6S|*V@M2>2ueWCKoTWXIbqi?s`V9IGu;s53h%gfQbw3;Jd3Va=r}ogMGB@ z&M?JS2WBFRq^*#FW*nRv#W-fdC%X9)Kp3Gz5;i2V>;G36I6YcXe;?I*JOLbzc*d6| zf$&m5(rzWK?RtFXI?57#>wogIHH-Y^>XkgS1-lC@xV$!wt#`Svi1%2!+r^*VWH>|m zknH1d5p^|rl`5CHa8^;3<)Z2JuabRlq!jLP7FKEh~Jq^Lo`z9n9 z5EJc`z%-mT{@k#D4o|(8?x17b_Ix3lL+sLTpVBP#;Yo6f!Ccm1|K&TH@uAa2&M!ju z#^dQEshU{+-lvCO?Y^FCT%Y-y-yp;!XB^yKXWk)N`q$8NRMhb_0BwJN%%Wp(&!go)ZLcrct8kncZ|vUv3(cXXkjWG#uZJ5ef#tA zMS7@x8HrkE-1I7W(q|TfHqmLKE5`>{OU1IFYy#)MIHP;6r~Im>p2HDobFb!?Bq5_<*Y!~}llNGyVM#EGxkflB3E)@G?Yt42*RC_w!pP_X1RJ;FDiR9#P z*wgE9Lo3WJA}n+_I5mQ%69RnBT%Hy6?+P6coC9)yjJsi2bT*gGkk{lkENpPJ^R|cX z>iJ3&sEF)b#{hmzaDUQQ7&ROOq?pJ{UY z98a#;U1H=es=A!t0S3R~u4xGDCq9m4d*}X#V=hXz$F|MGqg1W2spsf$JG3B0>QXlC z)2q*(wY({lz56dW>n1*E`}6oeu!?kyKO&6k^3-RK&JxkZ<>qy@u;C7~W^&ak`R@RG zyM^Q41wufh*am|L17}a5mGY}`SZ=n;$5q-oGv>>$4h?)=*BTle^*X#@Ij?qA(q=Fp zlvVlii_pED4cvh8l3ze2Y_?4pxl6d5t7ot2p`RD|+vf1veUaM%TI>O!$h>CAvqC+@ z|1_*4k(|ZjfNv!AJKwCaTj2P?AYI~ssmK@bnGf7`Tcf&{&8tZ`WZG&@OMna!nAJXq z?p{L^jD$Or!1}QBygQl__s!Sfljx6sliGr+`C2{SG0nin z$~K@$#GT_x6ZEK_T{hm3uh}WQUi8NvYI5A+!;No24m|2t$do)>Y0leNU4+xM`C%BT zt97Y06Z7W#FCbr3g47g%&I}08ZzE&F`%`rWeCa-eNzxcN4!(jGaMZA5#2$32KcZRq z`Ano}Pr$MFJotWc5sU>~3Ug- zmHHeo`2&~f@q^W8SfXjgaD&y+%~ z&_O?l0USFfMP%fU7pg}SAJo(nHkfwUzR9kBlt)hSmB4R2O`1KxxMc(&+$mKahLPG%reUlNv$R zs=0v|4s`{88$ACg4DR=mRX@B(zhO#7{OHRGRup6C@aQ4b9)*tOCu9G=^?Pzu2!Oy( z!9%E_m5#^air?rm1s;woB9c;e;$$;La9^XrwFxTk$JkOHMOB5{VXg3iQU+4e+}pap zne!HTMqx-Qt-=Q}Y0aiE4SVnF%-%tdy3a=nOVhktAb(<8uNOs6YZHAzXF<23r#m@iEgF$5Hg80>qWHBw>q^bV1L{U%v2_+XwO%QJr=MlfR#2Wbae}OW4)^ zsYp3y4w0^We*ellZ$Z~Ge>kScp}RF6o6~=CxhlHLd#=49%S;et$+T`O@Jzu7rUjMW!Iq0fWZrDGmZR4iM z2Mthu>MIpv1xUhKa_TC1f_Pls^bGHQ;{k{3AO%xB$*3&!~-MLO||8f@16m-KTz? z!+{JV{kZLH_aP-nQhCXB8otQ|w4!7f8q`n0G8lc$N-R=wgp}??0#uOx_(FUqQkPv% zzM~3(E9MsPU%$?RUw+@Do!`p9p;_@YWU(Q{u}!*?m8?tuFb`FPCHULk*;q0^wYyxau4Ak8~M#aoVJ#E9vB#j5}w z|Ma-TJIy9jJS(U7u6oD;Lvn+y3(+?u3o6<=4Dv*elI{m4jCBio=q3elFt* z{|OBy{;)tr_r_CUIqpfcYP#QON^JUcT^_-!XB4eyIPQ0=`N3t?M%ZP+&4`dYmwl|U zGoxMzRjPudNs*N8!)K2oEc&^(UI{gZUa2ys7}^5&yLFX`1kWKro^Jr591DkT&L;Q` zcLio_Q`stU9ogDTY?Alzf|1+8L0YpT5KHUdl)oIZtz!!#G3Ky6n-%)HDcCy;&t4!r zhySJ(cI|Q1Pu|%)!qNK+xw?slgmR4Kskr!jkzPKSDv*{(A-6F%Cnv93gXL>itieOT zuWM>7oX)(ejfTSpqjOX~?0!0<$A{bXYVFcv;N7nEfz}D99~>XKn|%O|N$7FRz-c-8 z)M+McrT!&ut-bTGzuWQr`(yk=|G+;X8UzBc(9GLQ+xq=14Y*~XY`yu@&VZgtB07L! zA*krjBiibmYGir*dUH7T`g8Xh3=Z;c=reu)rXuUP_o7HzGMJ%{pK2;HJo=RUqqEb2 zIv%F_lV~PFCtVsluqTxk5sOIi*Jn2j>Y9g}uG)_CEdy_(_@>1SP#H`!7H32>M}C`U ziZ{FDE5yL(2wqu1K=?P50-U9&_(P}-APtS=uvY)v`~ry*y%Be{XV*v|NLp%U?QOvX z0VQqyABvakO|Ww3p71;>#T0gSXM6td%+=2V9iLAi4&}mZ7mg zu+%Zl1(Axz$C@rBY!GQu4_;+g6>_Hqz{7Y%{q?2l+5#KRmp?m3>XsfHq_JGPGCV0a zBMj2rEg&KO1|BruPc|<$w?(@J1?||qNas-S;8iGS4>?y{2Z3*2xqE=NbsX@l)T=rJ zP>?K|Ug#(+$Olq&?K%B3&$+EGvwa8IFIr_(}la) zEBA-3g`Vx`+tWEr*{D8AX`ejBysv+>i~%+4b7Bw~Zt6HZJ>zDn)!VxhkTwpNgkctx z1kh4>&62&HD`z^uzK;&0Qxc-CHO~?QggsBXRe+C?yfUrEoZ|}2O{M*4&F!$LEdB0VT-8ym6G?ta2Vn)mDmY%kk%N8=0~NqB9fw>12}lG3 zkOp%e2|4c;EBUl1efhPMu%D%a`2&O%;8Xa2)2#3SQW`O?*|07yR(VTo3xDrzfhigiD4;-G8%gRcisnSpD2(bT3sFL8K!qI%n(mNb%I**vvFBqE>hPT6TkuOipe55K<*wr84R0GCmYm?F zwXw~Yg+=vEE%TY@xwr%l*~|`vftg{KInJBQ-pcBc<$1-ins|YfUj8Qm$gpxtIU9qI zO{x9(3Hs*%W^p7kX%546G>ZWRA$4V?KO1v71|esZ}X7U=+J(6 zWGg_!)F{W$kmVqAX!v>(2SSiq&0!d-<0}Q>1?1(JpYJB~M@6t(Oz>2_Ee=;rFzkgG zTOMB{W*ezVn$!>|oh;PA5x{tCiDY#SL7Yc#M!KTx=T}M!4kd+Rw&;k3#_k-2tXD!d zWi1^C!k`hd65(nPXZ_+kQk-XmO%%$KmQ-mSV3+RSfhlj4_#W`psKTfrp8*w$aro2~ zHM@<*#x2ONtY+dv|8k(W*F*eKV$|}oan4Shk~g1&1#-4;9oM@m+IOq8si1=c^y~~( z8JrOq42(Mak+}bU!P7b|HUQgXK3|-WS|>m{w2u&6vB>@G)qHf>`Yk1MUZmP@z34*? zMf&qvgL3|~9DDfFPyFb6)Y2~fy5rthVvkJWKRtL*e3P*&(9#v z!`Ky&l&3TD(LgjD$b>TBVK@Vac-`_Pn(~EgJv6AhgDh5dV6wk&E$rE?R^99-nfyBo zi0Pw$9~PZzqRr;Xl6Z>B_i+6<1}Jt+08IdLV?MSjGgk7w^#;GW+~?YO>DSp{97JUg zmc$u_Iu{bK{?GORmP^RqE1)jWGCBg8=m4ZSq8aepL4-O@0NA89t}uG&)O`!=JDa)XA`} zJ#au3i5C~2hzsc${1}4mjz?SLK{fW4MCO;Zc~qnTENTn%u>M;-CDK?q4GEYU@Co=| znBzF@?-5#dZ;cH)RFauyeG?dQ$P0}0PtSK5r44qGphGRiApF;{WQg7$4bC=VH2Ldx z*a=LNYGMl#pFJX~g3*-G_gMb~H2Xla6J`3@ui)XC-&YxV2}#b>$0QG7L-r-RNL`4F z$Xzci2^dL-@Ec;MdEXlOfDGei-X`BJqTXh004hid1SB~K0bC>nHg=lW4%3%QobRh_ zHG1J0mTSMkI0G$jK3v)R15)rL4D(z8DHlkPsGNHdX{{jJUD5E?2dfCZ!>{+#+_O~W z^_6eNSAVyr3g#`Kws&{^RO;utGLf!(%V4I@Vf=%5xSn<$c%ua~x%SVpB(tp(gCP`d z3kYPwb9bVc)^j!1@0ADr3Q+DM6@Y_rlN7@i^ArZ;0yy-(&BjoMg$|Rk?t`@+p}3cB z69H*^&k0XxK!LQe6+*fW)%M_Dp)Yh zjpdjaX+{ri4ZbzmB(Nz}tZ;V2CzsaEtPIoA0Rp_hxZR(|i)JQ41hxX5TRV`8R`*{K zhgts&?5E4%6t565P`x>66CbD=F&Wb~Oh;esYFMDf zTtd!0hD+TpDd(|Zz5n{K<+w`4o&`7N0KRL(yWoYqh0pC2Kjq@4 zDS!=(Xr<%`LCkr_>rx!7l@I=>1rV#WIZA_iEo>>@%fpXrS|%|_WPd|SXnXBhhc#YQ zrAa6G3(9^EF}yvTJMjCuG}Kk}%p*zsFyP#JgIzz(%rPDz1m_|XtA zPhzzQx>=TbON{1Mzvyh_XnI6twk-OCUlJ*Y|cm3dIv@5Lb_)O;%6JN@7S zH7;w*cN|lIO!GHE06M&hKjz-6TzLvhc3!wM(y;wpE^;`JSXO1vN?{)E`g;1N6U!iG z?~kXT+tK~U6wXtEEIKncazAYYm(ls+Yq*wf6I zFaz6vji&*Cw*+F(;w#lnl)&dt!RI|;z~DP}TBlHK`z#>}6YDi7O&oLx6HcgqOF8Xq zU6k)2xP8r8KxLQy<+S;}tG@fYp(RQ*s0}{IrDk+pC_2STUI_+4s4zA(Zdqg~SAGd} z{kHyF+?X{GcN>T@6mcOebnIK_o<)`loy#XF$HGB`Sr>C3{o_1s%_9f)``xF)%S8-B zAIw(jPn$EMr437L{ygV$eu=f=saH%(is##fDr{EmG)yqMnrz8P>d|D+9w#!tE5AtQ zoc+Ruuc?|=rhCSiUz+s0#NPi|CmOI$9Z984q(I)MbxyFRtdt*gGf11fcrgEf+i&^J z8%IG6u6qndL6$4<`Q-xF9jT7a7s6Mx6!|1BXI}^3i0&b^PxH9uB{viG#`{#%36TEE zq!4<&QB5O0bn#9;$c z-hYvus7RLlYyU;{3!h|g?ZLBvB#=+>XvW2yN_^&+mPljmaQk;R`09l+oj$``r1KSD z`>m8}^wt4XGaPorU~eDRt?23st+RiFFvKn?0K2?=YZ1=bhlJbt=2|f5XqF&;8tc7? z5%=8-3&RmUQX^ekH`YK}1u{W(!OtRajUKH+qNd&|#v&Ks_+%lIXyfmmPT#>%H7iEIR1l#c@ajo-z3yI@V+cQbI+^ z5JfgsoQZkQr*tqO6OKUN0j>@O!2-mwYfGNEv9@V{^C%DY?O_5-5n^sh8Nl&+5$YN} zD{Lw*du8pArood_8fIiue$nzqRsnl%Irw`f0R92fsS5_K1WOLBNr;#rPIA4qy+BvW zzAf*IA&yTeTg3^$_YbSTPS`VK-cbMm zOi!xoQcOZeOQs|T-ICc3dzTt?^c-I9vf|N<{A)_iUc~+cty*MlhmtWt%{$*U2NP=b zMr68;Q?igRz?+m26h8}n7Uq#l)&J>rMK_ykLxq?U%$EI8g%WT2+i~sdZ*2OL^Iq?E z*$iiz!G1{Dbm%bA@2(HmTe9zL6gL0Q$P$((Q&dm}e7qaYlQ~d>SnXuv^(-UIRmk{_ z-s3;RoZXkp_R`+gZ8*Ybk3IFAAhVU79OlGB6`AK#{N)b5Q*k1M7;Lx}36C*La&Xcc z&Y&ZHMd*qro+0JGYuQBzHIYjF@ptc#o*G}UyXtGo z5;$lpOfZiZk)c6sXQ-3zX$@rU={wGX4hPS;!CVP&hFiYy$QZY}BTb9KD>IzmDza~u zI@&*Ny1Xn9HP>p>T~m8EuMCdQ8@;RgxPelxWcndw07NKe2opTe!_gGy3zGICfmLZwR&!smsUdXV~a~&`1wVG zoeuUCICM9+Rv#bWm^3swCLe(}PJZ(Lw=2s}yRy8?Hr~$;e&q6#&1%17GNWKZFyrL1 zU!IH`wR6vqKz;Z5K>57Skc7$#5fT~X+Ns{_AbCo&vSH=i@@#Cx>zO9v?uhZ)7GM6` z_6lO&p^mh$@0%xF-h>Q?Q3Ouo3l$R!n!rmsCt!+m?f{HNexeal_j$9G{hyn$KeOsT zh3Q+Y>b_;{^htbd79Nft{a=&69EAQ5Xt#C(>|!$mer7Vv@wK8Htvc4!nLM1mSEqm% z;M!$4oOuGIfs?Rx-u#hVK@AuSYM)P5zo*`8@m%xPpVTpS5P;hh!+GrNrq%S++&Q^K zQ4E!Ox1C1jU^I0C0s`$lKw~7kZ}VneBPTG9zDbfrQWz<>bs!QY%eM6SQ)l5*|9ZF* za1(m<4Z>Lik%s(S56tdN*y?IqshFvlCvAs+5+>izCf;Bq=Wu|Yb2|FBEPA>sYz$kl9!Hu=2*XEjNl+I(`yISd{o*5Sx zSN7(Hg<=gO+bQ8i+nd*K_%B1#9G2UA(>p6)V3&MwbZ3@@+(F~$VcaueItL)8ilkPqP@bXtG zd5dVG^GTV@6i;}ru20TDjL8(yY=3@E=jL?k{5C@{>ofPSxUc>$yI)_%ynrmKzkQ)(hxXx znSRe5uffO}%R7}R z>%U1NmrvmA@|{CCuQ>A6HDUj9Wtj+mZxI|nUN8>$K|oCS0`mj`bQoBj8aOL=yh4ZZ z!>5{>1O7t}GKD&)YT|+0g6zAE9SKOc;eNMK?r6B`wyQvqYfgf23wpBa28evuSun$! zgk%fuIRd$8k9f=$m|twhQ)IU4(hcu(#+{YqV|bw125m_EeunsMGCdbtDLso1&B*I8 zpMN*i(&7mLajA09L5;)3<|EAzcX0b3G~sRt>0@id}#yL*NWmnvrS`=`_dn}ic0m$H88C#al z%k?0)1nR=SMkPT31};D{D3YEMDbRx!SYsokDT6R%Cv#53kDxNjy#PQxN-z2{ps2@Q z>24S;$^H^QTZA`%Musf5erI*(SFo|A zh`3GUFQU)Nn2Z<1gM$fu+@x0*zDTGBP>$7&L?OZ;qxmpikKT?va}s3x38*OpsiU*zV+gti9WAIYC*++F>( zJ<>bW8IR6dd|Y%ZaJkM=VXj4P1hJUKf&&rvu`MwB^-t6)^i)SW8wJuD`vvlQe_?;H zm=ACO>>{&D>L`J3bgFn|!VIwZi%~beCDb5rZ3U8{x7L<<)}qznn;(Eqzwe_!g ze=kRQa^ANPV5t564^ATD0Ok+`j`XC&#DFF;YkM}i zy(O>h(FT_0zx!+$%;ka~z<~NYzcr(_MMBd3h>+dp5v{LCL}lS{on<+Iuw*vXH;+w4 zhsa@JQNe+oV2?0IpNY_gC}?5=R_wn#?xv~Vjr;wsC;fBoKC-d7es@SOcb^EE^&wJf zp;e=M+;gn`dUoT#Bl0n2f$$cU_Z_=fB0CQ$SR&`Q179v#6lzw#Kx5wB-cS2_LPj$~ z&ahellSc?gCynaJPymn>^smFJG&5Uzs%+jli=v##8{C!F8=1C{Bm#jgWp1qja;5o^*P%hdm{FFb=4*AqI0x|!Am>m(O zr>}LlpUr|Qa?FKDm}SkxX?TX0)Rx$#FkLow(C)7B=FrbT7-97i)arAXOHZ-HKIW&g-)mK_o#PpB3(xVa7Z8wK?W~fPMXILTi}-Om^xF#s-o) zatN5ql$+Ojc}u!e^KR{S z&PFFE>N!wBk2&^0P_TgmjS8JcnGExt^MC*j@mZGOwCzpbipwA{YGPs{`h-vF-v_mj130&JB^4M$Zde3`m~WF|hFZflHO}bW(vb5Da15n`X0B-vF7LrQ$(jWQFV(XP9#jYbCNbOOht9bm*L@ z8W+nIC+kvoD+kJ2KXs|l4hRoeb0w5_r|cZmnWPS83&x;K1s@=+BOtseY|SuJB2*kY z#fbWZ*H?JBT$teJjC@tnX4(StS95!4Ss$e000Q=y-Ba3Nm!uEDhltW*q9R1IpW7Qc z`n3q|kGx$wUB_xvMavGwI+m*(yq03#*|lVuZ@yk{JXpGG1z?G`Fi~k@C^~ht3R3ch ztDy7CcLo-7l@-WJ7KUF(H%P_^AJ*n&0W9H2x-ciYC-E~F!Hug+U!a3M*d2nIUFj&8I$E#eORIDIUunR}cc ziSaX69w7%wyW@-@cGb4%Z)j-VbUK6z68<;L(djAcP`O#h-2rCNgUf6Z8&O^~fS1u9MOU)4X z+k4_%e@zWFZ($CYWU#{8b~3ZshH{#?7{)NkiyrB+>(B^o=}KO`JnLF}fq>EWgDD$h z-+g0w0}6r`FjO$7)jxsBRS1iciO-)K=c0t3wWZMtJ2_)rGY@RsYPU{T8zLrw^_ADApKH70hU}M!76$o)WEp~%-hJduM2O?p@iPFie>Gf6EXHP2$Da*fi>$DaOvM` zP6t;|^+7<>ZftU`(V^|7WhofN^bDzHbb+E5&!#XKzT<2SF~4hP(G(Q$SJi1Ld+#>B zdrZ{1{T%Ywma+hdp}GtVNryJzgz+w#hj2~EzBGt3?&jSP9Tt6f4)|`tmN(9AH|T$97)!h1oZHK@ zO#g@LxS_TWQyR65*%R>0OtgjV*dlbsAZa#!pD7qK0M!9k;B$f&33R3Za&{d_VWt-EHYZc<+ z*G1XO&hE>O2hvJ2Tkn61Z!L*+5k%G(?Tlo#%YbX`@xW-y1nsTOX_sO4L+9lA{1cNo zBt;*}eYsaDasw6rbOUe0?+dmD8t&sO>LwqMdAXN$CRLX_@ji_QsiIKBjZjxa^v;8p zz+d5fxBgi3O&2)zm&>;ld&wX3e*hCcmyXRQ34jegtmJ_e$(fBZT+j_+uvE7w=PLZA zRK}lDddnVT1EgNUr|b?zL>(w|EUt-r8Sb2zbcM>VF25qAt|Z{#H&2~wOjt=^P`j~T z%k(xmU8p2R$(@s>R=cP_d>}2@oz_SvnU5tRu}M3CAPgLKawe++qd=4;hgWL9o+CtKWCRjlX5AT{nC=p#M9q;7@#dkLUAh_Z*jRF!d)~u zj~UItMfdoON>?)Kosvrw)@yjFxfM1Qs$@obCm~6iD z$e%=I`Z@VKP49Fw9=~Fqu(CM)*{c10xHU6Re<6Dd7I;g{fJ3ou*w+l=M?n~d*nUTQ zLjU2VY%T}<5Wthw<95BxT5P7*H;(>Ohtrkdi{9~ppcq5~Iz$^QzKCJP>Px`GN7$>5 zd|tk1c2>vBzN+XhxVy$O@^(_kEc6YsM^qQv%YU?zKnch0j1I;cOJ8&7H;?EBG3`+O zXA;TsN^=d=3KveVYogp!8xF$i38Z760wy4xPX%1Ti5q~mjwYdFs2X7Y`7NMTSjDo$ zM)S;~!8&X_`?KY5yd;4~9S*JwI4kC12fM33t@+EhN%QaH&kD;j@Fc@SPfXfw44^HO zyUOi67m`cu60Mgjl(OXhXdJMCUU#2|?!`;#+bKH-+tHa6{n4tvO>$hA72;s z#G$U!=7os$;2 z73LA<_!oV^d+;I|k z*ZUZtLG45R;FnyJHrB21W6Z@0ZgT)_68!XH#fjl#{vzVt@CeI@Mq@4)Moi6|entAy z>-VS8b%D*dlVnJ&EoBgmF*5HVZw$9oHM<@86Zbw{c#N`0k|bspgN&YY*Q< z2iLy{FWXh+=~JGgHx3&OXg220CRbWR^X6%+a1J+JUjYD;{|wKm9xN+#C1FQ&=T zZj!&o`PoFW$7iD*CTjHcT+(>a+kO;StNWp+`|@?X=kX5-?!W9!3*1w-@QqO+N+KH` zDv_gl(n$Pzv=?VW&+61IJvC#iGa*HV1<2)DfV?^nH{-3Q?zTfA3Khbwi0<$(pRS~Z)VJN6cpZ(|ws z&ouy|7rVRSq;g%D7?mOdv;M1=J} z7t+fQtkJ|LP%0C1`x#`~d|M5TS;1Y9%l%B$sOHf_QoFW}_dQxc<@72K9jgc zAjxl6Oz3|eTb`~rHP_G1#P_JlUe3bC(#BW9Q&o2%XL*C!Mebw2h2|Y0OeQiq#KfOP za2fOoHPlGU3I2-q+r;c>rtdA?qDf_On%q!)yZx5YF{W0VHR_a*6Z6~^Qx~xY%}&|t zJl2Pw$2;N8*A_NkZ3Yzz7l+rzJ!}OER&*g9HSwK$OCNUSjtu}va%0iP`CqU;5PQP2 zRRh?0n3j}4WV_)aFak1pQwz1)LR?gYby4y0vV>J_SH5CDxD?!{^lXE(jg_ZRoM>vFs<)$ZX78a53 ztE`SNKdqGoZ^@GFAD`Rck#^BrT7ldS*GB~47C&$6a2}oL!^9U3o z3Lm`2nkT!{f95aY(LUgX_ern)#g8=Dz=`8n@z6e}98>vd<{f2+M;K&QE9s+{5$JfRy`M${*Rv&vWtR0sX`odri@@G`>7OpK0>sY!lU zp$G~v^NtX$6W)n)FWXIvF@e(SKmXMHpB4c5=#Ed{^P$23<0YTJ&9ATPDJfxRbv0{* zZ;E;13^2oi@$!L9bO2Sd#FhgEM!IH+0jwoevc(~=ljEdZt^CidgyF;<%LPHc-B-cg zj}#KmLZZjb%pNi{F>L)^%WL22;j|xlL)<&BU0D-4D%#xr|oHzQgyu8@f4u zORskwPugW@2MQJuabKvq3a9D#!m52zBw0^=rxoB8SO&03Mu+<}R09LUooK3^Q&Not ztJ;axW)koD+pJLbd2q@eRA2vj)bfePJpYSAd#Qm%u9X){(LfgzDOA339x|P~s5vPl>sNF}3)vIkiX`$} z95r^nPI>mn0i*)(mc|uh$~p#hW$7PobJ$H6?>oudGUCd$24@(*=cO)Fqa^2GhIJe_ zzv-`=E*f$W349V*SiX(!7r*6LPj`tuEibICeUAc+BmYdZ>|qyl;F->;-VovA-|lvn zGPSEmC-0-k9uBO0cOSx69d3yM-t zJn_5P`Ew31*LPBuLTVhP+tZq?#js5y+%R*{nY&)+L5UtIlU~za@jb~*qJx;n+}3;j z@mK!H94wfq_oNZ}7tL>Kv8l58pBXQDTWTQ+Cxnfhx4c=grOEU8^i!EUS?5us_tKesWBh>$K6%>WV`YM0)qLB?V zAKAZqxp7V#w8IOd!x7J$(N0zl4h=WnPWV2zX$QH>G8u;MW#orY+~kb{HT0c1@wK22XG)n)P5f~su77u@^uW+vmtL5kcIkVq_l&o`39YSFhE z993U)^BoUH+;HJ|ax8$!zPqo43!44btaSDDmzUAfPY42V#0=Rx5KpZ!wae7CzbihX zjC%moo1M8(`hk;jWDx<5^e$YiP>o8gTn&uw=s&hxR5W1jk(6Q#P?=Ue?8ZjikT{ys za#Y&wR_{m|(L4R+7mdRK2w7c6lq-$YiwQ6hw+`M(16ywTW`j4!DBh#33?w7BfQF{y zr6~R2c7R^9iL$rs;_)khJIr$^Rh{_*1d*Cj!1%{ z3Y?D+lWu~@#I^C{+ZyMhVN(iYI)7gbp^1vGf<#qmgK8d&O?fHJ`MGuU1eK^#jZg5O z;`LL7f}V-N3Ftd{p=uXOHko}t2`lc5Ol=@`zr5@Ig8>&LH@TDQ7@^04)7AP@U9_ov zk+#lR?$M;;&##4D`8d5}mx|Gip{t+x3w?sIGt-Z->r-+I!j=d*n30{nj)fKq{IS7B z0(3$6p8KeA;4_ssV!`pxk>Sn=`HZ^FpvL#;B3Fj8lP1~Y-VqUw`}9eZA|FzZMl;>w z;LI&ik}J+V-&`g;(g~HZqB{QnxPPV)USG>az4^So^r>Qxa0RiZ7AarHh=BA z=&Agp<`l_Ai75&#v9^v3w@M$~7osRxsDPF*`wBDpVU-~;Y?={wJ{n8ET9G_heh2dN zGOK=^yb3>(EeK2h_-UzoM14G-jtVhK3wKy1$%@T+?pt zQv~3zDb5E*Zu;SaM$gbEH_5{sQve|!_wsV3)Fd$~g15}q*;fb|ec5#`?tilKI3DH* z{5nyZ{r0oGFZSm1GSwgvXSh}X!)Agsc7_V6^RS+Cy^H@9{4mcdO2; z5i&#?~BsL-g6)+0#=iLZp9J}J!g4`wWdRT1?0cRwA=%#Ja^A9A0(PcXkz@-g`(<`2Uyomy#v}r+)L)CQhgnszgmflx_N!<#@%+V z4)C;37gFR&zDmAJ!w5_)#Q7iX1Nlb}Fm_dZAmoSwg_R=z(PcM4S~XzI)ooow-aP}o z`{lT+SE~bF>L~5-j&`Tu`@?AG6xY6ZZ9-+6f?7tC>%7MsxbZziwZ4Q zcO0N@dEuP7&jj*dlJ0F<(-CrOCa>I-#ffk{85rSgef-ec9iQ`P^ovTU9GlHg?$ zvj1!JmtIq5#pHdmrZCA3u2G@&x2HvJ4ehI^MFDBL_s5c&otU>kltk>h83iha(FPYawfDY*19!XY^+ek-s&M8o?tpu# zh|`rV`0qgjgOXgap$}&9&pf% zU`kNqH9*I`^o?u%@vFg&_`7^r1slt`|MV5>22eT;hTw7djFaP(*hnOCuE(*&WZuTK z?%f@>$W=7K;KBbYGO6vS`^G(2E=i|;fwWH+hY6{E(pk*ulfMS$lO~8!5O}2^k$b|F z-POa|Q5wpnMCU_Pz1U+A%U0%SR|gd$8C%pH1qB)x*+D|CHnJbmeC>;TnYnMc53KnK zY^d^shTgW-#|%}w9k%o>TilZKWEqw-vaysbX-F*1;e3i_8?d;}LSfePL#?~P2z!33 zTkPi0V}GhRG%TuvlcBAzJD1?Fj->-n8lf3e#;X+tw{xu%f1Ga*M>hg7Gk^C+tuY|5 zw5w@+%V`j0cKE39MeKCk05Y@f>4>Rp zr4`>y5&wrf%azJRfynCdf3;C5q50ici~42X6Q6!UIAoBNgv;{271oy{o3U*%Qz}0$ zZAdgUMp^O5+E`Qb{+6_}&l5;mt7?=>pBUX!0HMuxBLT&NNn_?a^rUzWhDY@cRjovP zmC=|NgR}bHc5g;IJ`T~^xbo!8E<%*(3i>`D<* z%Xd37Eb;k~lj}D?(Rm4({T?4P9+lENsLB)DS>|=bf^jWdKF%-5g$@|W+;5&|#m07+ zXmpREQh5L#$En=y1&&~}*uSz3N1>Fe>!@;b<`^4l}Mxu$uo;81DRiM#li3)kKxtUcE zF0*(_@b=^y@zHODTZzfKXrL?uu~2*m=9p9$!fayh(SU{C~L|(POPP3si`hiatJ8~Sd{TMHNep?RRJ{Kc3bEQimSs@&`g;lK++bfin5Buk9L!29nl5zIqi zlcO&2aPK9u;gD@@u5|xL!MO044J34=#ZAo4VONXXpTXEt50+fA%UC%`*=-KtEQON$ zuZ65IWTb6(k1y#1MhQHk0yqq919Kh1&h?RWOg@>CZRbDoyYxM@Y#LWc*uA>DU+=|@vuXd@;CgZ0?7{;u zy8$xAeSrp>a3%9TKM|xg_#I~;^tC+P ztJHX%AGrRQ@w4i05SQsu86G&t05X+D!9jpDk`8!`J5X*F`30xa1uC_c(8Bt*%v1SK z!kQcq$xI38DKOoi_Oz82r&}W185#P)RRyl?`<4^>e8=t=HAl3t7)G`f`^Hz6cN(JJ z@5M`Ar0czYXUV6gGH0Pj! z02cf|eZ6H=m21>4ynscDq;xkZDcy_iQ0eZJlI}&fDBUeB-HixHgEUAe-QD#)%f0t| z-tnC=j=vm3$9nFV_l#>^b51zUbp&GF!l|~#+l^QEew~N#M1TH{5{2=90NCCD5zvHg z3IMa=5YD4&EYnTV#RzCz(fC0##AA2F6Y#y8;-s^NmL$ zVXt*rTf?LDf4?K~5+Snj;lrse?yjDZt(Iormd4_F+8?KRJgvb0m${yCOwNQGi zJ#fBs;=_s4?cbDRklRNLLkS#Y}{OT=ueEa5)!+WRkYs>gE zfFD??WLB_aAvFy(@k}>a4Q~zkLP`1 zhQO%i`HpuwcA?)uO2;klj+EA~N(H~;v)hIts3EKlJm140^;>d9z|FI?a@P`!fQ^~` z4l_R{UyCGZzzdmOajTJBN?!c`f(Zw!{aJ1^!cdMdyv~xk4yc&+cOO%2>xq>`eMxkp z;eml2yxewpIgI}Dcgkcb&%TA26@O;yxV~Bm+L04vy1aY9&^?91A$XN98GU^`eiGTP zKWugVa`{kn9O`f=w_y7O42Ek$<}uXP(P`lb{kHdl$qlnBp#xcoe%uO+oQrywj`tVG-r~=rVS-W_d^@V}>K2TN(0-6mqXS!kl)u`p zYLSWFKg19}AUO>2qyp6X97{lNH=dis*;R_QWDCQ^=j~NHLF0L#LG(76MpLE9=K0eO zUJ9effrs(VWY5Rrc;RnM3}QQ;a!el=RrsyD_&}BqD^KlDSCyjPq9gXFS7JnZd^w5#3vbox76*o)Ca%TPTGXZ;0BcdjLkr+@JQp}*7i#KUCx1ufFUbGhG< zr-FyquLVR2eNMyKLqy>xu(DsdnmZp1HqFtin$PIVuIj*d?ytrK36qa)&S^03{xwSx zFb4d09hC^6zr0|85xZ4zi8}&^(uLRCqlJlpB{Y*~UZmZ`L4;hYx<1*y?qy3MF1g)* z;oDnf_=m&@m3PLj+TXF~HM<$PNc)I@dDS>?XGZva+LU@??<0Yo6DEu9iS5wO zCsnfykwNb3FDcl};tPsK)y;q2Bevs2^Ok$9<#CuIxwmE>^GLiv_^VkpU{PS=s#zM= z_Fu5l4#WnqOUm|}4g~d{XOM!e#%KJOz6X!UpS4rEhSNV}NB+qZrA5mIDqe-ddp_Qg zCJmy7&H9`^_zDtLYfNpZ0HTYTZX#5cEf;n0QK-KVgK1!51@Fa1MLzv}rdkw*H7o zGzY2`wycjiUo-YnU|# z1sA?r0x%oGebEm-^Nc}wJbo4yii4u+MCUJ{?x?%_?b}C&R)u+G0=i2)A;C~B%^j9 zCTdu~&~yERHUgyn<}NfrD?J^4=|B=q5hD3is?D zf%}}9{hLu+U)M^6W0Y};i?=%mzh`I1moJZ%`GQ8MU5-UmbNl1Yod{YoaioJzrTX_$ z2pA>;^l>j(Q{A^RZ4V-V{gjE>bSFJGyd>qd*YnLg-9B{s2LrgA*x|;`@8>s_(VJ>| zJpGG91w;A)Fs{n9DN>#4lPb7$WZ?w8rLse&X>7VD>0uW;|CxrloMzU@FsJPUXS_%63GOxlaO{-6ED064*N9L__ zpwp{>F~sZaa*lixjfpa)exzYl45&}`;yf=lk*wkqohlxBrfl$5L&FRGBI=K4(lIR_ zN}9*b?$hmZqDDhw-7ZbkB2Y13F9*ICRDF;dr4d~>&B1w9OMaOo9Vj3)rr z3P}gz#5sDO*V-s9nD7B#>bD@1wdIb|x3ZR|0T_a*Zwkl}&d7cpFVRdnXFEkkkhWRB zX=~)Ea_82bJb3X&Q;OP_w=~N)R_AHDh~k3(_{XB0^Al|`$0e)LgytNu1mpplA%L;#P{)cw)38k3aMYwdwyz;!tz77&SzsYIV6J$Xuk9D&q5(o_2mWQ z75HhNRO(`W%*>i2g+Br=AEy!{ZQnNlj4!ns2Vx_^ph3;Y4mUu!mNM~j`_qM5S?}0^4pck> zbyWg@Yb{9D%=ZHRM23>ET$oSsoF59S>G(_*&>pm=S~r`KD)rR1lcam;{N9Na0U;>I zI%h_Ys4@|9P+EA=B2!Oox{zV=RHh9ueX*+5HT1MV(3-**dhfMwmkO^g@_OYVjDSPx zW{VE6C6}}LOG34I`TouF*QFd&3dRP!@XcwX{YhB`rcz^TzgN`H@|8 z=FycyWM`xKSY+*ovmzWKhsCRxjhw0bqRXm23Uz!RAGQGCYzZtd3Bb7KV;bg?)L2?C z^gQdtk}|>HOxDUdvbqoa*c#3^YQ!ivGzwUakJ%Pe7yFHb>UOKw}B&k`wOMdvtHJfA9b;5 zep#8CtCP_WujJ8&IGxd0Y5s7$%ww>UAk#3=NvN{JtT{z1WZWd!On4zovGF%4O{*Zzj_mRPI?3v zHCwwnJ96Ki@~yV>?lVrMvC$*U#*vQUzdWt~Mb&78ap5nQ%Hx6HxH2CLhL;DG^DFLB zM8sWl>#s(m`%@(5QGkv0264>*f4m)x*khA%M2C8s-uf8f>9CDaS zzwZ=H$$a;z4^3)(jzn^LgKqL6!T@pV5W!>nP5%ngxW^o#Gb9Y|J~xukG#$Sa0NB|A zE_4AQXtKW}s3bw|_}W?M8-1!uEdXR4d~50WEZQ~raqtU+#yjcG1RVDnRM)fb(^0S7 zb1*snj#Ztb0iNeoxGWNIUq-n93vR#}7`_lh)nJ7%8QrJjWtq?TKm6%&7x|_BWtgu( z4$#sBgvJ-QD)I53Fd=xh9aImeb;3LyhJPblHpF9<_Y68@((C4^F~A^ zV|{t*iP$BMUaO`bx+%XeV@svT29tZNfA;l~j61-`mI=5(6d4=OR*PKHRx^KUJEAPh z^}C!AiC-p+5%}Jn`=GIY%xtJIgZC=-QeuLL8M)kyp~ zAsa((5sPrLOYN=DgY-! zxEtW3vQUnvfJ5V-(7&vmAM2pvy`Y(tYqa*8pCriD}|rmAH;+P9Y>Ci74wKsF`RneHvHUn zWl{Zif`wpAcfj8i3HqIV96;7ou`BuB)iZ=F!E~p*YS{38dxxC&@ZNrU^}gSPO^*m^ z;}S|NwmB4WH3t4rXA921=CxXC47#21sg2MF3sA;R93|6YdYBr#Mf7T{IWk z^qUGuoF9-s=TiwCjS9}X1(qwjV*{`Q@?`PVvR8BR%F*ms>?+zOYNdDsG->_6ne#Da zlA*>vxAL)pjMoP!R-*u}mhtIxx<4xiyPjeU&&{ zkmVJz@8*lA)B@KpZ-t~epCg*`fksq0U&`OR;q?c50u`@l(AIFLtl71?Bf9$Ak_uG) zL3D2h$JDWd^STAq45jyJpana2!e5PTO+Q3xuHv_VHV35BJ)iI4x{_~yS;zKjr%*S> zqcjDHt(}{8_`K*ESN<^1VUNN_EL^Tot1|dlV@evX4udbd`~mt9qeBpIs3Y`PC^Nz% z!J#hhHa0GA0U$X3C=OS72|XCpjlI`*zytpKrG5c0zr~tbTkhC2u`|7O~la zuF~E=o~H~gLD3q{S&hA~4_}hZ^WRvqPvlc-8O3$WC&1H>LG zc6QHf#ft<8E9+%ymei{wS3WWT4GEfEDan7HWC`>jv@hhi?0)SWxNqTX`#Z+2g$+;? ztw#$A>*6`R;L_m*Q7p%50C5=h$L$JiWtpLCk3Mce%4}18HK_Lf0{)-;s%>>VVMY~D zv%o+YdP1C%ec_pLaBE%*aPnVpY9eT@I}7&r8C{dnTMs4xvFvpTSWI-(dYR zLSZ&mB8uv5Fr*w8Wok+Ze6~-!yc)i&I|Oh95+QqXCx&%>`uNU;K~o6BZ8>dqKMu(V zXJc26H2W__zhZQ;`Py5Cam4||*So`?;#f};Tk<3nvt5^ze&VB3`On`r11f+Q77R>p z8~fE{CF`CwfQ-oG-a$&h^*+#{}8xV$i}bzw!mMyGbQ)vkW}{OaLx9r@ug zxY%CXJoF{Xj~vHqqe^#=u%$6naI)d^x6dHgK}S!Ef@fXDgJn4`8VMUAPtI=kE#7+J!pRp}HC*>@bF#*mjSH;33+sf7pwZz1G z?&EqQj_vfN6nMD zyp`U$vZlYWP#yLsBvk`2@F2d?uYUEtWvtpjuxP2G6x|v#CLwk)Qny=D|6Z3u)DY-X z=4Pazmu+L%9@UL!#N4o@8})~nS#ETZ7?SsnyzS_tcV)+81Idd`O@d|rtyh^FYO_=N z{gUnrb{clsIYQz&F_4{5DTaWZdbO_ZF2u8%s5%7u^}qa|?+H*YC`T{TXfU)Hb!uu# zOQ-nB9@IEzH{(5$@zs4gtu~i&4599a{gAcj1=ljax9xqc7$bsJ?otvb@A3)G!Bg6v z!f04&68moi5CgRMqn59VAXwUZY16RD@wc+lyZXw}BSqHh$ z=~kUk(0us1Jkg8H+q6N!qRTW)T?kg(#R)yd01Pq~6I|uklM1ME!EWXibv^gsb>gdR z!ra0upd%#jqFplsy-s6e!=Vm4i_zxYvs33v6_|_?#6Tkg<(~j1f-Re5-LH6 zdulu_Cke*9gtG8iI%c=nkgr`@S*|osrf521BywDQwNX(TNo1VH5?}XlI_Q07!kFCU ze-4bb16~oz4|Jn)*+>eiPt@Qx?#Ch!dd-%uzwJyydq>N(k-%b>gPmaRYa$g_y9d`{ z9}1`_uvXo;T&h%#_WH;EF23*fwOMhBWH`DMFgbXLgFa1$rAd~ljxvvS*x2Re%L@UQ zKdb;DhMdi4yvBuhqFTMUIYM?!U9un}P6o-j0U~ur6J(DjyiKni*Cz5b0y>1>zH-x5 zmaB20rKy|aMAAC}C=k$H-5NAv zXgZ*Z@;w2f{&htReXPQOg-BC5tBs{_G=9IlwBhl!i61yx`_jkOGj5|U8^56<4otrlteJ?CRAvwF2@m@(yu+Cr9kr8(f*FEt z4Lg|2@*BhohvJlYA>uG*FaNYeD?0%AL>$t@fyKfU76Bq(N&C8+*Q>wNYJK?3gbGdZD z5wOhA-RU&CYvJ0LBs1wkjgB^ ztZ{?&+I zvzkwoUCxjc^RdZ(kzOrM-G==!?e^QNWwa2z%cu`R)t79K(Godzx%(0z8DbeHp~RmR z=Zf66qi>w+TD4%^mLMpSz+34mo`}fBlGTS_*6AdOHa+0kW2AXkT=BIvJk=)E$y=;L zJ>8o9``XtFHaJuIGDm#HY7Js>7ch15tdMI;$WI<@V8+^}Qh7v|T4-8$*L`T1pMt6( z#~XQJ<&YOGW``;Bu@`fn`C!@cFQ~EzDL*%o*FzvKKs&$NMYxUu``XKhQHj&9Numv# zT2WG-M8ggXXU+_?hHuQ!+B#a~p%&1c58i&GG@rHiyw4;1vxxGwrkN(1v!$;r2p^OEC2r}|@M2lgEMyO;b$}~d!UD7{?-wj8@h(2t2czH&O6qhln%Co; zA8koDyc1fM4$mKhq^E*B6NE+G!za#>FT8B`k^?*ipzy6DyWBS9nXZ~QyJOVH&x|%C zy&u23S_~)vvIW_>t+}8yld&*AortcC>c=B9I%TF42440bMc_pF5b&?WyQ0Aw<$e~? zd8H&djJW#*NN;_*japWSc@Iof2fir=eA7b} zFI&889enTSfAm$bDhi^hRKLN@@wR1op@rYb3oFN`m8IX3_P~2mXQND4ijoB4>83ln zCOuYCI&(B$0Y%Yb?qO{|&KQv%lR1}BHhR46#SPa=dU6X<&V3ctKkUc%q0|Hzng!tF z5`gmZ#0CBq9toY@dLmub0hH^mDl#|s7&>4Eul3cG*WRyx{VIw)JcgypGi{NHyXA=L zdUP>eiR6KUeOkDwovmzjOo&`|dQ+*1a#c{$xgDP^dKyO9O5lz}S(Rh_h9hW`1Y(0j zdz$xWpP%e;NhuHo6~^Za07S@Y^-qKg)h9*xX^|%#yt=Zkqb8bM$-2{z3T#>D zey{6Y@w_(%ZzZO=>a&Pi0ZXAWp5BqQYrQzj=lI=*J_C`mvdiM@QOTIuyyo=GlG4lO z{hJxFfuEF4@d`P0#uHf*AJ=dA;l9=Onnuy15d&u&45Tuy7UpMbrWv)mQ3rf8~+B<9bC`2;UsW4>C$jI53Nh-zDa z{x`?yA_hq|oGN$=JlpM92w;B9hkZ&)PvflLebCgLofYm@zCfK*|*xdt49lCOt&;!3vI%A^f@b`G^sx`m+TRq~>{pJA!(o+iiH8@F^< zpwA%PL_8t)^ZrG?j^Zf#|yMqlG_-hkyv20Osx`Fj{5I#<}co1!61{uz`()Sk;z@Y0Mh>OM&QiRdxXwxD zDivBO+#aC}hk7y9Td_x2ocolZpS;f5{4@NmG}WK0fo-7#Py*(1Lm#H5-owY<+&__k zvX;^V26qdrZ{l~qxe;y!sFyu-QYFs7w=LM$8sKa>wtVO;FFb_0e6ukjhGX=UZc(XR z*fOkq{iyrNp#P?dUZ%$cA4|4LMiNDk+z}pS-&jBP!_^+- zeKbq5^0-B^Zs2aPm_nxOo^$wERP~fAQFV8>bP!|g*q}P;vTI&c&zq=IuFk8OZ|<(J z82#Jw=&8{ciJdRLcs`ntAAW1a>y56wa3-AEQhPmk;PJF(Nn!R2{+(ABE;eCka9JPwkByGRbH#nOz#+TQ9 zE-i|*MP!Uw(Af7x7EV#U_+e`|vvNBMGvH@v%>k&zK!Qm6hih!-1kcN+;j`^`e)Ao_ zYMc@HjGoYaPGZLvlFe+C7Lh9-Ywc3ElT51l$fT~I z(n{TcH!~9l)q&4*cn$|zpP~nN^`QaC&)?hLBB76TX;+{M+k@PZt)9|VGTQ0TU%dWX zZGOxNI1Gadut|g80rS(c=-(z?R}e%sk-hK9-@@0hw0CBEhjj$a%dqaW`m+#@%az)l zA3IHE_a-M3LtZket;BQd{@oapm#?2i-vQ#yjNp0sySm<3z<)^PX`S9lR{Y)jjP*%~ z=_#S1-M>4OwJEvM8KIcltDB+D_}A%t)PxvIg4xC~cAMIOZczul zJCVo9suH`IO3f7mI{_Y{YK-RD%&3;T?86Ci$Zf89XLHf;w1wQiZUW4xg@29+09-D= z&d#eDGGO+06XkQH%@=d!<^zTA^mUWR6wB(~$sIKOT4B(QHTVMu^S5xE=fHP2w^9gCZJTb8i;2EK+P0tug566Og7*!v) za26%)tgU`#;l+w_%A*!9AZ|ZZEtY=>(<+iL_t@WgBcCRvi_wCIwl&W-_&{sjyP#ln zw96ePpo;;1%9j=|941^wmPYb1=RD4<@)1W%-7WWdR?t(j|HDx3fWG1hsAvnedCloJ7fMTdK!G&mWa?W z)WTO+R9M&-mz_-^n@~8;x17dpDkdK^xVsK$vn=^gq=?kNk3SZ^iR&%h0vzi?RvTv~ zu7F;3&d3~Mvgu>*gHM<(WuT_Gm1!MO>na>uw|0l`0UW8*ukeNkpYD0FuM_(=m^lqE z)bHLeZf+7X!+ojmov+=9OprCiAOdoT3_{X^kFiJeg))#E(d;R7=C_?qJ%@&lGQn;*Z`;|BV zYWj9{zJvC&4el*l8yB1Vm>l_O0cijt3I5WsqPtYu^>T$V3hT3J40}}aV;lj5;)h>1 z%U$D0s*~8GOgZ_^{VsfOxXxdUufCo-7ugXO1c%P+3)w3h7rZxXgM|{5vM{%X0B~!z zv4JquaI~ueKK){WoPRf} zS&~ovQR2Oa0~(mVudxmc*|9r%Q7?6Y@p+g@E2s~E@yS@cJKuf&{Bm-h>1BcP0T6!I zIpDr<`9{!*QDOPRFQ>KO?%y;!^ozdjM~Quy_m|AUTgYV-1f2h3$$nmmwwKvY{-||n z+P=;Hm366tI`G+#39~+}BVL(A9}-BTow4YgpwNt zQ0T<2Nz5ToCR8APDS}h1Su8(w(8he(mS>?Yk9$)KrU~z6FY>=WjNOXCf`2}!pSn$GBRi>Bw2)b?u#L89Z z2yc)$uY$he7r&s))2FPjR#$I4S5mk;^25W+zM|DAwyPf#%?>c3Cg$d5+gj4PQQ{Vz zR;gT~5bPY&KuyL0+Co1W8hw~Qa~3)=`bI}LIK$S##}~6rX+aLAd`Guy_a*|q04Y52 z0FonDuhk)6tJN{=v7O6uGEOCOp#b>EHKf$n7iH|IgW;LIrdw+CR5if>7~3TYJM1?c zba+%)4)EzkV*-@I?dEOp8(?bEp)Og_g0GtIx9}10eN;CEbX#9zy0QD-V&>-;iZJ6v z;~#@Mof76ADIRWO28R-#7m7}=MTKwHp(3r!^QsBelxDb}MxtphzpYCF*P+4e!9AAY ziC(r#Xdx01{tgXsi~tX!ZU_J*Kj^<(zEYsbx&&BU!C1W zY6AMiv0G|p3@3+)PF(HgUg~=jNwA-&LW-*KSnVh}0XR9K!0zr(l$=r8_h3B`aRe@M5_eEi($I(1VzJ#ZN8=tKm*^4nm_R3nZTjJ)iMpAX26daR0E?Xj2C!(n z8IVCa|I{@@6jJmG?G*Kg>G3D>mZ-T5sQz#$JC{YctVNrunmSaK(~WQ{9^jm>Ds=#A9Hk4=-7@ zhH;DAju~GW2bnFlACzk<;rzl`l6ti_HgrwVq%-KE|3fY0v>;@N)Ok$K{i78VpJ_kC z`i6AFHhK&n=|hFZ5+I$t$85qngW(x5BZIU5D82d_ULzK$#B5&;Hx1AZ@Z5V;m_%>|^p$Vkht{1S{~ICGnfZF~?Pw$z-PXH4QWK@Ov*9_x+kPClIJ zdKHUZ*S@3@v^^IjFRu#&$j27Uz{x4XG^z`#mzJQdtKlf+uMq|;dCIq(P#+;i3=i%i%RI?o0rPai}kPK8u_1DmaX2wolmsSg(H4w z&tsg$EH3sCHF?J&`!XOdH0}ZEc(tA~TBY>U9P*QvwYBisLVV?e%D#S-3=BBvB8No* z>6BnasJ0AE1M9N4l^ z--veNsgwx*h5ZM75tQQ$t?Qqym`EZFft-^EmwWnU+jsl{$OisKT3se3aKHW02Q6tz zxXcf)=SiNI8kzxB_D1Z$qKV6ms5Mc76^zPyoC3w=>7e_Lc8cuwxMk~~yqCQ+2IysS zGb3K1ZZC4G^i|WZqT1|ikXDuNldKivf5`>ozt^hENG&9aK!bDLUcCC*Ok?R|NxPJ% z4!HfMfX*17yTH8=H>w1ukygCL+AJieHu$`AqL=37*-yVlR%=NySJP^ah^^Rpezx`9 zs^S+5QTi35wgK?7E@Yfb$>rDBeeJD$tv}|jY@}1F{_=b%01H1QLnax570v{AFr^Yw z9T;HD;rgD?^8MJkN9l7KO&RfY{R+?Fapeca?l4{~)la`q?l}?Td6fpg?2!wFyfBAD zVA$ngLVAi~9{lxZqSkz%n*14US}+6+KrPu3Bbk{B$pb9HY?*K?6x)Y`h|bBjUuMp&LOyp8N4t$)vkUxb~-Sm|TtA4wpO${tBqd&EMRCETGBzaBjX4 z3wuvCUKW-v?1edJCWy%{BPxKz3p|VNNBzO>-*ETi)3n0tSFb1(tdX$kSN0u8Oy#HN zJB6!IJTS{Q&DAvgu&6|cDkR{ak^JgGxbIPtWR$NE^7{U5Pv{i1Sx_tQ2EM1gBY zR$T^eQ~-W4qax&`W6Tat6d#oz^W<7Htx4?*ZmSG_XG%nPTaW;q6n0(F*T5}|a}WGN z0c6gNCrA%M82A%UR2L^9VMfX?D*~+t-0HWi3_kRsO_H#+3&FoeAS7oXq64FglhY#IPpBfzS5LwIlt?`n{np?(|E=m>t z%ibWGQNZ))vpx2YXN0K>0< zoowbMv_MYj*+MnG?INt$wE=H~35S#&zi}eOAT+G7nj3?8v2xMwh4CT-qcGmP>gqxm zR9QR7_Vg)q%buK5rUHlK$d)D*7498yx8pC&696Sl4zHw~+^}UAc|0cpC1f*KYZ=2L zzoW0JuR2zh+8}@3|i=S~4U_Yuu^1B_CrTrGOK_DDXIY}|KoiK`zoS`AS0}sBow&^1!5@9BN z*kLkhe_FJs&fhdE*#Kx<1k(4sz>^n9!yO&zV0|3U=;J6-lhD~{4p0(RC0QN z!Pv}#KF~0$p5w%7Se&HGiaX3yX4RcjDC^p#`Zvn>O-f%XC#DRx>c!PlG6M@G76f>z z+`cCpGGJ1iEUErCEBnhaO#c3OjUP$pjos+Zk5ov7ihIzbFH=pIyneafJJ~(YzYOVE zt)H!ah1GT3;ak1STU0l)AN=S`5%uM3_pdfv_dCUWo*|D>xE{e_kd4y!_-x;0`kL$H z&S;xUdM=3uMj5ljWQWMmn0Y(m%+V*h@!E;?d3A)j8~xqg_Hh&Iqs3%F_lC|_N4z|) zDZU1AnM;?fhjvKpE)6Yb<)+6E{PZ;WEMMi2$q6?ECE3ipUeZhUNWcFZzrir%L;yqf z`Wn3r%=E*u%HlsG#3&}4{Uc@6SvgO5FjRN>i|50-0ZCV`@2!g!Wl$~TOTG%^MAxB_ zZE>=rPV{a%*=|VWssUVg8?W-_VSvHz`TC}Q>q6QfV!ljR`+j9vU1}n#cH#z`B$U=X z)ZV!nO{J;*= zXgh1Xg19TT!QrUtysqpd_b9d@j6F>lN*vF19Pl8N#g_k@hUc$Z2HxU14BZgckm5oO zKtbi=M`J@e8AKUb2)l9tZcWZ|+}g3(($S6Gr8&EStF8<{ZcPcjtYnxk(OzGNGRJOp zSly(|S4{lYkq>^AKTr+)hx1iDVA;ZIvQgMRY<1ZZBwgd?oeP%T=9%8MAVCU|d=^2! z^@0<-PDd19|G?VM6Fg8GXdn9hyI$RiV{8(bX9Nr9y=W<)=a83C19mSMOiWfGp0}NJ zVx22+wD|M!zAuS|&*^yelFldd3J_CM$N8)oP^fdH<+fr>!&GhAJIECeLh;BSaOb&9 z3)?3Ycfgl5|JPmOzskA6PIDzB_d)~O?Ooknt@Imq+!A+}Q3i4f=6Zh(EDCj7 zMkv1dd1=f-lpI5{;#c&LlVWxN2ex`sSoCK%>zJd=F2Co36gy8~8)%dWaR^`U zT74W{MK`iSm>V;(UYslvUf8K!I)IzHL=Qb=@i858KNvA{#I(k|1i_bUalRVb8`1F} z_}h$)68tt65V#Ue=YhFka9U=_Ea&xdR^iMIIb`;;%%6!^(Y}+^R6E1I`XIqT2Hyps zo#yiu-`NeOoNjZ!h2%5U?A)Rtq$d&VA}G9C)=o*v^g9uYItLd4L+WwsiFN!@VW@s4 zd|5j|x3(pVz2nYi%Tb4|F16QMrC&&5w%>xAOb*Z9;zk8!#;m&Qd%9t-l zCA;_vgp@K$rlws@Pb^~cZ=+LjNGwdHnW{_1V}*Z$)b?=4qF%{ZC5iV~I~5k?F^1q^ z2u@2E?McCpqAXHQBMqV(m8$EV{_SgM&3$3f!VvKX)KE=^3Y4IW1>Y!KoA2SpTT?X8q;>O5uaw;su0Q%%IP&D3~ zl)_-t00+P?eoVm`kWMj+uXW__nxy7ZNd2uyn7rY3G@rouZ?z-}94^dkgQXH)1ViG7 zxUtdsi%r-n;e+(Gfssw%Sm4+;L;@`tlj9tIEeN>S?GU%jD?cKpy;R!P>kRQDJUGqE>Zpv>a%Ue3ergP@^ z%x4;>_Zsx1dozuO*f<#zf}T&^K$Zh2wW+YUsXOV8S`Iq;6*!Ua^k-GfPAS`sV8f0^ zrs1i)H@3g0tA;uDF4E%~A4W<2Yv=#hE%X7BRnZHoh^$`3IILq^tL1Hr=r!%9^ypuq zNe7HvcZB7=l@I5!WKzGc7*|7yQIE3aEzdX-(#K~EEA1?B4;}UOU#Zglu78W#f`a^l zIDgCsAsKtyD(J4wP2(cM2X)sKO+fxep8$NXQ&B7fQKhtlCb>(ehF(%M~g2_?NJcU zcMWmq({oBHhRFjzdIQDb)y9F}X^7t>ey`)a2L;_d1#&v(azZmnYK$a!55^@Hlc6Fv z^IHc)LW2D6u0UC%*YG@nuZJ$rPtVhgZUwb*5BAF||^Y zh@JtxzFtb2nOVW`y#8(XhAx9zT35f~&G%~(xQA8+PY2-obMWnu9IdjK$uPWkfV2cY zgG;uN)i2pgP+u7wZCCtnr`DD=s(%~u1CA|hvQ~@+$HXh}rC83qwg*kn(MN&;z&7g) zuadLdA#JBGwQ?MdG%h6H(3v+gu5}N~UvZ!OF{bYX)`d%{c*t6`%9Odllp}L~6s!H* z`%rdPd4DR4<_^k-Nm&(CB(6lk%OnBl2klQ7JSLXK)3&z&rRCeyk z1A}=oOjv>!<|zk5Cty#cE;7P^stOZ6hEwq%hNP*{VKW1!WBW&lW$l1~qtNYv z&KnnJ)wc3rv2D%!E1b}5@J>kjPum?EO8?F;3ZlxKE>ZAM9$F2|vKXx}Md^eRaG?`GG^RJBb z6sUcqO1(~?gM-O2=^>1ND{+96t#W_?A|%vcMOmmFkHT43zz|%T&A0Q*Oq{hF3V4>u zFroWn0;XhdbR7E+!^FsMDG;wUIUFq+2^3SZH{1*@87HVU{=Fi=KLH3JSSdjGFAYQl zj6%rYV?lgfjA^DhXUI@CSk!O2`pR4%IQdG;<8~&b)e$Ihlh63iFGq!1%W)O|$aw)F z?2gJ;!m*4upS5?gtZ#*Y^bbthfS&>tz$MH=P*O6w-1>)W5ejUO^P;(IOVNGo;S2@4 z)=pBn`_0y;*B$kre}f0fzy8BOO^<7!h7e$DzGF#krGWm=?~Ee=+qqChoPaT(VBk%N z_@EC6VU6@9(_yNUzQz~bA(bpbT=tuioG17uzR9(cC=MQ2ssXkHaY!S~C$O`YOu-6g z39v}sL$dgVt6Mp6B^~XJ%;o3)?8YZxy^JF}(BauLOnFTwg0AFLCP8?fpq;|#!N{^ZC23jsdc@voHktgjV>KW_Ho zt3OCQeNpI~$rq@#UO03iC!o9~BfLQxI}n5(4WE0|`Bwj15D1{6{IGYRH$eAWjiHN< zPJWWW@Rw{32^=~*H75KDZ;ty>tE|N%j!p-C@*X3IH;6+xH^B5obaysra7p{al0m_5gH0et>9ylu0;Axp40mHredJa{C_tEI-a;(W*mm@pf*GT~;l}Gh z6~>fHkmmMo#b-4yU)i7+Xczo9b1a-6_$||qYNTjzYgkqv_&z`eNkO>Jb8fk-S{Q3< zPB{>)xZA(e7di7l7FzS43@NcRsB@SH^>iLvcAn9o{`WI~c|fO;C;=}Ra#;3ELxZ41 z0`2tTh(Er5=;ExZIX!s6mR#}E!KHbWx~pW(H{glNk*@x{;xA~Y-;K-hKPFfbaD-?B zlB>ia4uE3$81+Ibbu?PeYeKq9hh8Xd$Bk_^ihg3^bJxtyWNm^$dm*ls07CwGPgrTH zwYG-&&9mDHTKWGjk2V{)yn(+>7yzV(&v_Gq1}+S=LL)4qf1?G6?#}>qU*Rm3_+kn1 zFgc^LA?`tVMPquBE}2kk{5xZ?C{&%OCrtC5oSf}GLik_s7AB^B^nf0!-ecGef#{+5 zsB7`nQJewbmI&e2cRE=DWuogcagVp^2@ExZL%eh^E51jN1xOb;qr+`+ZVSo(ieAM; zFQ+PGaQoD93yIyjn=_})`ft4{QNVgPON-2CfCLUyLH=ih@5Qtv#__x&pRlswwy4>0 z6s1>y`;njVDord`9~Y`q(hK;Nu{3TIcZDHv2(u-e4?PsYgf)2E)#8HgU}@k(>l2Ri z(;wCUtO_bjmw(HXmlvlb2QMUrHT37tUzn`)pMSz8w{D59Rs}8W}nA z<{BF}2n#^z&KzwvR-jWSM#Lk*6X1Pgj-u_(VYU0&XEtBOty<12`R9dBK&8LI9=Ys%PD%qIYr5Aj$QLHo4^i}44(Ls1p{DbhM@OcQS90?GjmrWGdDA5#zZ4v=BA-R5Ev3zGr zOVew9PCh9qB)#YTaG0n6pKh)JHkz`JChPN`dizhlf+2x`WlfAF pux$EPcpSt3&g=jD6D9l;W^DuXzHR=G6$tnvC#5V|A#N1-{{e@LE{p&G diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/3-create-a-graph/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/3-create-a-graph/lesson.adoc index bdb452b8a..c854a4206 100644 --- a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/3-create-a-graph/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/3-create-a-graph/lesson.adoc @@ -3,6 +3,8 @@ :order: 3 :branch: new-workshop +[.slide.discrete] +== Overview In this lesson, you will learn how to create a knowledge graph from unstructured data using the `SimpleKGPipeline` class. @@ -14,15 +16,18 @@ The `SimpleKGPipeline` class provides a pipeline which implements a series of st 4. Extract entities from the chunks 5. Write the data to a Neo4j database +[.slide.discrete] +== Overview + image::images/kg_builder_pipeline.png["Pipeline showing these steps"] -[TIP] -.Customizing the pipeline +[.slide-only] ==== -Typical default values are used for each step. Throughout the course, you will learn how to customize each step to suit your requirements. +**Continue with the lesson to create the knowledge graph.** ==== -== Create the knowledge graph +[.transcript-only] +=== Create the knowledge graph Open `workshop-genai/kg_builder.py` and review the code. @@ -82,13 +87,21 @@ A summary of the results will be returned, for example: {'resolver': {'number_of_nodes_to_resolve': 12, 'number_of_created_nodes': 10}} +[.slide.col-2] == Explore the Knowledge Graph -The `SimpleKGPipeline` creates the following default graph model: - -image::images/kg-builder-default-model.svg["a graph model showing (Document)<[:FROM_DOCUMENT]-(Chunk)<-[:FROM_CHUNK]-(Entity)"] +[.col] +==== +The `SimpleKGPipeline` creates the following default graph model. The `Entity` nodes represent the entities extracted from the text chunks. Relevant properties are extracted from the chunk and associated with the entity nodes. +==== + +[.col] +image::images/kg-builder-default-model.svg["a graph model showing (Document)<[:FROM_DOCUMENT]-(Chunk)<-[:FROM_CHUNK]-(Entity)", width=90%] + +[slide.discrete] +== View documents and chunks You can view the documents and chunks created in the graph using the following Cypher query: @@ -103,6 +116,11 @@ RETURN d.path, c.text .Chunk size The default chunk size is greater than the length of the document, so only a single chunk is created. +[slide.discrete.col-2] +== Entities and relationships + +[.col] +==== The extracted entities and the relationships between them can be found using a variable length path query: [source, cypher] @@ -111,8 +129,10 @@ The extracted entities and the relationships between them can be found using a v MATCH p = (c:Chunk)-[*..3]-(e:__Entity__) RETURN p ---- +==== -image::images/entities-graph.png["A graph showing entities extracted from a chunk"] +[.col] +image::images/entities-graph.png["A graph showing entities extracted from a chunk", width=90%] read::Continue[] diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/4-chunk-size/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/4-chunk-size/lesson.adoc index 9897d61ff..32dc6ec5c 100644 --- a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/4-chunk-size/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/4-chunk-size/lesson.adoc @@ -3,10 +3,18 @@ :order: 4 :branch: new-workshop -The graph created by the `SimpleKGPipeline` is based on chunks of text extracted from the documents. By default, the chunk size is quite large, which may result in fewer, larger chunks. The larger the chunk size, the more context the LLM has when extracting entities and relationships, but it may also lead to less granular data. +[.slide.discrete] +== Overview + +The graph created by the `SimpleKGPipeline` is based on chunks of text extracted from the documents. + +By default, the chunk size is quite large, which may result in fewer, larger chunks. + +The larger the chunk size, the more context the LLM has when extracting entities and relationships, but it may also lead to less granular data. In this lesson, you will modify the `SimpleKGPipeline` to use a different chunk size. +[.slide] == Delete the existing graph You will be re-importing the data and modifying the existing graph. To ensure a clean state, you can delete the graph at any time using: @@ -17,7 +25,13 @@ You will be re-importing the data and modifying the existing graph. To ensure a MATCH (n) DETACH DELETE n ---- -== Text Splitter Chunk Size +[.slide-only] +==== +**Continue with the lesson to modify the chunk size.** +==== + +[.transcript-only] +=== Text Splitter Chunk Size To modify the chunk size you will need to create a `FixedSizeSplitter` object and pass it to the `SimpleKGPipeline` when creating the pipeline instance: @@ -51,15 +65,20 @@ include::{repository-raw}/{branch}/workshop-genai/solutions/kg_builder_split.py[ Run the modified pipeline to recreate the knowledge graph with the new chunk size. +[slide.discrete] +== Explore + +You can view the documents and the associated chunk using the following Cypher query: + [source, cypher] .View the documents and chunks ---- MATCH (d:Document)<-[:FROM_DOCUMENT]-(c:Chunk) -RETURN d.path, c.index, c.text +RETURN d.path, c.index, c.text, size(c.text) ORDER BY d.path, c.index ---- -You can experiment with different chunk sizes to see how it affects the entities extracted and the structure of the knowledge graph. +View the entities extracted from each chunk using the following Cypher query: [source, cypher] .View the entities extracted from each chunk @@ -68,6 +87,14 @@ MATCH p = (c:Chunk)-[*..3]-(e:__Entity__) RETURN p ---- +[.transcript-only] +==== +[TIP] +===== +You can experiment with different chunk sizes to see how it affects the entities extracted and the structure of the knowledge graph. +===== +==== + read::Continue[] [.summary] diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/5-define-a-schema/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/5-define-a-schema/lesson.adoc index 86fa32c06..567037cb8 100644 --- a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/5-define-a-schema/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/5-define-a-schema/lesson.adoc @@ -3,14 +3,21 @@ :order: 5 :branch: new-workshop -The knowledge graph you created is unconstrained, meaning that any entity or relationship can be created based on the data extracted from the text. This can lead to graphs that are non-specific and may be difficult to analyze and query. +[.slide.discrete] +== Overview -In this lesson, you will modify the `SimpleKGPipeline` to use a custom schema for the knowledge graph. +The knowledge graph you created is unconstrained, meaning that any entity or relationship can be created based on the data extracted from the text. + +This can lead to graphs that are non-specific and may be difficult to analyze and query. +In this lesson, you will modify the `SimpleKGPipeline` to use a custom schema for the knowledge graph. +[.slide] == Schema -When you provide a schema to the `SimpleKGPipeline`, it will pass this information to the LLM instructing it to only identify those nodes and relationships. This allows you to create a more structured and meaningful knowledge graph. +When you provide a schema to the `SimpleKGPipeline`, it will pass this information to the LLM instructing it to only identify those nodes and relationships. + +This allows you to create a more structured and meaningful knowledge graph. You define a schema by expressing the desired nodes, relationships, or patterns you want to extract from the text. @@ -20,17 +27,26 @@ For example, you might want to extract the following information: * relationships - `WORKS_AT`, `LOCATED_IN` * patterns - `(Person)-[WORKS_AT]->(Organization)`, `(Organization)-[LOCATED_IN]->(Location)` +[.transcript-only] +==== [TIP] .Iterate your schema -==== +===== You don't have to define nodes, relationships, and patterns all at once. You can start with just nodes or just relationships and expand your schema as needed. For example, if you only define nodes, the LLM will find any relationships between those nodes based on the text. This approach can help you iteratively build and refine your knowledge graph schema. +===== ==== -== Nodes +[.slide-only] +==== +**Continue with the lesson to define the schema.** +==== + +[.transcript-only] +=== Nodes Open `workshop-genai/kg_builder_schema.py` and review the code: @@ -83,7 +99,8 @@ MATCH p = (c:Chunk)-[*..3]-(e:__Entity__) RETURN p ---- -== Relationships +[.transcript-only] +=== Relationships You express required relationship types by providing a list of relationship types to the `SimpleKGPipeline`. @@ -111,7 +128,8 @@ include::{repository-raw}/{branch}/workshop-genai/solutions/kg_builder_schema.py Review the `data/genai-fundamentals_1-generative-ai_1-what-is-genai.pdf` PDF document and experiment by creating a set of nodes, relationships and patterns relevant to the data. -== Process all the documents +[.transcript-only] +=== Process all the documents Optionally, when you are happy with the schema, you can modify the program to process all the PDF documents from the link:https://graphacademy.neo4j.com/courses/genai-fundamentals[Neo4j and Generative AI Fundamentals course^]: @@ -138,6 +156,9 @@ include::{repository-raw}/{branch}/workshop-genai/solutions/kg_builder_schema.py When using a free OpenAI API key, you may encounter rate limiting issues when processing multiple documents. You can add a `sleep` between document processing to mitigate this. ==== +[.slide] +== Explore + Review the knowledge graph and observe how the defined schema has influenced the structure of the graph. [source, cypher] diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/6-structured-data/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/6-structured-data/lesson.adoc index 43c39ae0c..5fefbbfd7 100644 --- a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/6-structured-data/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/6-structured-data/lesson.adoc @@ -3,7 +3,12 @@ :order: 6 :branch: new-workshop -The knowledge graph you created is solely based on unstructured data extracted from documents. You may have access to structured data sources such as databases, CSV files, or APIs that contain valuable information relevant to your domain. +[.slide.discrete] +== Overview + +The knowledge graph you created is solely based on unstructured data extracted from documents. + +You may have access to structured data sources such as databases, CSV files, or APIs that contain valuable information relevant to your domain. Combining the structured and unstructured data can enhance the knowledge graph's richness and usefulness. @@ -11,7 +16,8 @@ Combining the structured and unstructured data can enhance the knowledge graph's .Lexical and Domain Graphs The unstructured part of your graph is known as the link:https://graphrag.com/reference/knowledge-graph/lexical-graph/[Lexical Graph], while the structured part is known as the link:https://graphrag.com/reference/knowledge-graph/domain-graph/[Domain Graph]. -== Load from CSV file +[.slide] +== Structured data source The repository contains a sample CSV file `workshop-genai/data/docs.csv` which contains metadata about the lessons the documents were created from. @@ -26,6 +32,14 @@ genai-fundamentals_1-generative-ai_2-considerations.pdf,genai-fundamentals,1-gen You can use the CSV file as input and a structured data source when creating the knowledge graph. +[.slide-only] +==== +**Continue with the lesson to load the structured data.** +==== + +[.transcript-only] +=== Load from CSV file + Open `workshop-genai/kg_structured_builder.py` and review the code. [source, python] @@ -85,6 +99,7 @@ MATCH (n) DETACH DELETE n ---- ==== +[.slide] == Explore the structured data The structured data allows you to query the knowledge graph in new ways. @@ -100,6 +115,9 @@ WHERE toLower(kg.name) CONTAINS "knowledge graph" RETURN DISTINCT toLower(kg.name), l.name, l.url ---- +[.slide.discrete] +== Explore the knowledge graph + The knowledge graph allows you to summarize the content of each lesson by specific categories such as technologies and concepts: [source, cypher] diff --git a/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/2-vector-cypher-retriever/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/2-vector-cypher-retriever/lesson.adoc index ff0d130a8..dd38ecd1e 100644 --- a/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/2-vector-cypher-retriever/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/2-vector-cypher-retriever/lesson.adoc @@ -3,12 +3,16 @@ :order: 2 :branch: new-workshop +[.slide] +== Overview + The chunks in the knowledge graph include vector embeddings that allow for similarity search based on vector distance. -You can create a vector retriever that uses these embeddings to find the most relevant chunks for a given query. +In this lesson you will create a vector retriever that uses these embeddings to find the most relevant chunks for a given query. The retriever can then use the structured and unstructured data in the knowledge graph to provide additional context. +[.slide] == Create the Vector Index You will need to create a vector index on the `Chunk` nodes `embedding` properties: @@ -27,6 +31,9 @@ OPTIONS {indexConfig: { A vector index named `chunkEmbedding` will be created for nodes with a `Chunk` label, indexing the `embedding` property. The index is configured to 1536 dimensions (as provided by the `text-embedding-ada-002` embedding model) and use cosine similarity for distance calculations. +[.slide] +== Search the Vector Index + You can search the vector index by creating an embedding for a search term: [source, cypher] @@ -40,12 +47,16 @@ YIELD node, score RETURN node.text, score ---- +[.transcript-only] +==== [IMPORTANT] .OpenAI token -==== +===== You will need to update the `$token` with your OpenAI API key. +===== ==== +[.slide] == Create a Vector + Cypher GraphRAG pipeline The `neo4j_graphrag` package includes a `VectorCypherRetriever` class that combines vector similarity search with Cypher retrieval. @@ -56,6 +67,14 @@ You can use this retriever to create a `GraphRAG` pipeline to: . Use a Cypher query to add additional information to the context. . Pass the context to an LLM to generate a response to the original query. +[.slide-only] +==== +**Continue with the lesson to create the Vector + Cypher retriever.** +==== + +[.transcript-only] +=== Retriever + Open `workshop-genai/vector_cypher_rag.py` and review the code: [source, python] @@ -90,7 +109,8 @@ You can print the context passed to the LLM by adding the following to the end o include::{repository-raw}/{branch}/workshop-genai/solutions/vector_cypher_rag.py[tag=print_context] ---- -== Retrieval Cypher Query +[.transcript-only] +=== Retrieval Cypher Query The `VectorCypherRetriever` also allows you to define a Cypher query to retrieve additional context from the knowledge graph. @@ -114,7 +134,8 @@ The retrieval query includes additional context relating to technologies and con Experiment asking different questions relating to the knowledge graph such as _"What technologies and concepts support knowledge graphs?"_. -== Generalize entity retrieval +[.transcript-only] +=== Generalize entity retrieval The retriever currently uses the knowledge graph to add additional context related to technologies and concepts. The specific entities allow for targeted retrieval, however you may also want to generalize the retrieval to include all related entities. @@ -154,7 +175,10 @@ include::{repository-raw}/{branch}/workshop-genai/solutions/vector_cypher_rag.py The Cypher functions `reduce` and `coalesce` are used to format the associated entities into readable statements. The `reduce` function adds space characters between the values, and `coalesce` replaces null values with empty strings. ==== -Experiment running the code again with different queries to see how the additional context changes the responses. +[.slide] +== Experiment + +Experiment running the code with different queries to see how the additional context changes the responses. read::Continue[] diff --git a/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/3-text-to-cypher-retriever/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/3-text-to-cypher-retriever/lesson.adoc index 1b3ec7733..28bbf70ff 100644 --- a/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/3-text-to-cypher-retriever/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/3-text-to-cypher-retriever/lesson.adoc @@ -3,12 +3,22 @@ :order: 2 :branch: new-workshop +[.slide.discrete] +== Overview The `Text2CypherRetriever` retriever allows you to create `GraphRAG` pipelines that can answer natural language questions by generating and executing Cypher queries against the knowledge graph. Using text to cypher retrieval can help you get precise information from the knowledge graph based on user questions. For example, how many lessons are in a course, what concepts are covered in a module, or how technologies relate to each other. -== Create a Text2CypherRetriever GraphRAG pipeline +In this lesson, you will create a text to Cypher retriever and use it to answer questions about the data in knowledge graph. + +[.slide-only] +==== +**Continue with the lesson to create the text to Cypher retriever.** +==== + +[.transcript-only] +=== Create a Text2CypherRetriever GraphRAG pipeline Open `workshop-genai/text2cypher_rag.py` and review the code. @@ -51,6 +61,7 @@ The following data was returned from the knowledge graph and passed as context t [RetrieverResultItem(content='', metadata=None)] ---- +[.slide] == Experiment with Different Questions The `Text2CypherRetriever` passed the graph schema to the LLM to help it generate accurate Cypher queries. diff --git a/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/1-what-is-an-agent/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/1-what-is-an-agent/lesson.adoc index 73ae1d6ac..4616c18ae 100644 --- a/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/1-what-is-an-agent/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/1-what-is-an-agent/lesson.adoc @@ -1,12 +1,18 @@ -# What is an Agent? += What is an Agent? :order: 1 :type: lesson -An **AI agent** is a system that combines a Large Language Model (LLM) with the ability to take actions in the real world. Unlike a simple chatbot that can only respond with text, an agent can interact with external systems, retrieve information, and execute tasks autonomously. +[.slide.discrete] +== Definition -## Key Components +An **AI agent** is a system that combines a Large Language Model (LLM) with the ability to take actions in the real world. -**LLM Core**: The agent uses an LLM for reasoning, planning, and decision-making. +Unlike a simple chatbot that can only respond with text, an agent can interact with external systems, retrieve information, and execute tasks autonomously. + +[.slide] +== Key Components + +**LLM**: The agent uses an LLM for reasoning, planning, and decision-making. **Tools**: Agents have access to a set of _tools_ that extend their capabilities beyond text generation. Tools are typically retrievers that can: @@ -18,8 +24,11 @@ An **AI agent** is a system that combines a Large Language Model (LLM) with the **Decision Making**: The agent uses the LLM to analyze tasks, determine which tools are needed, and coordinate their use to achieve goals. -## How Agents Work +[.slide.col-2] +== How Agents Work +[.col] +==== 1. **Receive a task** or query from a user 2. **Plan and reason** using the LLM to break down complex tasks 3. **Select and execute tools** based on what's needed @@ -27,10 +36,13 @@ An **AI agent** is a system that combines a Large Language Model (LLM) with the 5. **Iterate** until the task is complete or provide a final response This autonomous capability makes agents particularly powerful for complex, multi-step tasks that require both reasoning and real-world interaction. +==== -image::./images/agent-process.svg[A flowchart showing the agent process from user input to LLM reasoning, tool selection, tool execution, and final output.] +[.col] +image::./images/agent-process.svg["A flowchart showing the agent process from user input to LLM reasoning, tool selection, tool execution, and final output.", width=90%] -## Creating an Agent +[.slide] +== Creating an Agent You will use Neo4j, Python, and link:https://www.langchain.com/[LangChain^] to build an agent that will use the retrievers you've already learned about as tools. diff --git a/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/2-langchain-agent/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/2-langchain-agent/lesson.adoc index 26116d236..75ab9d0ab 100644 --- a/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/2-langchain-agent/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/2-langchain-agent/lesson.adoc @@ -1,11 +1,26 @@ -# LangChain Agent += LangChain Agent :order: 2 :type: challenge :branch: new-workshop +[.slide] +== Overview + You will be updating a LangChain agent, adding a set of tools, to interact with Neo4j. -## Agent +In this lesson you will: + +* Review the agent code +* Investigate how the agent works +* Experiment with different queries + +[.slide-only] +==== +**Continue with the lesson to create the text to Cypher retriever.** +==== + +[.transcript-only] +=== Agent Open `workshop-genai/agent.py`. @@ -23,7 +38,8 @@ Review the code and try to answer the following questions: Run the agent to see what it does. -## Review +[.transcript-only] +=== Review This program is a LangChain agent that uses a Neo4j database. The agent has access to a single tool which retrieves the database schema. @@ -76,7 +92,8 @@ When you run the agent, you will see: ** The context of the database schema ** The agent's final response -## Experiment +[.slide] +== Experiment Experiment with agent, modify the `query` to ask different questions, for example: diff --git a/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/3-agent-search-lesson/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/3-agent-search-lesson/lesson.adoc index 14ff03822..e73cd5513 100644 --- a/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/3-agent-search-lesson/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/3-agent-search-lesson/lesson.adoc @@ -3,22 +3,24 @@ :type: challenge :branch: new-workshop -You will enhance your agent by adding a search lesson retrieval tool that combines semantic search and vectors with graph traversal using cypher. +[.slide.discrete] +== Overview -The agent decides automatically which tool is best for each question: +In this lesson, you will enhance your agent by adding a search lesson tool using a vector + cypher retriever. -**Schema Tool:** +The agent decide will decide which tool is best for each question: + +**Schema Tool** - to understand the database structure: -- Understanding database structure - "What entities exist in the graph?" - "How are technologies related to concepts?" -**Lesson Retrieval Tool:** +**Search Lesson Tool** - for finding content within the lessons: -- Finding content within lessons - "What are the benefits of using GraphRAG?" - "THow are Knowledge Graphs associated with other technologies?" +[.slide] == Search lessons tool You will modify the `agent.py` code to: @@ -27,7 +29,13 @@ You will modify the `agent.py` code to: . Define a new `tool` function that uses this retriever to search for lesson content. . Add the new tool to the agent's list of available tools. -== Update the agent +[.slide-only] +==== +**Continue with the lesson to create the text to Cypher retriever.** +==== + +[.transcript-only] +=== Update the agent Open `workshop-genai\agent.py` and make the following changes: @@ -95,6 +103,7 @@ include::{repository-raw}/{branch}/workshop-genai/solutions/agent_vector.py[tag= Run the agent. The agent should decide to use the new tool based on the query. +[.slide] ## Experiment Experiment with agent, modify the `query` to ask different questions, for example: diff --git a/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/4-agent-query-db/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/4-agent-query-db/lesson.adoc index fff36f86c..074a8af58 100644 --- a/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/4-agent-query-db/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/4-agent-query-db/lesson.adoc @@ -3,7 +3,10 @@ :type: challenge :branch: new-workshop -You are going to add a tool to your agent so it can query the database directly. +[.slide.discrete] +== Overview + +In this lesson, you will add a tool to your agent so it can query the database directly. The tool will use a `TextToCypherRetriever` retriever to convert user queries into Cypher statements and return the results as context. @@ -13,6 +16,7 @@ Text to Cypher tools are useful for "catch all" scenarios where the user may ask * Performing aggregations or calculations. * Exploring relationships between entities. +[.slide] == Query database tool You will modify the `agent.py` code to: @@ -21,6 +25,14 @@ You will modify the `agent.py` code to: . Define a new `tool` function that uses this retriever to query the database. . Add the new tool to the agent's list of available tools. +[.slide-only] +==== +**Continue with the lesson to create the text to Cypher retriever.** +==== + +[.transcript-only] +=== Modify the agent + Open `workshop-genai\agent.py` and make the following changes: . Instantiate a `llm` that will be used to generate the Cypher. @@ -76,6 +88,7 @@ Run the agent. The agent should use the new database query tool to answer the qu You can see the Cypher query generated in the tool context's metadata. +[.slide] ## Experiment Experiment with agent, modify the `query` to ask different questions, for example: From 799a9a74bee5fe49ce8f74005f4fb368272bb3bf Mon Sep 17 00:00:00 2001 From: Martin O'Hanlon Date: Fri, 28 Nov 2025 13:30:04 +0000 Subject: [PATCH 4/9] updated example --- .../lesson.adoc | 32 ++++++++++++++--- .../1-construction-process/lesson.adoc | 36 +++++++++++++++---- 2 files changed, 56 insertions(+), 12 deletions(-) diff --git a/asciidoc/courses/genai-graphrag-python/modules/1-introduction/lessons/1-knowledge-graph-construction/lesson.adoc b/asciidoc/courses/genai-graphrag-python/modules/1-introduction/lessons/1-knowledge-graph-construction/lesson.adoc index a20252881..bf7ba9240 100644 --- a/asciidoc/courses/genai-graphrag-python/modules/1-introduction/lessons/1-knowledge-graph-construction/lesson.adoc +++ b/asciidoc/courses/genai-graphrag-python/modules/1-introduction/lessons/1-knowledge-graph-construction/lesson.adoc @@ -67,22 +67,44 @@ The _names_ would be the node and relationship identifiers. If you wanted to construct a knowledge graph based on the link:https://en.wikipedia.org/wiki/Neo4j[Neo4j Wikipedia page^], you would: -. **Gather** the text from the page. + -+ image::images/neo4j-wiki.png["A screenshot of the Neo4j wiki page"] + +. **Gather** the text from the page. ++ + Neo4j is a graph database management system (GDBMS) developed by + Neo4j Inc. + + The data elements Neo4j stores are nodes, edges connecting them + and attributes of nodes and edges. Described by its developers + as an ACID-compliant transactional database with native graph + storage and processing... + . Split the text into **chunks**. + - Neo4j is a graph database management system (GDBMS) developed + Neo4j is a graph database management system (GDBMS) developed by Neo4j Inc. + {sp} + - The data elements Neo4j stores are nodes, edges connecting them, - and attributes of nodes and edges... + The data elements Neo4j stores are nodes, edges connecting them + and attributes of nodes and edges. ++ +{sp} ++ + Described by its developers as an ACID-compliant transactional + database with native graph storage and processing... . Generate **embeddings** and **vectors** for each chunk. + [0.21972137987, 0.12345678901, 0.98765432109, ...] ++ +{sp} ++ + [0.34567890123, 0.23456789012, 0.87654321098, ...] ++ +{sp} ++ + [0.45678901234, 0.34567890123, 0.76543210987, ...] . **Extract** the entities and relationships using an **LLM**. + diff --git a/asciidoc/courses/llm-knowledge-graph-construction/modules/2-llm-graph-builder/lessons/1-construction-process/lesson.adoc b/asciidoc/courses/llm-knowledge-graph-construction/modules/2-llm-graph-builder/lessons/1-construction-process/lesson.adoc index 9f05319f1..525a97095 100644 --- a/asciidoc/courses/llm-knowledge-graph-construction/modules/2-llm-graph-builder/lessons/1-construction-process/lesson.adoc +++ b/asciidoc/courses/llm-knowledge-graph-construction/modules/2-llm-graph-builder/lessons/1-construction-process/lesson.adoc @@ -67,9 +67,18 @@ The _names_ would be the node and relationship identifiers. If you wanted to construct a knowledge graph based on the link:https://en.wikipedia.org/wiki/Neo4j[Neo4j Wikipedia page^], you would: -. **Gather** the text from the page. + +image::images/neo4j-wiki.png["A screenshot of the Neo4j wiki page"] + +. **Gather** the text from the page. + -image::images/neo4j-wiki.png[A screenshot of the Neo4j wiki page] + Neo4j is a graph database management system (GDBMS) developed by + Neo4j Inc. + + The data elements Neo4j stores are nodes, edges connecting them + and attributes of nodes and edges. Described by its developers + as an ACID-compliant transactional database with native graph + storage and processing... + . Split the text into **chunks**. + Neo4j is a graph database management system (GDBMS) developed @@ -77,25 +86,38 @@ image::images/neo4j-wiki.png[A screenshot of the Neo4j wiki page] + {sp} + - The data elements Neo4j stores are nodes, edges connecting them, - and attributes of nodes and edges... + The data elements Neo4j stores are nodes, edges connecting them + and attributes of nodes and edges. ++ +{sp} ++ + Described by its developers as an ACID-compliant transactional + database with native graph storage and processing... . Generate **embeddings** and **vectors** for each chunk. + [0.21972137987, 0.12345678901, 0.98765432109, ...] ++ +{sp} ++ + [0.34567890123, 0.23456789012, 0.87654321098, ...] ++ +{sp} ++ + [0.45678901234, 0.34567890123, 0.76543210987, ...] . **Extract** the entities and relationships using an **LLM**. + Send the text to the LLM with an appropriate prompt, for example: + - Your task is to identify the entities and relations requested - with the user prompt from a given text. You must generate the + Your task is to identify the entities and relations requested + with the user prompt from a given text. You must generate the output in a JSON format containing a list with JSON objects. Text: {text} + -Parse the entities and relationships output by the LLM.: +Parse the entities and relationships output by the LLM. + [source, json] ---- From 0981bb153df5b982f787c590fa6e6bf3528dcab6 Mon Sep 17 00:00:00 2001 From: Martin O'Hanlon Date: Fri, 28 Nov 2025 13:37:45 +0000 Subject: [PATCH 5/9] advanced retrieval query --- .../1-vector-cypher-retriever/lesson.adoc | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/asciidoc/courses/genai-graphrag-python/modules/3-retrieval/lessons/1-vector-cypher-retriever/lesson.adoc b/asciidoc/courses/genai-graphrag-python/modules/3-retrieval/lessons/1-vector-cypher-retriever/lesson.adoc index ea4752c5c..3bfaa03e4 100644 --- a/asciidoc/courses/genai-graphrag-python/modules/3-retrieval/lessons/1-vector-cypher-retriever/lesson.adoc +++ b/asciidoc/courses/genai-graphrag-python/modules/3-retrieval/lessons/1-vector-cypher-retriever/lesson.adoc @@ -114,6 +114,50 @@ The retrieval query includes additional context relating to technologies and con Experiment asking different questions relating to the knowledge graph such as _"What technologies and concepts support knowledge graphs?"_. +=== Generalize entity retrieval + +The retriever currently uses the knowledge graph to add additional context related to technologies and concepts. +The specific entities allow for targeted retrieval, however you may also want to generalize the retrieval to include all related entities. + +You can use the node labels and relationship types to create a response that includes details about the entities. + +This cypher query retrieves all related entities between the chunks: + +[source, cypher] +.Related entities +---- +MATCH (c:Chunk)<-[:FROM_CHUNK]-(entity)-[r]->(other)-[:FROM_CHUNK]->() +RETURN DISTINCT + labels(entity)[2], entity.name, entity.type, entity.description, + type(r), + labels(other)[2], other.name, other.type, other.description +---- + +The output uses the node labels, properties, and relationship types to output rows which form statements such as: + +* `Concept` "Semantic Search" `RELATED_TO` `Technology` "Vector Indexes" +* `Technology` "Retrieval Augmented Generation" `HAS_CHALLENGE` "Understanding what the user is asking for and finding the correct information to pass to the LLM"` + +These statements can be used to create additional context for the LLM to generate responses. + +Modify the `retrieval_query` to include all entities associated with the chunk: + +[source, python] +.Enhanced retrieval query with all related entities +---- +include::{repository-raw}/{branch}/genai-graphrag-python/solutions/vector_cypher_rag.py[tag=advanced_retrieval_query] +---- + +[TIP] +.Format the context +==== +The Cypher functions `reduce` and `coalesce` are used to format the associated entities into readable statements. The `reduce` function adds space characters between the values, and `coalesce` replaces null values with empty strings. +==== + +== Experiment + +Experiment running the code with different queries to see how the additional context changes the responses. + [.quiz] == Check your understanding From 373269af92533350c9999c999c241056155f5f4e Mon Sep 17 00:00:00 2001 From: Martin O'Hanlon Date: Fri, 28 Nov 2025 14:38:22 +0000 Subject: [PATCH 6/9] fix tags --- .../4-customisation/lessons/1-loading-data/lesson.adoc | 6 ++++-- .../lessons/5-define-a-schema/lesson.adoc | 2 +- .../4-agents/lessons/3-agent-search-lesson/lesson.adoc | 2 +- .../modules/4-agents/lessons/4-agent-query-db/lesson.adoc | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/asciidoc/courses/genai-graphrag-python/modules/4-customisation/lessons/1-loading-data/lesson.adoc b/asciidoc/courses/genai-graphrag-python/modules/4-customisation/lessons/1-loading-data/lesson.adoc index 4edc5f0b7..0ab2110c8 100644 --- a/asciidoc/courses/genai-graphrag-python/modules/4-customisation/lessons/1-loading-data/lesson.adoc +++ b/asciidoc/courses/genai-graphrag-python/modules/4-customisation/lessons/1-loading-data/lesson.adoc @@ -46,6 +46,7 @@ You can run the custom loader directly to verify that it is working: [source,python] ---- +include::{repository-raw}/{branch}/genai-graphrag-python/examples/data_loader_custom_pdf.py[tag=pdf_file] include::{repository-raw}/{branch}/genai-graphrag-python/examples/data_loader_custom_pdf.py[tag=run_loader] ---- @@ -63,7 +64,7 @@ This example code shows how to create and use the `CustomPDFLoader` in a `Simple [source, python] ---- -include::{repository-raw}/{branch}/genai-graphrag-python/examples/data_loader_custom_pdf.py[tag=**,!run_loader] +include::{repository-raw}/{branch}/genai-graphrag-python/examples/data_loader_custom_pdf.py[tag=**;!run_loader] ---- ==== @@ -92,6 +93,7 @@ You can run the text loader directly to verify that it is working: [source,python] ---- +include::{repository-raw}/{branch}/genai-graphrag-python/examples/data_loader_text_file.py[tag=pdf_file] include::{repository-raw}/{branch}/genai-graphrag-python/examples/data_loader_text_file.py[tag=run_loader] ---- @@ -102,7 +104,7 @@ This example code shows how to create and use the `TextLoader` in a `SimpleKGPip [source, python] ---- -include::{repository-raw}/{branch}/genai-graphrag-python/examples/data_loader_text_file.py[tag=**,!run_loader] +include::{repository-raw}/{branch}/genai-graphrag-python/examples/data_loader_text_file.py[tag=**;!run_loader] ---- ==== diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/5-define-a-schema/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/5-define-a-schema/lesson.adoc index 567037cb8..a1d62a60c 100644 --- a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/5-define-a-schema/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/5-define-a-schema/lesson.adoc @@ -146,7 +146,7 @@ You can run the program to create a knowledge graph based on all the documents u ==== [source, python] ---- -include::{repository-raw}/{branch}/workshop-genai/solutions/kg_builder_schema.py[tag=**,!simple_nodes] +include::{repository-raw}/{branch}/workshop-genai/solutions/kg_builder_schema.py[tag=**;!simple_nodes] ---- ==== diff --git a/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/3-agent-search-lesson/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/3-agent-search-lesson/lesson.adoc index e73cd5513..d58d157d4 100644 --- a/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/3-agent-search-lesson/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/3-agent-search-lesson/lesson.adoc @@ -97,7 +97,7 @@ include::{repository-raw}/{branch}/workshop-genai/solutions/agent_vector.py[tag= ==== [source, python] ---- -include::{repository-raw}/{branch}/workshop-genai/solutions/agent_vector.py[tag=**,!example_queries] +include::{repository-raw}/{branch}/workshop-genai/solutions/agent_vector.py[tag=**;!example_queries] ---- ==== diff --git a/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/4-agent-query-db/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/4-agent-query-db/lesson.adoc index 074a8af58..93bf0e46f 100644 --- a/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/4-agent-query-db/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/4-agent-query-db/lesson.adoc @@ -80,7 +80,7 @@ include::{repository-raw}/{branch}/workshop-genai/solutions/agent_text2cypher.py ==== [source, python] ---- -include::{repository-raw}/{branch}/workshop-genai/solutions/agent_text2cypher.py[tag=**,!example_queries] +include::{repository-raw}/{branch}/workshop-genai/solutions/agent_text2cypher.py[tag=**;!example_queries] ---- ==== From 8b4c325dbf23fea76f6090eeb0305ebfb1702eaf Mon Sep 17 00:00:00 2001 From: Martin O'Hanlon Date: Fri, 28 Nov 2025 14:50:11 +0000 Subject: [PATCH 7/9] in progress update --- .../lessons/4-define-a-schema/lesson.adoc | 66 +++++++++++------- .../lessons/5-structured-data/lesson.adoc | 18 +++-- .../lessons/5-define-a-schema/lesson.adoc | 67 +++++++++++-------- .../lessons/6-structured-data/lesson.adoc | 18 +++-- 4 files changed, 103 insertions(+), 66 deletions(-) diff --git a/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/4-define-a-schema/lesson.adoc b/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/4-define-a-schema/lesson.adoc index 3b739e9f4..c6381d0fb 100644 --- a/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/4-define-a-schema/lesson.adoc +++ b/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/4-define-a-schema/lesson.adoc @@ -66,22 +66,23 @@ You can also provide a description for each node label and associated properties include::{repository-raw}/{branch}/genai-graphrag-python/solutions/kg_builder_schema.py[tag=node_types] ---- -Run the program to create the knowledge graph with the defined nodes. +Recreate the knowledge graph with the defined nodes by: -[TIP] -.Remember to delete the existing graph before re-running the pipeline -==== +. Deleting any existing nodes and relationships. ++ [source, cypher] .Delete the existing graph ---- MATCH (n) DETACH DELETE n ---- -==== +. Running the program ++ +The graph will be constrained to only include the defined node labels. -The graph created will be constrained to only include the defined node labels. +View the entities and chunks in the graph using the following Cypher query: [source, cypher] -.View the entities extracted from each chunk +.Entities and Chunks ---- MATCH p = (c:Chunk)-[*..3]-(e:__Entity__) RETURN p @@ -89,7 +90,7 @@ RETURN p == Relationships -You express required relationship types by providing a list of relationship types to the `SimpleKGPipeline`. +You can define required relationship types by providing a list to the `SimpleKGPipeline`. [source, python] .RELATIONSHIP_TYPES @@ -97,7 +98,7 @@ You express required relationship types by providing a list of relationship type include::{repository-raw}/{branch}/genai-graphrag-python/solutions/kg_builder_schema.py[tag=relationship_types] ---- -You can also provide patterns that define how nodes types are connected by relationships. +You can also describe patterns that define how nodes are connected by relationships. [source, python] .PATTERNS @@ -113,36 +114,49 @@ Nodes, relationships and patterns are all passed to the `SimpleKGPipeline` as th include::{repository-raw}/{branch}/genai-graphrag-python/solutions/kg_builder_schema.py[tag=kg_builder] ---- -Review the `data/genai-fundamentals_1-generative-ai_1-what-is-genai.pdf` PDF document and experiment by creating a set of nodes, relationships and patterns relevant to the data. - -== Process all the documents - -When you are happy with the schema, you can modify the program to process all the PDF documents from the link:https://graphacademy.neo4j.com/courses/genai-fundamentals[Neo4j and Generative AI Fundamentals course^]: - +[%collapsible] +.Reveal the complete code +==== [source, python] -.All PDFs ---- -include::{repository-raw}/{branch}/genai-graphrag-python/solutions/kg_builder_schema.py[tag=all_documents] +include::{repository-raw}/{branch}/genai-graphrag-python/solutions/kg_builder_schema.py[tags=**;!simple_nodes;!all_documents] ---- +==== + +Review the `data/genai-fundamentals_1-generative-ai_1-what-is-genai.pdf` PDF document and experiment by creating a set of `NODES`, `RELATIONSHIPS` and `PATTERNS` relevant to the data. + +Recreate the knowledge graph by: + +. Deleting any existing nodes and relationships. +. Running the program. -You can run the program to create a knowledge graph based on all the documents using the defined schema. [%collapsible] -.Reveal the complete code +.Process all the documents? ==== +In the next lesson, you will add structured data to the knowledge graph, and process all of the documents. + +Optionally, you could modify the program now to process the documents from the `data` directory without the structured data: + [source, python] +.All PDFs ---- -include::{repository-raw}/{branch}/genai-graphrag-python/solutions/kg_builder_schema.py[tag=**,!simple_nodes] +include::{repository-raw}/{branch}/genai-graphrag-python/solutions/kg_builder_schema.py[tag=all_documents] ---- ==== -[TIP] -.OpenAI Rate Limiting? -==== -When using a free OpenAI API key, you may encounter rate limiting issues when processing multiple documents. You can add a `sleep` between document processing to mitigate this. -==== +== Explore + +Review the knowledge graph and observe how the defined schema has influenced the structure of the graph: + +[source, cypher] +.Entities and Chunks +---- +MATCH p = (c:Chunk)-[*..3]-(e:__Entity__) +RETURN p +---- -Review the knowledge graph and observe how the defined schema has influenced the structure of the graph. +View the counts of documents, chunks and entities in the graph: [source, cypher] .Documents, Chunks, and Entity counts diff --git a/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/5-structured-data/lesson.adoc b/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/5-structured-data/lesson.adoc index 3c258cd6c..c27fe7ff8 100644 --- a/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/5-structured-data/lesson.adoc +++ b/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/5-structured-data/lesson.adoc @@ -75,18 +75,22 @@ image::images/kg-builder-structured-model.svg["A data model showing Lesson nodes Run the program to create the knowledge graph with the structured data. -[TIP] -.Clear the graph before importing +[NOTE] +.Remember to delete the existing graph before re-running the pipeline ==== -Remember to clear the database before running the program to avoid inconsistent data. - [source, cypher] -.Delete all +.Delete the existing graph ---- MATCH (n) DETACH DELETE n ---- ==== +[TIP] +.OpenAI Rate Limiting? +==== +When using a free OpenAI API key, you may encounter rate limiting issues when processing multiple documents. You can add a `sleep` between document processing to mitigate this. +==== + == Explore the structured data The structured data allows you to query the knowledge graph in new ways. @@ -108,7 +112,9 @@ The knowledge graph allows you to summarize the content of each lesson by specif .Summarize lesson content ---- MATCH (lesson:Lesson)<-[:PDF_OF]-(:Document)<-[:FROM_DOCUMENT]-(c:Chunk) -RETURN lesson.name, +RETURN + lesson.name, + lesson.url, [ (c)<-[:FROM_CHUNK]-(tech:Technology) | tech.name ] AS technologies, [ (c)<-[:FROM_CHUNK]-(concept:Concept) | concept.name ] AS concepts ---- diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/5-define-a-schema/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/5-define-a-schema/lesson.adoc index a1d62a60c..6a7934f11 100644 --- a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/5-define-a-schema/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/5-define-a-schema/lesson.adoc @@ -78,22 +78,23 @@ You can also provide a description for each node label and associated properties include::{repository-raw}/{branch}/workshop-genai/solutions/kg_builder_schema.py[tag=node_types] ---- -Run the program to create the knowledge graph with the defined nodes. +Recreate the knowledge graph with the defined nodes by: -[TIP] -.Remember to delete the existing graph before re-running the pipeline -==== +. Deleting any existing nodes and relationships. ++ [source, cypher] .Delete the existing graph ---- MATCH (n) DETACH DELETE n ---- -==== +. Running the program ++ +The graph will be constrained to only include the defined node labels. -The graph created will be constrained to only include the defined node labels. +View the entities and chunks in the graph using the following Cypher query: [source, cypher] -.View the entities extracted from each chunk +.Entities and Chunks ---- MATCH p = (c:Chunk)-[*..3]-(e:__Entity__) RETURN p @@ -102,7 +103,7 @@ RETURN p [.transcript-only] === Relationships -You express required relationship types by providing a list of relationship types to the `SimpleKGPipeline`. +You can define required relationship types by providing a list to the `SimpleKGPipeline`. [source, python] .RELATIONSHIP_TYPES @@ -110,7 +111,7 @@ You express required relationship types by providing a list of relationship type include::{repository-raw}/{branch}/workshop-genai/solutions/kg_builder_schema.py[tag=relationship_types] ---- -You can also provide patterns that define how nodes types are connected by relationships. +You can also describe patterns that define how nodes are connected by relationships. [source, python] .PATTERNS @@ -126,40 +127,50 @@ Nodes, relationships and patterns are all passed to the `SimpleKGPipeline` as th include::{repository-raw}/{branch}/workshop-genai/solutions/kg_builder_schema.py[tag=kg_builder] ---- -Review the `data/genai-fundamentals_1-generative-ai_1-what-is-genai.pdf` PDF document and experiment by creating a set of nodes, relationships and patterns relevant to the data. - -[.transcript-only] -=== Process all the documents - -Optionally, when you are happy with the schema, you can modify the program to process all the PDF documents from the link:https://graphacademy.neo4j.com/courses/genai-fundamentals[Neo4j and Generative AI Fundamentals course^]: - +[%collapsible] +.Reveal the complete code +==== [source, python] -.All PDFs ---- -include::{repository-raw}/{branch}/workshop-genai/solutions/kg_builder_schema.py[tag=all_documents] +include::{repository-raw}/{branch}/workshop-genai2/solutions/kg_builder_schema.py[tags=**;!simple_nodes;!all_documents] ---- +==== + +Review the `data/genai-fundamentals_1-generative-ai_1-what-is-genai.pdf` PDF document and experiment by creating a set of `NODES`, `RELATIONSHIPS` and `PATTERNS` relevant to the data. + +Recreate the knowledge graph by: + +. Deleting any existing nodes and relationships. +. Running the program. -You can run the program to create a knowledge graph based on all the documents using the defined schema. [%collapsible] -.Reveal the complete code +.Process all the documents? ==== +In the next lesson, you will add structured data to the knowledge graph, and process all of the documents. + +Optionally, you could modify the program now to process the documents from the `data` directory without the structured data: + [source, python] +.All PDFs ---- -include::{repository-raw}/{branch}/workshop-genai/solutions/kg_builder_schema.py[tag=**;!simple_nodes] +include::{repository-raw}/{branch}/workshop-genai2/solutions/kg_builder_schema.py[tag=all_documents] ---- ==== -[TIP] -.OpenAI Rate Limiting? -==== -When using a free OpenAI API key, you may encounter rate limiting issues when processing multiple documents. You can add a `sleep` between document processing to mitigate this. -==== - [.slide] == Explore -Review the knowledge graph and observe how the defined schema has influenced the structure of the graph. +Review the knowledge graph and observe how the defined schema has influenced the structure of the graph: + +[source, cypher] +.Entities and Chunks +---- +MATCH p = (c:Chunk)-[*..3]-(e:__Entity__) +RETURN p +---- + +View the counts of documents, chunks and entities in the graph: [source, cypher] .Documents, Chunks, and Entity counts diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/6-structured-data/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/6-structured-data/lesson.adoc index 5fefbbfd7..ff89411e1 100644 --- a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/6-structured-data/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/6-structured-data/lesson.adoc @@ -87,18 +87,22 @@ image::images/kg-builder-structured-model.svg["A data model showing Lesson nodes Run the program to create the knowledge graph with the structured data. -[TIP] -.Clear the graph before importing +[NOTE] +.Remember to delete the existing graph before re-running the pipeline ==== -Remember to clear the database before running the program to avoid inconsistent data. - [source, cypher] -.Delete all +.Delete the existing graph ---- MATCH (n) DETACH DELETE n ---- ==== +[TIP] +.OpenAI Rate Limiting? +==== +When using a free OpenAI API key, you may encounter rate limiting issues when processing multiple documents. You can add a `sleep` between document processing to mitigate this. +==== + [.slide] == Explore the structured data @@ -124,7 +128,9 @@ The knowledge graph allows you to summarize the content of each lesson by specif .Summarize lesson content ---- MATCH (lesson:Lesson)<-[:PDF_OF]-(:Document)<-[:FROM_DOCUMENT]-(c:Chunk) -RETURN lesson.name, +RETURN + lesson.name, + lesson.url, [ (c)<-[:FROM_CHUNK]-(tech:Technology) | tech.name ] AS technologies, [ (c)<-[:FROM_CHUNK]-(concept:Concept) | concept.name ] AS concepts ---- From a517d38e413b55ce9c012aa0ee65591618aa6d7c Mon Sep 17 00:00:00 2001 From: Martin O'Hanlon Date: Fri, 28 Nov 2025 14:59:50 +0000 Subject: [PATCH 8/9] in progress updates --- .../lessons/4-define-a-schema/lesson.adoc | 12 ++++++------ .../lessons/5-define-a-schema/lesson.adoc | 18 +++++++++--------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/4-define-a-schema/lesson.adoc b/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/4-define-a-schema/lesson.adoc index c6381d0fb..908ee3423 100644 --- a/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/4-define-a-schema/lesson.adoc +++ b/asciidoc/courses/genai-graphrag-python/modules/2-knowledge-graph-pipeline/lessons/4-define-a-schema/lesson.adoc @@ -66,16 +66,16 @@ You can also provide a description for each node label and associated properties include::{repository-raw}/{branch}/genai-graphrag-python/solutions/kg_builder_schema.py[tag=node_types] ---- -Recreate the knowledge graph with the defined nodes by: +Recreate the knowledge graph with the defined nodes: -. Deleting any existing nodes and relationships. +. Delete any existing nodes and relationships. + [source, cypher] .Delete the existing graph ---- MATCH (n) DETACH DELETE n ---- -. Running the program +. Run the program + The graph will be constrained to only include the defined node labels. @@ -125,10 +125,10 @@ include::{repository-raw}/{branch}/genai-graphrag-python/solutions/kg_builder_sc Review the `data/genai-fundamentals_1-generative-ai_1-what-is-genai.pdf` PDF document and experiment by creating a set of `NODES`, `RELATIONSHIPS` and `PATTERNS` relevant to the data. -Recreate the knowledge graph by: +Recreate the knowledge graph: -. Deleting any existing nodes and relationships. -. Running the program. +. Delete any existing nodes and relationships. +. Run the program. [%collapsible] diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/5-define-a-schema/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/5-define-a-schema/lesson.adoc index 6a7934f11..6b8df3a92 100644 --- a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/5-define-a-schema/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/5-define-a-schema/lesson.adoc @@ -78,17 +78,17 @@ You can also provide a description for each node label and associated properties include::{repository-raw}/{branch}/workshop-genai/solutions/kg_builder_schema.py[tag=node_types] ---- -Recreate the knowledge graph with the defined nodes by: +Recreate the knowledge graph with the defined nodes: -. Deleting any existing nodes and relationships. +. Delete any existing nodes and relationships. + [source, cypher] .Delete the existing graph ---- MATCH (n) DETACH DELETE n ---- -. Running the program -+ +. Run the program ++ The graph will be constrained to only include the defined node labels. View the entities and chunks in the graph using the following Cypher query: @@ -132,16 +132,16 @@ include::{repository-raw}/{branch}/workshop-genai/solutions/kg_builder_schema.py ==== [source, python] ---- -include::{repository-raw}/{branch}/workshop-genai2/solutions/kg_builder_schema.py[tags=**;!simple_nodes;!all_documents] +include::{repository-raw}/{branch}/workshop-genai/solutions/kg_builder_schema.py[tags=**;!simple_nodes;!all_documents] ---- ==== Review the `data/genai-fundamentals_1-generative-ai_1-what-is-genai.pdf` PDF document and experiment by creating a set of `NODES`, `RELATIONSHIPS` and `PATTERNS` relevant to the data. -Recreate the knowledge graph by: +Recreate the knowledge graph: -. Deleting any existing nodes and relationships. -. Running the program. +. Delete any existing nodes and relationships. +. Run the program. [%collapsible] @@ -154,7 +154,7 @@ Optionally, you could modify the program now to process the documents from the ` [source, python] .All PDFs ---- -include::{repository-raw}/{branch}/workshop-genai2/solutions/kg_builder_schema.py[tag=all_documents] +include::{repository-raw}/{branch}/workshop-genai/solutions/kg_builder_schema.py[tag=all_documents] ---- ==== From 7e72a43f8c7cf5cf70f4372b0a0b55c25f882e16 Mon Sep 17 00:00:00 2001 From: Martin O'Hanlon Date: Mon, 1 Dec 2025 07:29:45 +0000 Subject: [PATCH 9/9] extension activities --- .../lessons/7-create-a-kg/lesson.adoc | 28 ++++++++++++++++++ .../2-vector-cypher-retriever/lesson.adoc | 2 +- .../lessons/4-agent-query-db/lesson.adoc | 17 +++++++++-- .../lessons/5-create-an-agent/lesson.adoc | 29 +++++++++++++++++++ 4 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/7-create-a-kg/lesson.adoc create mode 100644 asciidoc/courses/workshop-genai2/modules/4-agents/lessons/5-create-an-agent/lesson.adoc diff --git a/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/7-create-a-kg/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/7-create-a-kg/lesson.adoc new file mode 100644 index 000000000..35dccd514 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/2-knowledge-graph-construction/lessons/7-create-a-kg/lesson.adoc @@ -0,0 +1,28 @@ += Create your own knowledge graph +:type: challenge +:order: 7 + +[.slide.discrete] +== Overview + +In this optional challenge, you will apply what you have learned to create your own knowledge graph. + +You should: + +. Find a data set of documents that you want to create a knowledge graph from. This could be a collection of PDFs, text files, or any other text-based documents. ++ +Try searching kaggle for link:https://www.kaggle.com/datasets?search=pdf[open PDF datasets^], for example the link:https://www.kaggle.com/datasets/snehaanbhawal/resume-dataset[Resume Dataset^]. +. Use the `SimpleKGPipeline` to load the documents, split the text into chunks, extract entities, and create the knowledge graph in Neo4j. +. Load any associated structured data if available to enrich the knowledge graph. +. Query the knowledge graph to explore the data and extract insights. + +You can come back to this challenge at any time. + +read::Complete[] + +[.summary] +== Lesson Summary + +In this lesson, you applied what you had learned to create your own knowledge graph. + +In the next module, you will create retrievers to query the knowledge graph. \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/2-vector-cypher-retriever/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/2-vector-cypher-retriever/lesson.adoc index dd38ecd1e..50481536d 100644 --- a/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/2-vector-cypher-retriever/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/3-retrieval/lessons/2-vector-cypher-retriever/lesson.adoc @@ -8,7 +8,7 @@ The chunks in the knowledge graph include vector embeddings that allow for similarity search based on vector distance. -In this lesson you will create a vector retriever that uses these embeddings to find the most relevant chunks for a given query. +In this lesson, you will create a vector retriever that uses these embeddings to find the most relevant chunks for a given query. The retriever can then use the structured and unstructured data in the knowledge graph to provide additional context. diff --git a/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/4-agent-query-db/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/4-agent-query-db/lesson.adoc index 93bf0e46f..822abbdee 100644 --- a/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/4-agent-query-db/lesson.adoc +++ b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/4-agent-query-db/lesson.adoc @@ -91,7 +91,7 @@ You can see the Cypher query generated in the tool context's metadata. [.slide] ## Experiment -Experiment with agent, modify the `query` to ask different questions, for example: +Experiment with the agent, modify the `query` to ask different questions, for example: * `"Each lesson is part of a module. How many lessons are in each module?"` * `"Search the graph and return a list of challenges."` @@ -104,6 +104,19 @@ Asking questions related to the graph schema or lesson content should still use You may find that the agent will execute multiple tools to answer some questions. +[.transcript-only] +==== +[TIP] +.Specific tools +===== +You can create multiple Text to Cypher tools that are specialized for different types of queries. + +For example, you could create one tool for querying lessons and another for querying technologies. + +Each tool could have different prompt templates or examples to help the LLM generate more accurate Cypher for specific domains. +===== +==== + read::Continue[] [.summary] @@ -111,4 +124,4 @@ read::Continue[] In this lesson, you added a query database tool to your agent using a text to Cypher retriever. -Congratulations on completing the Agents module! \ No newline at end of file +In the next optional challenge, you will create your own agent with a custom set of tools. \ No newline at end of file diff --git a/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/5-create-an-agent/lesson.adoc b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/5-create-an-agent/lesson.adoc new file mode 100644 index 000000000..fc73e86f2 --- /dev/null +++ b/asciidoc/courses/workshop-genai2/modules/4-agents/lessons/5-create-an-agent/lesson.adoc @@ -0,0 +1,29 @@ += Create an agent +:type: challenge +:order: 5 + +[.slide.discrete] +== Overview + +In this optional challenge, you will apply what you have learned to create an agent with a custom set of tools. + +You should: + +. Use either the lesson knowledge graph or link:../../2-knowledge-graph-construction/7-create-a-kg[your own knowledge graph^] from the previous challenge. +. Create an agent using the example code from this workshop. +. Define a set of tools that the agent can use to answer user queries based on the knowledge graph, these could include: +** Cypher query tools that run Cypher queries against the graph and return the results +** Vector + Cypher retrievers to semantically search the knowledge graph. +** Text to Cypher tools to query specific data from the graph. +. Test the agent with different user queries to see how it uses the tools to provide answers. + +You can come back to this challenge at any time. + +read::Complete[] + +[.summary] +== Lesson Summary + +In this lesson, you applied what you have learned throughout the workshop to create your agent to interact with a knowledge graph. + +Congratulations on completing the workshop. \ No newline at end of file