Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 58 additions & 0 deletions data-fundamentals-dev-rel/connect-to-env/connect-to-env.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# Connect to the Development Environment

## Introduction

In this lab, you'll learn how to access the web-based JupyterLab development environment, where you can write and run Python code directly in your browser. You'll log in, and get ready to start coding in a hands-on environment.

Estimated Time: 5 minutes

### Objectives

* Login to JupyterLab server
* Run Jupyter Notebook

## Task 1: Login to JupyterLab Server

1. To navigate to the development environment, click **View Login Info**. Copy the Development IDE Login Password. Click the Start Development IDE link.

![Open Development Environment](./images/dev-env.png =50%x*)

2. Paste in the Development IDE Login Password that you copied in the previous step. Click **Login**.

![JupyterLab server login](./images/jupyter-login.png " ")

1. Select **`notebooks/data_fundamentals`** directory to open it. Double click on file **`data_fundamentals_lab.ipynb`** and it will open in the the panel on the right.

![Open Launcher](./images/launcher.png " ")

## Task 2: Learn to use the components of Unified Model Theory (UMT)

You will use a Jupyter Notebook in a JupyterLab server to build and test database queries. If you are new to notebooks, the following tips will help you get started and work smoothly.

1. **Executing Code Blocks**: You can run code in two simple ways: press **Shift+Enter** to execute and move to the next cell, or click the **Play/Execute** button in the menu bar at the top of this tab. Both methods work interchangeably.

2. **Block Types**: Instructions and code are separated into **their own blocks**. Instructions are in markdown (like this cell), while code is in executable Python blocks. If you accidentally run an instruction block, it’ll just skip to the next cell—no harm done!

3. **Running Indicators**: When you run a code block, its label changes from `[ ]` (empty) or `[1]` (a number) to `[*]`. The asterisk (`*`) means it’s processing. Wait until it switches back to a number (e.g., `[2]`) before moving on, ensuring the operation is complete.

4. **Output & Warnings**: Below each code cell, output appears during and after execution. This can include results, visualizations, or messages. Warnings may show up—these are usually informational, such as notices about deprecated features. Unless an error halts execution, users can continue without making changes. If you see a error, review the code for any issues and make changes accordingly and try executing the cell again.

**NOTE:** Look for **<span style="color: green;">green text</span>** as in the image below where it says "<span style="color: green;">Connected successfully!</span>". Many cells will have different message, but the final successful one should always be green. When you see the green text, the cell completed. For some longer running cells, this is important to watch for.

![JupyterLab cell example](./images/block.png " ")

## Task 3: Hybrid Vector Search lab section. **(Optional)**

In the lab, there is a section that is hidden by default. If there is extra time, you are welcome to unhide it and complete this section about Hybrid AI search (vector search) where you see how Oracle's Hybrid Vector Search combines traditional lexical search with vector search.

In this task, you can weight each search type differently depending on the application needs and see the output depending on the settings.

## Conclusion

In this lab you logged into the **IDE Development Environment** for Jupyter Labs. You launched the **`data_fundamentals_lab.ipynb`** notebook and worked through the notebook to learn about the fundamental data building blocks for AI application development.

Make sure you take the quiz by clicking on **Take the quiz!** link on the left nav bar.

## Acknowledgements
* **Authors** - Kirk Kirkconnell
* **Last Updated By/Date** - Kirk Kirkconnell, June 2026
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
53 changes: 53 additions & 0 deletions data-fundamentals-dev-rel/introduction/introduction.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Introduction

## About this Workshop

In this lab, we'll interact with a data set from an application named Prism CityOps. It's an application used by the city of Kirkland to monitor and manage city infrastrucuter such as ongoing maintenance, active monitoring via IoT devices, crew dispatch, record keeping, and more.

You'll utilize a Jupyter Notebook with real Python code, completing real activities, and using aspects of Unified Model Theory (UMT) to present data in various forms, from JSON documents, to graph traversals with visual of those relationships, and perform AI search via vector data, all within Oracle AI Database.

Estimated Workshop Time: 50 - 60 minutes

✅ **Overview of Labs**

In the next labs, you'll connect to your JupyterLab environment and work through a data fundamentals notebook built around the Prism CityOps dataset. You'll inspect the same operational data through relational tables, JSON, graph, and vector representations, then use Oracle AI Database to generate embeddings, run Vector Search, and compare search patterns. Labs 1 and 2 will be in the morning session, and Labs 3 and 4 will be completed in the afternoon sessions.

