|
| 1 | +# Slides Sync Proposal |
| 2 | + |
| 3 | +The slide decks in `graphacademy/slides/` were written against an earlier lab numbering. The labs have since been reorganized and three new labs added (5, 6, 7). This proposal brings the slides in sync with the current lab structure without deleting any existing content. |
| 4 | + |
| 5 | +## Current State |
| 6 | + |
| 7 | +### Slide folders → Lab mapping |
| 8 | + |
| 9 | +| Slide Folder | Covers | Current Lab(s) | |
| 10 | +|---|---|---| |
| 11 | +| `lab-1-neo4j-aura` (slides 01-07) | Neo4j Aura, GenAI limits, RAG, GraphRAG, SEC filings, Aura Agents, Fabric Workload | Lab 0, Lab 1, Lab 2 | |
| 12 | +| `lab-2-foundry` (slides 01-03) | What is an Agent, MCP, Microsoft Foundry | Lab 3 | |
| 13 | +| _(no slides)_ | — | Lab 4 (Start Codespace — setup only, no slides needed) | |
| 14 | +| _(no slides)_ | — | **Lab 5 (Foundry Agents — MAF basics, tools, context providers)** | |
| 15 | +| _(no slides)_ | — | **Lab 6 (Context Providers — Neo4j context providers)** | |
| 16 | +| _(no slides)_ | — | **Lab 7 (Agent Memory — neo4j-agent-memory)** | |
| 17 | +| `lab-5-knowledge-graph` (slides 01-07) | GenAI, RAG, KG pipeline, schema, chunking, entity resolution, vectors | Lab 8 | |
| 18 | +| `lab-6-retrievers` (slides 01-04) | Retrievers overview, vector, vector+cypher, text2cypher | Lab 10, Lab 11 | |
| 19 | +| `lab-7-agents` (slides 01-05) | Retrievers→agents, MAF, building agent, design patterns, congratulations | Lab 9 | |
| 20 | + |
| 21 | +### Gaps |
| 22 | + |
| 23 | +1. **Labs 5, 6, 7 have no slides.** These are the new MAF hands-on labs. |
| 24 | +2. **Slide folder names don't match current lab numbers.** `lab-5-knowledge-graph` is actually Lab 8, etc. |
| 25 | +3. **The "Microsoft Agent Framework" slide (`lab-7-agents/02`)** uses an older API surface (`AzureAIClient`, `ChatAgent`, `create_agent`, threads) that doesn't match the current MAF API (`AzureOpenAIResponsesClient`, `as_agent()`, `run_stream()`, sessions, context providers). |
| 26 | +4. **No slides cover context providers or agent memory** — the two key concepts introduced in the new labs. |
| 27 | + |
| 28 | +## Proposed Changes |
| 29 | + |
| 30 | +### 1. Add new slide folder: `lab-5-foundry-agents` (2 decks) |
| 31 | + |
| 32 | +Covers Lab 5 — introduces MAF with hands-on tools and context providers. |
| 33 | + |
| 34 | +**01-microsoft-agent-framework-slides.md** (~8 slides) |
| 35 | +- What is the Microsoft Agent Framework and why it exists (LLMs are stateless) |
| 36 | +- Core concepts: Agents, Tools, Context Providers, Sessions, Middleware |
| 37 | +- The agent lifecycle: context providers `before_run()` → LLM invocation → `after_run()` |
| 38 | +- Tools vs context providers (when each runs, best for) |
| 39 | +- Key API: `AzureOpenAIResponsesClient`, `as_agent()`, `run_stream()` |
| 40 | +- Architecture diagram (same as Lab 5 README) |
| 41 | + |
| 42 | +**02-tools-and-context-providers-slides.md** (~6 slides) |
| 43 | +- Defining tools: Python functions with `Annotated` + `Field` type annotations |
| 44 | +- How the agent reads function name + docstring to decide tool selection |
| 45 | +- Context providers: `BaseContextProvider` with `before_run()` / `after_run()` |
| 46 | +- `SessionContext`: `extend_instructions()` and `extend_messages()` |
| 47 | +- `AgentSession` and persistent state across turns |
| 48 | +- Extracting structured data with Pydantic in `after_run()` |
| 49 | + |
| 50 | +### 2. Add new slide folder: `lab-6-context-providers` (2 decks) |
| 51 | + |
| 52 | +Covers Lab 6 — Neo4j context providers from `agent-framework-neo4j`. |
| 53 | + |
| 54 | +**01-neo4j-context-provider-slides.md** (~8 slides) |
| 55 | +- What is `Neo4jContextProvider` (from `agent-framework-neo4j`) |
| 56 | +- How `before_run()` works: recent messages → concatenate → search index → format results → inject |
| 57 | +- Three search modes: vector (cosine similarity), fulltext (BM25), hybrid (combined) |
| 58 | +- Comparison table of search modes (when to use each) |
| 59 | +- Graph enrichment: `retrieval_query` parameter for Cypher traversal after index match |
| 60 | +- Retriever selection logic table (index_type × retrieval_query → retriever class) |
| 61 | +- Result formatting: `[Score: 0.892] [company: Apple Inc] ...` |
| 62 | +- Configuration: `top_k`, `message_history_count`, `context_prompt`, `filter_stop_words` |
| 63 | + |
| 64 | +**02-graph-enrichment-slides.md** (~5 slides) |
| 65 | +- Why vector search alone isn't enough (returns chunks, not knowledge) |
| 66 | +- The two-step process: index search finds nodes → Cypher traversal enriches with relationships |
| 67 | +- Example retrieval query: match company → optional match risks, products → return enriched context |
| 68 | +- Before/after comparison: plain chunk text vs graph-enriched context with company, ticker, risks, products |
| 69 | +- Connecting it to Lab 5: context providers inject this automatically — no tool calls needed |
| 70 | + |
| 71 | +### 3. Add new slide folder: `lab-7-agent-memory` (2 decks) |
| 72 | + |
| 73 | +Covers Lab 7 — persistent agent memory from `neo4j-agent-memory`. |
| 74 | + |
| 75 | +**01-agent-memory-overview-slides.md** (~8 slides) |
| 76 | +- The problem: agents forget everything between sessions |
| 77 | +- What is `neo4j-agent-memory` — graph-native persistent memory |
| 78 | +- Three memory types: |
| 79 | + - **Short-term**: conversation messages with embeddings (semantic search over past messages) |
| 80 | + - **Long-term**: entities, facts (SPO triples), preferences (extracted from conversations) |
| 81 | + - **Reasoning**: traces of past tool calls, success/failure, duration (learn from experience) |
| 82 | +- Memory types comparison table (what it stores, how it helps) |
| 83 | +- Neo4j graph model: Conversation → Message, Entity, Preference, Fact, ReasoningTrace → ReasoningStep → ToolCall |
| 84 | +- How memory differs from Lab 6 context providers: static knowledge graph vs dynamic memory that grows |
| 85 | + |
| 86 | +**02-memory-tools-slides.md** (~6 slides) |
| 87 | +- Memory context provider: `before_run()` retrieves from all three types, `after_run()` stores + extracts entities |
| 88 | +- Memory tools: the six callable tools (`search_memory`, `remember_preference`, `recall_preferences`, `search_knowledge`, `remember_fact`, `find_similar_tasks`) |
| 89 | +- Context provider vs memory tools: automatic background recall vs explicit agent-controlled operations |
| 90 | +- Combining both: context provider for passive recall + tools for active memory management |
| 91 | +- Entity extraction: automatic identification of people, organizations, concepts from messages |
| 92 | +- Entity deduplication: configurable strategies (exact, fuzzy, semantic, composite) |
| 93 | + |
| 94 | +### 4. Rename slide folders to match current lab numbers |
| 95 | + |
| 96 | +Rename the existing folders so the slide directory names align with the lab numbers: |
| 97 | + |
| 98 | +| Current Folder | New Folder | Lab | |
| 99 | +|---|---|---| |
| 100 | +| `lab-1-neo4j-aura` | `lab-1-neo4j-aura` | Labs 0-2 (no change) | |
| 101 | +| `lab-2-foundry` | `lab-3-foundry` | Lab 3 | |
| 102 | +| _(new)_ | `lab-5-foundry-agents` | Lab 5 | |
| 103 | +| _(new)_ | `lab-6-context-providers` | Lab 6 | |
| 104 | +| _(new)_ | `lab-7-agent-memory` | Lab 7 | |
| 105 | +| `lab-5-knowledge-graph` | `lab-8-knowledge-graph` | Lab 8 | |
| 106 | +| `lab-6-retrievers` | `lab-10-retrievers` | Lab 10 | |
| 107 | +| `lab-7-agents` | `lab-9-agents` | Lab 9 | |
| 108 | + |
| 109 | +### 5. Update existing `lab-7-agents/02-microsoft-agent-framework-slides.md` |
| 110 | + |
| 111 | +The current slide uses an older API surface that no longer matches the workshop code: |
| 112 | + |
| 113 | +| Current (old API) | Should Be (current API) | |
| 114 | +|---|---| |
| 115 | +| `AzureAIClient` | `AzureOpenAIResponsesClient` | |
| 116 | +| `client.create_agent()` | `client.as_agent()` | |
| 117 | +| `ChatAgent` | Agent created via `as_agent()` | |
| 118 | +| Threads (`get_new_thread()`, `thread=thread`) | Sessions (`AgentSession`, `session.state`) | |
| 119 | + |
| 120 | +This slide should be updated to match the API used in Lab 5 notebooks. The conceptual content (tool selection, docstrings, ReAct loop, instructions, streaming) is all still correct — only the code examples and API names need updating. |
| 121 | + |
| 122 | +### 6. Update `graphacademy/slides/README.md` |
| 123 | + |
| 124 | +Update the README to: |
| 125 | +- Add the three new slide sections (Lab 5, Lab 6, Lab 7) |
| 126 | +- Update folder references if renamed |
| 127 | +- Update the presentation order to include the new decks |
| 128 | +- Update slide statistics (total count) |
| 129 | + |
| 130 | +**No existing content in the README should be deleted** — only additions and reference updates. |
| 131 | + |
| 132 | +## What Is NOT Changing |
| 133 | + |
| 134 | +- All existing slide content is preserved (no deletions) |
| 135 | +- Lab 1 slides (01-07) stay as-is |
| 136 | +- Lab 2/Foundry slides (01-03) stay as-is |
| 137 | +- Lab 5/Knowledge Graph slides (01-07) stay as-is |
| 138 | +- Lab 6/Retrievers slides (01-04) stay as-is |
| 139 | +- Lab 7/Agents slides (01, 03, 04, 05) stay as-is |
| 140 | +- Lab 7/Agents slide 02 gets API updates only (conceptual content unchanged) |
| 141 | +- The `clean-html.sh` script and `images/` directory are untouched |
| 142 | + |
| 143 | +## Summary |
| 144 | + |
| 145 | +| Action | Count | |
| 146 | +|---|---| |
| 147 | +| New slide decks to write | 6 | |
| 148 | +| Folders to rename | 3 | |
| 149 | +| Existing slides to update | 1 (API names only) | |
| 150 | +| Existing slides deleted | 0 | |
| 151 | +| README updates | 1 | |
0 commit comments