<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>Blog articles</title>
    <link>https://techcommunity.microsoft.com/t5/blog/bg-p/bff5f527-af54-4e01-be5c-609acdd7f285</link>
    <description>Blog articles</description>
    <pubDate>Wed, 13 May 2026 18:28:49 GMT</pubDate>
    <dc:creator>bff5f527-af54-4e01-be5c-609acdd7f285</dc:creator>
    <dc:date>2026-05-13T18:28:49Z</dc:date>
    <item>
      <title>The Rise of vLLM in Modern Cloud Development: Revolutionizing AI Inference</title>
      <link>https://techcommunity.microsoft.com/t5/blog/the-rise-of-vllm-in-modern-cloud-development-revolutionizing-ai/ba-p/4499179</link>
      <description>&lt;H3&gt;Introduction to the AI Cloud Bottleneck&lt;/H3&gt;&lt;P&gt;The emergence of Large Language Models (LLMs) has revolutionized cloud applications, from universal chatbots to automated programming assistants. However, hosting these models in the cloud is notoriously expensive due to the massive computational and memory requirements of hardware accelerators like GPUs. During text generation, models autoregressively produce tokens one at a time, relying on a dynamically growing Key-Value (KV) cache that acts as the model's short-term memory.&lt;/P&gt;&lt;P&gt;Traditional inference systems store this KV cache in contiguous memory blocks, pre-allocating space for the maximum potential request length. This approach results in severe memory fragmentation and reservation waste, leaving up to 80% of GPU memory unused and crippling the system's ability to handle large batches of concurrent users.&lt;/P&gt;&lt;H3&gt;The Core Innovation: PagedAttention&lt;/H3&gt;&lt;P&gt;To solve this memory bottleneck, researchers developed vLLM, an open-source inference engine built around a breakthrough algorithm called PagedAttention. Inspired by how operating systems manage virtual memory via paging, PagedAttention divides the KV cache into small, fixed-size blocks (pages) that do not need to be stored contiguously in physical memory.&lt;/P&gt;&lt;P&gt;By allocating memory blocks on demand as tokens are generated, vLLM practically eliminates external fragmentation and minimizes internal fragmentation. This highly efficient memory management limits memory waste to under 4%, allowing the system to batch significantly more requests concurrently. As a result, vLLM delivers up to 24x higher throughput than standard Hugging Face Transformers and up to 3.5x higher throughput than Hugging Face's Text Generation Inference (TGI), all without requiring any changes to the underlying model architecture.&lt;/P&gt;&lt;H3&gt;Advanced Features Powering the Cloud&lt;/H3&gt;&lt;P&gt;Modern cloud development requires speed, scalability, and hardware flexibility. vLLM accelerates enterprise AI pipelines through several specialized optimizations:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Continuous Batching: Instead of waiting for a static batch of requests to completely finish, vLLM dynamically injects new requests the moment an existing sequence completes, keeping GPU utilization consistently high.&lt;/LI&gt;&lt;LI&gt;Speculative Decoding: vLLM integrates state-of-the-art speculative decoding techniques, such as Eagle 3, which uses a smaller, faster "draft" model to predict tokens before the main model verifies them. This can boost inference speeds by up to 2.5x.&lt;/LI&gt;&lt;LI&gt;Automatic Prefix Caching &amp;amp; Memory Sharing: For applications with shared system prompts or multi-step reasoning (like beam search), vLLM allows different sequences to share the same KV cache blocks. This is highly beneficial for Retrieval-Augmented Generation (RAG) and multi-round chat workloads.&lt;/LI&gt;&lt;LI&gt;Quantization Support: Cloud developers can leverage 8-bit or 4-bit quantization (like GPTQ or AWQ) to shrink massive models, allowing them to fit onto smaller, more cost-effective cloud GPUs.&lt;/LI&gt;&lt;/UL&gt;&lt;H3&gt;Enterprise Deployment and Cloud Orchestration&lt;/H3&gt;&lt;P&gt;From an infrastructure perspective, vLLM is built for modern cloud-native deployment. It provides a production-ready server that mimics the OpenAI API protocol, allowing developers to use it as a drop-in replacement in existing applications, including those built on frameworks like LangChain.&lt;/P&gt;&lt;P&gt;For large-scale, cluster-wide deployments, vLLM integrates seamlessly with Kubernetes. The vLLM production stack offers Helm charts, Prometheus and Grafana for observability metrics (such as Time-to-First-Token and GPU KV usage), and smart request routing to distribute workloads effectively across backend GPUs.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Deploying vLLM with Docker is the standard way to ensure your environment has the correct CUDA drivers and dependencies without manual configuration.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Single-GPU Deployment (The Quickstart)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Use this command to spin up an OpenAI-compatible server. This example uses the Llama-3.1-8B model.&lt;/P&gt;&lt;P&gt;Furthermore, vLLM is hardware agnostic—meaning cloud engineers can deploy it across NVIDIA, AMD, Google TPUs, or AWS Neuron chips depending on their cloud provider. Serverless platforms like Modal and Runpod also natively support vLLM, allowing teams to instantly spin up autoscaling endpoints without managing idle GPU costs.&lt;/P&gt;&lt;LI-CODE lang="yaml"&gt;docker run --runtime nvidia --gpus all \
-v ~/.cache/huggingface:/root/.cache/huggingface \
--env "HF_TOKEN=$HF_TOKEN" \
-p 8000:8000 \
--ipc=host \
vllm/vllm-openai:latest \
--model meta-llama/Llama-3.1-8B-Instruct &lt;/LI-CODE&gt;&lt;P&gt;What these flags do:&lt;/P&gt;&lt;P&gt;--runtime nvidia: Enables GPU access (ensure NVIDIA Container Toolkit is installed).&lt;/P&gt;&lt;P&gt;-v ...: Mounts your local Hugging Face cache so you don't re-download the model every time the container restarts.&lt;/P&gt;&lt;P&gt;--ipc=host: Essential for high-speed memory sharing between the container and the GPU.&lt;/P&gt;&lt;P&gt;--model: The Hugging Face model ID.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Multi-GPU Deployment (Docker Compose)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;For production environments or massive models (like a 70B parameter model) that require multiple GPUs, use docker-compose.yml.&lt;/P&gt;&lt;LI-CODE lang="yaml"&gt;services:
    vllm:
     image: vllm/vllm-openai:latest
     container_name: vllm-server
     environment:
      - HF_TOKEN=${HF_TOKEN}
ports:
  - "8000:8000"
volumes:
  - ~/.cache/huggingface:/root/.cache/huggingface
ipc: host
deploy:
  resources:
    reservations:
      devices:
        - driver: nvidia
          count: all # Uses all available GPUs
          capabilities: [gpu]