* **Lab 1 – Connect to your environment**
Log in to the JupyterLab IDE where you’ll run Python code.

* **Lab 2 – Explore the Prism data foundation**
Open the data fundamentals notebook, verify your database connection, and explore the Prism data model. You'll query relational tables, inspect JSON document-style data, follow graph relationships with SQL/PGQ, and see how criticality, maintenance logs, sensors, assets, and incidents connect across the model.

* **Lab 3 – Generate and search vector embeddings**
Use an in-database ONNX embedding model to create vectors without moving data out of Oracle AI Database. You'll insert new maintenance information, vectorize it, inspect the vector index, and run both broad and targeted similarity searches for incidents, procedures, and operational context.

* **Lab 4 – Combine data shapes in unified AI-ready queries**
Bring the data model together with SQL that returns table output, JSON output, graph-driven results, and vector search matches from the same database. If time allows, you'll also try optional Hybrid Vector Search to compare vector-only, text-only, and combined ranking strategies.

By the end, you'll understand how Oracle AI Database can support AI application development by keeping operational data, graph relationships, JSON structures, embeddings, vector indexes, and search logic close together in one platform.

### Objectives

* Connect to Oracle AI Database from JupyterLab and verify the lab environment is ready.
* Explore the Prism CityOps data model across relational tables, JSON data, and graph relationships.
* Use SQL and SQL/PGQ to analyze infrastructure assets, incidents, sensors, maintenance logs, and operational criticality.
* Generate vector embeddings inside Oracle AI Database with an in-database ONNX model.
* Inspect vector indexes and run similarity searches over operational records and procedures.
* Combine relational, JSON, graph, and vector search results in AI-ready SQL queries.
* Compare vector-only, text-only, and hybrid search strategies when completing the optional Hybrid Vector Search section.

### Prerequisites

This lab assumes you have:

* An Oracle account to submit your LiveLabs Sandbox reservation.
* Basic knowledge of coding and Python.
* Basic knowledge of Oracle Database, i.e., how to run queries.

## Learn More

* [Oracle AI Database Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/26/)

## Acknowledgements
* **Authors** - Kirk Kirkconnell
* **Last Updated By/Date** - Kirk Kirkconnell, June 2026
Binary file added data-fundamentals-dev-rel/quiz/images/badge.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
84 changes: 84 additions & 0 deletions data-fundamentals-dev-rel/quiz/quiz.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# Quiz

## Introduction

Test your knowledge of building a RAG and agentic! This quiz covers key concepts from the lab including Vector Search, embeddings, Python integration, and AI-powered recommendation systems.

Estimated Time: 5 minutes

```quiz-config
passing: 80
badge: images/badge.png
```

### Objectives

* Pass the quiz and get your "Data fundamentals for AI application developement" skills badge!

### Quiz Questions

```quiz score
Q: What is the primary purpose of RAG (Retrieval-Augmented Generation)?
- To replace the need for a database entirely
- To build a better augmented
* To retrieve and attach physical hardware components to an LLM, thus making your own ghost in the shell. Major Kusanagi would be so proud
* To augment an LLM's responses by retrieving and providing relevant data that exists outside its training knowledge

Q: True or False: Oracle AI Database enables you to create vector embeddings directly within the database.
* True
- False
- Shmaybe

Q: Which Python library is used to connect to Oracle AI Database in the hands-on lab?
- psycopg2
* oracledb
- pymongo
- sqlalchemy
> The oracledb library can be easily grabbed using `pip install oracledb`

Q: What is the default category of vector indexes in Oracle AI Database?
- IVF (Inverted File)
* HNSW (Hierarchical Navigable Small Worlds )
- Token Ring
- OSON

Q: What's likely the best data type to store embeddings in Oracle AI Database?
- NUMBER
- BLOBOFREGRET
* VECTOR
- VARCHAR2

Q: What does the VECTOR_CHUNKS function do?
- It's a hidden function that creates fresh, chunky dog food ondemand
- Encrypts sensitive customer data
* Splits text into smaller chunks to generate vector embeddings that can be used with vector indexes or hybrid vector indexes.
- Creates backup copies of database tables in bite-sized chunks

Q: Which database feature combines data from one or more relational tables, but projects the data as a JSON document?
* JSON Relational Duality View
- Materialized View
- Temporary Table
- Stored Procedure
> JSON Relational Duality Views enable you to interact with data in one or more relational tables, but read and write as native JSON document.

Q: True or False: You can query JSON, relational tables, traverse graphs, and search vector data all in one SQL statement?
* True
- False
> It's true! In Oracle AI database, you can combine multiple data modalities as you need to.

Q: What's the likely data type you should store a JSON document in Oracle?
- CLOB
- VARCHAR2
* JSON
> Your default for storing JSON should likely be a JSON data type, but it really depends on how large of a document you're storing and your use case.

Q: How does Cosine similarity measure distance?
- It gets out a tape measure and...
- It measures concise distance between vectors
* It measures the angle between vectors

```

