From c84fecc98a04faa20cd783ea08dbeb1bc7f48fd2 Mon Sep 17 00:00:00 2001 From: Linda Foinding Date: Thu, 5 Mar 2026 16:45:14 -0500 Subject: [PATCH 1/6] WMS:12008 AI4U Retail Lab --- .../agents-vs-zero-shot.md | 251 ++++++++++++++++++ .../retail/enterprise-data/enterprise-data.md | 148 +++++++++++ .../four-memory-types/four-memory-types.md | 167 ++++++++++++ .../retail/getting-started/getting_started.md | 182 +++++++++++++ .../how-agents-execute/how-agents-execute.md | 198 ++++++++++++++ .../retail/how-agents-plan/how-agents-plan.md | 155 +++++++++++ .../retail/introduction/introduction.md | 105 ++++++++ .../learning-loop/ai-database-competence.md | 180 +++++++++++++ .../tools-safety-control/agents-and-tools.md | 216 +++++++++++++++ .../retail/what-is-agent/what-is-agent.md | 207 +++++++++++++++ .../where-memory-lives/where-memory-lives.md | 151 +++++++++++ .../why-agents-need-memory.md | 143 ++++++++++ .../retail/workshops/sandbox/index.html | 65 +++++ .../retail/workshops/sandbox/manifest.json | 66 +++++ 14 files changed, 2234 insertions(+) create mode 100644 ai4u/industries/retail/agents-vs-zero-shot/agents-vs-zero-shot.md create mode 100644 ai4u/industries/retail/enterprise-data/enterprise-data.md create mode 100644 ai4u/industries/retail/four-memory-types/four-memory-types.md create mode 100644 ai4u/industries/retail/getting-started/getting_started.md create mode 100644 ai4u/industries/retail/how-agents-execute/how-agents-execute.md create mode 100644 ai4u/industries/retail/how-agents-plan/how-agents-plan.md create mode 100644 ai4u/industries/retail/introduction/introduction.md create mode 100644 ai4u/industries/retail/learning-loop/ai-database-competence.md create mode 100644 ai4u/industries/retail/tools-safety-control/agents-and-tools.md create mode 100644 ai4u/industries/retail/what-is-agent/what-is-agent.md create mode 100644 ai4u/industries/retail/where-memory-lives/where-memory-lives.md create mode 100644 ai4u/industries/retail/why-agents-need-memory/why-agents-need-memory.md create mode 100644 ai4u/industries/retail/workshops/sandbox/index.html create mode 100644 ai4u/industries/retail/workshops/sandbox/manifest.json diff --git a/ai4u/industries/retail/agents-vs-zero-shot/agents-vs-zero-shot.md b/ai4u/industries/retail/agents-vs-zero-shot/agents-vs-zero-shot.md new file mode 100644 index 000000000..73c9d7b6e --- /dev/null +++ b/ai4u/industries/retail/agents-vs-zero-shot/agents-vs-zero-shot.md @@ -0,0 +1,251 @@ +# Why Agents Beat Zero-Shot Prompts + +## Introduction + +Zero-shot prompts describe processes. Seer Equity Retail needs automation that actually completes them. In this lab you will compare a plain LLM prompt, a Select AI query, and a governed agent that updates retail submission data in real time. + +### Scenario + +Marcus Patel, Senior Authenticator, wants to move a batch of submissions. He needs to know which items remain in `AUTHENTICATING` status and mark any finished pieces as `GRADED`. The chatbot explains steps. The agent with tools executes them. + +### Objectives + +- Create a `SAMPLE_ITEMS` table with retail-specific status values. +- Register lookup and update PL/SQL functions as tools on `inventory_profile`. +- Contrast zero-shot chat, Select AI, and SELECT AI AGENT behavior. +- Demonstrate guardrails so only inventory roles can update statuses. + +## Task 1: Import the Lab Notebook + +Open `lab2-agents-vs-zero-shot.json` in Oracle Machine Learning and run the cells as instructed. + +## Task 2: Experience Zero-Shot Prompting + +```sql + +EXEC DBMS_CLOUD_AI.SET_PROFILE('inventory_profile'); +SELECT AI CHAT How do I check the status of a collector submission; +SELECT AI CHAT What is the status of submission ITEM-30214; +SELECT AI CHAT Update submission ITEM-30214 to graded; + +``` + +Observe that the responses describe actions but do not access Seer Equity data. + +## Task 3: Build Sample Items for Testing + +```sql + +CREATE TABLE sample_items ( + submission_id VARCHAR2(20) PRIMARY KEY, + submitter VARCHAR2(100), + item_type VARCHAR2(40), + status VARCHAR2(30), + declared_value NUMBER(12,2), + condition_grade NUMBER(3,1), + last_update_ts DATE DEFAULT SYSDATE +); + +COMMENT ON COLUMN sample_items.status IS 'SUBMITTED, AUTHENTICATING, GRADED, LISTED, or REJECTED.'; + +INSERT INTO sample_items VALUES ('ITEM-40101', 'Alex Martinez', 'Sports Card', 'AUTHENTICATING', 7200, 9.1, SYSDATE - 2); +INSERT INTO sample_items VALUES ('ITEM-40102', 'Maria Santos', 'Vintage Comic', 'GRADED', 2100, 8.3, SYSDATE - 4); +INSERT INTO sample_items VALUES ('ITEM-40103', 'James Wilson', 'Memorabilia', 'SUBMITTED', 360, 6.2, SYSDATE - 1); +INSERT INTO sample_items VALUES ('ITEM-40104', 'Priya Desai', 'Limited Sneaker', 'LISTED', 980, 8.8, SYSDATE - 3); +COMMIT; + +``` + +## Task 4: Register Lookup and Update Tools + +```sql + +CREATE OR REPLACE FUNCTION lookup_sample_item(p_submission_id VARCHAR2) RETURN CLOB AS + v_payload CLOB; +BEGIN + SELECT json_object( + 'submission_id' VALUE submission_id, + 'status' VALUE status, + 'item_type' VALUE item_type, + 'declared_value' VALUE declared_value, + 'condition_grade' VALUE condition_grade, + 'last_update_ts' VALUE TO_CHAR(last_update_ts, 'YYYY-MM-DD HH24:MI:SS') + ) + INTO v_payload + FROM sample_items + WHERE submission_id = p_submission_id; + RETURN v_payload; +EXCEPTION + WHEN NO_DATA_FOUND THEN + RETURN json_object('error' VALUE 'Submission not found'); +END; +/ + +CREATE OR REPLACE FUNCTION update_sample_item_status( + p_submission_id VARCHAR2, + p_new_status VARCHAR2 +) RETURN VARCHAR2 AS +BEGIN + UPDATE sample_items + SET status = p_new_status, + last_update_ts = SYSDATE + WHERE submission_id = p_submission_id; + + IF SQL%ROWCOUNT = 0 THEN + RETURN 'No submission updated'; + END IF; + + RETURN 'Status updated to ' || p_new_status; +END; +/ + +``` + +Expose the functions as governed tools. + +```sql + +BEGIN + DBMS_CLOUD_AI_AGENT.CREATE_TOOL( + tool_name => 'ITEM_LOOKUP_TOOL', + attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"inventory_profile"}}', + description => 'Retrieves submission details for Seer Equity retail items.' + ); + + DBMS_CLOUD_AI_AGENT.CREATE_TOOL( + tool_name => 'ITEM_UPDATE_TOOL', + attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"inventory_profile"}}', + description => 'Updates submission status when policy allows.' + ); +END; +/ + +``` + +## Task 5: Compare Interaction Modes + +### Zero-Shot + +```sql + +SELECT AI CHAT Mark ITEM-40101 as graded; + +``` + +### Select AI + +```sql + +SELECT AI USING PROFILE inventory_profile 'What is the status of submission ITEM-40101?'; + +``` + +### Agent Execution + +```sql + +BEGIN + DBMS_CLOUD_AI_AGENT.CREATE_AGENT( + agent_name => 'RETAIL_STATUS_AGENT', + attributes => json_object( + 'role' VALUE 'You verify and update Seer Equity retail submissions. Use tools, cite statuses, and log outcomes.', + 'instructions' VALUE 'Only update when the collector or policy requires it; otherwise report the current state.' + ) + ); +END; +/ + +BEGIN + DBMS_CLOUD_AI_AGENT.CREATE_TASK( + task_name => 'STATUS_UPDATE_TASK', + attributes => json_object( + 'prompt' VALUE 'Request: {query}', + 'tools' VALUE json_array('ITEM_LOOKUP_TOOL', 'ITEM_UPDATE_TOOL') + ) + ); +END; +/ + +BEGIN + DBMS_CLOUD_AI_AGENT.CREATE_TEAM( + team_name => 'STATUS_TEAM', + attributes => json_object( + 'agents' VALUE json_array(json_object('name' VALUE 'RETAIL_STATUS_AGENT', 'task' VALUE 'STATUS_UPDATE_TASK')), + 'process' VALUE 'sequential' + ) + ); +END; +/ + +EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('STATUS_TEAM'); +SELECT AI AGENT 'Check submission ITEM-40101. If it is still authenticating, mark it as graded and confirm the change.'; + +``` + +Verify the update happened: + +```sql + +SELECT submission_id, status FROM sample_items WHERE submission_id = 'ITEM-40101'; + +``` + +## Task 6: Enforce Guardrails + +Allow updates for inventory specialists only. + +```sql + +GRANT UPDATE ON sample_items TO inventory_agent_user; +REVOKE UPDATE ON sample_items FROM authentication_agent_user; + +``` + +Impersonate the authentication profile to confirm updates are blocked. + +```sql + +EXEC DBMS_CLOUD_AI_AGENT.SET_PROFILE('authentication_profile'); +SELECT AI AGENT 'Attempt to update submission ITEM-40102 to AUTHENTICATING.'; + +``` + +The attempt should fail, proving role separation. + +## Task 7: Log the Outcome + +```sql + +INSERT INTO item_workflow_log (log_id, submitted_by, action, item_reference, status_note) +VALUES ( + sys_guid(), + 'INVENTORY_AGENT', + 'LAB2_AGENT_UPDATE', + 'ITEM-40101', + 'Agent changed status from AUTHENTICATING to GRADED using authorized tool' +); + +COMMIT; + +``` + +Query recent tool history: + +```sql + +SELECT tool_name, TO_CHAR(start_date, 'HH24:MI:SS') AS called_at + FROM user_ai_agent_tool_history + ORDER BY start_date DESC + FETCH FIRST 5 ROWS ONLY; + +``` + +## Summary + +Zero-shot prompting narrates instructions. Select AI retrieves data. Governed agents check conditions, invoke tools, and update records while leaving audit trails. Seer Equity Retail uses this pattern to keep authentication pipelines moving without losing control. + +## Workshop Plan (Generated) +- Contrast zero-shot prompts vs governed agents through Marcus Patel’s batch authentication workflow. +- Update sample data and tool registrations (`ITEM_LOOKUP_TOOL`, `ITEM_UPDATE_TOOL`) with Seer Equity Retail naming. +- Demonstrate guardrails restricting updates to inventory roles while authenticators remain read-only. +- Capture audit log inserts that document automated transitions from AUTHENTICATING to GRADED states. diff --git a/ai4u/industries/retail/enterprise-data/enterprise-data.md b/ai4u/industries/retail/enterprise-data/enterprise-data.md new file mode 100644 index 000000000..91a124216 --- /dev/null +++ b/ai4u/industries/retail/enterprise-data/enterprise-data.md @@ -0,0 +1,148 @@ +# Enterprise Data Integration + +## Introduction + +Retail valuations must cite official pricing policies, SKU catalogs, and provenance standards. This lab connects Seer Equity agents to enterprise data so recommendations come from governed sources, not guesses. + +### Scenario + +Marcus Patel needs to justify pricing for ITEM-40105. He must reference the official `PRICING_POLICIES` table and loyalty history before finalizing the recommendation. + +### Objectives + +- Load policy excerpts, SKU catalog entries, and fraud rules into dedicated tables. +- Register retrieval tools that expose enterprise data to agents with read-only access. +- Demonstrate RAG prompts that quote policy IDs and clauses within responses. + +## Task 1: Review Enterprise Tables + +Ensure the schema contains: + +- `PRICING_POLICIES` – official pricing tiers, maximum discounts, provenance requirements. +- `REFERENCE_KNOWLEDGE` – curated policy excerpts for RAG. +- `LOYALTY_HISTORY` – record of loyalty adjustments and exception approvals. + +```sql + +SELECT table_name FROM user_tables + WHERE table_name IN ('PRICING_POLICIES', 'REFERENCE_KNOWLEDGE', 'LOYALTY_HISTORY') + ORDER BY table_name; + +``` + +## Task 2: Seed Policy Content + +```sql + +INSERT INTO pricing_policies (policy_id, title, policy_text, max_discount, applies_to) +VALUES ('POL-PLAT', 'Platinum Collector Policy', 'Platinum collectors receive up to 20% loyalty discount on authenticated items under $10,000. Expert appraisal required above $5,000.', 0.20, 'Platinum Tier'); + +INSERT INTO pricing_policies (policy_id, title, policy_text, max_discount, applies_to) +VALUES ('POL-GOLD', 'Gold Collector Policy', 'Gold collectors receive up to 10% loyalty discount on items under $5,000. Standard appraisal required above $2,500.', 0.10, 'Gold Tier'); + +COMMIT; + +``` + +## Task 3: Populate Reference Knowledge + +```sql + +INSERT INTO reference_knowledge (reference_id, topic, content) +VALUES ( + sys_guid(), + 'Routing Tiers', + json_object( + 'auto_list' VALUE 'Items under $500 with condition ≥7.0 and rarity COMMON auto-list.', + 'standard' VALUE 'Items $500–$5,000 or rarity LIMITED require standard appraisal.', + 'expert' VALUE 'Items over $5,000 or rarity GRAIL require expert appraisal with provenance attachments.' + ) +); + +COMMIT; + +``` + +## Task 4: Register Enterprise Data Tools + +```sql + +BEGIN + DBMS_CLOUD_AI_AGENT.CREATE_TOOL( + tool_name => 'POLICY_LOOKUP_TOOL', + attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"authentication_profile"}}', + description => 'Retrieve official pricing policies and discount thresholds.' + ); + + DBMS_CLOUD_AI_AGENT.CREATE_TOOL( + tool_name => 'REFERENCE_LOOKUP_TOOL', + attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"authentication_profile"}}', + description => 'Fetch curated policy excerpts and routing guidance for RAG prompts.' + ); +END; +/ + +``` + +## Task 5: Update Authentication Agent + +```sql + +BEGIN + DBMS_CLOUD_AI_AGENT.UPDATE_AGENT( + agent_name => 'AUTHENTICATION_AGENT', + attributes => json_object( + 'role' VALUE 'You authenticate submissions and provide policy-backed valuations.', + 'instructions' VALUE 'Cite PRICING_POLICIES policy_id and relevant clauses for each recommendation.' + ) + ); +END; +/ + +BEGIN + DBMS_CLOUD_AI_AGENT.UPDATE_TASK( + task_name => 'AUTHENTICATION_TASK', + attributes => json_object( + 'prompt' VALUE 'Answer authentication questions backed by policy data. +Request: {query}', + 'tools' VALUE json_array('POLICY_LOOKUP_TOOL', 'REFERENCE_LOOKUP_TOOL', 'MEMORY_LOOKUP_TOOL') + ) + ); +END; +/ + +``` + +## Task 6: Ask for a Policy-Cited Recommendation + +```sql + +SELECT ai_response + FROM TABLE(DBMS_CLOUD_AI.ASK_AGENT( + agent_name => 'AUTHENTICATION_AGENT', + prompt => 'Provide price guidance for submission ITEM-40105, including applicable policy IDs and justification for the proposed tier.' )); + +``` + +Verify the response references `POL-PLAT`, loyalty discount limits, and routing tiers. + +## Task 7: Audit Policy Usage + +```sql + +SELECT tool_name, SUBSTR(output, 1, 120) AS excerpt + FROM user_ai_agent_tool_history + WHERE tool_name IN ('POLICY_LOOKUP_TOOL', 'REFERENCE_LOOKUP_TOOL') + ORDER BY start_date DESC + FETCH FIRST 5 ROWS; + +``` + +## Summary + +Enterprise data integration ensures every valuation cites the same source of truth. Agents no longer guess; they pull policy IDs, discount thresholds, and provenance requirements straight from governed tables. + +## Workshop Plan (Generated) +- Integrate Seer Equity pricing policies, SKU catalogs, and fraud rules into RAG examples. +- Demonstrate certified data sources powering price guidance, restocking fees, and policy citations. +- Highlight alignment with retail megalab scenario around high-value electronics and apparel returns. diff --git a/ai4u/industries/retail/four-memory-types/four-memory-types.md b/ai4u/industries/retail/four-memory-types/four-memory-types.md new file mode 100644 index 000000000..efb3d7427 --- /dev/null +++ b/ai4u/industries/retail/four-memory-types/four-memory-types.md @@ -0,0 +1,167 @@ +# The Four Types of Agent Memory + +## Introduction + +Seer Equity Retail relies on context, facts, decisions, and reference knowledge to deliver consistent authentication experiences. This lab maps each memory type to concrete collectibles scenarios. + +### Memory Types + +1. **Context Memory** – Active session details like current submission and routing status. +2. **Fact Memory** – Persistent collector preferences, loyalty perks, and contact requirements. +3. **Decision Memory** – Prior authentication outcomes, rationale, and human involvement. +4. **Reference Memory** – Policy excerpts, grading standards, and routing thresholds. + +### Objectives + +- Populate each memory type with retail-focused examples. +- Expose helper functions to insert and retrieve memory content. +- Verify agents reference all four types when answering collector questions. + +## Task 1: Context Memory + +```sql + +INSERT INTO agent_memory (memory_id, agent_id, memory_type, content) +VALUES ( + sys_guid(), + 'INVENTORY_AGENT', + 'CONTEXT', + json_object( + 'session_id' VALUE 'CALL-2026-0219-01', + 'active_submission' VALUE 'ITEM-40101', + 'current_status' VALUE 'AUTHENTICATING', + 'collector' VALUE 'Alex Martinez' + )); + +COMMIT; + +``` + +## Task 2: Fact Memory + +```sql + +INSERT INTO agent_memory (memory_id, agent_id, memory_type, content) +VALUES ( + sys_guid(), + 'INVENTORY_AGENT', + 'FACT', + json_object( + 'fact' VALUE 'Alex Martinez has a 20% loyalty discount and prefers email updates', + 'category' VALUE 'loyalty_preference', + 'collector' VALUE 'Alex Martinez' + )); + +COMMIT; + +``` + +## Task 3: Decision Memory + +```sql + +INSERT INTO decision_memory (decision_id, submission_id, collector_name, decision_summary, decided_by) +VALUES ( + sys_guid(), + 'ITEM-39990', + 'Alex Martinez', + 'Expert appraisal graded the rookie card 9.2 near mint and recommended listing at $6,800 citing POL-PLAT clause 3.', + 'AUTHENTICATION_AGENT' +); + +COMMIT; + +``` + +## Task 4: Reference Memory + +```sql + +INSERT INTO reference_knowledge (reference_id, topic, content) +VALUES ( + sys_guid(), + 'Authentication Standards', + json_object( + 'grading_scale' VALUE 'Use 1.0–10.0 scale; items under 5.0 trigger expert review.', + 'provenance' VALUE 'Rare items require two provenance documents before listing.', + 'loyalty_rules' VALUE 'Platinum collectors retain minimum 15% discount even when flagged for manual review.' + ) +); + +COMMIT; + +``` + +## Task 5: Helper Function + +```sql + +CREATE OR REPLACE FUNCTION get_memory_bundle(p_collector VARCHAR2) RETURN CLOB AS + v_context CLOB; + v_fact CLOB; + v_decision CLOB; + v_reference CLOB; +BEGIN + SELECT json_arrayagg(content) + INTO v_context + FROM agent_memory + WHERE memory_type = 'CONTEXT' + AND content."collector" = p_collector; + + SELECT json_arrayagg(content) + INTO v_fact + FROM agent_memory + WHERE memory_type = 'FACT' + AND content."collector" = p_collector; + + SELECT json_arrayagg(json_object( + 'submission_id' VALUE submission_id, + 'summary' VALUE decision_summary, + 'decided_by' VALUE decided_by, + 'decided_ts' VALUE TO_CHAR(decided_ts, 'YYYY-MM-DD HH24:MI:SS') + )) + INTO v_decision + FROM decision_memory + WHERE collector_name = p_collector; + + SELECT json_arrayagg(content) + INTO v_reference + FROM reference_knowledge + WHERE topic = 'Authentication Standards'; + + RETURN json_object( + 'context' VALUE NVL(v_context, json_array()), + 'facts' VALUE NVL(v_fact, json_array()), + 'decisions' VALUE NVL(v_decision, json_array()), + 'references' VALUE NVL(v_reference, json_array()) + ); +END; +/ + +``` + +## Task 6: Agent Usage + +```sql + +SELECT ai_response + FROM TABLE(DBMS_CLOUD_AI.ASK_AGENT( + agent_name => 'AUTHENTICATION_AGENT', + prompt => 'Gather all memories about Alex Martinez, including context, facts, decisions, and policy references.' )); + +``` + +The response should mention: +- Active submission and status (context) +- Loyalty discount and communication preference (fact) +- Past expert appraisal decision (decision) +- Relevant policy clauses from reference knowledge (reference) + +## Summary + +Understanding memory categories ensures future labs can enrich embeddings, precedence search, and governance controls without ambiguity. + +## Workshop Plan (Generated) +- Illustrate episodic, semantic, procedural, and reflexive memories using Seer Equity retail events. +- Connect each memory type to corresponding tables (`DECISION_MEMORY`, `REFERENCE_KNOWLEDGE`) and lab artifacts. +- Include scenarios where agents blend memory types to explain valuations and routing choices. diff --git a/ai4u/industries/retail/getting-started/getting_started.md b/ai4u/industries/retail/getting-started/getting_started.md new file mode 100644 index 000000000..e3def76ba --- /dev/null +++ b/ai4u/industries/retail/getting-started/getting_started.md @@ -0,0 +1,182 @@ +# Getting Started + +## Introduction + +Welcome to the Seer Equity Retail Intelligence edition of AI4U. This lab prepares your Autonomous Database tenancy so the remaining labs can execute inventory intake, appraisal routing, provenance logging, and governed memory workflows without interruption. You will import notebooks, configure Select AI profiles, load the retail schema, and verify role-based access for intake and authentication teams. + +## Objectives + +- Import the Seer Equity Retail notebooks for every lab. +- Configure Select AI profiles that a) surface submission, pricing, and memory tables for inventory specialists and b) expose appraisal, precedent, and audit artifacts for authenticators. +- Load seed data covering submissions, loyalty tiers, pricing policies, routing logs, and memory stores. +- Validate user accounts, wallets, and privileges for `INVENTORY_AGENT_USER` and `AUTHENTICATION_AGENT_USER`. +- Smoke-test routing and memory packages so later labs focus on the scenario, not setup. + +## Task 1: Import the Retail Notebooks + +Each lab has a companion Oracle Machine Learning notebook under the `industries/retail/notebooks` directory in the AI4U repository. + +1. Open Oracle Machine Learning from your Autonomous Database console. +2. Click **Notebooks**, then **Import**. +3. Choose **Git** and paste the retail notebooks URL: + + ```text + + https://github.com/davidastart/database/tree/main/ai4u/industries/retail/notebooks + + ``` + +4. Import `lab1-item-agent.json` through `lab10-governance.json`. These notebooks mirror the markdown instructions and contain all code cells. + +## Task 2: Confirm Wallets and Credentials + +Separation of duties starts with database accounts. + +```sql + +SELECT username, account_status + FROM dba_users + WHERE username IN ('INVENTORY_AGENT_USER', 'AUTHENTICATION_AGENT_USER'); + +``` + +- Unlock the accounts if necessary with provided lab credentials. +- Download and configure the wallet if your tenancy requires it so notebooks can authenticate with distinct users. + +```sql + +ALTER USER inventory_agent_user IDENTIFIED BY "" ACCOUNT UNLOCK; +ALTER USER authentication_agent_user IDENTIFIED BY "" ACCOUNT UNLOCK; + +``` + +## Task 3: Load the Retail Schema + +Run `setup-retail-schema.ipynb`. It creates the core tables for every lab: + +- `ITEM_SUBMISSIONS`, `ITEM_REQUESTS`, `ITEM_WORKFLOW_LOG` – intake to decision workflow +- `SAMPLE_ITEMS`, `DEMO_CUSTOMERS`, `DEMO_COLLECTIONS` – lightweight datasets for early labs +- `PRICING_POLICIES`, `BS_CUSTOMERS`, `LOYALTY_HISTORY` – enterprise data for policy-cited responses +- `AGENT_MEMORY`, `DECISION_MEMORY`, `REFERENCE_KNOWLEDGE` – memory layers for Labs 5–9 +- `AUDIT_LOG`, `ROLE_ASSIGNMENTS`, `TOOL_REGISTRY` – governance artifacts for Lab 10 + +Verify the tables after execution: + +```sql + +SELECT table_name + FROM user_tables + WHERE table_name IN ('ITEM_SUBMISSIONS', 'ITEM_REQUESTS', 'ITEM_WORKFLOW_LOG', + 'PRICING_POLICIES', 'BS_CUSTOMERS', 'LOYALTY_HISTORY', + 'AGENT_MEMORY', 'DECISION_MEMORY', 'REFERENCE_KNOWLEDGE', + 'AUDIT_LOG') + ORDER BY table_name; + +``` + +## Task 4: Configure Select AI Profiles + +Two profiles keep tools scoped to their duties: + +- `inventory_profile` – grants read/write to submission tables, pricing policies, and fact memories +- `authentication_profile` – exposes routing functions, decision memories, and audit logging + +```sql + +BEGIN + DBMS_CLOUD_AI.SET_ATTRIBUTE( + profile_name => 'inventory_profile', + attribute => 'object_list', + value => json_array( + json_object('schema_name' VALUE user, 'object_name' VALUE 'ITEM_SUBMISSIONS'), + json_object('schema_name' VALUE user, 'object_name' VALUE 'PRICING_POLICIES'), + json_object('schema_name' VALUE user, 'object_name' VALUE 'AGENT_MEMORY'), + json_object('schema_name' VALUE user, 'object_name' VALUE 'LOYALTY_HISTORY') + )); + + DBMS_CLOUD_AI.SET_ATTRIBUTE( + profile_name => 'authentication_profile', + attribute => 'object_list', + value => json_array( + json_object('schema_name' VALUE user, 'object_name' VALUE 'ITEM_REQUESTS'), + json_object('schema_name' VALUE user, 'object_name' VALUE 'ITEM_WORKFLOW_LOG'), + json_object('schema_name' VALUE user, 'object_name' VALUE 'DECISION_MEMORY'), + json_object('schema_name' VALUE user, 'object_name' VALUE 'REFERENCE_KNOWLEDGE'), + json_object('schema_name' VALUE user, 'object_name' VALUE 'AUDIT_LOG') + )); +END; +/ + +``` + +## Task 5: Validate Routing Packages + +Seer Equity retail routing mirrors the finance baseline’s complexity: auto-list, standard appraisal, expert appraisal, and blocked. + +```sql + +DECLARE + v_status VARCHAR2(30); +BEGIN + v_status := retail_routing.evaluate_item( + p_submitter => 'Test Collector', + p_item_type => 'sports_card', + p_declared_value => 450, + p_condition_grade => 8.1, + p_rarity_code => 'COMMON'); + DBMS_OUTPUT.PUT_LINE('Routing result: ' || v_status); +END; +/ + +``` + +Expected outputs to confirm parity: +- `AUTO_LIST` for low-value, high-condition common items +- `STANDARD_APPRAISAL` for mid-tier value +- `EXPERT_APPRAISAL` for rare or high-value assets +- `BLOCKED` when authenticity or policy checks fail + +## Task 6: Seed Memory Content + +Insert baseline facts so Labs 5–7 can demonstrate recall. + +```sql + +INSERT INTO agent_memory (memory_id, agent_id, memory_type, content) +VALUES ( + sys_guid(), + 'INVENTORY_AGENT', + 'FACT', + json_object( + 'fact' VALUE 'Alex Martinez has a 20% loyalty discount and prefers email updates', + 'about' VALUE 'Alex Martinez', + 'category' VALUE 'loyalty_preference', + 'effective' VALUE TO_CHAR(SYSDATE, 'YYYY-MM-DD') + )); + +COMMIT; + +``` + +## Task 7: Verify Audit Permissions + +Ensure authentication users can append but not alter audit logs. + +```sql + +GRANT INSERT ON audit_log TO authentication_agent_user; +REVOKE UPDATE, DELETE ON audit_log FROM authentication_agent_user; + +``` + +Attempting to update should raise `ORA-01031: insufficient privileges`, confirming separation of duties. + +## Next Steps + +Proceed to **Lab 1 – What Is an AI Agent?** to build the inventory lookup agent now that your tenancy mirrors Seer Equity Retail’s operational blueprint. + +## Workshop Plan (Generated) +- Emphasize Seer Equity Retail tenancy setup, including inventory vs authentication database users and profile scoping. +- Ensure notebook import paths, schema loaders, and validation steps reference retail tables and routing packages. +- Highlight memory seeding for Alex Martinez loyalty perks and governance grants for audit-safe operations. +- Document checkpoints that confirm three-tier routing thresholds remain intact after data loads. diff --git a/ai4u/industries/retail/how-agents-execute/how-agents-execute.md b/ai4u/industries/retail/how-agents-execute/how-agents-execute.md new file mode 100644 index 000000000..472ae9204 --- /dev/null +++ b/ai4u/industries/retail/how-agents-execute/how-agents-execute.md @@ -0,0 +1,198 @@ +# How Agents Execute the Work + +## Introduction + +Plans mean little without action. In this lab, Seer Equity Retail implements execution logic that routes submissions, writes workflow logs, and enforces the three-tier appraisal model: Auto-List, Standard Appraisal, Expert Appraisal, plus Blocked exceptions. + +### Scenario + +Jennifer Lee, Lead Inventory Specialist, needs the system to decide how to route ITEM-30214. The agent must evaluate value, rarity, and condition, insert workflow records, and trigger the right human or automated follow-up. + +### Objectives + +- Build PL/SQL packages that evaluate submissions against routing thresholds. +- Register execution tools for routing, logging, and status updates. +- Drive `ROUTING_AGENT` to call the correct tool chain, record decisions, and hand off escalations. + +## Task 1: Import the Execution Notebook + +Open `lab4-execution.json` in Oracle Machine Learning. Use it to execute the SQL blocks below. + +## Task 2: Create Workflow Tables + +These tables persist routing steps and audit-ready context. + +```sql + +CREATE TABLE item_requests ( + request_id VARCHAR2(36) PRIMARY KEY, + submission_id VARCHAR2(20) NOT NULL, + requested_tier VARCHAR2(20) NOT NULL, + requested_by VARCHAR2(50) NOT NULL, + request_ts DATE DEFAULT SYSDATE, + notes CLOB +); + +CREATE TABLE item_workflow_log ( + log_id VARCHAR2(36) PRIMARY KEY, + submission_id VARCHAR2(20) NOT NULL, + action_type VARCHAR2(30) NOT NULL, + routed_tier VARCHAR2(20), + actor VARCHAR2(50) NOT NULL, + status_note CLOB, + action_ts DATE DEFAULT SYSDATE +); + +``` + +## Task 3: Implement Routing Logic + +```sql + +CREATE OR REPLACE PACKAGE retail_routing AS + FUNCTION assess_item( + p_submission_id VARCHAR2, + p_declared_value NUMBER, + p_condition_grade NUMBER, + p_rarity_code VARCHAR2 + ) RETURN VARCHAR2; +END retail_routing; +/ + +CREATE OR REPLACE PACKAGE BODY retail_routing AS + FUNCTION assess_item( + p_submission_id VARCHAR2, + p_declared_value NUMBER, + p_condition_grade NUMBER, + p_rarity_code VARCHAR2 + ) RETURN VARCHAR2 AS + BEGIN + IF p_condition_grade < 3.0 OR p_rarity_code = 'FLAGGED' THEN + RETURN 'BLOCKED'; + ELSIF p_declared_value < 500 AND p_condition_grade >= 7.0 AND p_rarity_code = 'COMMON' THEN + RETURN 'AUTO_LIST'; + ELSIF (p_declared_value BETWEEN 500 AND 5000) + OR (p_condition_grade BETWEEN 5.0 AND 6.9) + OR p_rarity_code = 'LIMITED' THEN + RETURN 'STANDARD_APPRAISAL'; + ELSE + RETURN 'EXPERT_APPRAISAL'; + END IF; + END assess_item; +END retail_routing; +/ + +``` + +## Task 4: Register Execution Tools + +```sql + +BEGIN + DBMS_CLOUD_AI_AGENT.CREATE_TOOL( + tool_name => 'ROUTING_DECISION_TOOL', + attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"inventory_profile"}}', + description => 'Call retail_routing.assess_item to determine routing tier.' + ); + + DBMS_CLOUD_AI_AGENT.CREATE_TOOL( + tool_name => 'REQUEST_WRITE_TOOL', + attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"inventory_profile"}}', + description => 'Insert routing requests into ITEM_REQUESTS.' + ); + + DBMS_CLOUD_AI_AGENT.CREATE_TOOL( + tool_name => 'WORKFLOW_LOG_TOOL', + attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"inventory_profile"}}', + description => 'Append execution details to ITEM_WORKFLOW_LOG.' + ); +END; +/ + +``` + +## Task 5: Define the Routing Agent + +```sql + +BEGIN + DBMS_CLOUD_AI_AGENT.CREATE_AGENT( + agent_name => 'ROUTING_AGENT', + attributes => json_object( + 'role' VALUE 'You evaluate Seer Equity retail submissions, selecting routing tiers and logging actions.', + 'instructions' VALUE 'Always report the routing tier and log your decision with rationale referencing value, condition, and rarity.' + ) + ); +END; +/ + +BEGIN + DBMS_CLOUD_AI_AGENT.CREATE_TASK( + task_name => 'ROUTING_TASK', + attributes => json_object( + 'prompt' VALUE 'Route the submission based on value, condition, and rarity. +Request: {query}', + 'tools' VALUE json_array('ROUTING_DECISION_TOOL', 'REQUEST_WRITE_TOOL', 'WORKFLOW_LOG_TOOL') + ) + ); +END; +/ + +BEGIN + DBMS_CLOUD_AI_AGENT.CREATE_TEAM( + team_name => 'ROUTING_TEAM', + attributes => json_object( + 'agents' VALUE json_array(json_object('name' VALUE 'ROUTING_AGENT', 'task' VALUE 'ROUTING_TASK')), + 'process' VALUE 'sequential' + ) + ); +END; +/ + +``` + +## Task 6: Execute a Routing Request + +```sql + +EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('ROUTING_TEAM'); +SELECT AI AGENT 'Evaluate submission ITEM-30214 with declared value 7200, condition grade 9.1, rarity GRAIL. Route it and log the action.'; + +``` + +Verify results: + +```sql + +SELECT submission_id, requested_tier, requested_by + FROM item_requests + ORDER BY request_ts DESC + FETCH FIRST 5 ROWS; + +SELECT submission_id, routed_tier, status_note + FROM item_workflow_log + ORDER BY action_ts DESC + FETCH FIRST 5 ROWS; + +``` + +Expect `EXPERT_APPRAISAL` for the high-value, rare item. Repeat with lower-value submissions to observe `AUTO_LIST` and `STANDARD_APPRAISAL` tiers. + +## Task 7: Handle Blocked Scenarios + +```sql + +SELECT AI AGENT 'Evaluate submission ITEM-40103 with declared value 360, condition 2.5, rarity FLAGGED. Route it and log the result.'; + +``` + +Confirm the log records `BLOCKED` with rationale for compliance review. + +## Summary + +Seer Equity Retail now routes submissions with parity to the finance baseline while reflecting authentic retail triggers. The agent writes every decision to workflow logs, preserving auditable context for governance and human follow-up. + +## Workshop Plan (Generated) +- Implement routing logic mapping value, rarity, and condition to Auto-List, Standard Appraisal, and Expert Appraisal. +- Show `AUTHENTICATION_AGENT` executing tool chains that write to `ITEM_REQUESTS` and `ITEM_WORKFLOW_LOG`. +- Validate parity with original three-tier thresholds while embedding retail-specific table names and status values. diff --git a/ai4u/industries/retail/how-agents-plan/how-agents-plan.md b/ai4u/industries/retail/how-agents-plan/how-agents-plan.md new file mode 100644 index 000000000..98172a797 --- /dev/null +++ b/ai4u/industries/retail/how-agents-plan/how-agents-plan.md @@ -0,0 +1,155 @@ +# How Agents Plan the Work + +## Introduction + +Retail authentication requires more than a single lookup. When Priya Desai asks for a briefing on Alex Martinez’s pending submissions, the agent must gather loyalty perks, open routing tasks, and relevant pricing clauses. Planning is how Seer Equity Retail coordinates those steps. + +### Scenario + +Priya needs a ready-to-send briefing before the afternoon standup: which submissions are waiting, how loyalty perks affect pricing, and whether any expert appraisals are overdue. The agent must plan the tool sequence instead of improvising. + +### Objectives + +- Create planning utilities that assemble collector dossiers using `BS_CUSTOMERS`, `ITEM_SUBMISSIONS`, and `PRICING_POLICIES`. +- Teach `PLANNER_AGENT` how to choose tools, document rationale, and hand off to execution agents. +- Ensure plans include routing tier recommendations aligned to Auto-List, Standard Appraisal, and Expert Appraisal thresholds. + +## Task 1: Import the Planning Notebook + +Open `lab3-planning.json` in Oracle Machine Learning and follow the notebook steps for each task. + +## Task 2: Create Supporting Views and Tables + +```sql + +CREATE OR REPLACE VIEW collector_briefings AS +SELECT c.collector_id, + c.collector_name, + c.loyalty_tier, + c.preferred_channel, + s.submission_id, + s.item_type, + s.declared_value, + s.condition_grade, + s.current_status, + s.last_update_ts + FROM bs_customers c + LEFT JOIN item_submissions s ON s.submitter_name = c.collector_name; + +``` + +Add a table for routing recommendations generated by planners. + +```sql + +CREATE TABLE routing_recommendations ( + recommendation_id VARCHAR2(36) PRIMARY KEY, + submission_id VARCHAR2(20), + proposed_tier VARCHAR2(20), + rationale CLOB, + created_by_agent VARCHAR2(50), + created_ts DATE DEFAULT SYSDATE +); + +``` + +## Task 3: Register Planner Tools + +```sql + +BEGIN + DBMS_CLOUD_AI_AGENT.CREATE_TOOL( + tool_name => 'COLLECTOR_BRIEF_TOOL', + attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"inventory_profile"}}', + description => 'Summarize collector submissions, loyalty perks, and pending statuses.' + ); + + DBMS_CLOUD_AI_AGENT.CREATE_TOOL( + tool_name => 'ROUTING_WRITE_TOOL', + attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"inventory_profile"}}', + description => 'Insert planner recommendations into ROUTING_RECOMMENDATIONS.' + ); +END; +/ + +``` + +## Task 4: Define the Planner Agent + +```sql + +BEGIN + DBMS_CLOUD_AI_AGENT.CREATE_AGENT( + agent_name => 'PLANNER_AGENT', + attributes => json_object( + 'role' VALUE 'You are the planning lead for Seer Equity Retail. +Lay out tool sequences, document rationale, and determine routing tiers before execution begins.', + 'instructions' VALUE 'Always justify routing with declared value, condition grade, and rarity. Capture next-step tasks for inventory and authentication teams.' + ) + ); +END; +/ + +BEGIN + DBMS_CLOUD_AI_AGENT.CREATE_TASK( + task_name => 'PLANNING_TASK', + attributes => json_object( + 'prompt' VALUE 'Plan the workflow for the following request: {query}', + 'tools' VALUE json_array('COLLECTOR_BRIEF_TOOL', 'ROUTING_WRITE_TOOL') + ) + ); +END; +/ + +BEGIN + DBMS_CLOUD_AI_AGENT.CREATE_TEAM( + team_name => 'PLANNING_TEAM', + attributes => json_object( + 'agents' VALUE json_array(json_object('name' VALUE 'PLANNER_AGENT', 'task' VALUE 'PLANNING_TASK')), + 'process' VALUE 'sequential' + ) + ); +END; +/ + +``` + +## Task 5: Generate a Plan + +```sql + +EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('PLANNING_TEAM'); +SELECT AI AGENT 'Prepare a briefing for Alex Martinez, including all pending submissions, loyalty perks, and routing tier recommendations.'; + +``` + +Review the output: +- Confirm the agent retrieves collector data and statuses via `COLLECTOR_BRIEF_TOOL`. +- Ensure the plan cites loyalty discounts and valued thresholds when recommending Auto-List vs Standard vs Expert tiers. +- Check `routing_recommendations` for a new entry with the same submission ID and rationale. + +```sql + +SELECT submission_id, proposed_tier, rationale + FROM routing_recommendations + ORDER BY created_ts DESC + FETCH FIRST 5 ROWS ONLY; + +``` + +## Task 6: Hand Off to Execution + +Document how planners hand tasks to execution teams within Seer Equity Retail. + +- `PLANNER_AGENT` generates the sequence and writes the recommendation. +- `INVENTORY_AGENT` (Lab 1) or `ROUTING_AGENT` (Lab 4) reads the recommendation and executes tool calls. +- Governance team queries `routing_recommendations` to confirm rationale before approvals. + +## Summary + +Planning ensures agents do the right work in the right order. With collector briefings and routing recommendations in place, execution teams operate faster without sacrificing control. + +## Workshop Plan (Generated) +- Craft planner tasks that assemble collector dossiers combining loyalty tiers, pending submissions, and policy reminders. +- Use Seer Equity datasets (`BS_CUSTOMERS`, `SAMPLE_ITEMS`, `PRICING_POLICIES`) to populate planning prompts and outputs. +- Illustrate multi-tool orchestration delivering intake briefings and authentication checklists. diff --git a/ai4u/industries/retail/introduction/introduction.md b/ai4u/industries/retail/introduction/introduction.md new file mode 100644 index 000000000..3d4913cb1 --- /dev/null +++ b/ai4u/industries/retail/introduction/introduction.md @@ -0,0 +1,105 @@ +# Introduction + +## About this Workshop + +**If your retail AI forgets the collector it helped yesterday, it will fail the flash drop tomorrow.** + +Seer Equity’s Retail Intelligence division runs the returns, consignment, and authentication desks for partner marketplaces and in-store lounges. Manual handoffs, scattered spreadsheets, and chatbot pilots that “explain” instead of “act” are eroding SLA reliability and collector trust. This LiveLab shows you how to build governed, execution-first agents with **agentic memory** on Oracle Database 26ai so every interaction remembers loyalty perks, cites policies, and leaves an audit-ready trail. + +## Meet Seer Equity Retail Intelligence + +You will operate inside Seer Equity’s retail operations hub as it absorbs record submission volumes from online flash sales, sneaker drops, and high-end memorabilia consignments. Intake specialists, authenticators, and governance leads share the same Oracle Database 26ai foundation, yet the workflows still lag behind the demand. + +### The Problems Keeping Leadership Up at Night + +**“VIP collectors keep repeating their loyalty perks every call.”** + +Alex Martinez, a platinum-tier collector, negotiated a 20 percent loyalty discount and email-only communication. Three different specialists captured the notes in spreadsheets that no agent can recall. Alex escalated the complaint directly to Priya Desai, Director of Retail Operations. + +**“Identical submissions receive different grades and price guidance.”** + +Two 1986 rookie cards arrived with similar provenance packets. One auto-listed within an hour; the other stalled for four days and exited with a lower valuation. Marcus Patel, Senior Authenticator, can’t trace which decision path applied where. + +**“We can’t explain what the AI just did.”** + +Governance lead David Huang piloted chatbots to answer status questions. When he asked, “Why did we list ITEM-79214 at $6,200?”, the bot replied with marketing copy and no provenance log. Compliance refused to expand the pilot. + +**“Common items clog the same queues as grails.”** + +A $180 store-exclusive bobblehead flows through the same manual review path as a championship ring. Without value-, rarity-, and condition-based routing, SLA breaches keep climbing. + +**“Separation of duties exists only on paper.”** + +Inventory specialists can both submit and authenticate items in the legacy tools. That violates Seer Equity’s governance policy and invites fraud during high-volume events. + +### How Agent Memory Solves These Problems + +This workshop upgrades Seer Equity’s operations with governed agents that remember, route, and record every action. + +| Business Problem | Agent Solution | You’ll Build It In | +|------------------|----------------|--------------------| +| Forgotten loyalty perks | Persistent memory of collector entitlements | Labs 5, 7, 9 | +| Inconsistent grading | Precedent search for similar authentications | Labs 8, 9 | +| Missing provenance trail | Tool-level audit logging with rationale | Labs 4, 10 | +| No policy access | Enterprise pricing and policy integration | Lab 6 | +| Manual routing for routine items | Auto-listing based on value and condition | Labs 4, 10 | +| Weak separation of duties | Role-scoped agents and tool permissions | Lab 10 | + +By the end you will orchestrate a retail workflow where: + +- **Collectors feel remembered** – loyalty tiers, communication preferences, and negotiated perks persist across every session. +- **Authenticators sync decisions** – agents compare new submissions against precedent memories before grading. +- **Every action is auditable** – tool calls, inputs, outputs, and decisions land in governed logs Seer Equity can defend. +- **Policies stay authoritative** – recommendations cite real pricing clauses, provenance requirements, and resale thresholds. +- **Routine work accelerates** – low-risk items auto-list while scarce pieces escalate to experts with full context. +- **Governance holds** – intake and authentication duties remain separate with enforced tool and data boundaries. + +## Workshop Structure + +✅ **Build the foundations (Labs 1–4)** + +Before solving the backlog, master agent execution, planning, and routing in Seer Equity’s retail schema. + +- **Lab 1 – What Is an AI Agent?** Create an inventory lookup agent backed by `ITEM_SUBMISSIONS` so specialists answer status questions instantly. +- **Lab 2 – Agents vs Zero Shot** Contrast zero-shot prompts with governed agents updating `SAMPLE_ITEMS` under strict role controls. +- **Lab 3 – How Agents Plan** Assemble collector briefings that blend loyalty tiers, submission history, and policy reminders. +- **Lab 4 – How Agents Execute** Implement routing that writes to `ITEM_REQUESTS` and `ITEM_WORKFLOW_LOG`, proving three-tier automation. + +✅ **Install durable memory (Labs 5–9)** + +- **Lab 5 – Why Agents Need Memory** Capture Alex Martinez’s loyalty perks in `AGENT_MEMORY` so the system never forgets. +- **Lab 6 – Enterprise Data Integration** Ground price guidance in `PRICING_POLICIES`, `BS_CUSTOMERS`, and catalog metadata. +- **Lab 7 – Memory Core** Design JSON schemas for facts, tasks, and in-flight checkpoints across retail teams. +- **Lab 8 – Four Memory Types** Distinguish episodic, semantic, procedural, and reference memory aligned to retail cases. +- **Lab 9 – Learning Loop** Build vector precedents in `DECISION_MEMORY` so agents surface similar authentications. + +✅ **Seal with governance (Lab 10)** + +- **Lab 10 – Tools, Safety & Control** Enforce separation between `INVENTORY_AGENT` and `AUTHENTICATION_AGENT`, logging every decision for compliance. + +## Objectives + +By completing the retail edition, you will: + +- Implement submission intake, valuation, routing, and provenance logging on Oracle Database 26ai. +- Persist collector preferences, loyalty offers, and authentication results as durable memory. +- Ground agent answers in pricing policies, authenticity standards, and resale guidelines. +- Produce an auditable trail for every agent action with human escalation hooks. +- Coordinate multi-agent teams where tools, tasks, and governance boundaries remain explicit. + +## Prerequisites + +Everything runs inside the provided Autonomous Database tenancy. You should be comfortable following SQL, PL/SQL, and notebook-driven instructions. + +## Learn More + +- [Oracle Database 26ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/) +- [`DBMS_CLOUD_AI_AGENT` Package](https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/dbms-cloud-ai-agent-package.html) +- [AI Vector Search Guide](https://docs.oracle.com/en/database/oracle/oracle-database/26/vecse/) + +## Workshop Plan (Generated) +- Refresh story framing so Seer Equity Retail Intelligence oversees high-velocity returns and consignments with Oracle Database 26ai. +- Spotlight Priya Desai, Alex Martinez, Jennifer Lee, Marcus Patel, and David Huang across problem statements and quotes. +- Recast business problem table around VIP memory, grading parity, provenance logging, autonomous routing, and separation of duties. +- Map Auto-List, Standard Appraisal, and Expert Appraisal into the workshop impact narrative and visuals. +- Tie success metrics to reduced SLA time, fraud mitigation, and auditable policy citations for Seer Equity leadership. diff --git a/ai4u/industries/retail/learning-loop/ai-database-competence.md b/ai4u/industries/retail/learning-loop/ai-database-competence.md new file mode 100644 index 000000000..d183de13b --- /dev/null +++ b/ai4u/industries/retail/learning-loop/ai-database-competence.md @@ -0,0 +1,180 @@ +# How an AI Database Builds Competence + +## Introduction + +Seer Equity Retail cannot rely on keyword searches to recall precedent decisions. This lab builds the learning loop that ingests new authentication outcomes, embeds them as vectors, and retrieves similar cases to inform the next decision. + +### Scenario + +Jennifer Lee receives a high-value sneaker submission with unusual provenance notes. She wants to know how similar cases were handled, including pricing and human reviewers. Vector search surfaces the best matches even when the language differs. + +### Objectives + +- Load an ONNX embedding model into Oracle Database 26ai for retail precedent text. +- Extend `DECISION_MEMORY` with vector columns and metadata. +- Implement semantic search that recommends precedent cases based on meaning. +- Close the loop by writing new outcomes back to memory for future reuse. + +## Task 1: Install the Embedding Model + +```sql + +BEGIN + DBMS_VECTOR.LOAD_MODEL( + model_name => 'ai4u_retail_text_embedding', + source_uri => 'https://objectstorage.us-phoenix-1.oraclecloud.com/.../all-MiniLM-L6-v2.onnx' + ); +END; +/ + +``` + +Use the notebook’s helper script to stage the ONNX file in Object Storage if required. + +## Task 2: Extend Decision Memory + +```sql + +ALTER TABLE decision_memory ADD ( + decision_text CLOB, + embedding VECTOR(384) +); + +``` + +## Task 3: Embed Existing Decisions + +```sql + +UPDATE decision_memory dm + SET dm.decision_text = dm.decision_summary, + dm.embedding = DBMS_VECTOR.EMBED_TEXT( + model_name => 'ai4u_retail_text_embedding', + text => dm.decision_summary + ); +COMMIT; + +``` + +## Task 4: Implement Semantic Search Function + +```sql + +CREATE OR REPLACE FUNCTION find_similar_decisions( + p_query_text VARCHAR2, + p_top_n PLS_INTEGER := 5 +) RETURN SYS_REFCURSOR AS + v_cursor SYS_REFCURSOR; +BEGIN + OPEN v_cursor FOR + SELECT submission_id, + collector_name, + decision_summary, + decided_by, + decided_ts, + DBMS_VECTOR.COSINE_DISTANCE( + embedding, + DBMS_VECTOR.EMBED_TEXT('ai4u_retail_text_embedding', p_query_text) + ) AS similarity + FROM decision_memory + ORDER BY similarity ASC + FETCH FIRST p_top_n ROWS ONLY; + RETURN v_cursor; +END; +/ + +``` + +## Task 5: Create a Tool for Precedent Retrieval + +```sql + +BEGIN + DBMS_CLOUD_AI_AGENT.CREATE_TOOL( + tool_name => 'PRECEDENT_SEARCH_TOOL', + attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"authentication_profile"}}', + description => 'Retrieve similar authentication decisions using semantic search.' + ); +END; +/ + +``` + +The tool implementation references `TABLE(find_similar_decisions(:query_text, :top_n))` in the accompanying notebook script. + +## Task 6: Update Learning Loop Agent Instructions + +```sql + +BEGIN + DBMS_CLOUD_AI_AGENT.UPDATE_AGENT( + agent_name => 'AUTHENTICATION_AGENT', + attributes => json_object( + 'instructions' VALUE 'Before finalizing a recommendation, call PRECEDENT_SEARCH_TOOL to retrieve similar cases and cite at least one.' + ) + ); +END; +/ + +BEGIN + DBMS_CLOUD_AI_AGENT.UPDATE_TASK( + task_name => 'AUTHENTICATION_TASK', + attributes => json_object( + 'tools' VALUE json_array('POLICY_LOOKUP_TOOL', 'REFERENCE_LOOKUP_TOOL', 'MEMORY_LOOKUP_TOOL', 'PRECEDENT_SEARCH_TOOL') + ) + ); +END; +/ + +``` + +## Task 7: Run the Learning Loop + +```sql + +SELECT ai_response + FROM TABLE(DBMS_CLOUD_AI.ASK_AGENT( + agent_name => 'AUTHENTICATION_AGENT', + prompt => 'Recommend a route for a $6,800 rookie card with pristine condition and unusual provenance, citing similar past cases.' )); + +``` + +Verify the response includes: +- Policy references (POL-PLAT/POL-GOLD as applicable) +- A cited precedent submission ID and summary +- Recommended tier (Expert Appraisal expected) + +## Task 8: Persist New Decisions + +```sql + +INSERT INTO decision_memory ( + decision_id, + submission_id, + collector_name, + decision_summary, + decision_text, + embedding, + decided_by +) VALUES ( + sys_guid(), + 'ITEM-41200', + 'Alex Martinez', + 'Expert appraisal confirmed provenance documents and listed at $6,900 under POL-PLAT clause 3.', + 'Expert appraisal confirmed provenance documents and listed at $6,900 under POL-PLAT clause 3.', + DBMS_VECTOR.EMBED_TEXT('ai4u_retail_text_embedding', 'Expert appraisal confirmed provenance documents and listed at $6,900 under POL-PLAT clause 3.'), + 'AUTHENTICATION_AGENT' +); + +COMMIT; + +``` + +## Summary + +Semantic precedence transforms Seer Equity agents from reactive scripts into learning systems. Every new decision strengthens future recommendations, emitting evidence collectors and governance teams can trust. + +## Workshop Plan (Generated) +- Build precedent vectors from past return decisions to recommend actions for similar submissions. +- Showcase competence tracking dashboards that flag SLA breaches, fraud risks, and calibration needs. +- Tie learning loop outputs back to Priya Desai’s KPIs for Seer Equity Retail. diff --git a/ai4u/industries/retail/tools-safety-control/agents-and-tools.md b/ai4u/industries/retail/tools-safety-control/agents-and-tools.md new file mode 100644 index 000000000..954d64898 --- /dev/null +++ b/ai4u/industries/retail/tools-safety-control/agents-and-tools.md @@ -0,0 +1,216 @@ +# Tools, Safety, and Human Control + +## Introduction + +Automation without control invites risk. This lab enforces Seer Equity Retail’s governance playbook: separation of duties, explicit tool permissions, audit logging, and human escalation for expert-tier decisions. + +### Scenario + +David Huang must prove to compliance that inventory specialists cannot authenticate items and authenticators cannot submit new ones. He also needs a full audit trail when Marcus Patel overrides an auto-list recommendation. + +### Objectives + +- Register tools for submission intake, authentication, and audit logging with scoped profiles. +- Configure `INVENTORY_AGENT` and `AUTHENTICATION_AGENT` with non-overlapping tool sets. +- Implement escalation logic requiring human approval for Expert Appraisal. +- Demonstrate audit queries that show every decision’s provenance. + +## Task 1: Define Tool Registry Entries + +```sql + +CREATE TABLE tool_registry ( + tool_name VARCHAR2(50) PRIMARY KEY, + description VARCHAR2(200), + allowed_roles VARCHAR2(200) +); + +INSERT INTO tool_registry VALUES ('ITEM_SUBMIT_TOOL', 'Create new item submissions.', 'INVENTORY_AGENT'); +INSERT INTO tool_registry VALUES ('AUTHENTICATE_TOOL', 'Authenticate and grade submissions.', 'AUTHENTICATION_AGENT'); +INSERT INTO tool_registry VALUES ('AUDIT_APPEND_TOOL', 'Write structured audit events.', 'AUTHENTICATION_AGENT'); +COMMIT; + +``` + +## Task 2: Create Audit Logging Procedure + +```sql + +CREATE OR REPLACE PROCEDURE append_audit_entry( + p_actor VARCHAR2, + p_submission VARCHAR2, + p_action VARCHAR2, + p_details CLOB +) AS +BEGIN + INSERT INTO audit_log (audit_id, actor, submission_id, action_type, action_details, action_ts) + VALUES ( + sys_guid(), + p_actor, + p_submission, + p_action, + p_details, + SYSDATE + ); +END; +/ + +``` + +## Task 3: Register Governance Tools + +```sql + +BEGIN + DBMS_CLOUD_AI_AGENT.CREATE_TOOL( + tool_name => 'ITEM_SUBMIT_TOOL', + attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"inventory_profile"}}', + description => 'Insert new records into ITEM_SUBMISSIONS under intake supervision.' + ); + + DBMS_CLOUD_AI_AGENT.CREATE_TOOL( + tool_name => 'AUTHENTICATE_TOOL', + attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"authentication_profile"}}', + description => 'Update submission status, write workflow logs, and append audit entries.' + ); + + DBMS_CLOUD_AI_AGENT.CREATE_TOOL( + tool_name => 'AUDIT_APPEND_TOOL', + attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"authentication_profile"}}', + description => 'Invoke append_audit_entry with structured payloads.' + ); +END; +/ + +``` + +## Task 4: Enforce Separation of Duties + +```sql + +BEGIN + DBMS_CLOUD_AI_AGENT.UPDATE_AGENT( + agent_name => 'INVENTORY_AGENT', + attributes => json_object( + 'tools' VALUE json_array('ITEM_SUBMIT_TOOL', 'ITEM_LOOKUP_TOOL', 'MEMORY_LOOKUP_TOOL') + ) + ); +END; +/ + +BEGIN + DBMS_CLOUD_AI_AGENT.UPDATE_AGENT( + agent_name => 'AUTHENTICATION_AGENT', + attributes => json_object( + 'tools' VALUE json_array('AUTHENTICATE_TOOL', 'POLICY_LOOKUP_TOOL', 'REFERENCE_LOOKUP_TOOL', 'MEMORY_LOOKUP_TOOL', 'PRECEDENT_SEARCH_TOOL', 'AUDIT_APPEND_TOOL') + ) + ); +END; +/ + +``` + +## Task 5: Implement Escalation Workflow + +Expert Appraisal requires human approval. Use a stored procedure to enforce the checkpoint. + +```sql + +CREATE OR REPLACE PROCEDURE escalate_expert_appraisal( + p_submission_id VARCHAR2, + p_reviewer VARCHAR2, + p_notes CLOB +) AS +BEGIN + INSERT INTO audit_log (audit_id, actor, submission_id, action_type, action_details, action_ts) + VALUES ( + sys_guid(), + p_reviewer, + p_submission_id, + 'EXPERT_ESCALATION', + p_notes, + SYSDATE + ); + + UPDATE item_submissions + SET current_status = 'EXPERT_REVIEW' + WHERE submission_id = p_submission_id; +END; +/ + +``` + +Expose the escalation routine as a tool reserved for human supervisors. + +```sql + +BEGIN + DBMS_CLOUD_AI_AGENT.CREATE_TOOL( + tool_name => 'EXPERT_ESCALATE_TOOL', + attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"authentication_profile"}}', + description => 'Escalate submissions to human expert reviewers with audit logging.' + ); +END; +/ +``` + +Assign the tool to supervisory tasks only (documented in the notebook with manual execution). + +## Task 6: Demonstrate Controlled Execution + +1. Inventory specialist submits a new item: + +```sql + +EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('INVENTORY_SUPPORT_TEAM'); +SELECT AI AGENT 'Create a submission for ITEM-41210, declared value 320, condition 7.5, rarity COMMON.'; + +``` + +2. Authentication agent processes the submission: + +```sql + +EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('ROUTING_TEAM'); +SELECT AI AGENT 'Route submission ITEM-41210 based on declared value 320, condition 7.5, rarity COMMON.'; + +``` + +3. Audit log verification: + +```sql + +SELECT actor, submission_id, action_type, action_details + FROM audit_log + ORDER BY action_ts DESC + FETCH FIRST 5 ROWS; + +``` + +## Task 7: Validate Permissions + +Ensure privilege boundaries hold. + +```sql + +-- Inventory user should fail to authenticate submissions +CONNECT inventory_agent_user/ +EXEC authenticate_tool(...); -- should raise insufficient privileges + +-- Authentication user should fail to insert submissions +CONNECT authentication_agent_user/ +EXEC item_submit_tool(...); -- should raise insufficient privileges + +``` + +(Provide instructions in the notebook for switching credentials.) + +## Summary + +Governed tool assignments, audit trails, and expert escalation protect Seer Equity Retail from unauthorized actions. Agents remain powerful yet controllable, satisfying compliance while accelerating operations. + +## Workshop Plan (Generated) +- Reinforce tool registration, role separation, and audit logging for inventory vs authentication agents. +- Include policy checks ensuring loyalty data isn’t exposed outside authorized tools. +- Demonstrate escalation workflows requiring human approval for Expert Appraisal tier decisions. +- Document audit trail queries proving provenance and compliance for Seer Equity executives. diff --git a/ai4u/industries/retail/what-is-agent/what-is-agent.md b/ai4u/industries/retail/what-is-agent/what-is-agent.md new file mode 100644 index 000000000..7779361c1 --- /dev/null +++ b/ai4u/industries/retail/what-is-agent/what-is-agent.md @@ -0,0 +1,207 @@ +# What Is an AI Agent, Really? + +## Introduction + +Retail teams do not need another chatbot that narrates click paths; they need automation that acts. In this lab you will build Seer Equity’s first inventory lookup agent. Instead of explaining how to check a submission, it will query `ITEM_SUBMISSIONS` and answer Alex Martinez’s status question in seconds. + +### The Business Problem + +Inventory specialists handle hundreds of calls every week: + +> *“My rookie card was submitted last week. What’s the status of ITEM-302?”* +> +> Alex Martinez, Platinum Collector + +Legacy chatbots reply with instructions: “Log in. Click Submissions. Filter for ITEM-302…” Collectors hang up. Specialists duplicate work. The retail division needs an agent that reads the actual database and responds with facts. + +### What You Will Learn + +You will create the foundational agent components: tool, agent, task, and team. By the end, `INVENTORY_AGENT` will retrieve submission status using approved tools. + +**What you will build:** A submission lookup agent that reads the `ITEM_SUBMISSIONS` table through a governed SQL tool. + +**Estimated Time:** 10 minutes + +### Objectives + +- Create `ITEM_SUBMISSIONS` with realistic retail attributes (condition, declared value, rarity). +- Populate sample submissions for VIP collectors and standard consignments. +- Register the table with `inventory_profile` so Select AI can access it. +- Build the `ITEM_LOOKUP` SQL tool and `INVENTORY_AGENT` that responds with actionable status summaries. + +### Prerequisites + +Complete the **Getting Started** lab to import notebooks, configure profiles, and load the retail schema. + +## Task 1: Import the Lab Notebook + +Use `lab1-item-agent.json` to run all commands from Oracle Machine Learning. + +1. Open the notebook in Oracle Machine Learning. +2. Execute cells sequentially; screenshots in this markdown illustrate each step. + +## Task 2: Create the Item Submissions Table + +```sql + +CREATE TABLE item_submissions ( + submission_id VARCHAR2(20) PRIMARY KEY, + submitter_name VARCHAR2(100), + collector_tier VARCHAR2(20), + item_type VARCHAR2(40), + condition_grade NUMBER(3,1), + declared_value NUMBER(12,2), + rarity_code VARCHAR2(20), + current_status VARCHAR2(30), + last_update_ts DATE, + loyalty_discount NUMBER(5,2) +); + +``` + +Add schema comments so Select AI understands the retail vocabulary. + +```sql + +COMMENT ON TABLE item_submissions IS 'Seer Equity retail submissions awaiting authentication, appraisal, or listing.'; +COMMENT ON COLUMN item_submissions.submission_id IS 'Identifier like ITEM-30214 (ITM-YYMMDD-NNN pattern).'; +COMMENT ON COLUMN item_submissions.collector_tier IS 'Loyalty tier: Platinum, Gold, Silver, or Standard.'; +COMMENT ON COLUMN item_submissions.condition_grade IS 'Condition scale 1.0–10.0 used for routing.'; +COMMENT ON COLUMN item_submissions.current_status IS 'SUBMITTED, AUTHENTICATING, GRADED, LISTED, or REJECTED.'; + +``` + +## Task 3: Seed Sample Data + +```sql + +INSERT INTO item_submissions VALUES ('ITEM-30214', 'Alex Martinez', 'Platinum', 'Sports Card', 9.1, 7200, 'GRAIL', 'AUTHENTICATING', SYSDATE - 2, 0.20); +INSERT INTO item_submissions VALUES ('ITEM-30215', 'Maria Santos', 'Gold', 'Vintage Comic', 8.3, 1850, 'LIMITED', 'SUBMITTED', SYSDATE - 1, 0.10); +INSERT INTO item_submissions VALUES ('ITEM-30216', 'James Wilson', 'Standard', 'Memorabilia', 6.4, 320, 'COMMON', 'LISTED', SYSDATE - 4, 0.00); +INSERT INTO item_submissions VALUES ('ITEM-30217', 'Sarah Johnson', 'Silver', 'Vintage Toy', 7.2, 860, 'LIMITED', 'GRADED', SYSDATE - 3, 0.05); +COMMIT; + +``` + +Validate the inserts: + +```sql + +SELECT submission_id, collector_tier, current_status + FROM item_submissions + ORDER BY submission_id; + +``` + +## Task 4: Register the Table with the Inventory Profile + +```sql + +BEGIN + DBMS_CLOUD_AI.SET_ATTRIBUTE( + profile_name => 'inventory_profile', + attribute => 'object_list', + value => json_array( + json_object('schema_name' VALUE user, 'object_name' VALUE 'ITEM_SUBMISSIONS'), + json_object('schema_name' VALUE user, 'object_name' VALUE 'PRICING_POLICIES'), + json_object('schema_name' VALUE user, 'object_name' VALUE 'AGENT_MEMORY') + )); +END; +/ + +``` + +## Task 5: Build the Agent Components + +Create the SQL tool, the agent role, the task instructions, and the team wrapper. + +```sql + +BEGIN + DBMS_CLOUD_AI_AGENT.CREATE_TOOL( + tool_name => 'ITEM_LOOKUP_TOOL', + attributes => '{"tool_type": "SQL", "tool_params": {"profile_name": "inventory_profile"}}', + description => 'Lookup submissions in ITEM_SUBMISSIONS and summarize status, value, and loyalty tier.' + ); +END; +/ + +BEGIN + DBMS_CLOUD_AI_AGENT.CREATE_AGENT( + agent_name => 'INVENTORY_AGENT', + attributes => json_object( + 'role' VALUE 'You are a Seer Equity inventory specialist. You verify submission status, loyalty perks, and valuation data for collectors. Use tools; never guess.', + 'instructions' VALUE 'Confirm the submission status, cite loyalty perks, and reference relevant policy IDs when possible.' + ), + description => 'Retail intake assistant for Seer Equity.' + ); +END; +/ + +BEGIN + DBMS_CLOUD_AI_AGENT.CREATE_TASK( + task_name => 'INVENTORY_LOOKUP_TASK', + attributes => json_object( + 'prompt' VALUE 'Answer collector questions about submission status and loyalty perks. +Request: {query}', + 'tools' VALUE json_array('ITEM_LOOKUP_TOOL') + ), + description => 'Task binding the inventory agent to the lookup tool.' + ); +END; +/ + +BEGIN + DBMS_CLOUD_AI_AGENT.CREATE_TEAM( + team_name => 'INVENTORY_SUPPORT_TEAM', + attributes => json_object( + 'agents' VALUE json_array( + json_object('name' VALUE 'INVENTORY_AGENT', 'task' VALUE 'INVENTORY_LOOKUP_TASK') + ), + 'process' VALUE 'sequential' + ), + description => 'Sequential team for inventory status lookups.' + ); +END; +/ + +``` + +## Task 6: Ask the Agent + +Set the team and request a status update for Alex Martinez. + +```sql + +EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('INVENTORY_SUPPORT_TEAM'); +SELECT AI AGENT 'Provide the latest status for submission ITEM-30214, including loyalty perks and valuation context.'; + +``` + +Observe how the agent: +1. Calls `ITEM_LOOKUP_TOOL`. +2. Returns the status (`AUTHENTICATING`), declared value, and loyalty discount. +3. References relevant pricing policies if comments are present. + +## Task 7: Log the Result + +Each tool invocation lands in user history for audit purposes. + +```sql + +SELECT tool_name, TO_CHAR(start_date, 'YYYY-MM-DD HH24:MI:SS') AS executed_at + FROM user_ai_agent_tool_history + ORDER BY start_date DESC + FETCH FIRST 5 ROWS ONLY; + +``` + +## Summary + +You built Seer Equity’s first retail-focused agent. It retrieves live submission status, respects loyalty perks, and leaves a trace. Subsequent labs will expand the toolset, add routing logic, and embed durable memory. + +## Workshop Plan (Generated) +- Align narrative with Seer Equity inventory specialists answering submission status for VIP collectors. +- Define `ITEM_SUBMISSIONS` schema fields to capture condition grades, valuation bands, and provenance flags. +- Script agent build steps showing `INVENTORY_AGENT` using `ITEM_LOOKUP` to return actionable facts plus policy citations. +- Reinforce metrics: faster status responses, zero instruction-only replies, and initial audit logging footprint. diff --git a/ai4u/industries/retail/where-memory-lives/where-memory-lives.md b/ai4u/industries/retail/where-memory-lives/where-memory-lives.md new file mode 100644 index 000000000..1113205b5 --- /dev/null +++ b/ai4u/industries/retail/where-memory-lives/where-memory-lives.md @@ -0,0 +1,151 @@ +# Where Agent Memory Should Live + +## Introduction + +Agent memory must be structured and governed. This lab designs Seer Equity Retail’s memory architecture by separating facts, tasks, decisions, and references across JSON storage, duality views, and audit boundaries. + +### Scenario + +David Huang, Governance Lead, wants confidence that Alex Martinez’s loyalty perks, open tasks, and precedent decisions live in the right stores with the correct retention policies. You will design schemas and confirm retrieval patterns. + +### Objectives + +- Model memory categories in `AGENT_MEMORY`, `DECISION_MEMORY`, and `REFERENCE_KNOWLEDGE`. +- Build JSON duality views for convenient access while keeping relational governance. +- Demonstrate CRUD patterns that respect role-based access. + +## Task 1: Create Memory Views + +```sql + +CREATE OR REPLACE VIEW memory_facts AS +SELECT content."about" AS collector, + content."fact" AS fact_detail, + content."category" AS category, + content."effective" AS effective_date + FROM agent_memory + WHERE memory_type = 'FACT'; + +CREATE OR REPLACE VIEW memory_tasks AS +SELECT content."submission_id" AS submission_id, + content."task_detail" AS task_detail, + content."assigned_to" AS assigned_to, + content."due_at" AS due_at + FROM agent_memory + WHERE memory_type = 'TASK'; + +``` + +## Task 2: Populate Task Memories + +```sql + +INSERT INTO agent_memory (memory_id, agent_id, memory_type, content) +VALUES ( + sys_guid(), + 'ROUTING_AGENT', + 'TASK', + json_object( + 'submission_id' VALUE 'ITEM-40102', + 'task_detail' VALUE 'Schedule standard appraisal follow-up with Marcus Patel.', + 'assigned_to' VALUE 'AUTHENTICATION_AGENT', + 'due_at' VALUE TO_CHAR(SYSDATE + 1, 'YYYY-MM-DD') + )); + +COMMIT; + +``` + +## Task 3: Model Decision Memory + +```sql + +CREATE TABLE decision_memory ( + decision_id VARCHAR2(36) PRIMARY KEY, + submission_id VARCHAR2(20), + collector_name VARCHAR2(100), + decision_summary CLOB, + embedding_vector VECTOR(1024), + decided_by VARCHAR2(50), + decided_ts DATE DEFAULT SYSDATE +); + +``` + +Explain how embeddings will be loaded in Lab 9 to power semantic search. + +## Task 4: Create Duality Views + +```sql + +CREATE OR REPLACE JSON RELATIONAL DUALITY VIEW decision_memory_view AS + SELECT decision_id, + json_object( + 'submission_id' VALUE submission_id, + 'collector_name' VALUE collector_name, + 'decision_summary' VALUE decision_summary, + 'decided_by' VALUE decided_by, + 'decided_ts' VALUE TO_CHAR(decided_ts, 'YYYY-MM-DD"T"HH24:MI:SS') + ) + FROM decision_memory; + +``` + +## Task 5: Register Governance Tools + +```sql + +BEGIN + DBMS_CLOUD_AI_AGENT.CREATE_TOOL( + tool_name => 'MEMORY_FACT_TOOL', + attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"inventory_profile"}}', + description => 'Retrieve fact memories for collectors.' + ); + + DBMS_CLOUD_AI_AGENT.CREATE_TOOL( + tool_name => 'MEMORY_TASK_TOOL', + attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"authentication_profile"}}', + description => 'List pending tasks and due dates for authentication teams.' + ); +END; +/ + +``` + +## Task 6: Enforce Access Control + +- Inventory agents can read facts but not tasks. +- Authentication agents can read tasks but not modify facts without governance approval. + +```sql + +GRANT SELECT ON memory_facts TO inventory_agent_user; +GRANT SELECT ON memory_tasks TO authentication_agent_user; +REVOKE SELECT ON memory_tasks FROM inventory_agent_user; + +``` + +## Task 7: Demonstrate Retrieval + +```sql + +SELECT ai_response + FROM TABLE(DBMS_CLOUD_AI.ASK_AGENT( + agent_name => 'INVENTORY_AGENT', + prompt => 'List loyalty facts for Alex Martinez from memory_facts.' )); + +SELECT ai_response + FROM TABLE(DBMS_CLOUD_AI.ASK_AGENT( + agent_name => 'AUTHENTICATION_AGENT', + prompt => 'Review open tasks for authentication agents using memory_tasks.' )); + +``` + +## Summary + +Seer Equity’s memory architecture now separates facts, tasks, and decisions with governed access paths. This foundation supports the richer memory types introduced in the next lab. + +## Workshop Plan (Generated) +- Architect memory stores separating collector facts, loyalty perks, workflow checkpoints, and task reminders. +- Map each JSON Duality region to Seer Equity operations teams for durability and security. +- Provide table schemas and notebook snippets aligning with retail data categories. diff --git a/ai4u/industries/retail/why-agents-need-memory/why-agents-need-memory.md b/ai4u/industries/retail/why-agents-need-memory/why-agents-need-memory.md new file mode 100644 index 000000000..cee3e7fc7 --- /dev/null +++ b/ai4u/industries/retail/why-agents-need-memory/why-agents-need-memory.md @@ -0,0 +1,143 @@ +# Why Agents Need Memory + +## Introduction + +Without durable memory, Seer Equity Retail repeats the same questions with every collector. This lab demonstrates the forgetting problem and shows how to persist facts, preferences, and loyalty perks so `INVENTORY_AGENT` and `AUTHENTICATION_AGENT` never lose context. + +### Scenario + +Alex Martinez expects the system to remember a 20 percent loyalty discount and email-only updates. Today, specialists capture the notes in spreadsheets. Agents forget between calls, leading to frustration and escalations. + +### Objectives + +- Experience the forgetting problem with a fresh `INVENTORY_AGENT` session. +- Insert loyalty facts and contact preferences into `AGENT_MEMORY`. +- Retrieve and validate memory entries through SQL and agent prompts. +- Enforce guardrails so only authorized tools write or read specific memory categories. + +## Task 1: Demonstrate Forgetting + +```sql + +EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('INVENTORY_SUPPORT_TEAM'); +SELECT AI AGENT 'Remember that Alex Martinez has a 20 percent loyalty discount and prefers email updates.'; + +-- Clear session context (simulated) +EXEC DBMS_SESSION.RESET_PACKAGE; + +SELECT AI AGENT 'What do you know about Alex Martinez loyalty perks?'; + +``` + +Observe the agent has no memory. + +## Task 2: Seed Memory Facts + +```sql + +INSERT INTO agent_memory (memory_id, agent_id, memory_type, content) +VALUES ( + sys_guid(), + 'INVENTORY_AGENT', + 'FACT', + json_object( + 'fact' VALUE 'Alex Martinez has a 20% loyalty discount and email-only communication requirement', + 'category' VALUE 'loyalty_preference', + 'about' VALUE 'Alex Martinez', + 'effective' VALUE TO_CHAR(SYSDATE, 'YYYY-MM-DD') + )); + +COMMIT; + +``` + +## Task 3: Register Memory Tools + +```sql + +BEGIN + DBMS_CLOUD_AI_AGENT.CREATE_TOOL( + tool_name => 'MEMORY_LOOKUP_TOOL', + attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"inventory_profile"}}', + description => 'Retrieve loyalty and contact preferences from AGENT_MEMORY.' + ); +END; +/ +``` + +## Task 4: Update Agent Instructions + +```sql + +BEGIN + DBMS_CLOUD_AI_AGENT.UPDATE_AGENT( + agent_name => 'INVENTORY_AGENT', + attributes => json_object( + 'role' VALUE 'You are a Seer Equity inventory specialist. Always consult memory before answering.', + 'instructions' VALUE 'Use MEMORY_LOOKUP_TOOL when collectors are mentioned. Cite loyalty perks, communication preferences, and effective dates.' + ) + ); +END; +/ + +BEGIN + DBMS_CLOUD_AI_AGENT.UPDATE_TASK( + task_name => 'INVENTORY_LOOKUP_TASK', + attributes => json_object( + 'prompt' VALUE 'Answer collector questions about submission status and loyalty perks. +Request: {query}', + 'tools' VALUE json_array('ITEM_LOOKUP_TOOL', 'MEMORY_LOOKUP_TOOL') + ) + ); +END; +/ + +``` + +## Task 5: Retrieve Memory + +```sql + +SELECT ai_response + FROM TABLE(DBMS_CLOUD_AI.ASK_AGENT( + agent_name => 'INVENTORY_AGENT', + prompt => 'Summarize loyalty perks and communication preferences for Alex Martinez.' )); + +``` + +The agent should reference the loyalty discount and email preference. + +## Task 6: Guard Memory Writes + +Only governance-approved tools can modify memory. + +```sql + +GRANT INSERT, UPDATE ON agent_memory TO authentication_agent_user; +REVOKE DELETE ON agent_memory FROM authentication_agent_user; +REVOKE INSERT, UPDATE, DELETE ON agent_memory FROM inventory_agent_user; + +``` + +Explain to learners how inventory agents request updates from governance teams instead of writing directly. + +## Task 7: Audit Memory Usage + +```sql + +SELECT tool_name, TO_CHAR(start_date, 'YYYY-MM-DD HH24:MI:SS') AS executed_at + FROM user_ai_agent_tool_history + WHERE tool_name = 'MEMORY_LOOKUP_TOOL' + ORDER BY start_date DESC + FETCH FIRST 5 ROWS; + +``` + +## Summary + +Durable memory eliminates repeat questioning and ensures agents act on loyalty commitments consistently. Subsequent labs extend these patterns to procedural, decision, and reference memories. + +## Workshop Plan (Generated) +- Center story on Alex Martinez’s loyalty discount and communication preferences stored in `AGENT_MEMORY`. +- Provide exercises that detect memory gaps, add facts, and verify retrieval across sessions. +- Include governance reminders ensuring memory updates respect privacy and audit constraints. diff --git a/ai4u/industries/retail/workshops/sandbox/index.html b/ai4u/industries/retail/workshops/sandbox/index.html new file mode 100644 index 000000000..45ad33911 --- /dev/null +++ b/ai4u/industries/retail/workshops/sandbox/index.html @@ -0,0 +1,65 @@ + + + + + + + + + Oracle LiveLabs + + + + + + + + + + + + +
+
+
+
+
+
+
+
+ + + + + diff --git a/ai4u/industries/retail/workshops/sandbox/manifest.json b/ai4u/industries/retail/workshops/sandbox/manifest.json new file mode 100644 index 000000000..b5349374b --- /dev/null +++ b/ai4u/industries/retail/workshops/sandbox/manifest.json @@ -0,0 +1,66 @@ +{ + "workshoptitle": "AI4U – Seer Equity Retail Edition", + "help": "livelabs-help-db_us@oracle.com", + "tutorials": [ + { + "title": "Introduction", + "description": "Meet Seer Equity Retail Intelligence", + "filename": "../../introduction/introduction.md" + }, + { + "title": "Getting Started", + "description": "Prepare the retail environment", + "filename": "../../getting-started/getting_started.md" + }, + { + "title": "Lab 1: What Is an AI Agent, Really?", + "description": "Build the inventory submission lookup agent", + "filename": "../../what-is-agent/what-is-agent.md" + }, + { + "title": "Lab 2: Why Agents Beat Zero Shot Prompts", + "description": "Compare prompts vs agents for status updates", + "filename": "../../agents-vs-zero-shot/agents-vs-zero-shot.md" + }, + { + "title": "Lab 3: How Agents Plan the Work", + "description": "Assemble collector briefings and routing plans", + "filename": "../../how-agents-plan/how-agents-plan.md" + }, + { + "title": "Lab 4: How Agents Execute the Work", + "description": "Implement retail routing and workflow logging", + "filename": "../../how-agents-execute/how-agents-execute.md" + }, + { + "title": "Lab 5: Why Agents Need Memory", + "description": "Persist loyalty facts across sessions", + "filename": "../../why-agents-need-memory/why-agents-need-memory.md" + }, + { + "title": "Lab 6: Enterprise Data Integration", + "description": "Ground valuations in policy data", + "filename": "../../enterprise-data/enterprise-data.md" + }, + { + "title": "Lab 7: Where Agent Memory Should Live", + "description": "Design governed memory stores", + "filename": "../../where-memory-lives/where-memory-lives.md" + }, + { + "title": "Lab 8: The Four Types of Agent Memory", + "description": "Populate context, fact, decision, reference", + "filename": "../../four-memory-types/four-memory-types.md" + }, + { + "title": "Lab 9: How an AI Database Builds Competence", + "description": "Use vector precedents for collectibles", + "filename": "../../learning-loop/ai-database-competence.md" + }, + { + "title": "Lab 10: Tools, Safety, and Human Control", + "description": "Enforce retail governance and audit logs", + "filename": "../../tools-safety-control/agents-and-tools.md" + } + ] +} From 7f1481e7ff32ed28383ed1b6c0a26df87c04a428 Mon Sep 17 00:00:00 2001 From: Linda Foinding Date: Tue, 24 Mar 2026 10:21:45 -0400 Subject: [PATCH 2/6] Added quiz to Upgrade Lab --- .../16-check-your-understanding.md | 80 ++++++++++++++++++ .../images/upgrade-badge.png | Bin 0 -> 23308 bytes .../workshops/livelabs/manifest.json | 5 ++ 3 files changed, 85 insertions(+) create mode 100644 hitchhikers-guide-upgrade-to-26ai/16-check-your-understanding/16-check-your-understanding.md create mode 100644 hitchhikers-guide-upgrade-to-26ai/16-check-your-understanding/images/upgrade-badge.png diff --git a/hitchhikers-guide-upgrade-to-26ai/16-check-your-understanding/16-check-your-understanding.md b/hitchhikers-guide-upgrade-to-26ai/16-check-your-understanding/16-check-your-understanding.md new file mode 100644 index 000000000..c26241bec --- /dev/null +++ b/hitchhikers-guide-upgrade-to-26ai/16-check-your-understanding/16-check-your-understanding.md @@ -0,0 +1,80 @@ +# Check Your Understanding + +## Introduction + +This lab reviews the main upgrade concepts from the workshop. Complete the scored questions to check your understanding of upgrade methods, supported source versions, architecture changes, and pre-upgrade checks. + +Estimated Time: 10 minutes + +### Objectives + +In this lab, you will: + +* Review the primary upgrade method for Oracle AI Database 26ai +* Confirm the supported direct upgrade source releases +* Check you overall understanding + +### Prerequisites + +Complete the earlier workshop labs, or review the workshop material before taking this quiz. + +```quiz-config +passing: 75 +badge: images/upgrade-badge.png +``` + +## Task 1: Complete the quiz + +1. Review the questions before you submit your answers. + +2. Complete the scored quiz blocks below. You need 75% or higher to pass. + + ```quiz score + Q: Which tool is recommended as the primary method to upgrade to Oracle AI Database 26ai? + - Data Pump + - SQL*Loader + * AutoUpgrade + - RMAN + > Oracle recommends AutoUpgrade because it automates many upgrade tasks and checks. + ``` + + ```quiz score + Q: Which database versions support a direct upgrade to Oracle AI Database 26ai? + - 10g and 11g + - 12c only + * 19c and 21c + - 18c only + > Oracle supports a direct upgrade to Oracle AI Database 26ai from Oracle Database 19c and 21c. + ``` + + ```quiz score + Q: What architecture is required in Oracle AI Database 26ai? + - Single Instance only + - Non-CDB architecture + * Multitenant architecture (CDB/PDB) + - Data Guard only + > Oracle AI Database 26ai requires multitenant architecture. Oracle no longer supports non-CDB architecture. + ``` + + ```quiz score + Q: What is the purpose of running AutoUpgrade in analyze mode? + - To start the database upgrade + * To check compatibility and detect issues before upgrading + - To create backups + - To run performance tests + > Analyze mode checks readiness and detects issues before the actual upgrade starts. + ``` + + ```quiz score + Q: Which upgrade method involves unplugging a PDB from one CDB and plugging it into another CDB? + - Rolling upgrade + * Unplug/Plugin upgrade + - Data Pump migration + - Logical standby upgrade + > Unplug/plugin upgrade moves a PDB from one CDB to another by unplugging it from the source and plugging it into the target. + ``` + +## Acknowledgements + +* **Author** - Alex Zaballa, Linda Foinding +* **Last Updated By/Date** - Linda Foinding, March 2026 diff --git a/hitchhikers-guide-upgrade-to-26ai/16-check-your-understanding/images/upgrade-badge.png b/hitchhikers-guide-upgrade-to-26ai/16-check-your-understanding/images/upgrade-badge.png new file mode 100644 index 0000000000000000000000000000000000000000..a3c867e858df20f3977856ee47783ba4c667fc01 GIT binary patch literal 23308 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 Date: Tue, 24 Mar 2026 10:24:19 -0400 Subject: [PATCH 3/6] Revert "WMS:12008 AI4U Retail Lab" This reverts commit c84fecc98a04faa20cd783ea08dbeb1bc7f48fd2. --- .../agents-vs-zero-shot.md | 251 ------------------ .../retail/enterprise-data/enterprise-data.md | 148 ----------- .../four-memory-types/four-memory-types.md | 167 ------------ .../retail/getting-started/getting_started.md | 182 ------------- .../how-agents-execute/how-agents-execute.md | 198 -------------- .../retail/how-agents-plan/how-agents-plan.md | 155 ----------- .../retail/introduction/introduction.md | 105 -------- .../learning-loop/ai-database-competence.md | 180 ------------- .../tools-safety-control/agents-and-tools.md | 216 --------------- .../retail/what-is-agent/what-is-agent.md | 207 --------------- .../where-memory-lives/where-memory-lives.md | 151 ----------- .../why-agents-need-memory.md | 143 ---------- .../retail/workshops/sandbox/index.html | 65 ----- .../retail/workshops/sandbox/manifest.json | 66 ----- 14 files changed, 2234 deletions(-) delete mode 100644 ai4u/industries/retail/agents-vs-zero-shot/agents-vs-zero-shot.md delete mode 100644 ai4u/industries/retail/enterprise-data/enterprise-data.md delete mode 100644 ai4u/industries/retail/four-memory-types/four-memory-types.md delete mode 100644 ai4u/industries/retail/getting-started/getting_started.md delete mode 100644 ai4u/industries/retail/how-agents-execute/how-agents-execute.md delete mode 100644 ai4u/industries/retail/how-agents-plan/how-agents-plan.md delete mode 100644 ai4u/industries/retail/introduction/introduction.md delete mode 100644 ai4u/industries/retail/learning-loop/ai-database-competence.md delete mode 100644 ai4u/industries/retail/tools-safety-control/agents-and-tools.md delete mode 100644 ai4u/industries/retail/what-is-agent/what-is-agent.md delete mode 100644 ai4u/industries/retail/where-memory-lives/where-memory-lives.md delete mode 100644 ai4u/industries/retail/why-agents-need-memory/why-agents-need-memory.md delete mode 100644 ai4u/industries/retail/workshops/sandbox/index.html delete mode 100644 ai4u/industries/retail/workshops/sandbox/manifest.json diff --git a/ai4u/industries/retail/agents-vs-zero-shot/agents-vs-zero-shot.md b/ai4u/industries/retail/agents-vs-zero-shot/agents-vs-zero-shot.md deleted file mode 100644 index 73c9d7b6e..000000000 --- a/ai4u/industries/retail/agents-vs-zero-shot/agents-vs-zero-shot.md +++ /dev/null @@ -1,251 +0,0 @@ -# Why Agents Beat Zero-Shot Prompts - -## Introduction - -Zero-shot prompts describe processes. Seer Equity Retail needs automation that actually completes them. In this lab you will compare a plain LLM prompt, a Select AI query, and a governed agent that updates retail submission data in real time. - -### Scenario - -Marcus Patel, Senior Authenticator, wants to move a batch of submissions. He needs to know which items remain in `AUTHENTICATING` status and mark any finished pieces as `GRADED`. The chatbot explains steps. The agent with tools executes them. - -### Objectives - -- Create a `SAMPLE_ITEMS` table with retail-specific status values. -- Register lookup and update PL/SQL functions as tools on `inventory_profile`. -- Contrast zero-shot chat, Select AI, and SELECT AI AGENT behavior. -- Demonstrate guardrails so only inventory roles can update statuses. - -## Task 1: Import the Lab Notebook - -Open `lab2-agents-vs-zero-shot.json` in Oracle Machine Learning and run the cells as instructed. - -## Task 2: Experience Zero-Shot Prompting - -```sql - -EXEC DBMS_CLOUD_AI.SET_PROFILE('inventory_profile'); -SELECT AI CHAT How do I check the status of a collector submission; -SELECT AI CHAT What is the status of submission ITEM-30214; -SELECT AI CHAT Update submission ITEM-30214 to graded; - -``` - -Observe that the responses describe actions but do not access Seer Equity data. - -## Task 3: Build Sample Items for Testing - -```sql - -CREATE TABLE sample_items ( - submission_id VARCHAR2(20) PRIMARY KEY, - submitter VARCHAR2(100), - item_type VARCHAR2(40), - status VARCHAR2(30), - declared_value NUMBER(12,2), - condition_grade NUMBER(3,1), - last_update_ts DATE DEFAULT SYSDATE -); - -COMMENT ON COLUMN sample_items.status IS 'SUBMITTED, AUTHENTICATING, GRADED, LISTED, or REJECTED.'; - -INSERT INTO sample_items VALUES ('ITEM-40101', 'Alex Martinez', 'Sports Card', 'AUTHENTICATING', 7200, 9.1, SYSDATE - 2); -INSERT INTO sample_items VALUES ('ITEM-40102', 'Maria Santos', 'Vintage Comic', 'GRADED', 2100, 8.3, SYSDATE - 4); -INSERT INTO sample_items VALUES ('ITEM-40103', 'James Wilson', 'Memorabilia', 'SUBMITTED', 360, 6.2, SYSDATE - 1); -INSERT INTO sample_items VALUES ('ITEM-40104', 'Priya Desai', 'Limited Sneaker', 'LISTED', 980, 8.8, SYSDATE - 3); -COMMIT; - -``` - -## Task 4: Register Lookup and Update Tools - -```sql - -CREATE OR REPLACE FUNCTION lookup_sample_item(p_submission_id VARCHAR2) RETURN CLOB AS - v_payload CLOB; -BEGIN - SELECT json_object( - 'submission_id' VALUE submission_id, - 'status' VALUE status, - 'item_type' VALUE item_type, - 'declared_value' VALUE declared_value, - 'condition_grade' VALUE condition_grade, - 'last_update_ts' VALUE TO_CHAR(last_update_ts, 'YYYY-MM-DD HH24:MI:SS') - ) - INTO v_payload - FROM sample_items - WHERE submission_id = p_submission_id; - RETURN v_payload; -EXCEPTION - WHEN NO_DATA_FOUND THEN - RETURN json_object('error' VALUE 'Submission not found'); -END; -/ - -CREATE OR REPLACE FUNCTION update_sample_item_status( - p_submission_id VARCHAR2, - p_new_status VARCHAR2 -) RETURN VARCHAR2 AS -BEGIN - UPDATE sample_items - SET status = p_new_status, - last_update_ts = SYSDATE - WHERE submission_id = p_submission_id; - - IF SQL%ROWCOUNT = 0 THEN - RETURN 'No submission updated'; - END IF; - - RETURN 'Status updated to ' || p_new_status; -END; -/ - -``` - -Expose the functions as governed tools. - -```sql - -BEGIN - DBMS_CLOUD_AI_AGENT.CREATE_TOOL( - tool_name => 'ITEM_LOOKUP_TOOL', - attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"inventory_profile"}}', - description => 'Retrieves submission details for Seer Equity retail items.' - ); - - DBMS_CLOUD_AI_AGENT.CREATE_TOOL( - tool_name => 'ITEM_UPDATE_TOOL', - attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"inventory_profile"}}', - description => 'Updates submission status when policy allows.' - ); -END; -/ - -``` - -## Task 5: Compare Interaction Modes - -### Zero-Shot - -```sql - -SELECT AI CHAT Mark ITEM-40101 as graded; - -``` - -### Select AI - -```sql - -SELECT AI USING PROFILE inventory_profile 'What is the status of submission ITEM-40101?'; - -``` - -### Agent Execution - -```sql - -BEGIN - DBMS_CLOUD_AI_AGENT.CREATE_AGENT( - agent_name => 'RETAIL_STATUS_AGENT', - attributes => json_object( - 'role' VALUE 'You verify and update Seer Equity retail submissions. Use tools, cite statuses, and log outcomes.', - 'instructions' VALUE 'Only update when the collector or policy requires it; otherwise report the current state.' - ) - ); -END; -/ - -BEGIN - DBMS_CLOUD_AI_AGENT.CREATE_TASK( - task_name => 'STATUS_UPDATE_TASK', - attributes => json_object( - 'prompt' VALUE 'Request: {query}', - 'tools' VALUE json_array('ITEM_LOOKUP_TOOL', 'ITEM_UPDATE_TOOL') - ) - ); -END; -/ - -BEGIN - DBMS_CLOUD_AI_AGENT.CREATE_TEAM( - team_name => 'STATUS_TEAM', - attributes => json_object( - 'agents' VALUE json_array(json_object('name' VALUE 'RETAIL_STATUS_AGENT', 'task' VALUE 'STATUS_UPDATE_TASK')), - 'process' VALUE 'sequential' - ) - ); -END; -/ - -EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('STATUS_TEAM'); -SELECT AI AGENT 'Check submission ITEM-40101. If it is still authenticating, mark it as graded and confirm the change.'; - -``` - -Verify the update happened: - -```sql - -SELECT submission_id, status FROM sample_items WHERE submission_id = 'ITEM-40101'; - -``` - -## Task 6: Enforce Guardrails - -Allow updates for inventory specialists only. - -```sql - -GRANT UPDATE ON sample_items TO inventory_agent_user; -REVOKE UPDATE ON sample_items FROM authentication_agent_user; - -``` - -Impersonate the authentication profile to confirm updates are blocked. - -```sql - -EXEC DBMS_CLOUD_AI_AGENT.SET_PROFILE('authentication_profile'); -SELECT AI AGENT 'Attempt to update submission ITEM-40102 to AUTHENTICATING.'; - -``` - -The attempt should fail, proving role separation. - -## Task 7: Log the Outcome - -```sql - -INSERT INTO item_workflow_log (log_id, submitted_by, action, item_reference, status_note) -VALUES ( - sys_guid(), - 'INVENTORY_AGENT', - 'LAB2_AGENT_UPDATE', - 'ITEM-40101', - 'Agent changed status from AUTHENTICATING to GRADED using authorized tool' -); - -COMMIT; - -``` - -Query recent tool history: - -```sql - -SELECT tool_name, TO_CHAR(start_date, 'HH24:MI:SS') AS called_at - FROM user_ai_agent_tool_history - ORDER BY start_date DESC - FETCH FIRST 5 ROWS ONLY; - -``` - -## Summary - -Zero-shot prompting narrates instructions. Select AI retrieves data. Governed agents check conditions, invoke tools, and update records while leaving audit trails. Seer Equity Retail uses this pattern to keep authentication pipelines moving without losing control. - -## Workshop Plan (Generated) -- Contrast zero-shot prompts vs governed agents through Marcus Patel’s batch authentication workflow. -- Update sample data and tool registrations (`ITEM_LOOKUP_TOOL`, `ITEM_UPDATE_TOOL`) with Seer Equity Retail naming. -- Demonstrate guardrails restricting updates to inventory roles while authenticators remain read-only. -- Capture audit log inserts that document automated transitions from AUTHENTICATING to GRADED states. diff --git a/ai4u/industries/retail/enterprise-data/enterprise-data.md b/ai4u/industries/retail/enterprise-data/enterprise-data.md deleted file mode 100644 index 91a124216..000000000 --- a/ai4u/industries/retail/enterprise-data/enterprise-data.md +++ /dev/null @@ -1,148 +0,0 @@ -# Enterprise Data Integration - -## Introduction - -Retail valuations must cite official pricing policies, SKU catalogs, and provenance standards. This lab connects Seer Equity agents to enterprise data so recommendations come from governed sources, not guesses. - -### Scenario - -Marcus Patel needs to justify pricing for ITEM-40105. He must reference the official `PRICING_POLICIES` table and loyalty history before finalizing the recommendation. - -### Objectives - -- Load policy excerpts, SKU catalog entries, and fraud rules into dedicated tables. -- Register retrieval tools that expose enterprise data to agents with read-only access. -- Demonstrate RAG prompts that quote policy IDs and clauses within responses. - -## Task 1: Review Enterprise Tables - -Ensure the schema contains: - -- `PRICING_POLICIES` – official pricing tiers, maximum discounts, provenance requirements. -- `REFERENCE_KNOWLEDGE` – curated policy excerpts for RAG. -- `LOYALTY_HISTORY` – record of loyalty adjustments and exception approvals. - -```sql - -SELECT table_name FROM user_tables - WHERE table_name IN ('PRICING_POLICIES', 'REFERENCE_KNOWLEDGE', 'LOYALTY_HISTORY') - ORDER BY table_name; - -``` - -## Task 2: Seed Policy Content - -```sql - -INSERT INTO pricing_policies (policy_id, title, policy_text, max_discount, applies_to) -VALUES ('POL-PLAT', 'Platinum Collector Policy', 'Platinum collectors receive up to 20% loyalty discount on authenticated items under $10,000. Expert appraisal required above $5,000.', 0.20, 'Platinum Tier'); - -INSERT INTO pricing_policies (policy_id, title, policy_text, max_discount, applies_to) -VALUES ('POL-GOLD', 'Gold Collector Policy', 'Gold collectors receive up to 10% loyalty discount on items under $5,000. Standard appraisal required above $2,500.', 0.10, 'Gold Tier'); - -COMMIT; - -``` - -## Task 3: Populate Reference Knowledge - -```sql - -INSERT INTO reference_knowledge (reference_id, topic, content) -VALUES ( - sys_guid(), - 'Routing Tiers', - json_object( - 'auto_list' VALUE 'Items under $500 with condition ≥7.0 and rarity COMMON auto-list.', - 'standard' VALUE 'Items $500–$5,000 or rarity LIMITED require standard appraisal.', - 'expert' VALUE 'Items over $5,000 or rarity GRAIL require expert appraisal with provenance attachments.' - ) -); - -COMMIT; - -``` - -## Task 4: Register Enterprise Data Tools - -```sql - -BEGIN - DBMS_CLOUD_AI_AGENT.CREATE_TOOL( - tool_name => 'POLICY_LOOKUP_TOOL', - attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"authentication_profile"}}', - description => 'Retrieve official pricing policies and discount thresholds.' - ); - - DBMS_CLOUD_AI_AGENT.CREATE_TOOL( - tool_name => 'REFERENCE_LOOKUP_TOOL', - attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"authentication_profile"}}', - description => 'Fetch curated policy excerpts and routing guidance for RAG prompts.' - ); -END; -/ - -``` - -## Task 5: Update Authentication Agent - -```sql - -BEGIN - DBMS_CLOUD_AI_AGENT.UPDATE_AGENT( - agent_name => 'AUTHENTICATION_AGENT', - attributes => json_object( - 'role' VALUE 'You authenticate submissions and provide policy-backed valuations.', - 'instructions' VALUE 'Cite PRICING_POLICIES policy_id and relevant clauses for each recommendation.' - ) - ); -END; -/ - -BEGIN - DBMS_CLOUD_AI_AGENT.UPDATE_TASK( - task_name => 'AUTHENTICATION_TASK', - attributes => json_object( - 'prompt' VALUE 'Answer authentication questions backed by policy data. -Request: {query}', - 'tools' VALUE json_array('POLICY_LOOKUP_TOOL', 'REFERENCE_LOOKUP_TOOL', 'MEMORY_LOOKUP_TOOL') - ) - ); -END; -/ - -``` - -## Task 6: Ask for a Policy-Cited Recommendation - -```sql - -SELECT ai_response - FROM TABLE(DBMS_CLOUD_AI.ASK_AGENT( - agent_name => 'AUTHENTICATION_AGENT', - prompt => 'Provide price guidance for submission ITEM-40105, including applicable policy IDs and justification for the proposed tier.' )); - -``` - -Verify the response references `POL-PLAT`, loyalty discount limits, and routing tiers. - -## Task 7: Audit Policy Usage - -```sql - -SELECT tool_name, SUBSTR(output, 1, 120) AS excerpt - FROM user_ai_agent_tool_history - WHERE tool_name IN ('POLICY_LOOKUP_TOOL', 'REFERENCE_LOOKUP_TOOL') - ORDER BY start_date DESC - FETCH FIRST 5 ROWS; - -``` - -## Summary - -Enterprise data integration ensures every valuation cites the same source of truth. Agents no longer guess; they pull policy IDs, discount thresholds, and provenance requirements straight from governed tables. - -## Workshop Plan (Generated) -- Integrate Seer Equity pricing policies, SKU catalogs, and fraud rules into RAG examples. -- Demonstrate certified data sources powering price guidance, restocking fees, and policy citations. -- Highlight alignment with retail megalab scenario around high-value electronics and apparel returns. diff --git a/ai4u/industries/retail/four-memory-types/four-memory-types.md b/ai4u/industries/retail/four-memory-types/four-memory-types.md deleted file mode 100644 index efb3d7427..000000000 --- a/ai4u/industries/retail/four-memory-types/four-memory-types.md +++ /dev/null @@ -1,167 +0,0 @@ -# The Four Types of Agent Memory - -## Introduction - -Seer Equity Retail relies on context, facts, decisions, and reference knowledge to deliver consistent authentication experiences. This lab maps each memory type to concrete collectibles scenarios. - -### Memory Types - -1. **Context Memory** – Active session details like current submission and routing status. -2. **Fact Memory** – Persistent collector preferences, loyalty perks, and contact requirements. -3. **Decision Memory** – Prior authentication outcomes, rationale, and human involvement. -4. **Reference Memory** – Policy excerpts, grading standards, and routing thresholds. - -### Objectives - -- Populate each memory type with retail-focused examples. -- Expose helper functions to insert and retrieve memory content. -- Verify agents reference all four types when answering collector questions. - -## Task 1: Context Memory - -```sql - -INSERT INTO agent_memory (memory_id, agent_id, memory_type, content) -VALUES ( - sys_guid(), - 'INVENTORY_AGENT', - 'CONTEXT', - json_object( - 'session_id' VALUE 'CALL-2026-0219-01', - 'active_submission' VALUE 'ITEM-40101', - 'current_status' VALUE 'AUTHENTICATING', - 'collector' VALUE 'Alex Martinez' - )); - -COMMIT; - -``` - -## Task 2: Fact Memory - -```sql - -INSERT INTO agent_memory (memory_id, agent_id, memory_type, content) -VALUES ( - sys_guid(), - 'INVENTORY_AGENT', - 'FACT', - json_object( - 'fact' VALUE 'Alex Martinez has a 20% loyalty discount and prefers email updates', - 'category' VALUE 'loyalty_preference', - 'collector' VALUE 'Alex Martinez' - )); - -COMMIT; - -``` - -## Task 3: Decision Memory - -```sql - -INSERT INTO decision_memory (decision_id, submission_id, collector_name, decision_summary, decided_by) -VALUES ( - sys_guid(), - 'ITEM-39990', - 'Alex Martinez', - 'Expert appraisal graded the rookie card 9.2 near mint and recommended listing at $6,800 citing POL-PLAT clause 3.', - 'AUTHENTICATION_AGENT' -); - -COMMIT; - -``` - -## Task 4: Reference Memory - -```sql - -INSERT INTO reference_knowledge (reference_id, topic, content) -VALUES ( - sys_guid(), - 'Authentication Standards', - json_object( - 'grading_scale' VALUE 'Use 1.0–10.0 scale; items under 5.0 trigger expert review.', - 'provenance' VALUE 'Rare items require two provenance documents before listing.', - 'loyalty_rules' VALUE 'Platinum collectors retain minimum 15% discount even when flagged for manual review.' - ) -); - -COMMIT; - -``` - -## Task 5: Helper Function - -```sql - -CREATE OR REPLACE FUNCTION get_memory_bundle(p_collector VARCHAR2) RETURN CLOB AS - v_context CLOB; - v_fact CLOB; - v_decision CLOB; - v_reference CLOB; -BEGIN - SELECT json_arrayagg(content) - INTO v_context - FROM agent_memory - WHERE memory_type = 'CONTEXT' - AND content."collector" = p_collector; - - SELECT json_arrayagg(content) - INTO v_fact - FROM agent_memory - WHERE memory_type = 'FACT' - AND content."collector" = p_collector; - - SELECT json_arrayagg(json_object( - 'submission_id' VALUE submission_id, - 'summary' VALUE decision_summary, - 'decided_by' VALUE decided_by, - 'decided_ts' VALUE TO_CHAR(decided_ts, 'YYYY-MM-DD HH24:MI:SS') - )) - INTO v_decision - FROM decision_memory - WHERE collector_name = p_collector; - - SELECT json_arrayagg(content) - INTO v_reference - FROM reference_knowledge - WHERE topic = 'Authentication Standards'; - - RETURN json_object( - 'context' VALUE NVL(v_context, json_array()), - 'facts' VALUE NVL(v_fact, json_array()), - 'decisions' VALUE NVL(v_decision, json_array()), - 'references' VALUE NVL(v_reference, json_array()) - ); -END; -/ - -``` - -## Task 6: Agent Usage - -```sql - -SELECT ai_response - FROM TABLE(DBMS_CLOUD_AI.ASK_AGENT( - agent_name => 'AUTHENTICATION_AGENT', - prompt => 'Gather all memories about Alex Martinez, including context, facts, decisions, and policy references.' )); - -``` - -The response should mention: -- Active submission and status (context) -- Loyalty discount and communication preference (fact) -- Past expert appraisal decision (decision) -- Relevant policy clauses from reference knowledge (reference) - -## Summary - -Understanding memory categories ensures future labs can enrich embeddings, precedence search, and governance controls without ambiguity. - -## Workshop Plan (Generated) -- Illustrate episodic, semantic, procedural, and reflexive memories using Seer Equity retail events. -- Connect each memory type to corresponding tables (`DECISION_MEMORY`, `REFERENCE_KNOWLEDGE`) and lab artifacts. -- Include scenarios where agents blend memory types to explain valuations and routing choices. diff --git a/ai4u/industries/retail/getting-started/getting_started.md b/ai4u/industries/retail/getting-started/getting_started.md deleted file mode 100644 index e3def76ba..000000000 --- a/ai4u/industries/retail/getting-started/getting_started.md +++ /dev/null @@ -1,182 +0,0 @@ -# Getting Started - -## Introduction - -Welcome to the Seer Equity Retail Intelligence edition of AI4U. This lab prepares your Autonomous Database tenancy so the remaining labs can execute inventory intake, appraisal routing, provenance logging, and governed memory workflows without interruption. You will import notebooks, configure Select AI profiles, load the retail schema, and verify role-based access for intake and authentication teams. - -## Objectives - -- Import the Seer Equity Retail notebooks for every lab. -- Configure Select AI profiles that a) surface submission, pricing, and memory tables for inventory specialists and b) expose appraisal, precedent, and audit artifacts for authenticators. -- Load seed data covering submissions, loyalty tiers, pricing policies, routing logs, and memory stores. -- Validate user accounts, wallets, and privileges for `INVENTORY_AGENT_USER` and `AUTHENTICATION_AGENT_USER`. -- Smoke-test routing and memory packages so later labs focus on the scenario, not setup. - -## Task 1: Import the Retail Notebooks - -Each lab has a companion Oracle Machine Learning notebook under the `industries/retail/notebooks` directory in the AI4U repository. - -1. Open Oracle Machine Learning from your Autonomous Database console. -2. Click **Notebooks**, then **Import**. -3. Choose **Git** and paste the retail notebooks URL: - - ```text - - https://github.com/davidastart/database/tree/main/ai4u/industries/retail/notebooks - - ``` - -4. Import `lab1-item-agent.json` through `lab10-governance.json`. These notebooks mirror the markdown instructions and contain all code cells. - -## Task 2: Confirm Wallets and Credentials - -Separation of duties starts with database accounts. - -```sql - -SELECT username, account_status - FROM dba_users - WHERE username IN ('INVENTORY_AGENT_USER', 'AUTHENTICATION_AGENT_USER'); - -``` - -- Unlock the accounts if necessary with provided lab credentials. -- Download and configure the wallet if your tenancy requires it so notebooks can authenticate with distinct users. - -```sql - -ALTER USER inventory_agent_user IDENTIFIED BY "" ACCOUNT UNLOCK; -ALTER USER authentication_agent_user IDENTIFIED BY "" ACCOUNT UNLOCK; - -``` - -## Task 3: Load the Retail Schema - -Run `setup-retail-schema.ipynb`. It creates the core tables for every lab: - -- `ITEM_SUBMISSIONS`, `ITEM_REQUESTS`, `ITEM_WORKFLOW_LOG` – intake to decision workflow -- `SAMPLE_ITEMS`, `DEMO_CUSTOMERS`, `DEMO_COLLECTIONS` – lightweight datasets for early labs -- `PRICING_POLICIES`, `BS_CUSTOMERS`, `LOYALTY_HISTORY` – enterprise data for policy-cited responses -- `AGENT_MEMORY`, `DECISION_MEMORY`, `REFERENCE_KNOWLEDGE` – memory layers for Labs 5–9 -- `AUDIT_LOG`, `ROLE_ASSIGNMENTS`, `TOOL_REGISTRY` – governance artifacts for Lab 10 - -Verify the tables after execution: - -```sql - -SELECT table_name - FROM user_tables - WHERE table_name IN ('ITEM_SUBMISSIONS', 'ITEM_REQUESTS', 'ITEM_WORKFLOW_LOG', - 'PRICING_POLICIES', 'BS_CUSTOMERS', 'LOYALTY_HISTORY', - 'AGENT_MEMORY', 'DECISION_MEMORY', 'REFERENCE_KNOWLEDGE', - 'AUDIT_LOG') - ORDER BY table_name; - -``` - -## Task 4: Configure Select AI Profiles - -Two profiles keep tools scoped to their duties: - -- `inventory_profile` – grants read/write to submission tables, pricing policies, and fact memories -- `authentication_profile` – exposes routing functions, decision memories, and audit logging - -```sql - -BEGIN - DBMS_CLOUD_AI.SET_ATTRIBUTE( - profile_name => 'inventory_profile', - attribute => 'object_list', - value => json_array( - json_object('schema_name' VALUE user, 'object_name' VALUE 'ITEM_SUBMISSIONS'), - json_object('schema_name' VALUE user, 'object_name' VALUE 'PRICING_POLICIES'), - json_object('schema_name' VALUE user, 'object_name' VALUE 'AGENT_MEMORY'), - json_object('schema_name' VALUE user, 'object_name' VALUE 'LOYALTY_HISTORY') - )); - - DBMS_CLOUD_AI.SET_ATTRIBUTE( - profile_name => 'authentication_profile', - attribute => 'object_list', - value => json_array( - json_object('schema_name' VALUE user, 'object_name' VALUE 'ITEM_REQUESTS'), - json_object('schema_name' VALUE user, 'object_name' VALUE 'ITEM_WORKFLOW_LOG'), - json_object('schema_name' VALUE user, 'object_name' VALUE 'DECISION_MEMORY'), - json_object('schema_name' VALUE user, 'object_name' VALUE 'REFERENCE_KNOWLEDGE'), - json_object('schema_name' VALUE user, 'object_name' VALUE 'AUDIT_LOG') - )); -END; -/ - -``` - -## Task 5: Validate Routing Packages - -Seer Equity retail routing mirrors the finance baseline’s complexity: auto-list, standard appraisal, expert appraisal, and blocked. - -```sql - -DECLARE - v_status VARCHAR2(30); -BEGIN - v_status := retail_routing.evaluate_item( - p_submitter => 'Test Collector', - p_item_type => 'sports_card', - p_declared_value => 450, - p_condition_grade => 8.1, - p_rarity_code => 'COMMON'); - DBMS_OUTPUT.PUT_LINE('Routing result: ' || v_status); -END; -/ - -``` - -Expected outputs to confirm parity: -- `AUTO_LIST` for low-value, high-condition common items -- `STANDARD_APPRAISAL` for mid-tier value -- `EXPERT_APPRAISAL` for rare or high-value assets -- `BLOCKED` when authenticity or policy checks fail - -## Task 6: Seed Memory Content - -Insert baseline facts so Labs 5–7 can demonstrate recall. - -```sql - -INSERT INTO agent_memory (memory_id, agent_id, memory_type, content) -VALUES ( - sys_guid(), - 'INVENTORY_AGENT', - 'FACT', - json_object( - 'fact' VALUE 'Alex Martinez has a 20% loyalty discount and prefers email updates', - 'about' VALUE 'Alex Martinez', - 'category' VALUE 'loyalty_preference', - 'effective' VALUE TO_CHAR(SYSDATE, 'YYYY-MM-DD') - )); - -COMMIT; - -``` - -## Task 7: Verify Audit Permissions - -Ensure authentication users can append but not alter audit logs. - -```sql - -GRANT INSERT ON audit_log TO authentication_agent_user; -REVOKE UPDATE, DELETE ON audit_log FROM authentication_agent_user; - -``` - -Attempting to update should raise `ORA-01031: insufficient privileges`, confirming separation of duties. - -## Next Steps - -Proceed to **Lab 1 – What Is an AI Agent?** to build the inventory lookup agent now that your tenancy mirrors Seer Equity Retail’s operational blueprint. - -## Workshop Plan (Generated) -- Emphasize Seer Equity Retail tenancy setup, including inventory vs authentication database users and profile scoping. -- Ensure notebook import paths, schema loaders, and validation steps reference retail tables and routing packages. -- Highlight memory seeding for Alex Martinez loyalty perks and governance grants for audit-safe operations. -- Document checkpoints that confirm three-tier routing thresholds remain intact after data loads. diff --git a/ai4u/industries/retail/how-agents-execute/how-agents-execute.md b/ai4u/industries/retail/how-agents-execute/how-agents-execute.md deleted file mode 100644 index 472ae9204..000000000 --- a/ai4u/industries/retail/how-agents-execute/how-agents-execute.md +++ /dev/null @@ -1,198 +0,0 @@ -# How Agents Execute the Work - -## Introduction - -Plans mean little without action. In this lab, Seer Equity Retail implements execution logic that routes submissions, writes workflow logs, and enforces the three-tier appraisal model: Auto-List, Standard Appraisal, Expert Appraisal, plus Blocked exceptions. - -### Scenario - -Jennifer Lee, Lead Inventory Specialist, needs the system to decide how to route ITEM-30214. The agent must evaluate value, rarity, and condition, insert workflow records, and trigger the right human or automated follow-up. - -### Objectives - -- Build PL/SQL packages that evaluate submissions against routing thresholds. -- Register execution tools for routing, logging, and status updates. -- Drive `ROUTING_AGENT` to call the correct tool chain, record decisions, and hand off escalations. - -## Task 1: Import the Execution Notebook - -Open `lab4-execution.json` in Oracle Machine Learning. Use it to execute the SQL blocks below. - -## Task 2: Create Workflow Tables - -These tables persist routing steps and audit-ready context. - -```sql - -CREATE TABLE item_requests ( - request_id VARCHAR2(36) PRIMARY KEY, - submission_id VARCHAR2(20) NOT NULL, - requested_tier VARCHAR2(20) NOT NULL, - requested_by VARCHAR2(50) NOT NULL, - request_ts DATE DEFAULT SYSDATE, - notes CLOB -); - -CREATE TABLE item_workflow_log ( - log_id VARCHAR2(36) PRIMARY KEY, - submission_id VARCHAR2(20) NOT NULL, - action_type VARCHAR2(30) NOT NULL, - routed_tier VARCHAR2(20), - actor VARCHAR2(50) NOT NULL, - status_note CLOB, - action_ts DATE DEFAULT SYSDATE -); - -``` - -## Task 3: Implement Routing Logic - -```sql - -CREATE OR REPLACE PACKAGE retail_routing AS - FUNCTION assess_item( - p_submission_id VARCHAR2, - p_declared_value NUMBER, - p_condition_grade NUMBER, - p_rarity_code VARCHAR2 - ) RETURN VARCHAR2; -END retail_routing; -/ - -CREATE OR REPLACE PACKAGE BODY retail_routing AS - FUNCTION assess_item( - p_submission_id VARCHAR2, - p_declared_value NUMBER, - p_condition_grade NUMBER, - p_rarity_code VARCHAR2 - ) RETURN VARCHAR2 AS - BEGIN - IF p_condition_grade < 3.0 OR p_rarity_code = 'FLAGGED' THEN - RETURN 'BLOCKED'; - ELSIF p_declared_value < 500 AND p_condition_grade >= 7.0 AND p_rarity_code = 'COMMON' THEN - RETURN 'AUTO_LIST'; - ELSIF (p_declared_value BETWEEN 500 AND 5000) - OR (p_condition_grade BETWEEN 5.0 AND 6.9) - OR p_rarity_code = 'LIMITED' THEN - RETURN 'STANDARD_APPRAISAL'; - ELSE - RETURN 'EXPERT_APPRAISAL'; - END IF; - END assess_item; -END retail_routing; -/ - -``` - -## Task 4: Register Execution Tools - -```sql - -BEGIN - DBMS_CLOUD_AI_AGENT.CREATE_TOOL( - tool_name => 'ROUTING_DECISION_TOOL', - attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"inventory_profile"}}', - description => 'Call retail_routing.assess_item to determine routing tier.' - ); - - DBMS_CLOUD_AI_AGENT.CREATE_TOOL( - tool_name => 'REQUEST_WRITE_TOOL', - attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"inventory_profile"}}', - description => 'Insert routing requests into ITEM_REQUESTS.' - ); - - DBMS_CLOUD_AI_AGENT.CREATE_TOOL( - tool_name => 'WORKFLOW_LOG_TOOL', - attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"inventory_profile"}}', - description => 'Append execution details to ITEM_WORKFLOW_LOG.' - ); -END; -/ - -``` - -## Task 5: Define the Routing Agent - -```sql - -BEGIN - DBMS_CLOUD_AI_AGENT.CREATE_AGENT( - agent_name => 'ROUTING_AGENT', - attributes => json_object( - 'role' VALUE 'You evaluate Seer Equity retail submissions, selecting routing tiers and logging actions.', - 'instructions' VALUE 'Always report the routing tier and log your decision with rationale referencing value, condition, and rarity.' - ) - ); -END; -/ - -BEGIN - DBMS_CLOUD_AI_AGENT.CREATE_TASK( - task_name => 'ROUTING_TASK', - attributes => json_object( - 'prompt' VALUE 'Route the submission based on value, condition, and rarity. -Request: {query}', - 'tools' VALUE json_array('ROUTING_DECISION_TOOL', 'REQUEST_WRITE_TOOL', 'WORKFLOW_LOG_TOOL') - ) - ); -END; -/ - -BEGIN - DBMS_CLOUD_AI_AGENT.CREATE_TEAM( - team_name => 'ROUTING_TEAM', - attributes => json_object( - 'agents' VALUE json_array(json_object('name' VALUE 'ROUTING_AGENT', 'task' VALUE 'ROUTING_TASK')), - 'process' VALUE 'sequential' - ) - ); -END; -/ - -``` - -## Task 6: Execute a Routing Request - -```sql - -EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('ROUTING_TEAM'); -SELECT AI AGENT 'Evaluate submission ITEM-30214 with declared value 7200, condition grade 9.1, rarity GRAIL. Route it and log the action.'; - -``` - -Verify results: - -```sql - -SELECT submission_id, requested_tier, requested_by - FROM item_requests - ORDER BY request_ts DESC - FETCH FIRST 5 ROWS; - -SELECT submission_id, routed_tier, status_note - FROM item_workflow_log - ORDER BY action_ts DESC - FETCH FIRST 5 ROWS; - -``` - -Expect `EXPERT_APPRAISAL` for the high-value, rare item. Repeat with lower-value submissions to observe `AUTO_LIST` and `STANDARD_APPRAISAL` tiers. - -## Task 7: Handle Blocked Scenarios - -```sql - -SELECT AI AGENT 'Evaluate submission ITEM-40103 with declared value 360, condition 2.5, rarity FLAGGED. Route it and log the result.'; - -``` - -Confirm the log records `BLOCKED` with rationale for compliance review. - -## Summary - -Seer Equity Retail now routes submissions with parity to the finance baseline while reflecting authentic retail triggers. The agent writes every decision to workflow logs, preserving auditable context for governance and human follow-up. - -## Workshop Plan (Generated) -- Implement routing logic mapping value, rarity, and condition to Auto-List, Standard Appraisal, and Expert Appraisal. -- Show `AUTHENTICATION_AGENT` executing tool chains that write to `ITEM_REQUESTS` and `ITEM_WORKFLOW_LOG`. -- Validate parity with original three-tier thresholds while embedding retail-specific table names and status values. diff --git a/ai4u/industries/retail/how-agents-plan/how-agents-plan.md b/ai4u/industries/retail/how-agents-plan/how-agents-plan.md deleted file mode 100644 index 98172a797..000000000 --- a/ai4u/industries/retail/how-agents-plan/how-agents-plan.md +++ /dev/null @@ -1,155 +0,0 @@ -# How Agents Plan the Work - -## Introduction - -Retail authentication requires more than a single lookup. When Priya Desai asks for a briefing on Alex Martinez’s pending submissions, the agent must gather loyalty perks, open routing tasks, and relevant pricing clauses. Planning is how Seer Equity Retail coordinates those steps. - -### Scenario - -Priya needs a ready-to-send briefing before the afternoon standup: which submissions are waiting, how loyalty perks affect pricing, and whether any expert appraisals are overdue. The agent must plan the tool sequence instead of improvising. - -### Objectives - -- Create planning utilities that assemble collector dossiers using `BS_CUSTOMERS`, `ITEM_SUBMISSIONS`, and `PRICING_POLICIES`. -- Teach `PLANNER_AGENT` how to choose tools, document rationale, and hand off to execution agents. -- Ensure plans include routing tier recommendations aligned to Auto-List, Standard Appraisal, and Expert Appraisal thresholds. - -## Task 1: Import the Planning Notebook - -Open `lab3-planning.json` in Oracle Machine Learning and follow the notebook steps for each task. - -## Task 2: Create Supporting Views and Tables - -```sql - -CREATE OR REPLACE VIEW collector_briefings AS -SELECT c.collector_id, - c.collector_name, - c.loyalty_tier, - c.preferred_channel, - s.submission_id, - s.item_type, - s.declared_value, - s.condition_grade, - s.current_status, - s.last_update_ts - FROM bs_customers c - LEFT JOIN item_submissions s ON s.submitter_name = c.collector_name; - -``` - -Add a table for routing recommendations generated by planners. - -```sql - -CREATE TABLE routing_recommendations ( - recommendation_id VARCHAR2(36) PRIMARY KEY, - submission_id VARCHAR2(20), - proposed_tier VARCHAR2(20), - rationale CLOB, - created_by_agent VARCHAR2(50), - created_ts DATE DEFAULT SYSDATE -); - -``` - -## Task 3: Register Planner Tools - -```sql - -BEGIN - DBMS_CLOUD_AI_AGENT.CREATE_TOOL( - tool_name => 'COLLECTOR_BRIEF_TOOL', - attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"inventory_profile"}}', - description => 'Summarize collector submissions, loyalty perks, and pending statuses.' - ); - - DBMS_CLOUD_AI_AGENT.CREATE_TOOL( - tool_name => 'ROUTING_WRITE_TOOL', - attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"inventory_profile"}}', - description => 'Insert planner recommendations into ROUTING_RECOMMENDATIONS.' - ); -END; -/ - -``` - -## Task 4: Define the Planner Agent - -```sql - -BEGIN - DBMS_CLOUD_AI_AGENT.CREATE_AGENT( - agent_name => 'PLANNER_AGENT', - attributes => json_object( - 'role' VALUE 'You are the planning lead for Seer Equity Retail. -Lay out tool sequences, document rationale, and determine routing tiers before execution begins.', - 'instructions' VALUE 'Always justify routing with declared value, condition grade, and rarity. Capture next-step tasks for inventory and authentication teams.' - ) - ); -END; -/ - -BEGIN - DBMS_CLOUD_AI_AGENT.CREATE_TASK( - task_name => 'PLANNING_TASK', - attributes => json_object( - 'prompt' VALUE 'Plan the workflow for the following request: {query}', - 'tools' VALUE json_array('COLLECTOR_BRIEF_TOOL', 'ROUTING_WRITE_TOOL') - ) - ); -END; -/ - -BEGIN - DBMS_CLOUD_AI_AGENT.CREATE_TEAM( - team_name => 'PLANNING_TEAM', - attributes => json_object( - 'agents' VALUE json_array(json_object('name' VALUE 'PLANNER_AGENT', 'task' VALUE 'PLANNING_TASK')), - 'process' VALUE 'sequential' - ) - ); -END; -/ - -``` - -## Task 5: Generate a Plan - -```sql - -EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('PLANNING_TEAM'); -SELECT AI AGENT 'Prepare a briefing for Alex Martinez, including all pending submissions, loyalty perks, and routing tier recommendations.'; - -``` - -Review the output: -- Confirm the agent retrieves collector data and statuses via `COLLECTOR_BRIEF_TOOL`. -- Ensure the plan cites loyalty discounts and valued thresholds when recommending Auto-List vs Standard vs Expert tiers. -- Check `routing_recommendations` for a new entry with the same submission ID and rationale. - -```sql - -SELECT submission_id, proposed_tier, rationale - FROM routing_recommendations - ORDER BY created_ts DESC - FETCH FIRST 5 ROWS ONLY; - -``` - -## Task 6: Hand Off to Execution - -Document how planners hand tasks to execution teams within Seer Equity Retail. - -- `PLANNER_AGENT` generates the sequence and writes the recommendation. -- `INVENTORY_AGENT` (Lab 1) or `ROUTING_AGENT` (Lab 4) reads the recommendation and executes tool calls. -- Governance team queries `routing_recommendations` to confirm rationale before approvals. - -## Summary - -Planning ensures agents do the right work in the right order. With collector briefings and routing recommendations in place, execution teams operate faster without sacrificing control. - -## Workshop Plan (Generated) -- Craft planner tasks that assemble collector dossiers combining loyalty tiers, pending submissions, and policy reminders. -- Use Seer Equity datasets (`BS_CUSTOMERS`, `SAMPLE_ITEMS`, `PRICING_POLICIES`) to populate planning prompts and outputs. -- Illustrate multi-tool orchestration delivering intake briefings and authentication checklists. diff --git a/ai4u/industries/retail/introduction/introduction.md b/ai4u/industries/retail/introduction/introduction.md deleted file mode 100644 index 3d4913cb1..000000000 --- a/ai4u/industries/retail/introduction/introduction.md +++ /dev/null @@ -1,105 +0,0 @@ -# Introduction - -## About this Workshop - -**If your retail AI forgets the collector it helped yesterday, it will fail the flash drop tomorrow.** - -Seer Equity’s Retail Intelligence division runs the returns, consignment, and authentication desks for partner marketplaces and in-store lounges. Manual handoffs, scattered spreadsheets, and chatbot pilots that “explain” instead of “act” are eroding SLA reliability and collector trust. This LiveLab shows you how to build governed, execution-first agents with **agentic memory** on Oracle Database 26ai so every interaction remembers loyalty perks, cites policies, and leaves an audit-ready trail. - -## Meet Seer Equity Retail Intelligence - -You will operate inside Seer Equity’s retail operations hub as it absorbs record submission volumes from online flash sales, sneaker drops, and high-end memorabilia consignments. Intake specialists, authenticators, and governance leads share the same Oracle Database 26ai foundation, yet the workflows still lag behind the demand. - -### The Problems Keeping Leadership Up at Night - -**“VIP collectors keep repeating their loyalty perks every call.”** - -Alex Martinez, a platinum-tier collector, negotiated a 20 percent loyalty discount and email-only communication. Three different specialists captured the notes in spreadsheets that no agent can recall. Alex escalated the complaint directly to Priya Desai, Director of Retail Operations. - -**“Identical submissions receive different grades and price guidance.”** - -Two 1986 rookie cards arrived with similar provenance packets. One auto-listed within an hour; the other stalled for four days and exited with a lower valuation. Marcus Patel, Senior Authenticator, can’t trace which decision path applied where. - -**“We can’t explain what the AI just did.”** - -Governance lead David Huang piloted chatbots to answer status questions. When he asked, “Why did we list ITEM-79214 at $6,200?”, the bot replied with marketing copy and no provenance log. Compliance refused to expand the pilot. - -**“Common items clog the same queues as grails.”** - -A $180 store-exclusive bobblehead flows through the same manual review path as a championship ring. Without value-, rarity-, and condition-based routing, SLA breaches keep climbing. - -**“Separation of duties exists only on paper.”** - -Inventory specialists can both submit and authenticate items in the legacy tools. That violates Seer Equity’s governance policy and invites fraud during high-volume events. - -### How Agent Memory Solves These Problems - -This workshop upgrades Seer Equity’s operations with governed agents that remember, route, and record every action. - -| Business Problem | Agent Solution | You’ll Build It In | -|------------------|----------------|--------------------| -| Forgotten loyalty perks | Persistent memory of collector entitlements | Labs 5, 7, 9 | -| Inconsistent grading | Precedent search for similar authentications | Labs 8, 9 | -| Missing provenance trail | Tool-level audit logging with rationale | Labs 4, 10 | -| No policy access | Enterprise pricing and policy integration | Lab 6 | -| Manual routing for routine items | Auto-listing based on value and condition | Labs 4, 10 | -| Weak separation of duties | Role-scoped agents and tool permissions | Lab 10 | - -By the end you will orchestrate a retail workflow where: - -- **Collectors feel remembered** – loyalty tiers, communication preferences, and negotiated perks persist across every session. -- **Authenticators sync decisions** – agents compare new submissions against precedent memories before grading. -- **Every action is auditable** – tool calls, inputs, outputs, and decisions land in governed logs Seer Equity can defend. -- **Policies stay authoritative** – recommendations cite real pricing clauses, provenance requirements, and resale thresholds. -- **Routine work accelerates** – low-risk items auto-list while scarce pieces escalate to experts with full context. -- **Governance holds** – intake and authentication duties remain separate with enforced tool and data boundaries. - -## Workshop Structure - -✅ **Build the foundations (Labs 1–4)** - -Before solving the backlog, master agent execution, planning, and routing in Seer Equity’s retail schema. - -- **Lab 1 – What Is an AI Agent?** Create an inventory lookup agent backed by `ITEM_SUBMISSIONS` so specialists answer status questions instantly. -- **Lab 2 – Agents vs Zero Shot** Contrast zero-shot prompts with governed agents updating `SAMPLE_ITEMS` under strict role controls. -- **Lab 3 – How Agents Plan** Assemble collector briefings that blend loyalty tiers, submission history, and policy reminders. -- **Lab 4 – How Agents Execute** Implement routing that writes to `ITEM_REQUESTS` and `ITEM_WORKFLOW_LOG`, proving three-tier automation. - -✅ **Install durable memory (Labs 5–9)** - -- **Lab 5 – Why Agents Need Memory** Capture Alex Martinez’s loyalty perks in `AGENT_MEMORY` so the system never forgets. -- **Lab 6 – Enterprise Data Integration** Ground price guidance in `PRICING_POLICIES`, `BS_CUSTOMERS`, and catalog metadata. -- **Lab 7 – Memory Core** Design JSON schemas for facts, tasks, and in-flight checkpoints across retail teams. -- **Lab 8 – Four Memory Types** Distinguish episodic, semantic, procedural, and reference memory aligned to retail cases. -- **Lab 9 – Learning Loop** Build vector precedents in `DECISION_MEMORY` so agents surface similar authentications. - -✅ **Seal with governance (Lab 10)** - -- **Lab 10 – Tools, Safety & Control** Enforce separation between `INVENTORY_AGENT` and `AUTHENTICATION_AGENT`, logging every decision for compliance. - -## Objectives - -By completing the retail edition, you will: - -- Implement submission intake, valuation, routing, and provenance logging on Oracle Database 26ai. -- Persist collector preferences, loyalty offers, and authentication results as durable memory. -- Ground agent answers in pricing policies, authenticity standards, and resale guidelines. -- Produce an auditable trail for every agent action with human escalation hooks. -- Coordinate multi-agent teams where tools, tasks, and governance boundaries remain explicit. - -## Prerequisites - -Everything runs inside the provided Autonomous Database tenancy. You should be comfortable following SQL, PL/SQL, and notebook-driven instructions. - -## Learn More - -- [Oracle Database 26ai Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/) -- [`DBMS_CLOUD_AI_AGENT` Package](https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/dbms-cloud-ai-agent-package.html) -- [AI Vector Search Guide](https://docs.oracle.com/en/database/oracle/oracle-database/26/vecse/) - -## Workshop Plan (Generated) -- Refresh story framing so Seer Equity Retail Intelligence oversees high-velocity returns and consignments with Oracle Database 26ai. -- Spotlight Priya Desai, Alex Martinez, Jennifer Lee, Marcus Patel, and David Huang across problem statements and quotes. -- Recast business problem table around VIP memory, grading parity, provenance logging, autonomous routing, and separation of duties. -- Map Auto-List, Standard Appraisal, and Expert Appraisal into the workshop impact narrative and visuals. -- Tie success metrics to reduced SLA time, fraud mitigation, and auditable policy citations for Seer Equity leadership. diff --git a/ai4u/industries/retail/learning-loop/ai-database-competence.md b/ai4u/industries/retail/learning-loop/ai-database-competence.md deleted file mode 100644 index d183de13b..000000000 --- a/ai4u/industries/retail/learning-loop/ai-database-competence.md +++ /dev/null @@ -1,180 +0,0 @@ -# How an AI Database Builds Competence - -## Introduction - -Seer Equity Retail cannot rely on keyword searches to recall precedent decisions. This lab builds the learning loop that ingests new authentication outcomes, embeds them as vectors, and retrieves similar cases to inform the next decision. - -### Scenario - -Jennifer Lee receives a high-value sneaker submission with unusual provenance notes. She wants to know how similar cases were handled, including pricing and human reviewers. Vector search surfaces the best matches even when the language differs. - -### Objectives - -- Load an ONNX embedding model into Oracle Database 26ai for retail precedent text. -- Extend `DECISION_MEMORY` with vector columns and metadata. -- Implement semantic search that recommends precedent cases based on meaning. -- Close the loop by writing new outcomes back to memory for future reuse. - -## Task 1: Install the Embedding Model - -```sql - -BEGIN - DBMS_VECTOR.LOAD_MODEL( - model_name => 'ai4u_retail_text_embedding', - source_uri => 'https://objectstorage.us-phoenix-1.oraclecloud.com/.../all-MiniLM-L6-v2.onnx' - ); -END; -/ - -``` - -Use the notebook’s helper script to stage the ONNX file in Object Storage if required. - -## Task 2: Extend Decision Memory - -```sql - -ALTER TABLE decision_memory ADD ( - decision_text CLOB, - embedding VECTOR(384) -); - -``` - -## Task 3: Embed Existing Decisions - -```sql - -UPDATE decision_memory dm - SET dm.decision_text = dm.decision_summary, - dm.embedding = DBMS_VECTOR.EMBED_TEXT( - model_name => 'ai4u_retail_text_embedding', - text => dm.decision_summary - ); -COMMIT; - -``` - -## Task 4: Implement Semantic Search Function - -```sql - -CREATE OR REPLACE FUNCTION find_similar_decisions( - p_query_text VARCHAR2, - p_top_n PLS_INTEGER := 5 -) RETURN SYS_REFCURSOR AS - v_cursor SYS_REFCURSOR; -BEGIN - OPEN v_cursor FOR - SELECT submission_id, - collector_name, - decision_summary, - decided_by, - decided_ts, - DBMS_VECTOR.COSINE_DISTANCE( - embedding, - DBMS_VECTOR.EMBED_TEXT('ai4u_retail_text_embedding', p_query_text) - ) AS similarity - FROM decision_memory - ORDER BY similarity ASC - FETCH FIRST p_top_n ROWS ONLY; - RETURN v_cursor; -END; -/ - -``` - -## Task 5: Create a Tool for Precedent Retrieval - -```sql - -BEGIN - DBMS_CLOUD_AI_AGENT.CREATE_TOOL( - tool_name => 'PRECEDENT_SEARCH_TOOL', - attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"authentication_profile"}}', - description => 'Retrieve similar authentication decisions using semantic search.' - ); -END; -/ - -``` - -The tool implementation references `TABLE(find_similar_decisions(:query_text, :top_n))` in the accompanying notebook script. - -## Task 6: Update Learning Loop Agent Instructions - -```sql - -BEGIN - DBMS_CLOUD_AI_AGENT.UPDATE_AGENT( - agent_name => 'AUTHENTICATION_AGENT', - attributes => json_object( - 'instructions' VALUE 'Before finalizing a recommendation, call PRECEDENT_SEARCH_TOOL to retrieve similar cases and cite at least one.' - ) - ); -END; -/ - -BEGIN - DBMS_CLOUD_AI_AGENT.UPDATE_TASK( - task_name => 'AUTHENTICATION_TASK', - attributes => json_object( - 'tools' VALUE json_array('POLICY_LOOKUP_TOOL', 'REFERENCE_LOOKUP_TOOL', 'MEMORY_LOOKUP_TOOL', 'PRECEDENT_SEARCH_TOOL') - ) - ); -END; -/ - -``` - -## Task 7: Run the Learning Loop - -```sql - -SELECT ai_response - FROM TABLE(DBMS_CLOUD_AI.ASK_AGENT( - agent_name => 'AUTHENTICATION_AGENT', - prompt => 'Recommend a route for a $6,800 rookie card with pristine condition and unusual provenance, citing similar past cases.' )); - -``` - -Verify the response includes: -- Policy references (POL-PLAT/POL-GOLD as applicable) -- A cited precedent submission ID and summary -- Recommended tier (Expert Appraisal expected) - -## Task 8: Persist New Decisions - -```sql - -INSERT INTO decision_memory ( - decision_id, - submission_id, - collector_name, - decision_summary, - decision_text, - embedding, - decided_by -) VALUES ( - sys_guid(), - 'ITEM-41200', - 'Alex Martinez', - 'Expert appraisal confirmed provenance documents and listed at $6,900 under POL-PLAT clause 3.', - 'Expert appraisal confirmed provenance documents and listed at $6,900 under POL-PLAT clause 3.', - DBMS_VECTOR.EMBED_TEXT('ai4u_retail_text_embedding', 'Expert appraisal confirmed provenance documents and listed at $6,900 under POL-PLAT clause 3.'), - 'AUTHENTICATION_AGENT' -); - -COMMIT; - -``` - -## Summary - -Semantic precedence transforms Seer Equity agents from reactive scripts into learning systems. Every new decision strengthens future recommendations, emitting evidence collectors and governance teams can trust. - -## Workshop Plan (Generated) -- Build precedent vectors from past return decisions to recommend actions for similar submissions. -- Showcase competence tracking dashboards that flag SLA breaches, fraud risks, and calibration needs. -- Tie learning loop outputs back to Priya Desai’s KPIs for Seer Equity Retail. diff --git a/ai4u/industries/retail/tools-safety-control/agents-and-tools.md b/ai4u/industries/retail/tools-safety-control/agents-and-tools.md deleted file mode 100644 index 954d64898..000000000 --- a/ai4u/industries/retail/tools-safety-control/agents-and-tools.md +++ /dev/null @@ -1,216 +0,0 @@ -# Tools, Safety, and Human Control - -## Introduction - -Automation without control invites risk. This lab enforces Seer Equity Retail’s governance playbook: separation of duties, explicit tool permissions, audit logging, and human escalation for expert-tier decisions. - -### Scenario - -David Huang must prove to compliance that inventory specialists cannot authenticate items and authenticators cannot submit new ones. He also needs a full audit trail when Marcus Patel overrides an auto-list recommendation. - -### Objectives - -- Register tools for submission intake, authentication, and audit logging with scoped profiles. -- Configure `INVENTORY_AGENT` and `AUTHENTICATION_AGENT` with non-overlapping tool sets. -- Implement escalation logic requiring human approval for Expert Appraisal. -- Demonstrate audit queries that show every decision’s provenance. - -## Task 1: Define Tool Registry Entries - -```sql - -CREATE TABLE tool_registry ( - tool_name VARCHAR2(50) PRIMARY KEY, - description VARCHAR2(200), - allowed_roles VARCHAR2(200) -); - -INSERT INTO tool_registry VALUES ('ITEM_SUBMIT_TOOL', 'Create new item submissions.', 'INVENTORY_AGENT'); -INSERT INTO tool_registry VALUES ('AUTHENTICATE_TOOL', 'Authenticate and grade submissions.', 'AUTHENTICATION_AGENT'); -INSERT INTO tool_registry VALUES ('AUDIT_APPEND_TOOL', 'Write structured audit events.', 'AUTHENTICATION_AGENT'); -COMMIT; - -``` - -## Task 2: Create Audit Logging Procedure - -```sql - -CREATE OR REPLACE PROCEDURE append_audit_entry( - p_actor VARCHAR2, - p_submission VARCHAR2, - p_action VARCHAR2, - p_details CLOB -) AS -BEGIN - INSERT INTO audit_log (audit_id, actor, submission_id, action_type, action_details, action_ts) - VALUES ( - sys_guid(), - p_actor, - p_submission, - p_action, - p_details, - SYSDATE - ); -END; -/ - -``` - -## Task 3: Register Governance Tools - -```sql - -BEGIN - DBMS_CLOUD_AI_AGENT.CREATE_TOOL( - tool_name => 'ITEM_SUBMIT_TOOL', - attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"inventory_profile"}}', - description => 'Insert new records into ITEM_SUBMISSIONS under intake supervision.' - ); - - DBMS_CLOUD_AI_AGENT.CREATE_TOOL( - tool_name => 'AUTHENTICATE_TOOL', - attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"authentication_profile"}}', - description => 'Update submission status, write workflow logs, and append audit entries.' - ); - - DBMS_CLOUD_AI_AGENT.CREATE_TOOL( - tool_name => 'AUDIT_APPEND_TOOL', - attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"authentication_profile"}}', - description => 'Invoke append_audit_entry with structured payloads.' - ); -END; -/ - -``` - -## Task 4: Enforce Separation of Duties - -```sql - -BEGIN - DBMS_CLOUD_AI_AGENT.UPDATE_AGENT( - agent_name => 'INVENTORY_AGENT', - attributes => json_object( - 'tools' VALUE json_array('ITEM_SUBMIT_TOOL', 'ITEM_LOOKUP_TOOL', 'MEMORY_LOOKUP_TOOL') - ) - ); -END; -/ - -BEGIN - DBMS_CLOUD_AI_AGENT.UPDATE_AGENT( - agent_name => 'AUTHENTICATION_AGENT', - attributes => json_object( - 'tools' VALUE json_array('AUTHENTICATE_TOOL', 'POLICY_LOOKUP_TOOL', 'REFERENCE_LOOKUP_TOOL', 'MEMORY_LOOKUP_TOOL', 'PRECEDENT_SEARCH_TOOL', 'AUDIT_APPEND_TOOL') - ) - ); -END; -/ - -``` - -## Task 5: Implement Escalation Workflow - -Expert Appraisal requires human approval. Use a stored procedure to enforce the checkpoint. - -```sql - -CREATE OR REPLACE PROCEDURE escalate_expert_appraisal( - p_submission_id VARCHAR2, - p_reviewer VARCHAR2, - p_notes CLOB -) AS -BEGIN - INSERT INTO audit_log (audit_id, actor, submission_id, action_type, action_details, action_ts) - VALUES ( - sys_guid(), - p_reviewer, - p_submission_id, - 'EXPERT_ESCALATION', - p_notes, - SYSDATE - ); - - UPDATE item_submissions - SET current_status = 'EXPERT_REVIEW' - WHERE submission_id = p_submission_id; -END; -/ - -``` - -Expose the escalation routine as a tool reserved for human supervisors. - -```sql - -BEGIN - DBMS_CLOUD_AI_AGENT.CREATE_TOOL( - tool_name => 'EXPERT_ESCALATE_TOOL', - attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"authentication_profile"}}', - description => 'Escalate submissions to human expert reviewers with audit logging.' - ); -END; -/ -``` - -Assign the tool to supervisory tasks only (documented in the notebook with manual execution). - -## Task 6: Demonstrate Controlled Execution - -1. Inventory specialist submits a new item: - -```sql - -EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('INVENTORY_SUPPORT_TEAM'); -SELECT AI AGENT 'Create a submission for ITEM-41210, declared value 320, condition 7.5, rarity COMMON.'; - -``` - -2. Authentication agent processes the submission: - -```sql - -EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('ROUTING_TEAM'); -SELECT AI AGENT 'Route submission ITEM-41210 based on declared value 320, condition 7.5, rarity COMMON.'; - -``` - -3. Audit log verification: - -```sql - -SELECT actor, submission_id, action_type, action_details - FROM audit_log - ORDER BY action_ts DESC - FETCH FIRST 5 ROWS; - -``` - -## Task 7: Validate Permissions - -Ensure privilege boundaries hold. - -```sql - --- Inventory user should fail to authenticate submissions -CONNECT inventory_agent_user/ -EXEC authenticate_tool(...); -- should raise insufficient privileges - --- Authentication user should fail to insert submissions -CONNECT authentication_agent_user/ -EXEC item_submit_tool(...); -- should raise insufficient privileges - -``` - -(Provide instructions in the notebook for switching credentials.) - -## Summary - -Governed tool assignments, audit trails, and expert escalation protect Seer Equity Retail from unauthorized actions. Agents remain powerful yet controllable, satisfying compliance while accelerating operations. - -## Workshop Plan (Generated) -- Reinforce tool registration, role separation, and audit logging for inventory vs authentication agents. -- Include policy checks ensuring loyalty data isn’t exposed outside authorized tools. -- Demonstrate escalation workflows requiring human approval for Expert Appraisal tier decisions. -- Document audit trail queries proving provenance and compliance for Seer Equity executives. diff --git a/ai4u/industries/retail/what-is-agent/what-is-agent.md b/ai4u/industries/retail/what-is-agent/what-is-agent.md deleted file mode 100644 index 7779361c1..000000000 --- a/ai4u/industries/retail/what-is-agent/what-is-agent.md +++ /dev/null @@ -1,207 +0,0 @@ -# What Is an AI Agent, Really? - -## Introduction - -Retail teams do not need another chatbot that narrates click paths; they need automation that acts. In this lab you will build Seer Equity’s first inventory lookup agent. Instead of explaining how to check a submission, it will query `ITEM_SUBMISSIONS` and answer Alex Martinez’s status question in seconds. - -### The Business Problem - -Inventory specialists handle hundreds of calls every week: - -> *“My rookie card was submitted last week. What’s the status of ITEM-302?”* -> -> Alex Martinez, Platinum Collector - -Legacy chatbots reply with instructions: “Log in. Click Submissions. Filter for ITEM-302…” Collectors hang up. Specialists duplicate work. The retail division needs an agent that reads the actual database and responds with facts. - -### What You Will Learn - -You will create the foundational agent components: tool, agent, task, and team. By the end, `INVENTORY_AGENT` will retrieve submission status using approved tools. - -**What you will build:** A submission lookup agent that reads the `ITEM_SUBMISSIONS` table through a governed SQL tool. - -**Estimated Time:** 10 minutes - -### Objectives - -- Create `ITEM_SUBMISSIONS` with realistic retail attributes (condition, declared value, rarity). -- Populate sample submissions for VIP collectors and standard consignments. -- Register the table with `inventory_profile` so Select AI can access it. -- Build the `ITEM_LOOKUP` SQL tool and `INVENTORY_AGENT` that responds with actionable status summaries. - -### Prerequisites - -Complete the **Getting Started** lab to import notebooks, configure profiles, and load the retail schema. - -## Task 1: Import the Lab Notebook - -Use `lab1-item-agent.json` to run all commands from Oracle Machine Learning. - -1. Open the notebook in Oracle Machine Learning. -2. Execute cells sequentially; screenshots in this markdown illustrate each step. - -## Task 2: Create the Item Submissions Table - -```sql - -CREATE TABLE item_submissions ( - submission_id VARCHAR2(20) PRIMARY KEY, - submitter_name VARCHAR2(100), - collector_tier VARCHAR2(20), - item_type VARCHAR2(40), - condition_grade NUMBER(3,1), - declared_value NUMBER(12,2), - rarity_code VARCHAR2(20), - current_status VARCHAR2(30), - last_update_ts DATE, - loyalty_discount NUMBER(5,2) -); - -``` - -Add schema comments so Select AI understands the retail vocabulary. - -```sql - -COMMENT ON TABLE item_submissions IS 'Seer Equity retail submissions awaiting authentication, appraisal, or listing.'; -COMMENT ON COLUMN item_submissions.submission_id IS 'Identifier like ITEM-30214 (ITM-YYMMDD-NNN pattern).'; -COMMENT ON COLUMN item_submissions.collector_tier IS 'Loyalty tier: Platinum, Gold, Silver, or Standard.'; -COMMENT ON COLUMN item_submissions.condition_grade IS 'Condition scale 1.0–10.0 used for routing.'; -COMMENT ON COLUMN item_submissions.current_status IS 'SUBMITTED, AUTHENTICATING, GRADED, LISTED, or REJECTED.'; - -``` - -## Task 3: Seed Sample Data - -```sql - -INSERT INTO item_submissions VALUES ('ITEM-30214', 'Alex Martinez', 'Platinum', 'Sports Card', 9.1, 7200, 'GRAIL', 'AUTHENTICATING', SYSDATE - 2, 0.20); -INSERT INTO item_submissions VALUES ('ITEM-30215', 'Maria Santos', 'Gold', 'Vintage Comic', 8.3, 1850, 'LIMITED', 'SUBMITTED', SYSDATE - 1, 0.10); -INSERT INTO item_submissions VALUES ('ITEM-30216', 'James Wilson', 'Standard', 'Memorabilia', 6.4, 320, 'COMMON', 'LISTED', SYSDATE - 4, 0.00); -INSERT INTO item_submissions VALUES ('ITEM-30217', 'Sarah Johnson', 'Silver', 'Vintage Toy', 7.2, 860, 'LIMITED', 'GRADED', SYSDATE - 3, 0.05); -COMMIT; - -``` - -Validate the inserts: - -```sql - -SELECT submission_id, collector_tier, current_status - FROM item_submissions - ORDER BY submission_id; - -``` - -## Task 4: Register the Table with the Inventory Profile - -```sql - -BEGIN - DBMS_CLOUD_AI.SET_ATTRIBUTE( - profile_name => 'inventory_profile', - attribute => 'object_list', - value => json_array( - json_object('schema_name' VALUE user, 'object_name' VALUE 'ITEM_SUBMISSIONS'), - json_object('schema_name' VALUE user, 'object_name' VALUE 'PRICING_POLICIES'), - json_object('schema_name' VALUE user, 'object_name' VALUE 'AGENT_MEMORY') - )); -END; -/ - -``` - -## Task 5: Build the Agent Components - -Create the SQL tool, the agent role, the task instructions, and the team wrapper. - -```sql - -BEGIN - DBMS_CLOUD_AI_AGENT.CREATE_TOOL( - tool_name => 'ITEM_LOOKUP_TOOL', - attributes => '{"tool_type": "SQL", "tool_params": {"profile_name": "inventory_profile"}}', - description => 'Lookup submissions in ITEM_SUBMISSIONS and summarize status, value, and loyalty tier.' - ); -END; -/ - -BEGIN - DBMS_CLOUD_AI_AGENT.CREATE_AGENT( - agent_name => 'INVENTORY_AGENT', - attributes => json_object( - 'role' VALUE 'You are a Seer Equity inventory specialist. You verify submission status, loyalty perks, and valuation data for collectors. Use tools; never guess.', - 'instructions' VALUE 'Confirm the submission status, cite loyalty perks, and reference relevant policy IDs when possible.' - ), - description => 'Retail intake assistant for Seer Equity.' - ); -END; -/ - -BEGIN - DBMS_CLOUD_AI_AGENT.CREATE_TASK( - task_name => 'INVENTORY_LOOKUP_TASK', - attributes => json_object( - 'prompt' VALUE 'Answer collector questions about submission status and loyalty perks. -Request: {query}', - 'tools' VALUE json_array('ITEM_LOOKUP_TOOL') - ), - description => 'Task binding the inventory agent to the lookup tool.' - ); -END; -/ - -BEGIN - DBMS_CLOUD_AI_AGENT.CREATE_TEAM( - team_name => 'INVENTORY_SUPPORT_TEAM', - attributes => json_object( - 'agents' VALUE json_array( - json_object('name' VALUE 'INVENTORY_AGENT', 'task' VALUE 'INVENTORY_LOOKUP_TASK') - ), - 'process' VALUE 'sequential' - ), - description => 'Sequential team for inventory status lookups.' - ); -END; -/ - -``` - -## Task 6: Ask the Agent - -Set the team and request a status update for Alex Martinez. - -```sql - -EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('INVENTORY_SUPPORT_TEAM'); -SELECT AI AGENT 'Provide the latest status for submission ITEM-30214, including loyalty perks and valuation context.'; - -``` - -Observe how the agent: -1. Calls `ITEM_LOOKUP_TOOL`. -2. Returns the status (`AUTHENTICATING`), declared value, and loyalty discount. -3. References relevant pricing policies if comments are present. - -## Task 7: Log the Result - -Each tool invocation lands in user history for audit purposes. - -```sql - -SELECT tool_name, TO_CHAR(start_date, 'YYYY-MM-DD HH24:MI:SS') AS executed_at - FROM user_ai_agent_tool_history - ORDER BY start_date DESC - FETCH FIRST 5 ROWS ONLY; - -``` - -## Summary - -You built Seer Equity’s first retail-focused agent. It retrieves live submission status, respects loyalty perks, and leaves a trace. Subsequent labs will expand the toolset, add routing logic, and embed durable memory. - -## Workshop Plan (Generated) -- Align narrative with Seer Equity inventory specialists answering submission status for VIP collectors. -- Define `ITEM_SUBMISSIONS` schema fields to capture condition grades, valuation bands, and provenance flags. -- Script agent build steps showing `INVENTORY_AGENT` using `ITEM_LOOKUP` to return actionable facts plus policy citations. -- Reinforce metrics: faster status responses, zero instruction-only replies, and initial audit logging footprint. diff --git a/ai4u/industries/retail/where-memory-lives/where-memory-lives.md b/ai4u/industries/retail/where-memory-lives/where-memory-lives.md deleted file mode 100644 index 1113205b5..000000000 --- a/ai4u/industries/retail/where-memory-lives/where-memory-lives.md +++ /dev/null @@ -1,151 +0,0 @@ -# Where Agent Memory Should Live - -## Introduction - -Agent memory must be structured and governed. This lab designs Seer Equity Retail’s memory architecture by separating facts, tasks, decisions, and references across JSON storage, duality views, and audit boundaries. - -### Scenario - -David Huang, Governance Lead, wants confidence that Alex Martinez’s loyalty perks, open tasks, and precedent decisions live in the right stores with the correct retention policies. You will design schemas and confirm retrieval patterns. - -### Objectives - -- Model memory categories in `AGENT_MEMORY`, `DECISION_MEMORY`, and `REFERENCE_KNOWLEDGE`. -- Build JSON duality views for convenient access while keeping relational governance. -- Demonstrate CRUD patterns that respect role-based access. - -## Task 1: Create Memory Views - -```sql - -CREATE OR REPLACE VIEW memory_facts AS -SELECT content."about" AS collector, - content."fact" AS fact_detail, - content."category" AS category, - content."effective" AS effective_date - FROM agent_memory - WHERE memory_type = 'FACT'; - -CREATE OR REPLACE VIEW memory_tasks AS -SELECT content."submission_id" AS submission_id, - content."task_detail" AS task_detail, - content."assigned_to" AS assigned_to, - content."due_at" AS due_at - FROM agent_memory - WHERE memory_type = 'TASK'; - -``` - -## Task 2: Populate Task Memories - -```sql - -INSERT INTO agent_memory (memory_id, agent_id, memory_type, content) -VALUES ( - sys_guid(), - 'ROUTING_AGENT', - 'TASK', - json_object( - 'submission_id' VALUE 'ITEM-40102', - 'task_detail' VALUE 'Schedule standard appraisal follow-up with Marcus Patel.', - 'assigned_to' VALUE 'AUTHENTICATION_AGENT', - 'due_at' VALUE TO_CHAR(SYSDATE + 1, 'YYYY-MM-DD') - )); - -COMMIT; - -``` - -## Task 3: Model Decision Memory - -```sql - -CREATE TABLE decision_memory ( - decision_id VARCHAR2(36) PRIMARY KEY, - submission_id VARCHAR2(20), - collector_name VARCHAR2(100), - decision_summary CLOB, - embedding_vector VECTOR(1024), - decided_by VARCHAR2(50), - decided_ts DATE DEFAULT SYSDATE -); - -``` - -Explain how embeddings will be loaded in Lab 9 to power semantic search. - -## Task 4: Create Duality Views - -```sql - -CREATE OR REPLACE JSON RELATIONAL DUALITY VIEW decision_memory_view AS - SELECT decision_id, - json_object( - 'submission_id' VALUE submission_id, - 'collector_name' VALUE collector_name, - 'decision_summary' VALUE decision_summary, - 'decided_by' VALUE decided_by, - 'decided_ts' VALUE TO_CHAR(decided_ts, 'YYYY-MM-DD"T"HH24:MI:SS') - ) - FROM decision_memory; - -``` - -## Task 5: Register Governance Tools - -```sql - -BEGIN - DBMS_CLOUD_AI_AGENT.CREATE_TOOL( - tool_name => 'MEMORY_FACT_TOOL', - attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"inventory_profile"}}', - description => 'Retrieve fact memories for collectors.' - ); - - DBMS_CLOUD_AI_AGENT.CREATE_TOOL( - tool_name => 'MEMORY_TASK_TOOL', - attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"authentication_profile"}}', - description => 'List pending tasks and due dates for authentication teams.' - ); -END; -/ - -``` - -## Task 6: Enforce Access Control - -- Inventory agents can read facts but not tasks. -- Authentication agents can read tasks but not modify facts without governance approval. - -```sql - -GRANT SELECT ON memory_facts TO inventory_agent_user; -GRANT SELECT ON memory_tasks TO authentication_agent_user; -REVOKE SELECT ON memory_tasks FROM inventory_agent_user; - -``` - -## Task 7: Demonstrate Retrieval - -```sql - -SELECT ai_response - FROM TABLE(DBMS_CLOUD_AI.ASK_AGENT( - agent_name => 'INVENTORY_AGENT', - prompt => 'List loyalty facts for Alex Martinez from memory_facts.' )); - -SELECT ai_response - FROM TABLE(DBMS_CLOUD_AI.ASK_AGENT( - agent_name => 'AUTHENTICATION_AGENT', - prompt => 'Review open tasks for authentication agents using memory_tasks.' )); - -``` - -## Summary - -Seer Equity’s memory architecture now separates facts, tasks, and decisions with governed access paths. This foundation supports the richer memory types introduced in the next lab. - -## Workshop Plan (Generated) -- Architect memory stores separating collector facts, loyalty perks, workflow checkpoints, and task reminders. -- Map each JSON Duality region to Seer Equity operations teams for durability and security. -- Provide table schemas and notebook snippets aligning with retail data categories. diff --git a/ai4u/industries/retail/why-agents-need-memory/why-agents-need-memory.md b/ai4u/industries/retail/why-agents-need-memory/why-agents-need-memory.md deleted file mode 100644 index cee3e7fc7..000000000 --- a/ai4u/industries/retail/why-agents-need-memory/why-agents-need-memory.md +++ /dev/null @@ -1,143 +0,0 @@ -# Why Agents Need Memory - -## Introduction - -Without durable memory, Seer Equity Retail repeats the same questions with every collector. This lab demonstrates the forgetting problem and shows how to persist facts, preferences, and loyalty perks so `INVENTORY_AGENT` and `AUTHENTICATION_AGENT` never lose context. - -### Scenario - -Alex Martinez expects the system to remember a 20 percent loyalty discount and email-only updates. Today, specialists capture the notes in spreadsheets. Agents forget between calls, leading to frustration and escalations. - -### Objectives - -- Experience the forgetting problem with a fresh `INVENTORY_AGENT` session. -- Insert loyalty facts and contact preferences into `AGENT_MEMORY`. -- Retrieve and validate memory entries through SQL and agent prompts. -- Enforce guardrails so only authorized tools write or read specific memory categories. - -## Task 1: Demonstrate Forgetting - -```sql - -EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('INVENTORY_SUPPORT_TEAM'); -SELECT AI AGENT 'Remember that Alex Martinez has a 20 percent loyalty discount and prefers email updates.'; - --- Clear session context (simulated) -EXEC DBMS_SESSION.RESET_PACKAGE; - -SELECT AI AGENT 'What do you know about Alex Martinez loyalty perks?'; - -``` - -Observe the agent has no memory. - -## Task 2: Seed Memory Facts - -```sql - -INSERT INTO agent_memory (memory_id, agent_id, memory_type, content) -VALUES ( - sys_guid(), - 'INVENTORY_AGENT', - 'FACT', - json_object( - 'fact' VALUE 'Alex Martinez has a 20% loyalty discount and email-only communication requirement', - 'category' VALUE 'loyalty_preference', - 'about' VALUE 'Alex Martinez', - 'effective' VALUE TO_CHAR(SYSDATE, 'YYYY-MM-DD') - )); - -COMMIT; - -``` - -## Task 3: Register Memory Tools - -```sql - -BEGIN - DBMS_CLOUD_AI_AGENT.CREATE_TOOL( - tool_name => 'MEMORY_LOOKUP_TOOL', - attributes => '{"tool_type":"SQL","tool_params":{"profile_name":"inventory_profile"}}', - description => 'Retrieve loyalty and contact preferences from AGENT_MEMORY.' - ); -END; -/ -``` - -## Task 4: Update Agent Instructions - -```sql - -BEGIN - DBMS_CLOUD_AI_AGENT.UPDATE_AGENT( - agent_name => 'INVENTORY_AGENT', - attributes => json_object( - 'role' VALUE 'You are a Seer Equity inventory specialist. Always consult memory before answering.', - 'instructions' VALUE 'Use MEMORY_LOOKUP_TOOL when collectors are mentioned. Cite loyalty perks, communication preferences, and effective dates.' - ) - ); -END; -/ - -BEGIN - DBMS_CLOUD_AI_AGENT.UPDATE_TASK( - task_name => 'INVENTORY_LOOKUP_TASK', - attributes => json_object( - 'prompt' VALUE 'Answer collector questions about submission status and loyalty perks. -Request: {query}', - 'tools' VALUE json_array('ITEM_LOOKUP_TOOL', 'MEMORY_LOOKUP_TOOL') - ) - ); -END; -/ - -``` - -## Task 5: Retrieve Memory - -```sql - -SELECT ai_response - FROM TABLE(DBMS_CLOUD_AI.ASK_AGENT( - agent_name => 'INVENTORY_AGENT', - prompt => 'Summarize loyalty perks and communication preferences for Alex Martinez.' )); - -``` - -The agent should reference the loyalty discount and email preference. - -## Task 6: Guard Memory Writes - -Only governance-approved tools can modify memory. - -```sql - -GRANT INSERT, UPDATE ON agent_memory TO authentication_agent_user; -REVOKE DELETE ON agent_memory FROM authentication_agent_user; -REVOKE INSERT, UPDATE, DELETE ON agent_memory FROM inventory_agent_user; - -``` - -Explain to learners how inventory agents request updates from governance teams instead of writing directly. - -## Task 7: Audit Memory Usage - -```sql - -SELECT tool_name, TO_CHAR(start_date, 'YYYY-MM-DD HH24:MI:SS') AS executed_at - FROM user_ai_agent_tool_history - WHERE tool_name = 'MEMORY_LOOKUP_TOOL' - ORDER BY start_date DESC - FETCH FIRST 5 ROWS; - -``` - -## Summary - -Durable memory eliminates repeat questioning and ensures agents act on loyalty commitments consistently. Subsequent labs extend these patterns to procedural, decision, and reference memories. - -## Workshop Plan (Generated) -- Center story on Alex Martinez’s loyalty discount and communication preferences stored in `AGENT_MEMORY`. -- Provide exercises that detect memory gaps, add facts, and verify retrieval across sessions. -- Include governance reminders ensuring memory updates respect privacy and audit constraints. diff --git a/ai4u/industries/retail/workshops/sandbox/index.html b/ai4u/industries/retail/workshops/sandbox/index.html deleted file mode 100644 index 45ad33911..000000000 --- a/ai4u/industries/retail/workshops/sandbox/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - Oracle LiveLabs - - - - - - - - - - - - -
-
-
-
-
-
-
-
- - - - - diff --git a/ai4u/industries/retail/workshops/sandbox/manifest.json b/ai4u/industries/retail/workshops/sandbox/manifest.json deleted file mode 100644 index b5349374b..000000000 --- a/ai4u/industries/retail/workshops/sandbox/manifest.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "workshoptitle": "AI4U – Seer Equity Retail Edition", - "help": "livelabs-help-db_us@oracle.com", - "tutorials": [ - { - "title": "Introduction", - "description": "Meet Seer Equity Retail Intelligence", - "filename": "../../introduction/introduction.md" - }, - { - "title": "Getting Started", - "description": "Prepare the retail environment", - "filename": "../../getting-started/getting_started.md" - }, - { - "title": "Lab 1: What Is an AI Agent, Really?", - "description": "Build the inventory submission lookup agent", - "filename": "../../what-is-agent/what-is-agent.md" - }, - { - "title": "Lab 2: Why Agents Beat Zero Shot Prompts", - "description": "Compare prompts vs agents for status updates", - "filename": "../../agents-vs-zero-shot/agents-vs-zero-shot.md" - }, - { - "title": "Lab 3: How Agents Plan the Work", - "description": "Assemble collector briefings and routing plans", - "filename": "../../how-agents-plan/how-agents-plan.md" - }, - { - "title": "Lab 4: How Agents Execute the Work", - "description": "Implement retail routing and workflow logging", - "filename": "../../how-agents-execute/how-agents-execute.md" - }, - { - "title": "Lab 5: Why Agents Need Memory", - "description": "Persist loyalty facts across sessions", - "filename": "../../why-agents-need-memory/why-agents-need-memory.md" - }, - { - "title": "Lab 6: Enterprise Data Integration", - "description": "Ground valuations in policy data", - "filename": "../../enterprise-data/enterprise-data.md" - }, - { - "title": "Lab 7: Where Agent Memory Should Live", - "description": "Design governed memory stores", - "filename": "../../where-memory-lives/where-memory-lives.md" - }, - { - "title": "Lab 8: The Four Types of Agent Memory", - "description": "Populate context, fact, decision, reference", - "filename": "../../four-memory-types/four-memory-types.md" - }, - { - "title": "Lab 9: How an AI Database Builds Competence", - "description": "Use vector precedents for collectibles", - "filename": "../../learning-loop/ai-database-competence.md" - }, - { - "title": "Lab 10: Tools, Safety, and Human Control", - "description": "Enforce retail governance and audit logs", - "filename": "../../tools-safety-control/agents-and-tools.md" - } - ] -} From eeeff832ec40bdfdc03375f08798c9bb23120b61 Mon Sep 17 00:00:00 2001 From: Linda Foinding Date: Tue, 24 Mar 2026 10:44:40 -0400 Subject: [PATCH 4/6] typo --- .../16-check-your-understanding/16-check-your-understanding.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hitchhikers-guide-upgrade-to-26ai/16-check-your-understanding/16-check-your-understanding.md b/hitchhikers-guide-upgrade-to-26ai/16-check-your-understanding/16-check-your-understanding.md index c26241bec..e54776f31 100644 --- a/hitchhikers-guide-upgrade-to-26ai/16-check-your-understanding/16-check-your-understanding.md +++ b/hitchhikers-guide-upgrade-to-26ai/16-check-your-understanding/16-check-your-understanding.md @@ -12,7 +12,7 @@ In this lab, you will: * Review the primary upgrade method for Oracle AI Database 26ai * Confirm the supported direct upgrade source releases -* Check you overall understanding +* Check your overall understanding ### Prerequisites From 46a3f3e61d25a7743a014ec30930c017ecad5596 Mon Sep 17 00:00:00 2001 From: Linda Foinding Date: Tue, 24 Mar 2026 12:09:46 -0400 Subject: [PATCH 5/6] private agent factory quiz added --- .../check-your-understanding.md | 83 ++++++++++++++++++ .../images/paf-badge.png | Bin 0 -> 23374 bytes agent-factory/workshops/tenancy/manifest.json | 4 + 3 files changed, 87 insertions(+) create mode 100644 agent-factory/check-your-understanding/check-your-understanding.md create mode 100644 agent-factory/check-your-understanding/images/paf-badge.png diff --git a/agent-factory/check-your-understanding/check-your-understanding.md b/agent-factory/check-your-understanding/check-your-understanding.md new file mode 100644 index 000000000..69bf69e8b --- /dev/null +++ b/agent-factory/check-your-understanding/check-your-understanding.md @@ -0,0 +1,83 @@ +# Check Your Understanding + +## Introduction + +This quiz reviews the core concepts from the Oracle AI Database Private Agent Factory workshop. Complete the scored questions to confirm your understanding of Agent Factory capabilities, pre-built agents, templates, and the Agent Builder experience. + +Estimated Time: 10 minutes + +### Objectives + +In this lab, you will: + +* Review the main purpose of Oracle AI Database Private Agent Factory +* Distinguish the roles of pre-built agents +* Confirm how templates accelerate agent development +* Identify the function of MCP Servers in an agentic flow +* Recognize how Agent Builder combines inputs, data, and prompts + +### Prerequisites + +Complete the previous workshop labs before taking this quiz. + +```quiz-config +passing: 75 +badge: images/paf-badge.png +``` + +## Task 1: Complete the quiz + +1. Review the questions before you submit your answers. + +2. Complete all scored quiz blocks below. You need 75% or higher to pass. + + ```quiz score + Q: What is the main value of Oracle AI Database Private Agent Factory? + * It provides a no-code way to build and deploy AI agents close to enterprise data and actions + - It replaces all large language models with rule-based automation + - It only supports agents that run on local laptops without cloud services + - It is limited to document search with no support for agent workflows + > Oracle AI Database Private Agent Factory helps teams build and deploy AI agents quickly while keeping data, tools, and services in a secure, converged environment. + ``` + + ```quiz score + Q: What is the key difference between the Knowledge Agent and the Data Analysis Agent? + * The Knowledge Agent works over unstructured content with grounded answers and citations, while the Data Analysis Agent works over structured data with SQL, tables, and visualizations + - The Knowledge Agent is only for OCI administration, while the Data Analysis Agent is only for REST APIs + - The Knowledge Agent creates templates, while the Data Analysis Agent builds MCP Servers + - The Knowledge Agent is for image generation, while the Data Analysis Agent is for network security + > The workshop shows that the Knowledge Agent answers questions across documents and cites sources, while the Data Analysis Agent reasons over structured data and returns SQL-driven insights. + ``` + + ```quiz score + Q: Why does Agent Factory provide templates in the Template Gallery? + * To let users bootstrap sophisticated agent flows quickly and then customize them with minimal configuration + - To prevent users from modifying any part of an agent after import + - To force every agent to use the same data source and the same model + - To replace the need for prompts, tools, and publishing + > Templates speed development by giving users a working starting point that they can inspect, adapt, and publish instead of building every flow from scratch. + ``` + + ```quiz score + Q: In the Market Sync Agent example, what role do MCP Servers play? + * They act as tools that agent-compatible systems can call to retrieve relevant external data + - They store screenshots and PDFs for the Knowledge Agent + - They replace the prompt and become the main user interface + - They are only used to rename agents before publishing + > MCP Servers extend an agent with tool access. In the template example, they provide external pricing data that the agent can use when responding to portfolio questions. + ``` + + ```quiz score + Q: In the Agent Builder lab, why is a Prompt node placed between the chat input, SQL query output, and the Agent? + * It combines user input and retrieved data into structured context that the agent can use to answer accurately + - It removes the need to connect the agent to any output component + - It forces the agent to respond without using any database content + - It only changes the color of the flow so users can read it more easily + > The Prompt node assembles the user request with the SQL query results so the agent receives both the question and the supporting data in one grounded prompt. + ``` + +## Acknowledgements + +**Authors** Linda Foinding, Principal Product Manager, Database Product Management + +**Last Updated Date** - Linda Foinding, March, 2026 diff --git a/agent-factory/check-your-understanding/images/paf-badge.png b/agent-factory/check-your-understanding/images/paf-badge.png new file mode 100644 index 0000000000000000000000000000000000000000..b5cdd65f16eb3b25a4c60af32a34e45a92a07d91 GIT binary patch literal 23374 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 Date: Tue, 24 Mar 2026 13:20:57 -0400 Subject: [PATCH 6/6] ai4u added quiz for DDD --- .../check-your-understanding.md | 79 ++++++++++++++++++ .../images/consistent-badge.png | Bin 0 -> 23900 bytes ai4u/workshops/sandbox/index.html | 2 +- ai4u/workshops/sandbox/manifest.json | 5 ++ 4 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 ai4u/check-your-understanding/check-your-understanding.md create mode 100644 ai4u/check-your-understanding/images/consistent-badge.png diff --git a/ai4u/check-your-understanding/check-your-understanding.md b/ai4u/check-your-understanding/check-your-understanding.md new file mode 100644 index 000000000..0e254c8b6 --- /dev/null +++ b/ai4u/check-your-understanding/check-your-understanding.md @@ -0,0 +1,79 @@ +# Check Your Understanding + +## Introduction + +This quiz reviews the core concepts from the AI4U workshop. Complete the scored questions to confirm your understanding of what makes an agent different from a chatbot, why agents matter for business workflows, and how data access changes what AI can do. + +Estimated Time: 10 minutes + +### Objectives + +In this lab, you will: + +* Review what makes an agent different from a chatbot +* Check your understanding of key concepts + +### Prerequisites + +Complete the earlier workshop labs before taking this quiz. + +```quiz-config +passing: 75 +badge: images/consistent-badge.png +``` + +## Task 1: Complete the quiz + +1. Review the questions before you submit your answers. + +2. Complete all scored quiz blocks below. You need 75% or higher to pass. + + ```quiz score + Q: What makes an AI agent different from a standard chatbot in a business workflow? + * It can use tools to interact with real systems and complete tasks instead of only describing what should be done + - It always gives shorter answers so users can act faster + - It avoids using enterprise data to prevent mistakes + - It works only for general knowledge questions with no business context + > A core idea in AI4U is that agents do work through tools and systems, while chatbots mainly explain or answer. + ``` + + ```quiz score + Q: Why are agents more useful than zero-shot prompting for Seer Equity's loan workflow? + * They can access business data and take action, rather than giving only generic advice + - They never require any database objects or tools + - They are designed only for answering policy questions about mortgages + - They prevent users from asking follow-up questions + > The workshop contrasts generic zero-shot answers with agents that can work with real data and execute business tasks. + ``` + + ```quiz score + Q: What is the main limitation of zero-shot AI in an enterprise setting? + * It can provide general advice, but it cannot access Seer Equity's data or take action in the workflow + - It can modify records directly, but it cannot summarize results + - It works only when loan data is stored in JSON + - It can reason over enterprise data, but only after an underwriter approves it + > Zero-shot AI is useful for general-purpose guidance, but it does not know your business data and cannot carry out the work itself. + ``` + + ```quiz score + Q: How does enterprise data change the quality of an AI agent's answers? + * It grounds the agent in actual company policies, records, and context instead of generic assumptions + - It removes the need for prompts, tools, and instructions + - It guarantees every answer is automatically approved for production use + - It makes the agent answer from memory without checking any systems + > A key workshop theme is that enterprise data turns generic AI into business-specific AI that can answer with real context. + ``` + + ```quiz score + Q: Why does the workshop emphasize tools as a core part of agent design? + * Tools give the agent specific capabilities such as reading data or updating records so it can act, not just talk + - Tools are mainly used to make responses sound more conversational + - Tools replace the need for any database or application logic + - Tools are optional decoration that do not affect what the agent can do + > In AI4U, tools are the mechanism that lets agents move from explanation into execution. + ``` + +## Acknowledgements + +* **Author** - Linda Foinding, Principal Product Manager, Database Product Management +* **Last Updated By/Date** - Linda Foinding, March 2026 diff --git a/ai4u/check-your-understanding/images/consistent-badge.png b/ai4u/check-your-understanding/images/consistent-badge.png new file mode 100644 index 0000000000000000000000000000000000000000..a9654cb5e624116857c8222baa9e0e4e57a7ab04 GIT binary patch literal 23900 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 - + diff --git a/ai4u/workshops/sandbox/manifest.json b/ai4u/workshops/sandbox/manifest.json index 4bb0ddc49..f4b4d9129 100644 --- a/ai4u/workshops/sandbox/manifest.json +++ b/ai4u/workshops/sandbox/manifest.json @@ -61,6 +61,11 @@ "title": "Lab 10: Tools, Safety, and Human Control", "description": "Build tools, add safety rules, enable human-in-the-loop", "filename": "../../tools-safety-control/agents-and-tools.md" + }, + { + "title": "Lab 11: Check Your Understanding", + "description": "Review the core AI4U concepts with a scored quiz.", + "filename": "../../check-your-understanding/check-your-understanding.md" } ] }