The articles in the blog deals with implementing/Administration/Troubleshooting of SQL Server, Azure,GCP and Terraform I rarely write for a place to store my own experiences for future search but can hopefully help others along the way
About Me
- Rakesh Kumar
- I am an MCSE in Data Management and Analytics, specializing in MS SQL Server, and an MCP in Azure. With over 19+ years of experience in the IT industry, I bring expertise in data management, Azure Cloud, Data Center Migration, Infrastructure Architecture planning, as well as Virtualization and automation. I have a deep passion for driving innovation through infrastructure automation, particularly using Terraform for efficient provisioning. If you're looking for guidance on automating your infrastructure or have questions about Azure, SQL Server, or cloud migration, feel free to reach out. I often write to capture my own experiences and insights for future reference, but I hope that sharing these experiences through my blog will help others on their journey as well. Thank you for reading!
# MCP Server Monitoring and Observability Guide
MCP Server Deployment Checklist
# MCP Server Deployment Checklist
High-Quality Prompt for Terraform Project Generation.
Beautiful, High-Quality Prompt for Terraform Project Generation
Create a complete Terraform project with the following requirements:
📁 1. Folder Structure
-
Create a root folder named
terraform-rakinC:\drive. -
Inside this folder, create separate .tf files for each module or resource.
📄 2. Core Terraform Files
-
-
Define all variables required by the project.
-
-
-
Store all variable values for the development environment.
-
-
-
Configure a remote backend using an Azure Storage Account.
-
Ensure the Terraform state file is stored in a storage container.
-
🌐 3. Azure Resources (Each in Its Own File Using Azure Verified Modules)
🔹 Resource Group
-
File:
resource_group.tf -
Create a resource group.
like Azure/avm-res-resources-resourcegroup/azurerm
🔹 Virtual Network
-
File:
vnet.tf -
Create a virtual network.
use Azure verified modules
- VNet with 10.0.0.0/16 address space
- Main subnet (10.0.1.0/24) with Container Apps delegation
- Private endpoint subnet (10.0.2.0/24)
🔹 Subnet
-
File:
subnet.tf -
Create:
-
A main subnet for workloads
-
An additional private endpoint subnet
use azure verified modules
-
🔹 Network Security Group (NSG)
-
Create an NSG.
Create Azure Verified Modules
🔹 NSG Rules
-
Create security rules and:
-
Associate them with the NSG.
-
Associate the NSG with the subnet.
Use Azure Verified Modules
-
🔹 Route Table
-
File:
route_table.tf -
Create a route table with:
-
A route to the internet
-
A route to a virtual appliance (ASA firewall IP address)
Use Azure Verified Modules
-
🔹 Azure Container Apps Environment (CAE)
-
File:
container_app_env.tf -
Create a Container Apps Environment
Use Azure Verified Modules.
🔹 Container App
-
File:
container_app.tf -
Deploy a Container App and store its configuration here.
Use Azure Verified Modules
enable system-assigned identity.
🔹 Azure Container Registry
-
File:
container_registry.tf -
Create an Azure Container Registry.
use Azure verified moduled
ensure RBAC and ABACs are configured
create private endpoint
- Azure Container Registry (Premium SKU)
- Container Apps Environment with VNet integration
- Container App with auto-scaling (1-10 replicas)
- Health probes (liveness and readiness)
- RBAC integration between Container Apps and ACR
🔍 4. Diagnostics & Monitoring
-
Create
diagnostic_settings.tf. -
Create a Log Analytics Workspace.
-
Enable diagnostic settings for every resource in the project.
✅ Additional Requirements
-
Use Azure Verified Terraform Modules for every resource.
-
Ensure all resources follow best practices for:
✨ Final Output Expectation
Generate:
-
A complete folder structure
-
Individual
.tffiles with correct module references and dependencies -
A working Terraform configuration ready to run with:
ULTIMATE AGENTIC RAG APPLICATION PROMPT
# 🎯 **ULTIMATE AGENTIC RAG APPLICATION PROMPT**
## Complete Production-Ready Agentic RAG Application
I need you to generate a full-stack, production-ready Agentic RAG (Retrieval-Augmented Generation) application in Python. This is a learning project, so please include extensive comments, explanations, and educational content throughout.
## 🏗️ Architecture Requirements
### Frontend Layer
**Technology:** Streamlit
**Features:**
- Modern, intuitive UI for document upload (PDF, DOCX, TXT, Markdown)
- Interactive query interface with real-time streaming responses
- Display of retrieved source documents with confidence scores
- Conversation history panel for multi-turn dialogues
- Source citation display (show which document chunks were used)
- Visual indicators for agent reasoning steps
- Session state management
### Backend Layer
**Technology:** FastAPI
**Features:**
- RESTful API with async/await patterns
- Automatic API documentation (Swagger/OpenAPI)
- CORS middleware for frontend integration
- Proper error handling with custom exception classes
- Structured logging (JSON format)
- Request validation using Pydantic models
- Health check and metrics endpoints
- API key authentication for security
### Core Azure Services
- **Azure OpenAI Service:** GPT-4o or GPT-4-turbo (latest available model)
- **Azure AI Search:** Vector store with hybrid search (vector + keyword)
- **Azure Blob Storage:** Document persistence and management
- **Azure Key Vault:** Secure credential management (optional but recommended)
### Agentic Framework
- **Orchestration:** Use LangChain or LlamaIndex for agent logic
- **Agent Pattern:** ReAct (Reasoning + Acting) or OpenAI function calling
- **Tools/Capabilities:**
- Document retriever tool
- Summarization tool
- Query refinement tool
- Multi-step reasoning with thought traces
- Self-reflection and answer validation
## 📋 Functional Requirements
### 1. Document Ingestion Pipeline
```
User uploads document → Extract text → Intelligent chunking (with overlap) →
Generate embeddings → Store in Azure AI Search + Blob Storage → Return success
```
**Requirements:**
- Support PDF, DOCX, TXT, and Markdown files
- Implement smart chunking strategy (500-1000 tokens, 10-20% overlap)
- Extract and preserve metadata (filename, upload date, page numbers)
- Generate embeddings using Azure OpenAI (text-embedding-3-large or ada-002)
- Create Azure AI Search index with vector and text fields
- Handle large documents (chunking + batch processing)
- Progress indicators during upload
### 2. Agentic Query Processing
```
User query → Agent analyzes → Plans retrieval strategy → Retrieves context →
Reasons about information → Generates response → Cites sources → Returns to user
```
**Requirements:**
- Agent breaks down complex queries into sub-tasks
- Dynamic retrieval: fetch more context if initial results insufficient
- Hybrid search: combine vector similarity + keyword matching + semantic ranking
- Re-ranking of retrieved chunks for relevance
- Multi-step reasoning visible to user (show agent's "thoughts")
- Context-aware responses with proper citations
- Handle follow-up questions using conversation history
### 3. API Endpoints
**Document Management:**
- `POST /api/v1/documents/upload` - Upload and process documents
- `GET /api/v1/documents` - List all indexed documents
- `GET /api/v1/documents/{doc_id}` - Get document details
- `DELETE /api/v1/documents/{doc_id}` - Remove document and chunks
**Query & Chat:**
- `POST /api/v1/query` - Submit query with streaming response
- `POST /api/v1/chat` - Conversational endpoint with history
- `GET /api/v1/chat/history/{session_id}` - Retrieve chat history
**System:**
- `GET /api/v1/health` - Health check
- `GET /api/v1/metrics` - Basic usage metrics
## 🗂️ Project Structure
```
agentic-rag-app/
├── backend/
│ ├── app/
│ │ ├── __init__.py
│ │ ├── main.py # FastAPI application entry
│ │ ├── config.py # Configuration and settings
│ │ ├── dependencies.py # Dependency injection
│ │ ├── api/
│ │ │ ├── __init__.py
│ │ │ ├── routes/
│ │ │ │ ├── documents.py # Document endpoints
│ │ │ │ ├── query.py # Query endpoints
│ │ │ │ └── health.py # Health check
│ │ ├── services/
│ │ │ ├── __init__.py
│ │ │ ├── document_processor.py # Text extraction & chunking
│ │ │ ├── embedding_service.py # Azure OpenAI embeddings
│ │ │ ├── search_service.py # Azure AI Search operations
│ │ │ ├── agent_service.py # Agentic orchestration
│ │ │ └── llm_service.py # LLM interactions
│ │ ├── models/
│ │ │ ├── __init__.py
│ │ │ ├── requests.py # Pydantic request models
│ │ │ ├── responses.py # Pydantic response models
│ │ │ └── documents.py # Document data models
│ │ ├── utils/
│ │ │ ├── __init__.py
│ │ │ ├── logging.py # Logging configuration
│ │ │ ├── exceptions.py # Custom exceptions
│ │ │ └── azure_clients.py # Azure SDK clients
│ │ └── core/
│ │ ├── __init__.py
│ │ ├── security.py # Authentication
│ │ └── prompts.py # System prompts
│ ├── tests/
│ │ ├── __init__.py
│ │ └── test_api.py
│ ├── requirements.txt
│ ├── .env.example
│ └── Dockerfile
├── frontend/
│ ├── app.py # Streamlit main app
│ ├── components/
│ │ ├── __init__.py
│ │ ├── upload.py # Upload component
│ │ ├── chat.py # Chat interface
│ │ └── sidebar.py # Sidebar with settings
│ ├── utils/
│ │ ├── __init__.py
│ │ ├── api_client.py # Backend API client
│ │ └── session.py # Session management
│ ├── requirements.txt
│ └── .streamlit/
│ └── config.toml
├── docs/
│ ├── README.md # Main documentation
│ ├── SETUP.md # Detailed setup guide
│ ├── ARCHITECTURE.md # Architecture explanation
│ ├── LEARNING_GUIDE.md # Educational walkthrough
│ └── architecture-diagram.mmd # Mermaid diagram
├── scripts/
│ ├── setup_azure.py # Azure resource setup script
│ └── seed_data.py # Sample data loader
├── sample_documents/
│ └── example.pdf # Test document
├── docker-compose.yml
├── .gitignore
└── README.md
```
## 🔧 Technical Implementation Details
### Technology Stack
- **Python:** 3.11+
- **Backend:** FastAPI 0.110+, uvicorn, python-multipart
- **Frontend:** Streamlit 1.32+
- **Azure SDKs:**
- `openai` (latest)
- `azure-search-documents`
- `azure-storage-blob`
- `azure-identity`
- **Agent Framework:** LangChain 0.1+ or LlamaIndex 0.10+
- **Document Processing:** pypdf2, python-docx, markdown
- **Data Validation:** Pydantic 2.0+
- **Additional:** python-dotenv, httpx, aiohttp
### Chunking Strategy
- Use semantic chunking (sentence-aware)
- Target chunk size: 500-1000 tokens
- Overlap: 10-20% (50-200 tokens)
- Preserve document structure metadata
- Include document title/filename in each chunk
### Embedding Configuration
- Model: `text-embedding-3-large` (3072 dimensions) or `text-embedding-ada-002`
- Batch processing for efficiency
- Normalize vectors for cosine similarity
### Azure AI Search Index Schema
```json
{
"name": "documents-index",
"fields": [
{"name": "id", "type": "Edm.String", "key": true},
{"name": "content", "type": "Edm.String", "searchable": true},
{"name": "embedding", "type": "Collection(Edm.Single)", "dimensions": 3072, "vectorSearchProfile": "default"},
{"name": "document_id", "type": "Edm.String", "filterable": true},
{"name": "document_name", "type": "Edm.String", "filterable": true},
{"name": "chunk_index", "type": "Edm.Int32"},
{"name": "metadata", "type": "Edm.String"}
]
}
```
### Agent Prompt Template
Include a clear system prompt that:
- Defines the agent's role as a helpful RAG assistant
- Instructs to use retrieved context
- Requires citation of sources
- Encourages asking clarifying questions
- Enables multi-step reasoning
## 📚 Learning Objectives & Documentation
### Include Detailed Explanations For:
1. **What is Agentic RAG?** How it differs from simple RAG
2. **Chunking Strategies:** Why overlap matters, semantic vs. fixed-size
3. **Embedding Models:** How vector similarity works
4. **Hybrid Search:** Combining vector + keyword + semantic ranking
5. **Agent Reasoning:** ReAct pattern, tool use, chain-of-thought
6. **Prompt Engineering:** System prompts, few-shot examples, context construction
7. **Performance Optimization:** Caching, batch processing, async operations
8. **Error Handling:** Graceful degradation, retry logic, user-friendly messages
### Create These Educational Documents:
- **ARCHITECTURE.md:** System design with Mermaid diagram
- **LEARNING_GUIDE.md:** Step-by-step explanation of each component
- **SETUP.md:** Local development setup, Azure configuration
- **API_DOCS.md:** Endpoint documentation with examples
## 🎨 Code Quality Requirements
- **Type Hints:** Use throughout (functions, variables, return types)
- **Comments:** Explain WHY, not just WHAT
- **Docstrings:** Google or NumPy style for all functions/classes
- **Error Handling:** Try-except blocks with specific exceptions
- **Logging:** Use structured logging (JSON) with appropriate levels
- **PEP 8:** Follow Python style guide
- **Async/Await:** Use for I/O operations
- **Configuration:** All credentials/settings in environment variables
- **Security:** Never hardcode secrets, validate all inputs
## 🚀 Deployment & Running
### Local Development
1. Set up Azure resources (provide script or manual steps)
2. Configure `.env` file with credentials
3. Install dependencies: `pip install -r requirements.txt`
4. Run backend: `uvicorn backend.app.main:app --reload`
5. Run frontend: `streamlit run frontend/app.py`
### Docker Support
- Include `Dockerfile` for both services
- `docker-compose.yml` to run full stack
- Health checks and proper networking
## ✨ Optional Enhancements (If Possible)
- **Memory/History:** Store conversation context for multi-turn chats
- **Observability:** Integration with Langfuse or OpenTelemetry
- **Caching:** Redis for frequently accessed results
- **Rate Limiting:** Protect API endpoints
- **Admin UI:** View usage statistics, manage documents
- **Export:** Download chat history or generated responses
- **Evaluation:** Include retrieval quality metrics
## 📦 Deliverables
1. **Complete working codebase** (all files in proper structure)
2. **Requirements.txt** with pinned versions
3. **.env.example** with all required variables documented
4. **README.md** with quick start guide
5. **Detailed documentation** (SETUP.md, ARCHITECTURE.md, LEARNING_GUIDE.md)
6. **Sample data** for testing (example.pdf or similar)
7. **Mermaid diagram** showing data flow
8. **Inline comments** explaining complex logic
## 🎯 Generation Instructions for Claude
Please generate this project **step-by-step**:
1. **First:** Show the complete project structure (folder tree)
2. **Second:** Generate backend core files (config, models, main.py)
3. **Third:** Implement services (document processing, embeddings, search, agent)
4. **Fourth:** Create API routes (documents, query, health)
5. **Fifth:** Build Streamlit frontend (main app, components)
6. **Sixth:** Add configuration files (requirements.txt, .env.example, docker files)
7. **Seventh:** Create documentation (README, SETUP, ARCHITECTURE, LEARNING_GUIDE)
8. **Eighth:** Include sample prompts and test data
For each file, add:
- Clear comments explaining key concepts
- Type hints for all functions
- Error handling examples
- Educational notes where relevant
## 📊 Architecture Diagram Request
Please also create a Mermaid diagram (`docs/architecture-diagram.mmd`) showing:
- User interaction with Streamlit UI
- HTTP requests to FastAPI backend
- Document upload flow (extraction → chunking → embedding → indexing)
- Query processing flow (query → agent → retrieval → LLM → response)
- Azure services interactions (OpenAI, AI Search, Blob Storage)
- Data flow between all components
Use proper Mermaid syntax (flowchart or sequence diagram) that can be rendered in VS Code or GitHub.
---
## 🎯 My Goal
Build this application to deeply understand Agentic RAG architecture, Azure AI services integration, and production-ready Python development. The code should be clean, well-documented, and serve as a reference implementation for building intelligent document retrieval systems with autonomous agent capabilities.
---
## 💡 Follow-Up Instructions
After pasting this prompt to Claude, follow up with:
> "Please start by generating the folder structure and backend configuration files first. Then proceed step-by-step through each component, ensuring all code includes detailed comments and explanations."
This will help Claude generate organized, manageable code blocks that you can review and learn from systematically.
Prompt for generating MCP questions for question bank V1.1.
You are an expert educational assessment designer. I will provide a lecture transcript about a topic (e.g., Microsoft Fabric or Lakehouse). Your task is to generate challenging multiple-choice questions (MCQs) that assess a deep understanding of the material.
Follow this process:
1) Understand the content
• Read the transcript carefully and identify key concepts, relationships, processes, and principles.
• Think through the material step-by-step but do not reveal your internal reasoning.
2) Choose concepts for questions
• Focus on application, analysis, and evaluation (not simple recall).
• Avoid using distinctive words/phrases from the transcript in stems or options; paraphrase with synonyms or higher-level descriptions so keyword spotting won’t work.
• Ensure that about 25% of the questions are advanced or tricky — designed to test subtle understanding or require multi-step reasoning, similar to IIT JEE Advanced style. These can involve combining two concepts, analyzing edge cases, or reasoning through trade-offs.
3) Write clear stems
• Each question must have a single, clearly worded stem containing all information needed to understand the problem.
• Avoid irrelevant detail, negative wording, and trick questions.
• Ask for the “best answer.”
4) Design the alternatives
• Exactly four options (A, B, C, D).
• Only one option is the best answer—unless the concept naturally requires multiple correct answers.
• Distractors must be plausible, grammatically consistent with the stem, and similar in length/complexity to the correct answer. Base them on realistic misconceptions.
• Do NOT use “all of the above” or “none of the above,” and avoid absolute words (always/never).
• Options must be mutually exclusive.
5) Randomize and balance
• Distribute correct answers roughly evenly across A, B, C, and D.
• Do not cue the key by repeating stem wording.
6) Difficulty & explanations
• Write advanced-level questions that require understanding how/why, trade-offs, edge cases, and implications.
• For each question, write the explanation in this **structured teaching-note format**:
- Start with:
“You’ve correctly identified the answer: B. <option text>” (state the correct letter and option).
- Then a section titled **Explanation** with a long conceptual discussion of why the correct answer is correct. Provide enough detail to teach the concept to someone new.
- Then a section titled **Why Not the Other Options?** where you analyze **each distractor separately** in this format:
**A. <option text>:** Follow with a detailed reason why this is incorrect.
**C. <option text>:** Explain in detail why this is wrong.
**D. <option text>:** Explain in detail why this does not apply.
Each distractor must have at least 2–3 sentences of reasoning.
- End with a section titled **Conclusion** that reinforces the key learning point, summarizing why the correct answer is correct in the broader context.
7) Multi-select policy
• Default to single-answer questions.
• Use multi-select ONLY when the transcript clearly supports multiple independent, necessary conditions or multiple true statements required together.
• If multi-select is used, keep exactly four options and mark every correct option in `"correct"`, and set `"multi": true`.
• Otherwise set `"multi": false`.
RETURN YOUR OUTPUT as a Python list named QUESTIONS, where each element is a dict with:
- "id": unique integer starting from 1
- "text": question stem
- "options": list of four strings (A, B, C, D)
- "correct": list of zero-based indices for the correct option(s)
- "multi": boolean (False for single-answer; True only if multi-select is justified)
- "explanation": the full structured explanation (Correct answer → Explanation → Why Not the Other Options → Conclusion)
Example format:
QUESTIONS = [
{
"id": 1,
"text": "At a minimum, which workspace role is required to create new Lakehouse items?",
"options": [
"Viewer",
"Contributor",
"Reader",
"Auditor"
],
"correct": [1],
"multi": False,
"explanation":
Explanation
In Microsoft Fabric’s Lakehouse, the data is organized into two distinct sections: managed (tables) and unmanaged (files). The essential difference lies in how data is stored and managed:
- Managed (Tables) Section:
- Data is stored in the Delta Lake format, which enforces a transactional structure optimized for analytics and querying.
- This section supports structured and semi-structured data, stored as Delta tables, which provide features like ACID transactions, schema enforcement, versioning, and time travel.
- Managed tables are tightly integrated with the Lakehouse’s SQL endpoint and default dataset, enabling seamless querying and reporting.
- The platform governs these tables, ensuring consistency and compatibility with Fabric’s analytical tools.
- Unmanaged (Files) Section:
- This section allows storage of arbitrary file types (e.g., CSVs, JSON, PNGs, PDFs, etc.) in the Lakehouse’s OneLake storage without enforcing the Delta format.
- Files in this section are not automatically integrated into the Lakehouse’s managed table structure and are not directly queryable via the SQL endpoint unless explicitly converted to Delta tables.
- It serves as a general-purpose file storage area, useful for raw or unstructured data that may be processed later.
Why Not the Other Options?
- A. Managed handles multimedia files, unmanaged holds tabular datasets:
- This is incorrect because the managed section is for tabular data in Delta format, not multimedia files. Multimedia or unstructured files (e.g., images, videos) are typically stored in the unmanaged section, not as tabular datasets.
- C. Managed auto-archives data, unmanaged is volatile:
- This is incorrect. Neither section auto-archives data by default, and the unmanaged section is not inherently volatile. Both sections store data persistently in OneLake, but they differ in format and governance, not archival or volatility.
- D. Managed is cost-free, unmanaged incurs extra billing:
- This is incorrect. Both managed and unmanaged sections are part of the Lakehouse’s storage in OneLake, and their costs are tied to the same Fabric capacity-based billing model. There’s no distinct billing difference between the two sections.
Conclusion
The key difference is that the managed section enforces the transactional Delta format for structured data, optimized for analytics, while the unmanaged section accepts arbitrary file types, providing flexibility for storing raw or unstructured data."
}
]
Begin once you receive the transcript.
~~~~~~~~~~~~~~~~~~~~ 2nd prompt~~~~~~~~~~~~~~~~~
You are an expert educational assessment designer. I will provide you with a lecture transcript or an OCR’d PDF document. Your job is to generate challenging multiple-choice questions (MCQs) from the text.
Follow these rules strictly:
1. Paragraph-by-paragraph coverage
• Read the document sequentially, one paragraph or section at a time.
• For each paragraph, generate exactly 1 advanced MCQ that tests deep understanding of that specific content.
• Do not skip any paragraph, and do not recycle the same idea multiple times.
2. Question design
• Stems should focus on application, analysis, and evaluation — not simple recall.
• Avoid keyword spotting: paraphrase concepts instead of copy-pasting.
• Each question must have exactly 4 options (A, B, C, D).
• Only one option is correct (multi-select only if the paragraph clearly requires it).
• Distractors should be plausible and based on common misconceptions.
• No “all of the above,” “none of the above,” or absolute words (always/never).
3. Interaction style (Study Mode)
• Ask me one question at a time.
• Wait for my answer (A/B/C/D).
• Then respond with:
✅ Correct OR ❌ Incorrect
+ A structured teaching note containing:
- **Explanation**: why the correct answer is right.
- **Why not the other options?**: analyze each distractor.
- **Conclusion**: reinforce the key point with a simple real-world analogy (5th grade friendly).
• After feedback, move to the next paragraph’s question.
4. Coverage guarantee
• Ensure every paragraph or section produces at least one unique MCQ.
• Continue until the entire document has been converted into a full MCQ set.
• The final output should represent complete coverage of the source text, without repetition.
---
I will upload a PDF (possibly OCR format). Use this process to generate the MCQs interactively with me.
Prompt for generating MCQ questions for question bank.
You are an expert educational assessment designer. I will provide a lecture transcript about a topic (e.g., Microsoft Fabric or Lakehouse). Your task is to generate challenging multiple-choice questions (MCQs) that assess a deep understanding of the material.
Follow this process:
1) Understand the content
• Read the transcript carefully and identify key concepts, relationships, processes, and principles.
• Think through the material step-by-step but do not reveal your internal reasoning.
2) Choose concepts for questions
• Target application, analysis, and evaluation (not simple recall).
• Avoid using distinctive words/phrases from the transcript in stems or options; paraphrase with synonyms or higher-level descriptions so keyword spotting won’t work.
3) Write clear stems
• Each question must have a single, clearly worded stem containing all information needed to understand the problem.
• Avoid irrelevant detail, negative wording, and trick questions.
• Ask for the “best answer.”
4) Design the alternatives
• Exactly four options (A, B, C, D).
• Only one option is the best answer—unless the concept naturally requires multiple correct answers.
• Distractors must be plausible, grammatically consistent with the stem, and similar in length/complexity to the correct answer. Base them on realistic misconceptions.
• Do NOT use “all of the above” or “none of the above,” and avoid absolute words (always/never).
• Options must be mutually exclusive.
5) Randomize and balance
• Distribute correct answers roughly evenly across A, B, C, and D.
• Do not cue the key by repeating stem wording.
6) Difficulty & explanations
• Write advanced-level questions that require understanding how/why, trade-offs, edge cases, and implications.
• For each question, explain briefly why the key is correct and why each distractor is not (for the question bank; not shown to examinees).
7) Multi-select policy (very important)
• Default to single-answer questions.
• Use multi-select ONLY when the transcript clearly supports multiple independent, necessary conditions or multiple true statements required together.
• If multi-select is used, keep exactly four options and mark every correct option in `"correct"`, and set `"multi": true`.
• Otherwise set `"multi": false`.
RETURN YOUR OUTPUT as a Python list named QUESTIONS, where each element is a dict with:
- "id": unique integer starting from 1
- "text": question stem
- "options": list of four strings (A, B, C, D)
- "correct": list of zero-based indices for the correct option(s)
- "multi": boolean (False for single-answer; True only if multi-select is justified)
- "explanation": brief rationale (why the key is right and others wrong)
Example format:
QUESTIONS = [
{
"id": 1,
"text": "Before creating a shortcut, which Azure role must the user have on the ADLS Gen2 container?",
"options": [
"Storage Blob Data Reader",
"Storage Blob Data Contributor",
"Storage Account Key Operator Service Role",
"Data Factory Contributor",
],
"correct": [1],
"multi": False,
"explanation": "Contributor is required to write/manage data; the others lack sufficient privileges for shortcut creation."
}
]
Begin once you receive the transcript.