## Acknowledgements
* **Authors** - Kirk Kirkconnell
* **Last Updated By/Date** - Kirk Kirkconnell, January 2026
63 changes: 63 additions & 0 deletions data-fundamentals-dev-rel/workshops/sandbox/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Oracle LiveLabs gives you access to Oracle's products to run a wide variety of labs and workshops; allowing you to experience our best technology, live!">
<title>Oracle LiveLabs</title>

<script src="https://oracle-livelabs.github.io/common/redwood-hol/js/jquery-1.11.0.min.js"></script>
<script src="https://oracle-livelabs.github.io/common/redwood-hol/js/jquery-ui-1.10.4.custom.js"></script>
<script src="https://oracle-livelabs.github.io/common/redwood-hol/js/main.min.js"></script>

<link rel="stylesheet" href="https://oracle-livelabs.github.io/common/redwood-hol/css/style.min.css" />
<link rel="shortcut icon" href="https://oracle-livelabs.github.io/common/redwood-hol/img/favicon.ico" />

</head>

<body>
<header class="hol-Header" role="banner">
<div class="hol-Header-wrap">
<div class="hol-Header-logo"><span>Oracle LiveLabs</span></div>
<a href="https://livelabs.oracle.com" target="_blank" id="livelabs" title="Oracle LiveLabs"></a>
<div class="hol-Header-actions">
<button id="openNav" class="hol-Header-button hol-Header-button--menu rightNav" aria-label="Open Menu"
title="Open Menu">
<span class="hol-Header-toggleIcon"></span>
</button>
</div>
</div>
</header>

<div id="container">
<div id="leftNav">
<div id="toc"></div>
</div>
<div id="contentBox">
<main class="hol-Content" id="module-content"></main>
</div>
</div>

<footer class="hol-Footer">
<a class="hol-Footer-topLink" href="#top">Return to Top</a>
<div id="footer-banner"><div class="footer-row">
<div class="footer-content"><ul class="footer-links">
<li><a href="https://docs.oracle.com/pls/topic/lookup?ctx=en/legal&id=cpyr" target="_blank" aria-label="Open a new window to Oracle legal notices" data-lbl="copyright">© Oracle</a></li>
<li><a href="https://www.oracle.com/corporate/index.html" target="_blank" aria-label="Open a new window to learn more about oracle" data-lbl="about-oracle">About Oracle</a></li>
<li><a href="https://www.oracle.com/corporate/contact/" target="_blank" aria-label="Open a new window to contact oracle" data-lbl="contact-us">Contact Us</a></li>
<li class="footer-links-break"></li>
<li><a href="https://docs.oracle.com/en/browseall.html" target="_blank" aria-label="Open a new window to products a-z" data-lbl="products-a-z">Products A-Z</a></li>
<li><a href="https://www.oracle.com/legal/privacy/" target="_blank" aria-label="Open a new window to read more about Oracle terms of use and privacy" data-lbl="terms-of-use-and-privacy">Terms of Use & Privacy</a></li>
<li><a href="https://www.oracle.com/legal/privacy/privacy-policy.html#11" target="_blank" aria-label="Open a new window to read more about managing Oracle cookie preferences" data-lbl="cookie-preferences">Cookie Preferences</a></li>
<li><a href="https://www.oracle.com/legal/privacy/marketing-cloud-data-cloud-privacy-policy.html#adchoices" target="_blank" aria-label="Open a new window to ad choices" data-lbl="ad-choices">Ad Choices</a></li>
<li class="footer-links-break"></li><li class="last"><a href="https://docs.oracle.com/pls/topic/lookup?ctx=en/legal&id=cpyr" target="_blank" aria-label="Open a new window to Oracle legal notices" data-lbl="copyright">© Oracle</a></li>
</ul>
</div>
</div>
</div>
</footer>
</body>