command: &amp;gt;
  --model meta-llama/Llama-3.3-70B-Instruct
  --tensor-parallel-size 4
  --max-model-len 4096&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H3&gt;Real-World Enterprise Impact&lt;/H3&gt;&lt;P&gt;Major tech companies are actively leveraging vLLM to scale their cloud AI features:&lt;BR /&gt;Roblox deployed vLLM to serve over 4 billion tokens a week for their AI assistant, achieving a 50% reduction in latency.&lt;BR /&gt;LinkedIn uses vLLM’s continuous batching and shared prefix caching to power its Hiring Assistant, handling thousands of candidate profiles with heavy prompt overlaps and improving token generation times by 7%.&lt;BR /&gt;Amazon integrated vLLM into a multi-node architecture to support its Rufus shopping assistant, dynamically distributing inference across the cloud to handle millions of customer queries without performance drops.&lt;BR /&gt;In conclusion, vLLM is redefining modern cloud development by turning memory-bound, resource-heavy LLMs into scalable, cost-efficient microservices.&lt;/P&gt;&lt;H3&gt;Which one to choose ?&lt;/H3&gt;&lt;P&gt;To help you choose the right tool for your specific cloud environment, here is a comparison of vLLM against the other two industry heavyweights: Hugging Face Text Generation Inference (TGI) and NVIDIA TensorRT-LLM.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Choose vLLM if&lt;/STRONG&gt;: You need to serve a large number of concurrent users on a budget. It is the most flexible option if you want to avoid vendor lock-in and deploy across different cloud providers (e.g., switching between AWS G5 instances and Google Cloud TPUs).&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Choose TGI if&lt;/STRONG&gt;: Your infrastructure is already built around the Hugging Face ecosystem and you prioritize production stability. It is particularly strong for long-context RAG applications where you need to cache massive system prompts (like internal legal databases) across multiple requests.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Choose TensorRT-LLM if&lt;/STRONG&gt;: You are chasing the absolute lowest possible latency (e.g., real-time voice AI) and you have committed entirely to high-end NVIDIA hardware like H100s or B200s. It requires more engineering effort to compile models, but it squeezes every drop of power out of the GPU.&lt;/P&gt;&lt;H3&gt;Conclusion&lt;/H3&gt;&lt;P&gt;In short, &lt;STRONG&gt;vLLM is the bridge between AI research and cloud-scale reality&lt;/STRONG&gt;. By treating GPU memory with the same logic as a modern operating system, it has effectively solved the "fragmentation crisis" that once made high-performance inference prohibitively expensive. For developers and enterprises, this means the ability to serve more users, on more diverse hardware, at a fraction of the previous cost—all without sacrificing the flexibility of open-source models.&lt;/P&gt;</description>
      <pubDate>Tue, 03 Mar 2026 23:34:52 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/blog/the-rise-of-vllm-in-modern-cloud-development-revolutionizing-ai/ba-p/4499179</guid>
      <dc:creator>KonstantinosPassadis</dc:creator>
      <dc:date>2026-03-03T23:34:52Z</dc:date>
    </item>
    <item>
      <title>How We Built an AI Operations Agent Using MCP Servers and Dynamic Tool Routing</title>
      <link>https://techcommunity.microsoft.com/t5/blog/how-we-built-an-ai-operations-agent-using-mcp-servers-and/ba-p/4491644</link>
      <description>&lt;P&gt;In this post, we’re going to tackle a massive challenge in the agent space:&amp;nbsp;&lt;STRONG&gt;Safety and Visibility&lt;/STRONG&gt;. We are going to build a practical demo that connects two distinct MCP servers to a single agent service using the&amp;nbsp;&lt;STRONG&gt;Microsoft Agents SDK&lt;/STRONG&gt;&amp;nbsp;and&amp;nbsp;&lt;STRONG&gt;Azure OpenAI&lt;/STRONG&gt;. To top it off, we’ll wrap it all in a lightweight web UI (&lt;STRONG&gt;AG-UI&lt;/STRONG&gt;) that streams text, traces tool calls, and—crucially—gates state-changing actions behind&amp;nbsp;&lt;STRONG&gt;human approval&lt;/STRONG&gt;.&lt;/P&gt;&lt;H2&gt;The Problem: Why Do We Need This?&amp;nbsp;&amp;nbsp;&lt;/H2&gt;&lt;P&gt;As agent-based applications get more complex, we start hitting the same headaches over and over. We want agents to work with real backends, but we keep running into familiar pitfalls.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The “Black Box” Issue: Tool calls happen out of sight, so users have no idea what the agent is doing—instantly killing trust.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Tangled Logic: Backend logic gets crammed into prompts, turning into messy spaghetti that’s hard to test, deploy, and improve.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Unsafe Writes: An agent might update a database or delete a file without any human in the loop.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Our Goal: Keep backends modular with MCP, centralize the agent’s “brain,” and give users a UI that makes every tool action clear and trustworthy.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The Pitch: Backends stay as MCP tools, the agent brain lives in one service, and the UI makes tool activity fully transparent.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;H2&gt;The Architecture&lt;/H2&gt;&lt;P&gt;To solve this, we are using a&amp;nbsp;&lt;STRONG&gt;microservices approach&lt;/STRONG&gt;&amp;nbsp;with&amp;nbsp;&lt;STRONG&gt;Azure&lt;/STRONG&gt; at its core.&lt;/P&gt;&lt;img /&gt;&lt;H3&gt;High-Level Components&amp;nbsp;&amp;nbsp;&lt;/H3&gt;&lt;P&gt;&lt;STRONG&gt;Policy MCP Server&lt;/STRONG&gt;: Connects to Azure Blob Storage and serves as the source of truth for policy documents.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Order MCP Server:&lt;/STRONG&gt; Connects to Azure SQL, managing structured order data.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Agent + AG-UI Service (FastAPI&lt;/STRONG&gt;): The core of the system, linking to the MCP servers, running the agent through the Microsoft Agents SDK, and streaming events directly to the browser.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Web UI:&lt;/STRONG&gt; A straightforward HTML/CSS/JavaScript frontend that displays the chat experience, tool traces, images, and human-approval cards.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H3&gt;The Data Flow (Mental Model)&amp;nbsp;&amp;nbsp;&lt;/H3&gt;&lt;P&gt;Understanding the flow is key for effective debugging and observability. Here’s how a single request moves through the system:&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Prompt&lt;/STRONG&gt;: The browser sends a user prompt to the Agent Service.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Stream&lt;/STRONG&gt;: The Agent Service instantly streams events back to the UI, including assistant text (token-by-token), tool-call traces (arguments and results), and custom UI elements like image cards or approval requests.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Execution&lt;/STRONG&gt;: The Agent Service calls the appropriate MCP tools (Policy or Orders) via SSE and JSON-RPC.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Guardrails&lt;/STRONG&gt;: For tools that change state (like updating an order), the agent pauses and explicitly requests human approval before proceeding.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;img /&gt;&lt;H5&gt;Sample Client (AGUI) Code&lt;/H5&gt;&lt;LI-CODE lang="python"&gt;    # Convenience: if a tool returns an image URL (or JSON containing one), emit an AG-UI Custom event
    # so clients can render it as a rich card.
    def _looks_like_image_url(value: str) -&amp;gt; bool:
        v = value.lower().split("?")[0].split("#")[0]
        if not (v.startswith("http://") or v.startswith("https://")):
            return False
        return v.endswith((".png", ".jpg", ".jpeg", ".gif", ".webp", ".svg"))

    image_url: str | None = None
    if isinstance(result, str) and _looks_like_image_url(result.strip()):
        image_url = result.strip()
    else:
        try:
            parsed = json.loads(result)
            if isinstance(parsed, dict):
                for k in ("imageUrl", "image_url", "url", "image"):
                    v = parsed.get(k)
                    if isinstance(v, str) and _looks_like_image_url(v.strip()):
                        image_url = v.strip()
                        break
        except Exception:
            pass

    if image_url:
        emit({"type": "Custom", "name": "image", "value": {"url": image_url, "alt": tool_name}})

    emit({"type": "StepFinished", "stepName": step_name})&lt;/LI-CODE&gt;&lt;H5&gt;Sample Server (Policy Documents MCP Server)&lt;/H5&gt;&lt;LI-CODE lang="python"&gt;_server.call_tool()
async def call_tool(
    name: str, arguments: dict
) -&amp;gt; list[types.TextContent | types.ImageContent | types.EmbeddedResource]:
    if name == "list_policy_documents":
        try:
            client = _blob_service_client()
            storage = _safe_storage_info(client)
            available = _list_blobs(limit=200)
            return [
                types.TextContent(
                    type="text",
                    text=json.dumps({"storage": storage, "available": available}, ensure_ascii=False),
                )
            ]
        except Exception as e:
            return [types.TextContent(type="text", text=f"Error listing policies: {type(e).__name__}: {e}")]

    if name == "read_policy_document":
        requested = arguments.get("doc_name")
        if not requested:
            return [types.TextContent(type="text", text="Error: doc_name is required.")]

        doc_name = _name_map(requested)

        try:
            client = _blob_service_client()
            container = client.get_container_client(CONTAINER_NAME)
            if not container.exists():
                storage = _safe_storage_info(client)
                return [
                    types.TextContent(
                        type="text",
                        text=(
                            "Policy container not found. "
                            + json.dumps({"storage": storage}, ensure_ascii=False)
                        ),
                    )
                ]

            blob_client = container.get_blob_client(doc_name)
            if not blob_client.exists():
                storage = _safe_storage_info(client)
                available = _list_blobs(limit=50)
                return [
                    types.TextContent(
                        type="text",
                        text=(
                            f"Document '{doc_name}' not found in policy library. "
                            + json.dumps({"storage": storage, "available": available}, ensure_ascii=False)
                        ),
                    )
                ]

            content = blob_client.download_blob().readall().decode("utf-8")
            return [types.TextContent(type="text", text=content)]

        except Exception as e:
            return [types.TextContent(type="text", text=f"Error accessing policy library: {type(e).__name__}: {e}")]

    raise ValueError(f"Unknown tool: {name}")&lt;/LI-CODE&gt;&lt;H5&gt;Sample Server ( Orders MCP Server)&lt;/H5&gt;&lt;LI-CODE lang="python"&gt;from mcp.server import Server
from mcp.server.sse import SseServerTransport
import mcp.types as types
import os
import pyodbc
import json

# Initialize MCP Server
mcp_server = Server("SQLOrderAgent")

# SQL Configuration
SQL_CONNECTION_STRING = os.getenv("SQL_CONNECTION_STRING")

def get_db_connection():
    if not SQL_CONNECTION_STRING:
        raise ValueError("SQL_CONNECTION_STRING environment variable is not set.")
    return pyodbc.connect(SQL_CONNECTION_STRING)

def dict_from_row(cursor):
    columns = [column[0] for column in cursor.description]
    return [dict(zip(columns, row)) for row in cursor.fetchall()]


def _column_exists(conn: pyodbc.Connection, table_name: str, column_name: str) -&amp;gt; bool:
    cursor = conn.cursor()
    cursor.execute(
        """
        SELECT 1
        FROM INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_NAME = ? AND COLUMN_NAME = ?
        """,
        (table_name, column_name),
    )
    return cursor.fetchone() is not None

@mcp_server.list_tools()
async def list_tools() -&amp;gt; list[types.Tool]:
    return [
        types.Tool(
            name="get_order_details",
            description="Queries the SQL database for order details (status, priority, category, and optional fields like photo/address/remarks if present).",
            inputSchema={
                "type": "object",
                "properties": {
                    "order_id": {"type": "string", "description": "The ID of the order."}
                },
                "required": ["order_id"]
            }
        ),
        types.Tool(
            name="get_order_address",
            description="Returns an order's delivery address (and remarks if available) from the SQL database.",
            inputSchema={
                "type": "object",
                "properties": {
                    "order_id": {"type": "string", "description": "The ID of the order."}
                },
                "required": ["order_id"]
            },
        ),&lt;/LI-CODE&gt;&lt;H3&gt;Scenarios&lt;/H3&gt;&lt;H4&gt;Scenario 1: Image Rendering (Read-Only)&lt;/H4&gt;&lt;P&gt;&lt;STRONG&gt;Prompt:&lt;/STRONG&gt;&amp;nbsp;“Show me the photo for order 5390”&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;What happens:&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;The agent calls&amp;nbsp;get_order_photo.&lt;/LI&gt;&lt;LI&gt;The UI receives a&amp;nbsp;&lt;STRONG&gt;Custom:image&lt;/STRONG&gt;&amp;nbsp;event.&lt;/LI&gt;&lt;LI&gt;An image card is rendered directly inside the chat.&lt;/LI&gt;&lt;/UL&gt;&lt;H4&gt;Scenario 2: Approval Gating (Human-in-the-Loop)&lt;/H4&gt;&lt;P&gt;&lt;STRONG&gt;Prompt:&lt;/STRONG&gt;&amp;nbsp;“Set the photo for order 5390 to https://example.com/new_photo.jpg”&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;What happens:&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;The agent detects a&amp;nbsp;&lt;STRONG&gt;write operation&lt;/STRONG&gt;.&lt;/LI&gt;&lt;LI&gt;An&amp;nbsp;&lt;STRONG&gt;Approval Card&lt;/STRONG&gt;&amp;nbsp;appears in the UI.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Approve:&lt;/STRONG&gt;&amp;nbsp;Executes&amp;nbsp;set_order_photo.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Reject:&lt;/STRONG&gt;&amp;nbsp;Cancels the action entirely.&lt;/LI&gt;&lt;/UL&gt;&lt;H4&gt;Scenario 3: Policy Lookup&lt;/H4&gt;&lt;P&gt;&lt;STRONG&gt;Prompt:&lt;/STRONG&gt;&amp;nbsp;“List available policy docs, then read the hazardous policy.”&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;What happens:&lt;/STRONG&gt;&amp;nbsp;The agent queries the&amp;nbsp;&lt;STRONG&gt;Policy MCP Server&lt;/STRONG&gt; (Azure Blob Storage), lists the available files, and then reads the specific document you requested.&lt;/P&gt;&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;img /&gt;&lt;H2&gt;Lessons Learned &amp;amp; Design Patterns&amp;nbsp;&amp;nbsp;&lt;/H2&gt;&lt;P&gt;Building this demo revealed some key insights for taking agentic systems to production.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;MCP as a Boundary: &lt;/STRONG&gt;MCP servers help keep domain tools cleanly separated, with clear ownership—Policy can run their own MCP server, and Orders can manage theirs independently.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Trust through Visibility: &lt;/STRONG&gt;Streaming tool traces, including arguments and results, is crucial for smooth debugging and building genuine user trust.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;First-Class Approval: &lt;/STRONG&gt;Human approval works best when it’s a dedicated UI event that the frontend understands and enforces.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H3&gt;Operational Tips&amp;nbsp;&amp;nbsp;&lt;/H3&gt;&lt;P&gt;&lt;STRONG&gt;Reuse Clients: &lt;/STRONG&gt;Don’t recreate Azure SDK clients on every request—initialize them once at startup and reuse them.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Log Diagnostics&lt;/STRONG&gt;: Always log tool latency and 429 errors to catch bottlenecks early.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Stable Schemas:&lt;/STRONG&gt; Keep inputs and outputs small, explicit, and well-defined to cut down on hallucinations and unpredictable behavior.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This post explored a practical approach to building safe, observable agentic systems with MCP, Microsoft Agents SDK, and Azure-native services. By splitting domain logic into MCP servers, centralizing the agent’s “brain,” and streaming every tool action through a human-aware UI, we showed how to replace opaque, risky behavior with trust, control, and visibility—treating human approval as a true first-class interaction for powerful, responsible automation.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;</description>
      <pubDate>Tue, 10 Feb 2026 20:49:22 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/blog/how-we-built-an-ai-operations-agent-using-mcp-servers-and/ba-p/4491644</guid>
      <dc:creator>KonstantinosPassadis</dc:creator>
      <dc:date>2026-02-10T20:49:22Z</dc:date>
    </item>
    <item>
      <title>Building an Agentic, AI-Powered Helpdesk with Agents Framework, Azure, and Microsoft 365</title>
      <link>https://techcommunity.microsoft.com/t5/blog/building-an-agentic-ai-powered-helpdesk-with-agents-framework/ba-p/4474756</link>
      <description>&lt;H2&gt;The High-Level Architecture&lt;/H2&gt;&lt;P&gt;The core idea is to decouple the system. Instead of one large application doing everything, we split the process into distinct, scalable components.&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;STRONG&gt;Ingestion:&lt;/STRONG&gt;&amp;nbsp;A lightweight API endpoint simply to capture the request.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Decoupling:&lt;/STRONG&gt;&amp;nbsp;A message queue to hold the request for background processing.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Processing:&lt;/STRONG&gt;&amp;nbsp;An asynchronous worker that handles all the heavy lifting: AI enrichment, notifications, and decision-making.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Action:&lt;/STRONG&gt;&amp;nbsp;A set of automated actions that connect directly to our M365 tools.&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;Here’s the entire flow visualized as a flowchart:&lt;/P&gt;&lt;img /&gt;&lt;P class="lia-clear-both"&gt;&amp;nbsp;&lt;/P&gt;&lt;H2&gt;Step-by-Step Workflow Breakdown&lt;/H2&gt;&lt;P&gt;Let's dive into the details of each step.&lt;/P&gt;&lt;H3&gt;Ingestion: The FastAPI Endpoint&lt;/H3&gt;&lt;P&gt;The user's journey begins at a simple web form (built with&amp;nbsp;&lt;STRONG&gt;FastAPI&lt;/STRONG&gt;&amp;nbsp;and&amp;nbsp;&lt;STRONG&gt;Jinja2&lt;/STRONG&gt;). The form captures the essential details: Title, Description, Category, Priority, and the user's email.&lt;/P&gt;&lt;P&gt;When the user hits "Submit," the request hits our&amp;nbsp;POST /submit&amp;nbsp;endpoint. This endpoint does two things immediately:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;STRONG&gt;Full Storage:&lt;/STRONG&gt;&amp;nbsp;It saves the complete entity (using&amp;nbsp;Category&amp;nbsp;as the&amp;nbsp;PartitionKey&amp;nbsp;and a&amp;nbsp;GUID&amp;nbsp;as the&amp;nbsp;RowKey) into&amp;nbsp;&lt;STRONG&gt;Azure Table Storage&lt;/STRONG&gt;&amp;nbsp;for a permanent record.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Compact Message:&lt;/STRONG&gt;&amp;nbsp;It sends a&amp;nbsp;&lt;EM&gt;compact&lt;/EM&gt;&amp;nbsp;JSON message (containing just the key info like&amp;nbsp;tableRow,&amp;nbsp;category,&amp;nbsp;priority, etc.) to an&amp;nbsp;&lt;STRONG&gt;Azure Service Bus&lt;/STRONG&gt;&amp;nbsp;queue named&amp;nbsp;'m365'.&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;This "split" is crucial. The API responds instantly to the user ("Submitted!") without waiting for any complex processing. The entire "heavy" part of the job is now in the queue.&lt;/P&gt;&lt;H3&gt;The Asynchronous Worker &amp;amp; AI Enrichment&lt;/H3&gt;&lt;P&gt;A separate Python process is constantly listening to the&amp;nbsp;'m365'&amp;nbsp;Service Bus queue. When our new message arrives, the worker wakes up and:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Parses the compact message.&lt;/LI&gt;&lt;LI&gt;Uses the&amp;nbsp;partition&amp;nbsp;and&amp;nbsp;row&amp;nbsp;keys to fetch the full entity from&amp;nbsp;&lt;STRONG&gt;Azure Table Storage&lt;/STRONG&gt;.&lt;/LI&gt;&lt;LI&gt;Calls our&amp;nbsp;enrich_helpdesk_entity&amp;nbsp;function, which is a wrapper for&amp;nbsp;&lt;STRONG&gt;Azure OpenAI&lt;/STRONG&gt;.&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;This AI step is where the magic begins. We send a prompt with the user's raw data and ask the AI to return a clean JSON object with an improved&amp;nbsp;title, a concise&amp;nbsp;summary, and a calculated&amp;nbsp;urgency. If the AI fails, it gracefully falls back to using the original user input.&lt;/P&gt;&lt;H3&gt;Human-in-the-Loop: Teams Notification&lt;/H3&gt;&lt;P&gt;Now that we have a clean, enriched summary, we need to let the support team know. The worker calls&amp;nbsp;send_to_teams, which formats the enriched data into a nice&amp;nbsp;&lt;STRONG&gt;MessageCard&lt;/STRONG&gt;&amp;nbsp;and posts it to a designated&amp;nbsp;&lt;STRONG&gt;Teams channel&lt;/STRONG&gt;&amp;nbsp;via a webhook.&lt;/P&gt;&lt;P&gt;The support team now sees a clean, AI-summarized notification, giving them instant visibility.&lt;/P&gt;&lt;H3&gt;The 'Agent' Decides: AI-Driven Action&lt;/H3&gt;&lt;P&gt;This is the "agentic" part of the workflow. Just notifying a channel is good, but&amp;nbsp;&lt;EM&gt;true&lt;/EM&gt;&amp;nbsp;automation means taking the next step.&lt;/P&gt;&lt;P&gt;The worker calls&amp;nbsp;decide_action, which uses the&amp;nbsp;&lt;STRONG&gt;Microsoft Agent Framework&lt;/STRONG&gt;&amp;nbsp;(powered by an&amp;nbsp;&lt;STRONG&gt;AzureOpenAIChatClient&lt;/STRONG&gt;). We prompt the agent with the key data (category, priority, and the user's original&amp;nbsp;ActionHint).&lt;/P&gt;&lt;P&gt;The agent's job is to intelligently decide the best action. It returns a simple JSON response like&amp;nbsp;{ "action": "create-task" }. This is far more powerful than a simple&amp;nbsp;if/else&amp;nbsp;block, as it can be trained to handle nuanced requests. The system defaults to the user's hint if the agent fails.&lt;/P&gt;&lt;H3&gt;Execution: Closing the Loop in M365&lt;/H3&gt;&lt;P&gt;Based on the agent's decision, the worker executes one of four actions:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;notify-team:&lt;/STRONG&gt;&amp;nbsp;Uses&amp;nbsp;&lt;STRONG&gt;Azure Communication Services (ACS)&lt;/STRONG&gt;&amp;nbsp;to send a formatted email to a distribution list.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;create-task:&lt;/STRONG&gt;&amp;nbsp;Uses&amp;nbsp;&lt;STRONG&gt;MSAL&lt;/STRONG&gt;&amp;nbsp;to get a&amp;nbsp;&lt;STRONG&gt;Microsoft Graph&lt;/STRONG&gt;&amp;nbsp;token and directly creates a new task in a specific&amp;nbsp;&lt;STRONG&gt;Planner&lt;/STRONG&gt;&amp;nbsp;plan/bucket.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;create-ticket:&lt;/STRONG&gt;&amp;nbsp;Makes an HTTP POST to a&amp;nbsp;&lt;STRONG&gt;Power Automate&lt;/STRONG&gt;&amp;nbsp;flow, which can then connect to any system (like ServiceNow, JIRA, etc.) to create a formal ticket.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;store-only:&lt;/STRONG&gt;&amp;nbsp;Does nothing further. The request is stored and visible in Teams, but no other action is taken.&lt;/LI&gt;&lt;/UL&gt;&lt;H3&gt;Visualizing the Interactions (Sequence Diagram)&lt;/H3&gt;&lt;img /&gt;&lt;H2&gt;Conclusion&lt;/H2&gt;&lt;P&gt;This architecture provides a powerful, scalable, and intelligent solution for a common business problem. By leveraging a decoupled, event-driven design with serverless components, the system is both cost-effective and resilient.&lt;/P&gt;&lt;P&gt;The real power, however, comes from the two-stage AI: first, for&amp;nbsp;&lt;STRONG&gt;enrichment&lt;/STRONG&gt;&amp;nbsp;(making data human-readable) and second, for&amp;nbsp;&lt;STRONG&gt;decision-making&lt;/STRONG&gt;&amp;nbsp;(making the system autonomous). This "agentic" pattern, deeply integrated with the Microsoft 365 ecosystem, is a clear look at the future of business process automation.&lt;/P&gt;&lt;H2&gt;Bonus Round: An Analytics Agent for Process Insights&lt;/H2&gt;&lt;P&gt;We can easily extend this project by adding a&amp;nbsp;&lt;STRONG&gt;Chat Interface Agent&lt;/STRONG&gt;. Imagine a simple chat UI (in Teams, or its own web page) where a support manager can ask, in plain English:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;"How many total tickets did we receive today?"&lt;/LI&gt;&lt;LI&gt;"Show me all 'High' priority requests for the 'IT' category."&lt;/LI&gt;&lt;LI&gt;"Which team had the most 'create-task' actions assigned?"&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Technically, this is another "agent" (powered by&amp;nbsp;&lt;STRONG&gt;Azure OpenAI&lt;/STRONG&gt;) that translates the user's natural language question into a valid&amp;nbsp;&lt;STRONG&gt;OData query&lt;/STRONG&gt; for our&amp;nbsp;HelpdeskRequests&amp;nbsp;table. It then fetches the data, summarizes it, and presents the answer in the chat. This creates a powerful, conversational "Copilot" for our new helpdesk process, giving us instant, natural language access to our operational data.&lt;/P&gt;&lt;H3&gt;Git Repo&lt;/H3&gt;&lt;UL&gt;&lt;LI&gt;&lt;A href="https://github.com/passadis/agents-helpdesk" target="_blank" rel="noopener"&gt;Agentic AI Helpdesk&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;H2&gt;References&lt;/H2&gt;&lt;P&gt;For more in-depth information on the services and frameworks used in this post, check out the official Microsoft Learn documentation:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/service-bus-messaging/service-bus-messaging-overview?wt.mc_id=MVP_365598" target="_blank" rel="noopener"&gt;Azure Service Bus messaging overview&lt;/A&gt;&lt;/LI&gt;&lt;LI&gt;&lt;A href="https://learn.microsoft.com/agent-framework/overview/agent-framework-overview?wt.mc_id=MVP_365598" target="_blank" rel="noopener"&gt;Microsoft Agent Framework overview&lt;/A&gt;&lt;/LI&gt;&lt;LI&gt;&lt;A href="https://learn.microsoft.com/agent-framework/user-guide/agents/agent-tools?pivots=programming-language-python?wt.mc_id=MVP_365598" target="_blank" rel="noopener"&gt;Agent tools (Python) - Microsoft Agent Framework&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;</description>
      <pubDate>Wed, 03 Dec 2025 04:52:29 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/blog/building-an-agentic-ai-powered-helpdesk-with-agents-framework/ba-p/4474756</guid>
      <dc:creator>KonstantinosPassadis</dc:creator>
      <dc:date>2025-12-03T04:52:29Z</dc:date>
    </item>
    <item>
      <title>Azure Live Voice API and Avatar Creation Demo</title>
      <link>https://techcommunity.microsoft.com/t5/blog/azure-live-voice-api-and-avatar-creation-demo/ba-p/4463292</link>
      <description>&lt;H3&gt;&lt;STRONG&gt;How It Works&lt;/STRONG&gt;&lt;/H3&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;Azure AI Live Voice API&lt;/STRONG&gt; delivers natural, emotionally nuanced speech with low latency, enabling the trainer avatar to speak fluidly and adaptively.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Avatar SDK&lt;/STRONG&gt; animates facial expressions, lip sync, and gestures based on the synthesized voice, creating a cohesive and human-like presentation.&lt;/LI&gt;&lt;LI&gt;The integration ensures &lt;STRONG&gt;consistent flow&lt;/STRONG&gt;, where voice and visuals are tightly coupled—no awkward pauses, no robotic delivery.&lt;/LI&gt;&lt;/UL&gt;&lt;H3&gt;&lt;STRONG&gt;Use Case: Trainer-to-Student Demo App&lt;/STRONG&gt;&lt;/H3&gt;&lt;P&gt;Imagine a virtual classroom where:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;A digital trainer introduces concepts, explains diagrams, and answers questions—all with realistic voice and avatar presence.&lt;/LI&gt;&lt;LI&gt;Students engage with content more deeply thanks to the avatar’s expressive delivery and conversational tone.&lt;/LI&gt;&lt;LI&gt;The system can scale across languages, topics, and formats—perfect for onboarding, education, or enterprise training.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;This demo isn’t just a showcase—it’s a blueprint for the future of interactive learning and communication. By combining Azure’s cutting-edge voice synthesis with avatar animation, we’re redefining how knowledge is delivered in digital environments.&lt;/P&gt;&lt;LI-SPOILER label="Video Link - Workshop Session"&gt;&lt;P&gt;&lt;A class="lia-external-url" href="https://youtube.com/live/8Vhgqg1J56E" data-lia-auto-title-active="0" data-lia-auto-title="- YouTube" target="_blank"&gt;- YouTube&lt;/A&gt;&lt;/P&gt;&lt;/LI-SPOILER&gt;&lt;P&gt;Drop your questions or ideas in the comments—I would love to hear how you’re using AI to shape the future of communication.&lt;/P&gt;&lt;P&gt;Until next time, keep building, keep learning, and keep pushing the boundaries of what’s possible.&lt;/P&gt;&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;PS: Soon the code will be shared !&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 22 Oct 2025 01:04:29 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/blog/azure-live-voice-api-and-avatar-creation-demo/ba-p/4463292</guid>
      <dc:creator>KonstantinosPassadis</dc:creator>
      <dc:date>2025-10-22T01:04:29Z</dc:date>
    </item>
    <item>
      <title>Building an AI Assistant for Microsoft Learn Docs MCP</title>
      <link>https://techcommunity.microsoft.com/t5/blog/building-an-ai-assistant-for-microsoft-learn-docs-mcp/ba-p/4431611</link>
      <description>&lt;H3&gt;What is Microsoft Learn Docs MCP Server ?&lt;/H3&gt;&lt;P&gt;The Microsoft Docs MCP Server is a cloud-hosted service that enables MCP hosts like GitHub Copilot and Cursor to search and retrieve accurate information directly from Microsoft’s official documentation. By implementing the standardized Model Context Protocol (MCP), this service allows any compatible AI system to ground its responses in authoritative Microsoft content.&lt;/P&gt;&lt;H3&gt;The “Why”: The Initial Challenge of the AI Assistant&lt;/H3&gt;&lt;P&gt;Our initial goal was simple: build a chat interface where a user could ask a question, and we would query this MCP server to get an answer. However, we quickly discovered a challenge. The MCP server is designed for AI agents; it doesn’t just return a single answer. Instead, it returns a rich payload of up to &lt;STRONG&gt;10 high-quality content chunks&lt;/STRONG&gt; from the documentation.&lt;/P&gt;&lt;P&gt;While this is fantastic for providing comprehensive context, it’s overwhelming for a direct chat response. Our app was successfully retrieving information, but it was just a firehose of data. The user was left with the difficult task of sifting through thousands of words to find their answer. This wasn’t a chatbot; it was just a complicated search bar.&lt;/P&gt;&lt;P&gt;We realized we needed to transform this wealth of data into a single, helpful response.&lt;/P&gt;&lt;H3&gt;The “How”: A Two-Step Solution (Retrieve and Synthesize)&lt;/H3&gt;&lt;P&gt;The solution was to architect our application around a two-step process, a pattern often referred to as Retrieval-Augmented Generation (RAG).&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;STRONG&gt;Retrieve:&lt;/STRONG&gt; First, connect to the specialized data source (the MCP Server) to fetch relevant, factual context.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Synthesize:&lt;/STRONG&gt; Then, provide that context to a general-purpose large language model (LLM) to generate a concise, human-readable answer.&lt;/LI&gt;&lt;/OL&gt;&lt;H3&gt;Step 1: The Retrieval Saga – Taming the MCP Server&lt;/H3&gt;&lt;P&gt;This was the most challenging part of our journey. Connecting to the MCP server wasn’t straightforward, and it took several iterations of trial and error to get it right. We knew the endpoint was https://learn.microsoft.com/api/mcp, but the exact request format was a mystery we had to solve by carefully analyzing the server’s error messages.&lt;/P&gt;&lt;P&gt;Our attempts ranged from simple, direct MCP messages to various JSON-RPC structures. After a lot of debugging, we landed on the precise payload the server expected. The key was to format the request as a JSON-RPC call with a specific method (tools/call) and parameters that named the tool (microsoft_docs_search) and its arguments (question). Our AI Assistant is ready to work alongside Microsoft Learn MCP!&lt;/P&gt;&lt;H3&gt;Working Examples&lt;/H3&gt;&lt;P&gt;Here is the final, working code snippet from our Next.js API route (pages/api/mcp.js) that successfully retrieves the context:&lt;/P&gt;&lt;LI-CODE lang="javascript"&gt;// --- STEP 1: RETRIEVE CONTEXT FROM MCP SERVER (Using the final working logic) --- const MCP_SERVER_URL = 'https://learn.microsoft.com/api/mcp'; // This is the successful payload structure you discovered. const mcpPayload = { "jsonrpc": "2.0", "id": `chat-${Date.now()}`, "method": "tools/call", "params": { "name": "microsoft_docs_search", "arguments": { "question": userQuery // Using 'question' as the parameter name. } } }; const mcpResponse = await fetch(MCP_SERVER_URL, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json, text/event-stream', 'User-Agent': 'mcp-remote-client', // Adding the User-Agent. }, body: JSON.stringify(mcpPayload), }); // ... code to parse the streaming response ...&lt;/LI-CODE&gt;&lt;P&gt;With this, we had successfully completed the “Retrieve” step. Our app was now a robust data-fetcher.&lt;/P&gt;&lt;H3&gt;&lt;STRONG&gt;Step 2: The Synthesis Engine – Making Sense of the Data with our AI Assistant&lt;/STRONG&gt;&lt;/H3&gt;&lt;P&gt;Now that we had our 10 chunks of documentation, we needed to add the “brain” to our operation. We chose Azure OpenAI model for this task due to its powerful synthesis capabilities.&lt;/P&gt;&lt;P&gt;The process was as follows:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Extract all the text from the search results returned by the MCP server.&lt;/LI&gt;&lt;LI&gt;Combine this text into a single, large block of context.&lt;/LI&gt;&lt;LI&gt;Create a carefully designed prompt that instructs the AI Assistant model to act as a Microsoft expert.&lt;/LI&gt;&lt;LI&gt;Send the user’s original question along with the retrieved context to the Azure OpenAI API.&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;The prompt is the most critical piece of this step, as it guides the AI Assistant to produce the desired output. Here’s what our prompt looked like:&lt;/P&gt;&lt;LI-CODE lang="javascript"&gt;const azureUrl = `${AZURE_OPENAI_ENDPOINT}/openai/deployments/${AZURE_OPENAI_DEPLOYMENT_NAME}/chat/completions?api-version=2025-01-01-preview`; const aiResponse = await fetch(azureUrl, { method: 'POST', headers: { 'Content-Type': 'application/json', 'api-key': AZURE_OPENAI_KEY }, body: JSON.stringify({ messages: [ { role: 'system', content: 'You are an expert assistant. Generate answers based on the provided context.' }, { role: 'user', content: `Context:\n${retrievedText}\n\nQuestion:\n${message}` } ], max_tokens: 500, temperature: 0.7 }), }); if (!aiResponse.ok) { const errorText = await aiResponse.text(); console.error('Azure OpenAI Error:', errorText); throw new Error('Failed to get a response from Azure OpenAI.'); }&lt;/LI-CODE&gt;&lt;P&gt;This prompt constrains the model to use &lt;STRONG&gt;&lt;EM&gt;only &lt;/EM&gt;&lt;/STRONG&gt;the official documentation we provided, ensuring the answers are factual and grounded in a reliable source.&lt;/P&gt;&lt;H3&gt;The “What”: The Final Result of our AI Assistant&lt;/H3&gt;&lt;P&gt;After implementing both steps, our application was complete. The user interacts with a clean, simple chat interface built with Next.js and React. When they ask a question:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;The Next.js backend silently queries the MS Learn MCP Server.&lt;/LI&gt;&lt;LI&gt;It receives up to 10 articles of context.&lt;/LI&gt;&lt;LI&gt;The backend passes that context and the original question to the Azure OpenAI API.&lt;/LI&gt;&lt;LI&gt;Now we receive a concise, summarized answer.&lt;/LI&gt;&lt;LI&gt;This final answer is displayed to the user in the chat window.&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;What started as a data firehose was now an intelligent, conversational, and genuinely helpful AI assistant.&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;&lt;img /&gt;&lt;H4&gt;&amp;nbsp;Conclusion&lt;/H4&gt;&lt;P&gt;This project was a fantastic lesson in modern AI application development. It highlights a powerful pattern: using specialized, data-retrieval tools in tandem with large, general-purpose language models. The journey underscored the importance of persistence in debugging APIs and the art of crafting the perfect prompt. By combining the strengths of different services, we were able to build an application that is far more capable than the sum of its parts.&lt;/P&gt;&lt;H4&gt;Git Repo&lt;/H4&gt;&lt;P&gt;&lt;STRONG&gt;&lt;A class="lia-external-url" href="https://github.com/passadis/mslearn-mcp-chat" target="_blank"&gt;https://github.com/passadis/mslearn-mcp-chat&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;H4&gt;Microsoft Learn Docs MCP&lt;/H4&gt;&lt;P&gt;&lt;STRONG&gt;&lt;A class="lia-external-url" href="https://github.com/MicrosoftDocs/mcp/" target="_blank"&gt;https://github.com/MicrosoftDocs/mcp/&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 09 Jul 2025 11:41:57 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/blog/building-an-ai-assistant-for-microsoft-learn-docs-mcp/ba-p/4431611</guid>
      <dc:creator>KonstantinosPassadis</dc:creator>
      <dc:date>2025-07-09T11:41:57Z</dc:date>
    </item>
    <item>
      <title>Responsible AI and the Evolution of AI Security</title>
      <link>https://techcommunity.microsoft.com/t5/blog/responsible-ai-and-the-evolution-of-ai-security/ba-p/4429549</link>
      <description>&lt;H2&gt;Why Responsible AI Matters&lt;/H2&gt;&lt;P&gt;&lt;STRONG&gt;Responsible AI&lt;/STRONG&gt; means designing, developing, and deploying AI systems that are ethical, transparent, and accountable. It's not just about compliance—it's about building trust, protecting users, and ensuring AI benefits everyone.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Key Principles of Responsible AI:&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;Fairness:&lt;/STRONG&gt; Avoiding biases and discrimination by using diverse datasets and regular audits.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Reliability &amp;amp; Safety:&lt;/STRONG&gt; Rigorous testing to ensure AI performs as intended, even in unexpected scenarios.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Privacy &amp;amp; Security:&lt;/STRONG&gt; Protecting user data with robust safeguards.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Transparency:&lt;/STRONG&gt; Making AI decisions explainable and understandable.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Accountability:&lt;/STRONG&gt; Establishing governance to address negative impacts.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Inclusiveness:&lt;/STRONG&gt; Considering diverse user needs and perspectives.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Responsible AI reduces bias, increases transparency, and builds user trust—critical as AI systems increasingly impact finance, healthcare, public services, and more.&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Implementing Responsible AI isn't just about ethical ideals—it's a foundation that demands technical safeguards. For developers, this means translating principles like fairness and transparency into secure code, robust data handling, and model hardening strategies that preempt real-world AI threats.&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;H2&gt;The Evolution of AI Security: From Afterthought to Essential&lt;/H2&gt;&lt;P&gt;AI security has come a long way—from an afterthought to a central pillar of modern digital defense. In the early days, security was reactive, with threats addressed only after damage occurred. The integration of AI shifted this paradigm, enabling &lt;STRONG&gt;proactive threat detection&lt;/STRONG&gt; and &lt;STRONG&gt;behavioral analytics&lt;/STRONG&gt; that spot anomalies before they escalate.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Key Milestones in AI Security:&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;Pattern Recognition:&lt;/STRONG&gt; Early AI focused on detecting unusual patterns, laying the groundwork for threat detection.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Expert Systems:&lt;/STRONG&gt; Rule-based systems in the 1970s-80s emulated human decision-making for security assessments.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Machine Learning:&lt;/STRONG&gt; The late 1990s saw the rise of ML algorithms that could analyze vast data and predict threats.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Deep Learning:&lt;/STRONG&gt; Neural networks now recognize complex threats and adapt to evolving attack methods.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Real-Time Defense:&lt;/STRONG&gt; Modern AI-driven platforms (like Darktrace) create adaptive, self-learning security environments that anticipate and neutralize threats proactively.&lt;/LI&gt;&lt;/UL&gt;&lt;H2&gt;Why AI Security Is Now Mandatory&lt;/H2&gt;&lt;P&gt;With the explosion of AI-powered applications and cloud services, security risks have multiplied. AI attacks are a new frontier in cybersecurity.&lt;/P&gt;&lt;img&gt;[Image: AI Shield and various AI attack titles]&lt;/img&gt;&lt;H3&gt;What Are AI Attacks?&lt;/H3&gt;&lt;P&gt;AI attacks are malicious activities that target AI systems and models.&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;Data Poisoning:&lt;/STRONG&gt; Attackers manipulate training data to corrupt AI outputs.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Model Theft:&lt;/STRONG&gt; Sensitive models and datasets can be stolen or reverse-engineered.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Adversarial Attacks:&lt;/STRONG&gt; Malicious inputs can trick AI systems into making wrong decisions.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Privacy Breaches:&lt;/STRONG&gt; Sensitive user data can leak if not properly protected.&lt;/LI&gt;&lt;/UL&gt;&lt;img&gt;[Image: AI Shield in front of a server rack]&lt;/img&gt;&lt;P&gt;Regulatory frameworks and industry standards now require organizations to adopt robust AI security practices to protect users, data, and critical infrastructure.&lt;/P&gt;&lt;H2&gt;Tools and Techniques for Secure AI Infrastructure and Applications&lt;/H2&gt;&lt;OL&gt;&lt;LI&gt;&lt;STRONG&gt;Zero Trust Architecture&lt;/STRONG&gt;&lt;UL&gt;&lt;LI&gt;Adopt a "never trust, always verify" approach.&lt;/LI&gt;&lt;LI&gt;Enforce strict authentication and authorization for every user and device&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Data Security Protocols&lt;/STRONG&gt;&lt;UL&gt;&lt;LI&gt;Encrypt data at rest, in transit, and during processing.&lt;/LI&gt;&lt;LI&gt;Use tools like Microsoft Purview for data classification, cataloging, and access control&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Harden AI Models&lt;/STRONG&gt;&lt;UL&gt;&lt;LI&gt;Train models with adversarial examples.&lt;/LI&gt;&lt;LI&gt;Implement input validation, anomaly detection, and regular security assessments&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Secure API and Endpoint Management&lt;/STRONG&gt;&lt;UL&gt;&lt;LI&gt;Use API gateways, OAuth 2.0, and TLS to secure endpoints.&lt;/LI&gt;&lt;LI&gt;Monitor and rate-limit API access to prevent abuse.&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Continuous Monitoring and Incident Response&lt;/STRONG&gt;&lt;UL&gt;&lt;LI&gt;Deploy AI-powered Security Information and Event Management (SIEM) systems for real-time threat detection and response&lt;/LI&gt;&lt;LI&gt;Regularly audit logs and security events across your infrastructure.&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;DevSecOps Integration&lt;/STRONG&gt;&lt;UL&gt;&lt;LI&gt;Embed security into every phase of the AI development lifecycle.&lt;/LI&gt;&lt;LI&gt;Automate security testing in CI/CD pipelines.&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Employee Training and Governance&lt;/STRONG&gt;&lt;UL&gt;&lt;LI&gt;Train teams on AI-specific risks and responsible data handling.&lt;/LI&gt;&lt;LI&gt;Establish clear governance frameworks for AI ethics and compliance&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Azure-Specific Security Tools&lt;/STRONG&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;Microsoft Defender for Cloud:&lt;/STRONG&gt; Monitors and protects Azure resources.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Azure Resource Graph Explorer:&lt;/STRONG&gt; Maintains inventory of models, data, and assets.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Microsoft Purview:&lt;/STRONG&gt; Manages data security, privacy, and compliance across Azure services.&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Microsoft Purview provides a centralized platform for data governance, security, and compliance across your entire data estate.&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;H2&gt;Why Microsoft Purview Matters for Responsible AI&lt;/H2&gt;&lt;P&gt;&lt;STRONG&gt;Microsoft Purview&lt;/STRONG&gt; offers a unified, cloud-native solution for:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;Data discovery and classification&lt;/STRONG&gt;&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Access management and policy enforcement&lt;/STRONG&gt;&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Compliance monitoring and risk mitigation&lt;/STRONG&gt;&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Data quality and observability&lt;/STRONG&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Purview's integrated approach ensures that AI systems are built on &lt;STRONG&gt;trusted, well-governed, and secure data&lt;/STRONG&gt;, addressing the core principles of responsible AI: fairness, transparency, privacy, and accountability.&lt;/P&gt;&lt;H2&gt;Conclusion&lt;/H2&gt;&lt;P&gt;Responsible AI and strong AI security measures are no longer optional; they are essential pillars of modern application development and integration on Azure. By adhering to ethical principles and utilizing cutting-edge security tools and strategies, organizations can drive innovation with confidence while safeguarding users, data, and the broader society.&lt;/P&gt;</description>
      <pubDate>Wed, 02 Jul 2025 22:12:40 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/blog/responsible-ai-and-the-evolution-of-ai-security/ba-p/4429549</guid>
      <dc:creator>KonstantinosPassadis</dc:creator>
      <dc:date>2025-07-02T22:12:40Z</dc:date>
    </item>
    <item>
      <title>Navigating the New AI Landscape: A Developer’s Journey Through the Noise</title>
      <link>https://techcommunity.microsoft.com/t5/blog/navigating-the-new-ai-landscape-a-developer-s-journey-through/ba-p/4424088</link>
      <description>&lt;P&gt;If you’ve opened your dev environment lately and felt like you were being chased by a parade of new frameworks, copilots, and orchestration platforms—you’re not alone. The pace of innovation is exhilarating, but even the most seasoned developer can feel like they're sprinting just to stay in place.&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;"But what if this overwhelming surge isn't chaos—but opportunity?"&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;In this post, I’ll share how .NET became my compass in the AI wilderness, how Microsoft’s ecosystem—from Semantic Kernel to GitHub Copilot and Azure’s Low Code tools—helped me stop reacting to change and start shaping it.&lt;/P&gt;&lt;H4&gt;The Tool Rush: Friend or Foe?&lt;/H4&gt;&lt;P&gt;Just a few years ago, developers wrestled with a handful of choices—framework A or B, cloud service X or Y. Now? We’re staring at a buffet of copilots, orchestration engines, agent frameworks, model registries, vector databases… you name it.&lt;/P&gt;&lt;P&gt;It’s a lot.&lt;/P&gt;&lt;P&gt;But here’s the thing: the surge in tools isn’t a crisis—it’s &lt;EM&gt;a sign of acceleration&lt;/EM&gt;. Each new SDK or framework that launches is another attempt to close the gap between &lt;EM&gt;intention&lt;/EM&gt; and &lt;EM&gt;execution&lt;/EM&gt;. The goal isn’t more complexity—it’s more &lt;STRONG&gt;flexibility&lt;/STRONG&gt;.&lt;/P&gt;&lt;P&gt;Take Microsoft’s ecosystem: it doesn’t ask developers to start from scratch. It asks, &lt;EM&gt;“&lt;STRONG&gt;What do you already know, and how can we build from there?”&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;.NET developers?&lt;/STRONG&gt; Enter Semantic Kernel—use your C# skills to orchestrate intelligent workflows.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Prefer low-code?&lt;/STRONG&gt; Power Platform and Azure AI Studio are building serious agentic capabilities without the learning curve.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Visual learners?&lt;/STRONG&gt; GitHub Copilot and VS Code now surface suggestions that reflect your habits and project context, not just boilerplate code.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;The key is to pick a &lt;STRONG&gt;starting point&lt;/STRONG&gt;, not all the points. Let the tools orbit around your needs—not the other way around.&lt;/P&gt;&lt;H4&gt;.NET + Semantic Kernel: A Familiar Face in New Territory&lt;/H4&gt;&lt;P&gt;As developers, we find comfort in the familiar. And for many of us, that means .NET. So when AI began racing ahead—introducing concepts like “planners,” “memories,” and “skills”—the question was: &lt;EM&gt;How do I even start integrating this into my existing stack?&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;That’s where &lt;STRONG&gt;Semantic Kernel (SK)&lt;/STRONG&gt; steps in—not as a replacement for what we know, but as an &lt;STRONG&gt;extension of it&lt;/STRONG&gt;.&lt;/P&gt;&lt;P&gt;Semantic Kernel brings orchestration to the .NET world. You can build intelligent agents that combine:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;Native C# functions&lt;/STRONG&gt;, side-by-side with&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;AI-powered plugins&lt;/STRONG&gt;, like OpenAI or Azure OpenAI, wrapped in clean abstractions.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Let’s make that real:&lt;/P&gt;&lt;P&gt;Imagine a customer support scenario where GitHub issues are piling up. With SK, you can build an agent that:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Reads incoming issues,&lt;/LI&gt;&lt;LI&gt;Classifies urgency and topic,&lt;/LI&gt;&lt;LI&gt;Routes them to the correct dev team,&lt;/LI&gt;&lt;LI&gt;Or even drafts suggested responses for review.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;All while leveraging the APIs and data sources you already use in enterprise apps.&lt;/P&gt;&lt;P&gt;Plus, when paired with &lt;STRONG&gt;GitHub Copilot’s new Agent Mode&lt;/STRONG&gt;, you’re not just writing orchestration logic—you’re collaborating with an AI that understands your .NET patterns, your repo context, and your intentions.&lt;/P&gt;&lt;P&gt;It’s like gaining a teammate that’s fluent in your language—code and otherwise.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;SPAN class="lia-text-color-14"&gt;&lt;EM&gt;A simple plugin for routing GitHub issues based on urgency:&lt;/EM&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;[SKFunction("Classifies urgency of GitHub issue")]
[SKFunctionName("IssueUrgencyClassifier")]
public async Task&amp;lt;string&amp;gt; ClassifyUrgencyAsync(string issueTitle)
{
    if (issueTitle.Contains("crash") || issueTitle.Contains("urgent"))
        return "High";
    if (issueTitle.Contains("delay") || issueTitle.Contains("slow"))
        return "Medium";
    return "Low";
}&lt;/LI-CODE&gt;&lt;P&gt;Pair this with an OpenAI plugin in SK, and now you’ve got a hybrid agent that can reason and respond.&lt;/P&gt;&lt;H4&gt;Live Context, Real Impact: MCP Server &amp;amp; Microsoft Fabric&lt;/H4&gt;&lt;P&gt;If Semantic Kernel helps you &lt;EM&gt;think&lt;/EM&gt; like an orchestrator, &lt;STRONG&gt;MCP Server&lt;/STRONG&gt; helps you &lt;EM&gt;act&lt;/EM&gt; like one—at scale.&lt;/P&gt;&lt;P&gt;At Build 2025, Microsoft showcased MCP as the brain behind &lt;EM&gt;adaptive AI systems&lt;/EM&gt;. It handles:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;Real-time signal processing&lt;/STRONG&gt;, so your apps respond to new context on the fly,&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Agent lifecycle management&lt;/STRONG&gt;, ensuring copilots behave as expected across long-running tasks,&lt;/LI&gt;&lt;LI&gt;And &lt;STRONG&gt;cross-tool integration&lt;/STRONG&gt;, making even complex AI systems easier to orchestrate.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;SPAN class="lia-text-color-15"&gt;&lt;STRONG&gt;&lt;EM&gt;A real-time data listener reacting to GitHub issue changes:&lt;/EM&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;LI-CODE lang="json"&gt;{
  "eventType": "GitHub.Issue.Created",
  "filter": {
    "repository": "myorg/project-ai"
  },
  "action": "Invoke-SemanticAgent",
  "context": ["issue.title", "issue.body"]
}&lt;/LI-CODE&gt;&lt;P&gt;MCP Server ensures every new issue becomes a trigger—not just a ticket in a queue.&lt;/P&gt;&lt;P&gt;Add &lt;STRONG&gt;Microsoft Fabric&lt;/STRONG&gt; to the mix, and now you’ve got:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;A unified data layer to store, query, and stream insights,&lt;/LI&gt;&lt;LI&gt;Built-in governance and security,&lt;/LI&gt;&lt;LI&gt;And seamless pipelines into tools like Power BI, Azure Synapse, and—yes—Copilot experiences.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;SPAN class="lia-text-color-11"&gt;&lt;EM&gt;&lt;STRONG&gt;A quick aggregation of issue volume by urgency over time:&lt;/STRONG&gt;&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;LI-CODE lang="python"&gt;from pyspark.sql.functions import window
df = spark.read.load("fabric://github/issues")
df.groupBy(window("created_at", "1 day"), "urgency").count().show()&lt;/LI-CODE&gt;&lt;P&gt;This gives your low-code Power BI dashboard real, traceable, live context.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Scenario in action:&lt;/STRONG&gt; A developer builds a low-code issue triage dashboard using &lt;STRONG&gt;Power Apps&lt;/STRONG&gt;, connected to real-time GitHub data via &lt;STRONG&gt;MCP Server&lt;/STRONG&gt;. When a spike in customer complaints arises:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Fabric surfaces insights immediately,&lt;/LI&gt;&lt;LI&gt;An SK-powered agent prioritizes tickets using embeddings + OpenAI,&lt;/LI&gt;&lt;LI&gt;And GitHub Copilot proposes hotfix code directly in VS Code.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;All of it managed across services—with context flowing like water between them.&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;This is no longer about individual tools. It’s about the ecosystem working in harmony.&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;H4&gt;Wrapping It Up: Tools Change, Curiosity Endures&lt;/H4&gt;&lt;P&gt;In the whirlwind of new frameworks, copilots, SDKs, and orchestration layers, it’s easy to feel like you’re chasing shadows. But this is the truth I’ve come to believe:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;It’s not about learning everything—it’s about learning what moves you forward.&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Microsoft’s ecosystem doesn’t demand mastery overnight. It offers on-ramps, whether you’re a &lt;STRONG&gt;.NET&lt;/STRONG&gt; dev, a low-code builder, or someone just beginning their AI journey. From &lt;STRONG&gt;Semantic Kernel&lt;/STRONG&gt; to &lt;STRONG&gt;GitHub Copilot&lt;/STRONG&gt;, from &lt;STRONG&gt;MCP to Power Platform&lt;/STRONG&gt;, each piece is a tile in a larger mosaic—one that’s built to meet &lt;STRONG&gt;you&lt;/STRONG&gt;, not overwhelm you.&lt;/P&gt;&lt;P&gt;What &lt;STRONG&gt;Build 2025&lt;/STRONG&gt; proved is that we’re not witnessing the future of development—we’re &lt;EM&gt;shaping it&lt;/EM&gt;, right now. One skill. One tool. One experiment at a time.&lt;/P&gt;&lt;P&gt;&lt;EM&gt;So let’s not ask “Which tool is best?” Let’s ask, “&lt;STRONG&gt;Which tool helps me create what matters?”&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;Because in the end, that’s what being a developer has always been about. And in this new era, the possibilities are finally catching up to our imaginations.&lt;/P&gt;</description>
      <pubDate>Mon, 16 Jun 2025 00:05:01 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/blog/navigating-the-new-ai-landscape-a-developer-s-journey-through/ba-p/4424088</guid>
      <dc:creator>KonstantinosPassadis</dc:creator>
      <dc:date>2025-06-16T00:05:01Z</dc:date>
    </item>
    <item>
      <title>Learn and Integrate: Azure and AI Web Development</title>
      <link>https://techcommunity.microsoft.com/t5/blog/learn-and-integrate-azure-and-ai-web-development/ba-p/4423986</link>
      <description>&lt;H2&gt;Why Combine Azure and AI?&lt;/H2&gt;&lt;P&gt;Microsoft Azure provides a robust ecosystem for deploying web apps, but its real power lies in its integrated AI services. By combining JavaScript-based frontends or Node.js backends with Azure’s AI capabilities, developers can:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Add natural language understanding with &lt;STRONG&gt;Azure OpenAI Service&lt;/STRONG&gt;&lt;/LI&gt;&lt;LI&gt;Use &lt;STRONG&gt;Cognitive Services&lt;/STRONG&gt; for vision, speech, and language features&lt;/LI&gt;&lt;LI&gt;Build chatbots via &lt;STRONG&gt;Azure Bot Services&lt;/STRONG&gt;&lt;/LI&gt;&lt;LI&gt;Enable intelligent search with &lt;STRONG&gt;Azure Cognitive Search&lt;/STRONG&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;These tools not only enhance user experience but also automate tasks, generate insights, and drive efficiency.&lt;/P&gt;&lt;H2&gt;Getting Started: The Developer's Toolkit&lt;/H2&gt;&lt;P&gt;If you're working with JavaScript, TypeScript, or popular frameworks like React, Angular, or Vue.js, Azure has you covered. Your journey might include:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;Azure Static Web Apps&lt;/STRONG&gt;: Host static sites with dynamic behavior using serverless APIs.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Azure Functions&lt;/STRONG&gt;: Run backend logic or trigger AI processing without managing servers.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Azure AI Studio&lt;/STRONG&gt;: A unified interface for creating and managing AI models and prompts.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;OpenAI JavaScript SDK&lt;/STRONG&gt;: Easily integrate models like GPT-4 or GPT-4o into your apps.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;You can even use &lt;STRONG&gt;LangChain.js&lt;/STRONG&gt; for advanced orchestration or build Retrieval-Augmented Generation (RAG) systems for context-aware AI.&lt;/P&gt;&lt;H4&gt;Sample Code: AI-Powered Text Summarizer&lt;/H4&gt;&lt;P&gt;Here’s a lightweight Azure Function using the OpenAI Node.js SDK to summarize text via GPT-4:&lt;/P&gt;&lt;LI-CODE lang="javascript"&gt;const { OpenAIClient, AzureKeyCredential } = require("@azure/openai");

module.exports = async function (context, req) {
  const endpoint = process.env["AZURE_OPENAI_ENDPOINT"];
  const apiKey = process.env["AZURE_OPENAI_API_KEY"];
  const client = new OpenAIClient(endpoint, new AzureKeyCredential(apiKey));

  const input = req.body.text || "Summarize this placeholder text";
  const deployment = "gpt-4";

  const response = await client.getChatCompletions(deployment, [
    { role: "system", content: "Summarize the following text:" },
    { role: "user", content: input },
  ]);

  context.res = {
    body: response.choices[0].message.content
  };
};&lt;/LI-CODE&gt;&lt;P&gt;This function runs serverlessly on Azure, processes a POST request, and returns a summary—perfect for blogs, support tickets, or academic research tools.&lt;/P&gt;&lt;H4&gt;Integration Diagram: AI-Infused Web App on Azure&lt;/H4&gt;&lt;LI-CODE lang="bash"&gt;[Client App (React/Vue)] 
     │
     ▼
[Azure Static Web App]
     │
     ▼
[Azure Function API Layer]
     │         │
     │         ├──&amp;gt; [Azure OpenAI (Text/Chat Completions)]
     │         └──&amp;gt; [Cognitive Services (Vision/Speech)]
     ▼
[Cosmos DB / Blob Storage (optional)]&lt;/LI-CODE&gt;&lt;P&gt;This setup handles client interaction on the frontend, routes requests to serverless APIs, and taps into AI services for intelligent functionality—all hosted and scaled on Azure.&lt;/P&gt;&lt;H2&gt;The Purpose&lt;/H2&gt;&lt;P&gt;At the heart of this Learning Room lies a bold yet practical mission: &lt;STRONG&gt;to empower developers, learners, and innovators to build the modern digital experience using the power of Azure and AI.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;This initiative is more than just a series of tutorials or tech showcases—it’s a space for discovery, experimentation, and collaboration. Whether you're an experienced developer or just starting to explore cloud and AI technologies, this Learning Room provides an inclusive environment to:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;Understand the building blocks&lt;/STRONG&gt; of cloud-native web development&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Explore real-world integrations&lt;/STRONG&gt; of AI into applications&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Learn how to architect modern solutions&lt;/STRONG&gt; using Azure’s scalable tools&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Bridge the gap between theory and practice&lt;/STRONG&gt; with hands-on projects and code examples&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;By focusing on the synergy between modern web development (JavaScript, APIs, serverless) and intelligent features (like natural language processing and computer vision), this Learning Room becomes your launchpad for building apps that are not only functional—but truly intelligent.&lt;/P&gt;&lt;H2&gt;Real-World Inspiration&lt;/H2&gt;&lt;P&gt;From travel assistants powered by GPT to AI-supported blogging platforms that generate content drafts, developers across industries are turning concepts into reality with Azure and JavaScript. These integrations are not only cutting-edge—they’re practical and scalable.&lt;/P&gt;&lt;P&gt;This is your space to learn, create, break things (in a good way), and rebuild with deeper understanding. In a world that's rapidly transforming, &lt;STRONG&gt;this Learning Room is your home base for staying ahead of the curve.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Enjoy the experience!&lt;/STRONG&gt;&lt;/P&gt;</description>
      <pubDate>Sat, 14 Jun 2025 23:01:39 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/blog/learn-and-integrate-azure-and-ai-web-development/ba-p/4423986</guid>
      <dc:creator>KonstantinosPassadis</dc:creator>
      <dc:date>2025-06-14T23:01:39Z</dc:date>
    </item>
  </channel>
</rss>