</html>
26 changes: 26 additions & 0 deletions data-fundamentals-dev-rel/workshops/sandbox/manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"workshoptitle": "From Zero to Hero: Data Fundamentals of AI Application Development",
"help": "livelabs-help-database_us@oracle.com",
"tutorials": [
{
"title": "Introduction",
"description": "The Introduction is always first. The title and contents menu title match for the Introduction.",
"filename": "../../introduction/introduction.md"
},
{
"title": "Connect to the Development Environment",
"description": "This is a step-by-step guide showcasing how the hands-on lab instance is navigated",
"filename": "../../connect-to-env/connect-to-env.md"
},
{
"title": "Take the quiz!",
"description": "This is a step-by-step guide showcasing how the hands-on lab instance is navigated",
"filename": "../../quiz/quiz.md"
},
{
"title": "Need Help?",
"description": "Solutions to Common Problems and Directions for Receiving Live Help",
"filename": "https://livelabs.oracle.com/cdn/common/labs/need-help/need-help-freetier.md"
}
]
}
56 changes: 56 additions & 0 deletions dev-rel-agent-memory/connect-to-env/connect-to-env.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Connect to the Development Environment

## Introduction

In this lab, you'll learn how to access the web-based JupyterLab development environment, where you can write and run Python code directly in your browser. You'll log in, and get ready to start coding in a hands-on environment.

Estimated Time: 5 minutes

### Objectives

* Login to JupyterLab server
* Run Jupyter Notebook

## Task 1: Login to JupyterLab Server and open the correct notebook

Estimated Time: 2 minutes

1. To navigate to the development environment, click **View Login Info**. Copy the Development IDE Login Password. Click the Start Development IDE link.

![Open Development Environment](./images/dev-env.png =50%x*)

2. Paste in the Development IDE Login Password that you copied in the previous step. Click **Login**.

![JupyterLab server login](./images/jupyter-login.png " ")

1. Select **`notebooks/agent_memory`** directory to open it. Double click on one of two files **`notebook_student_oci.ipynb`**, and **`notebook_student_ollama.ipynb`** depending on what the instructor tells you, and that file will open in the the panel on the right.

![Open Launcher](./images/launcher.png " ")

## Task 2: Learn to utilize Agent Memory in your AI apps

You will use a Jupyter Notebook in a JupyterLab server to build and test database queries. If you are new to notebooks, the following tips will help you get started and work smoothly.

Estimated Time: 35-45 minutes

1. **Executing Code Blocks**: You can run code in two simple ways: press **Shift+Enter** to execute and move to the next cell, or click the **Play/Execute** button in the menu bar at the top of this tab. Both methods work interchangeably.

2. **Block Types**: Instructions and code are separated into **their own blocks**. Instructions are in markdown (like this cell), while code is in executable Python blocks. If you accidentally run an instruction block, it’ll just skip to the next cell—no harm done!

3. **Running Indicators**: When you run a code block, its label changes from `[ ]` (empty) or `[1]` (a number) to `[*]`. The asterisk (`*`) means it’s processing. Wait until it switches back to a number (e.g., `[2]`) before moving on, ensuring the operation is complete.

4. **Output & Warnings**: Below each code cell, output appears during and after execution. This can include results, visualizations, or messages. Warnings may show up—these are usually informational, such as notices about deprecated features. Unless an error halts execution, users can continue without making changes. If you see a error, review the code for any issues and make changes accordingly and try executing the cell again.

**NOTE:** Look for **<span style="color: green;">green text</span>** as in the image below where it says "<span style="color: green;">Connected successfully!</span>". Many cells will have different message, but the final successful one should always be green. When you see the green text, the cell completed. For some longer running cells, this is important to watch for.

![JupyterLab cell example](./images/block.png " ")

## Conclusion

In this lab you logged into the **IDE Development Environment** for Jupyter Labs. You launched the **`notebook_student_*.ipynb`** notebook and worked through the notebook to learn about using Agent Memory with your AI application development.

Make sure you take the quiz by clicking on **Take the quiz!** link on the left nav bar.

## Acknowledgements
* **Authors** - Kirk Kirkconnell
* **Last Updated By/Date** - Kirk Kirkconnell, June 2026
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading