<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Carlos José Castro Galante</title>
    <description>The latest articles on DEV Community by Carlos José Castro Galante (@carlosjcastrog).</description>
    <link>https://dev.to/carlosjcastrog</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3850137%2F7c4306aa-d4a6-4d9d-9327-a2b882c9d13d.jpeg</url>
      <title>DEV Community: Carlos José Castro Galante</title>
      <link>https://dev.to/carlosjcastrog</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/carlosjcastrog"/>
    <language>en</language>
    <item>
      <title>Azure AI Search in 2026, how to build a RAG pipeline</title>
      <dc:creator>Carlos José Castro Galante</dc:creator>
      <pubDate>Fri, 10 Jul 2026 23:15:53 +0000</pubDate>
      <link>https://dev.to/carlosjcastrog/azure-ai-search-in-2026-how-to-build-a-rag-pipeline-43h8</link>
      <guid>https://dev.to/carlosjcastrog/azure-ai-search-in-2026-how-to-build-a-rag-pipeline-43h8</guid>
      <description>&lt;p&gt;Most RAG tutorials online show the same pattern: take a document, split it into chunks, generate embeddings, store them in a vector database, and when a query arrives search for the nearest vectors and send them to the LLM. It works. The problem is that in production, that pattern fails in ways that don't show up in the tutorial.&lt;/p&gt;

&lt;p&gt;A user types "SNAT error in network configuration". The vector for that query is semantically similar to dozens of documents about NAT, networking, and general network configurations. The vector search returns conceptually relevant results, but the specific document that contains "SNAT" many times over might not be in the top five. Keyword search would have found it immediately.&lt;/p&gt;

&lt;p&gt;Azure AI Search exists to solve exactly that kind of problem, and in 2026 the service has changed enough that much of what was written about it before is outdated.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Azure AI Search actually is today
&lt;/h2&gt;

&lt;p&gt;The service was called Azure Search, then Azure Cognitive Search, and since November 2023 it is Azure AI Search. The most recent name that appeared at Build 2026 is Foundry IQ, which is how Microsoft exposes it inside the Azure AI Foundry portal. They are not two separate services: Foundry IQ is Azure AI Search seen from the agent platform.&lt;/p&gt;

&lt;p&gt;Internally, the service combines three search technologies. The full-text engine uses BM25, the same algorithm used by traditional search engines, which scores documents by term frequency and inverse document frequency across the corpus. The vector engine uses HNSW (Hierarchical Navigable Small World) for approximate nearest neighbor search over embeddings. And the Semantic Ranker is a transformer-based cross-encoder model adapted from Microsoft Bing that reorders the results from the other two based on actual semantic relevance.&lt;/p&gt;

&lt;p&gt;These three components can be used separately or in combination. Most production systems use them together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why vector search alone is not enough
&lt;/h2&gt;

&lt;p&gt;An embedding captures general meaning. It works well for conceptual questions like "how does OAuth authentication work", where the intent is semantic and there is no specific term to match. It fails when the query contains very specific terms: product codes, error numbers, technical acronyms, proper names.&lt;/p&gt;

&lt;p&gt;The reason is technical: embedding models compress a lot of semantic information into a fixed-dimension vector. Rare or very specific terms tend to get diluted in that compression process. BM25 does not have that problem because it works with exact term frequencies.&lt;/p&gt;

&lt;p&gt;Hybrid search runs both queries in parallel and merges results using Reciprocal Rank Fusion (RRF). RRF combines ranking lists without requiring the scores from both systems to be on the same scale, using a formula that penalizes results that appear very low in either list. The outcome consistently outperforms either search alone, especially for enterprise content that mixes descriptive text with specific identifiers.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Semantic Ranker and what it actually does
&lt;/h2&gt;

&lt;p&gt;After hybrid search returns its ranked results, the Semantic Ranker takes the top 50 and reorders them. It uses a cross-encoder model that processes the query and the document snippet together, unlike bi-encoders that generate independent embeddings for each. That difference matters because the cross-encoder can capture subtle relationships like negations and contextual dependencies that vector similarity misses.&lt;/p&gt;

&lt;p&gt;The Semantic Ranker also generates captions (representative snippets from the document) and optionally answers (passages that directly respond to the question if it was phrased as a question). Both captions and answers are verbatim text from the index, not text generated by the model.&lt;/p&gt;

&lt;p&gt;One relevant detail: the Semantic Ranker operates only over text, even in hybrid queries. And it only processes the top 50 results from the previous ranking, which means that if the right document is not in those 50, the ranker cannot recover it. The quality of the initial ranking matters.&lt;/p&gt;

&lt;p&gt;A practical consideration: semantic queries have additional cost. It is not necessary to enable it for all queries. For background search or batch processing where precision is not critical, it can be skipped. For user-facing search where result quality affects the LLM response, it is worth it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two RAG paths in 2026
&lt;/h2&gt;

&lt;p&gt;Since 2026, Azure AI Search offers two distinct approaches for building a RAG pipeline. Microsoft calls them the classic RAG pattern and agentic retrieval, and the choice between them depends on the type of queries you need to handle.&lt;/p&gt;

&lt;h3&gt;
  
  
  Classic RAG
&lt;/h3&gt;

&lt;p&gt;The classic RAG pattern is the proven, generally available approach. You control the full pipeline: generate the search query (or use the user's question directly), run hybrid search with semantic ranking, take the top N most relevant results, and send them as context to the LLM.&lt;/p&gt;

&lt;p&gt;This is the right path when questions are relatively straightforward, you have existing orchestration code you do not want to replace, or you need generally available features for production. The advantage is full control and predictable latency.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agentic retrieval
&lt;/h3&gt;

&lt;p&gt;Agentic retrieval adds an LLM planning layer before running the search. The system receives the user query, uses an LLM to decompose it into focused subqueries, runs all of them in parallel (each can be keyword, vector, or hybrid), applies semantic ranking to each result, and synthesizes a unified response with references.&lt;/p&gt;

&lt;p&gt;This solves a problem, questions like "find the time-off policies for remote employees hired after 2023" do not have a single search dimension. They are multiple questions combined. A simple vector query tends to capture only part of the meaning.&lt;/p&gt;

&lt;p&gt;The tradeoff is additional latency (the planning step adds time) and the fact that some agentic retrieval features are still in preview as of July 2026. The 2026-04-01 REST API has agentic retrieval generally available for programmatic access. The Azure portal and the Foundry portal still show agentic retrieval as preview.&lt;/p&gt;

&lt;h2&gt;
  
  
  Foundry IQ, the new knowledge base model
&lt;/h2&gt;

&lt;p&gt;Foundry IQ is the unified knowledge layer Microsoft built on top of Azure AI Search for the Foundry agent ecosystem. The idea is to solve a problem that appears when an organization scales from one or two agents to dozens: each team ends up rebuilding its own RAG pipeline, with its own vector store, its own chunking logic, and its own access control system.&lt;/p&gt;

&lt;p&gt;With Foundry IQ, you create a knowledge base once and expose it as a shared endpoint for multiple agents. The knowledge base can connect to SharePoint, OneLake, Azure Blob Storage, Fabric IQ, the web, and MCP servers. You do not need to separately configure the retrieval strategy for each source: the system does automatic routing.&lt;/p&gt;

&lt;p&gt;Each knowledge base in Azure AI Search is also a standalone MCP server. Any MCP-compatible client, including Foundry Agent Service, GitHub Copilot, Claude, and Cursor, can invoke the knowledge_base_retrieve tool to query the base. The endpoint follows this pattern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;https://&amp;lt;service&amp;gt;.search.windows.net/knowledgebases/&amp;lt;name&amp;gt;/mcp?api-version=&amp;lt;version&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Foundry IQ automatically handles the indexing pipeline for connected sources: ingestion, chunking, vectorization, and enrichment. When you enable Azure Content Understanding on supported sources, complex documents with tables, figures, and headers get layout-aware enrichment without extra engineering work.&lt;/p&gt;

&lt;p&gt;Access control and permissions are part of the design from the start. Foundry IQ uses Entra ID for document-level access control, which means that when an agent queries the knowledge base, it only receives documents the user who started the conversation has access to. That control travels automatically through the system without needing to implement separate security filters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chunking, because it matters more than it seems
&lt;/h2&gt;

&lt;p&gt;Retrieval quality depends heavily on how you split documents before indexing. Chunks that are too large compress too much information into a single embedding and make precise retrieval harder. Chunks that are too small lose context and fragment information that belongs together.&lt;/p&gt;

&lt;p&gt;The recommendation that appears consistently across benchmarks: 512-token chunks with 25% overlap, preserving sentence boundaries. Splitting in the middle of a sentence degrades both the embedding quality and the readability of the fragment when it reaches the LLM.&lt;/p&gt;

&lt;p&gt;Azure AI Search has native vectorization integration that eliminates the need for custom chunking code. You configure the data source, define the skillset (including which embedding model to use), and the indexer handles the complete cycle: extracts text from PDFs and Office documents, splits it into chunks, generates embeddings, and stores them in the index. The indexer can be scheduled to run periodically and keep the index updated when source documents change.&lt;/p&gt;

&lt;p&gt;For large volumes, uploads should be done in batches using the upload_documents API with between 500 and 1,000 documents per batch. Uploading one at a time at scale is not viable.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose between the two approaches
&lt;/h2&gt;

&lt;p&gt;Classic RAG works well for: direct questions with a single search dimension, existing pipelines you do not want to change, need for generally available features, latency-critical scenarios where every second counts.&lt;/p&gt;

&lt;p&gt;Agentic retrieval makes sense for: complex conversational queries with multiple implicit questions, agents that need maximum possible relevance, new implementations where the additional latency is acceptable, and scenarios where prior conversation context is relevant for interpreting the current query.&lt;/p&gt;

&lt;p&gt;Foundry IQ makes sense when you are building multiple agents that need access to the same data sources, or when you want to delegate pipeline management to Microsoft and focus on agent logic.&lt;/p&gt;

&lt;p&gt;Microsoft's official documentation recommends starting with vector_semantic_hybrid on the Standard tier as the default starting point, and adding agentic retrieval when complex query patterns appear that classic RAG does not handle well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing thoughts
&lt;/h2&gt;

&lt;p&gt;Azure AI Search is not a vector store with some extra features. It is a retrieval platform with three ranking layers that work together: keyword for precision, vector for semantics, semantic ranker for contextual relevance. Understanding what each layer does and when to enable it is what separates a prototype from a system that performs well in production.&lt;/p&gt;

&lt;p&gt;If you want to explore the official documentation and the agentic retrieval quickstarts:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://learn.microsoft.com/azure/search/?wt.mc_id=studentamb_510930" rel="noopener noreferrer"&gt;https://learn.microsoft.com/azure/search/?wt.mc_id=studentamb_510930&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Official references
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Main documentation: &lt;a href="https://learn.microsoft.com/azure/search/" rel="noopener noreferrer"&gt;https://learn.microsoft.com/azure/search/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;RAG overview: &lt;a href="https://learn.microsoft.com/azure/search/retrieval-augmented-generation-overview" rel="noopener noreferrer"&gt;https://learn.microsoft.com/azure/search/retrieval-augmented-generation-overview&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Agentic retrieval overview: &lt;a href="https://learn.microsoft.com/azure/search/agentic-retrieval-overview" rel="noopener noreferrer"&gt;https://learn.microsoft.com/azure/search/agentic-retrieval-overview&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Semantic ranking overview: &lt;a href="https://learn.microsoft.com/azure/search/semantic-search-overview" rel="noopener noreferrer"&gt;https://learn.microsoft.com/azure/search/semantic-search-overview&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;What's new: &lt;a href="https://learn.microsoft.com/azure/search/whats-new" rel="noopener noreferrer"&gt;https://learn.microsoft.com/azure/search/whats-new&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Foundry IQ announcement: &lt;a href="https://techcommunity.microsoft.com/blog/azure-ai-foundry-blog/foundry-iq-unlocking-ubiquitous-knowledge-for-agents/4470812" rel="noopener noreferrer"&gt;https://techcommunity.microsoft.com/blog/azure-ai-foundry-blog/foundry-iq-unlocking-ubiquitous-knowledge-for-agents/4470812&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>azure</category>
      <category>ai</category>
      <category>rag</category>
      <category>microsoft</category>
    </item>
    <item>
      <title>FaroIQ: how I built a 9-agent pipeline for nonprofits with Azure AI Foundry</title>
      <dc:creator>Carlos José Castro Galante</dc:creator>
      <pubDate>Fri, 03 Jul 2026 22:58:55 +0000</pubDate>
      <link>https://dev.to/carlosjcastrog/faroiq-how-i-built-a-9-agent-pipeline-for-nonprofits-with-azure-ai-foundry-1gpg</link>
      <guid>https://dev.to/carlosjcastrog/faroiq-how-i-built-a-9-agent-pipeline-for-nonprofits-with-azure-ai-foundry-1gpg</guid>
      <description>&lt;p&gt;I'm Carlos, a Software Design student at the National University of Catamarca, Argentina. This post covers how I built FaroIQ during the Microsoft Agents League 2026: what decisions I made, why I made them, and what problems I ran into along the way.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where the idea came from
&lt;/h2&gt;

&lt;p&gt;Growing up in San Juan, Argentina, I watched organizations like Caritas collect donations through schools and universities, doing what they could with very little. The problem was never a lack of will. Those organizations know exactly what their communities need. What they lack is a way to turn that knowledge into something concrete: a plan with data, phases, and a budget.&lt;/p&gt;

&lt;p&gt;When the hackathon started, I wanted to build something that solved that. Not a technology demo. Something that, if someone actually used it, would be useful to them.&lt;/p&gt;

&lt;p&gt;The idea: the user describes their organization in plain language, and the system produces in under 90 seconds a needs analysis, a phased implementation plan, impact projections, a grant proposal ready to submit, and executes all of that in Microsoft 365 (Calendar, To Do, OneDrive, Email) automatically.&lt;/p&gt;




&lt;h2&gt;
  
  
  What FaroIQ is
&lt;/h2&gt;

&lt;p&gt;FaroIQ is a community intelligence platform built on the three Microsoft IQ layers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Foundry IQ&lt;/strong&gt;: Azure AI Foundry with the &lt;code&gt;gpt-oss-120b&lt;/code&gt; model for agent reasoning&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fabric IQ&lt;/strong&gt;: Azure Blob Storage for session persistence and aggregated analytics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Work IQ&lt;/strong&gt;: Microsoft 365 via Azure Logic Apps for execution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The name comes from the Spanish word for lighthouse. Not much more to explain there.&lt;/p&gt;




&lt;h2&gt;
  
  
  The architecture
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why a sequential pipeline instead of parallel agents
&lt;/h3&gt;

&lt;p&gt;One of the first decisions was how to structure the nine agents. Two obvious options: run them in parallel to reduce total time, or run them in sequence where each one receives the output of all previous agents as context.&lt;/p&gt;

&lt;p&gt;I went with the sequence. A coherent action plan requires each stage to build on the previous one. If the Planning agent doesn't know what needs the Analysis agent identified, or what resource capacity the Classification agent estimated, it ends up generating something generic. With context chaining, each agent receives the structured output of all previous agents plus its own system prompt and a JSON schema that defines exactly what it needs to return.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Agent&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Research&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Live Tavily web search for real statistics and comparable NGO programs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intake&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Classifies sector, urgency, target population, and resource capacity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Analyzer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Identifies primary needs, root causes, and existing community strengths&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Planner&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Generates phased action plan with milestones, quick wins, and risk factors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Evaluator&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Projects beneficiaries, feasibility score, and expected outcomes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Critique&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Reviews full output and triggers automatic revision if quality falls below 0.70&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Execution&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Builds Microsoft 365 payloads and triggers the Logic Apps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Grant&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Writes a complete funding proposal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Chat&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Conversational agent with full analysis as context, can re-run agents if constraints change&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All agents use &lt;code&gt;AsyncAzureOpenAI&lt;/code&gt; against the Azure AI Foundry endpoint. Each event (start, progress, completion) streams to the frontend in real time via WebSocket, so the user watches the pipeline execute rather than staring at a loading screen.&lt;/p&gt;

&lt;h3&gt;
  
  
  The autonomous revision loop
&lt;/h3&gt;

&lt;p&gt;This was the part that took me the longest to think through properly. After the Evaluator finishes, the Critique agent scores the entire pipeline output between 0.0 and 1.0. If the score falls below 0.70, the system doesn't ask the user what to do. It injects the Critique's feedback as additional context and re-runs the Planner and Evaluator with those observations incorporated. Up to two cycles.&lt;/p&gt;

&lt;p&gt;Setting the limit at two was pragmatic: a third cycle rarely improved the result meaningfully, and the total time was already close to 90 seconds. More than two revisions started to feel like a loop the user couldn't predict.&lt;/p&gt;

&lt;p&gt;In the UI, the user can see the quality score, number of cycles completed, critical gaps identified, and specific recommendations. There's an expandable panel that shows exactly what the Critique detected and why it decided to revise. The system doesn't just improve itself silently, it shows its work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fabric IQ: why persist everything
&lt;/h3&gt;

&lt;p&gt;From the start I wanted analyses to survive beyond the browser session. It makes no sense for a nonprofit to lose an analysis because they closed the tab or because the connection dropped on iOS (more on that later).&lt;/p&gt;

&lt;p&gt;Each completed analysis is saved as structured JSON in Azure Blob Storage under the &lt;code&gt;faroiq-lakehouse&lt;/code&gt; container. Each session has an 8-character code derived from the UUID, which lets anyone retrieve it without authentication. A second container called &lt;code&gt;reports&lt;/code&gt; stores the rendered HTML version of the report as a permanent public URL.&lt;/p&gt;

&lt;p&gt;The Intelligence Dashboard aggregates data across all stored sessions: sector distribution, average feasibility scores, urgency trends, cumulative beneficiary projections. Individual analyses become more useful over time as the dataset grows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Work IQ: execution in Microsoft 365
&lt;/h3&gt;

&lt;p&gt;Four Azure Logic Apps connect the system to Microsoft 365:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Calendar&lt;/strong&gt;: creates Outlook events for each implementation phase&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;To Do&lt;/strong&gt;: generates structured task lists with the organization name as prefix, for example &lt;code&gt;[Caritas San Juan] Phase 1: Diagnosis&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OneDrive&lt;/strong&gt;: saves the full HTML report to &lt;code&gt;/FaroIQ Reports&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email&lt;/strong&gt;: delivers the complete analysis via Outlook&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All Logic Apps calls run as async background tasks in the backend to avoid blocking the API response. If one fails, it gets logged but doesn't surface as an error to the user, because the M365 integrations are secondary to the analysis itself.&lt;/p&gt;

&lt;p&gt;There's also a Declarative Agent manifest in &lt;code&gt;/teams-plugin/appPackage/&lt;/code&gt; for deployment in Microsoft 365 Copilot in enterprise environments, with a nine-step reasoning instruction set and six conversation starters in English and Spanish.&lt;/p&gt;




&lt;h2&gt;
  
  
  The hard parts
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Design took longer than expected
&lt;/h3&gt;

&lt;p&gt;I underestimated how much time the interface would take. There's a lot of information to show: the pipeline visualizer with each agent's state, the autonomous revision panel, the full report with tabs, the critique panel, the chat, the M365 integrations. Finding the right visual hierarchy so all of that makes sense without overwhelming the user took quite a few iterations.&lt;/p&gt;

&lt;p&gt;The Three.js lighthouse background was its own challenge. Day mode and night mode render completely different scenes: cream tower with sunlight in day, dark navy with a starfield and volumetric beam at night. My first attempt tried to mutate the scene on theme change, but Three.js doesn't clean up that state cleanly. I ended up forcing a full remount via a &lt;code&gt;key&lt;/code&gt; prop in React every time the theme changes. It's the most direct solution and it works without side effects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Keeping agents from making up data
&lt;/h3&gt;

&lt;p&gt;One requirement I set for myself from the beginning: the system couldn't return invented statistics. If a nonprofit is going to make decisions based on this analysis, the data needs to come from somewhere verifiable.&lt;/p&gt;

&lt;p&gt;That's why the first agent does live web search with Tavily before the rest of the pipeline starts. Results get truncated to 3,000 characters to avoid blowing the token budget of the following agents, but that preserves the relevant information. The Analyzer and Planner have access to real data from the first step.&lt;/p&gt;

&lt;h3&gt;
  
  
  WebSocket and iOS
&lt;/h3&gt;

&lt;p&gt;Keeping a WebSocket connection open for 60 to 90 seconds has problems, especially on iOS. Both Safari and Chrome on iPhone use WebKit, which has stricter connection limits than desktop or Android. The connection closes before the pipeline finishes.&lt;/p&gt;

&lt;p&gt;I solved this in layers. First, a keepalive ping every 8 seconds to keep the connection alive. Second, the backend sends the &lt;code&gt;session_id&lt;/code&gt; to the frontend before the pipeline starts, so the user has the session code from the very first second. If the connection drops, the pipeline keeps running on the server and the user can recover the full analysis by entering that code on the Session Lookup page. Third, an ErrorBoundary component shows the session code in any error state so it's never lost.&lt;/p&gt;

&lt;p&gt;There's no perfect solution for iOS without refactoring all the streaming to Server-Sent Events or polling, which would have meant rewriting significant parts of the backend. The current solution covers the use case without breaking anything else.&lt;/p&gt;




&lt;h2&gt;
  
  
  What surprised me when I ran it the first time
&lt;/h2&gt;

&lt;p&gt;I expected the pipeline to produce something useful. I didn't expect how detailed and specific the output would be when the agents had good input to work with.&lt;/p&gt;

&lt;p&gt;The first time I ran a full analysis on a real nonprofit, the output had specific activities per phase, measurable milestones, risk factors with their mitigations, a funding proposal with theory of change and sustainability plan, and impact projections with confidence intervals. None of that was hardcoded. It came from the context chaining across the nine agents.&lt;/p&gt;

&lt;p&gt;That's when I understood why the added complexity of the sequential approach was worth it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Full stack
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Backend:&lt;/strong&gt; Python 3.12 · FastAPI · uvicorn · AsyncAzureOpenAI · azure-storage-blob · Tavily&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frontend:&lt;/strong&gt; React 18 · TypeScript · Vite · Three.js · WebSocket&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Infrastructure:&lt;/strong&gt; Railway (backend, Hobby plan) · Vercel (frontend) · Azure Blob Storage · Azure Logic Apps · Azure AI Foundry&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Integrations:&lt;/strong&gt; Microsoft 365 (Calendar, To Do, OneDrive, Email) · Microsoft 365 Copilot (Declarative Agent)&lt;/p&gt;




&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;I finished the hackathon with 227 commits, a production deploy, real sessions from real organizations, a README with screenshots of every feature, a demo video, and the submission delivered.&lt;/p&gt;

&lt;p&gt;When I saw the pipeline visualizer running in real time, the expandable revision panel with the Critique agent's reasoning, the funding proposal generated in seconds, and the tasks showing up automatically in Microsoft To Do, I felt like I had built something that works end to end.&lt;/p&gt;

&lt;p&gt;I entered the Reasoning Agents track at Microsoft Agents League 2026. I didn't win. But FaroIQ is deployed, it's free, and any nonprofit that finds it can use it today. That's reason enough to have built it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Live demo: &lt;a href="https://faroiq.vercel.app" rel="noopener noreferrer"&gt;faroiq.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/carlosjcastro/faroiq" rel="noopener noreferrer"&gt;github.com/carlosjcastro/faroiq&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Microsoft Agents League 2026 · Reasoning Agents Track · Hack for Good&lt;/em&gt;&lt;/p&gt;

</description>
      <category>azure</category>
      <category>ai</category>
      <category>python</category>
      <category>react</category>
    </item>
    <item>
      <title>How to build production AI agents with Azure AI Foundry Agent Service</title>
      <dc:creator>Carlos José Castro Galante</dc:creator>
      <pubDate>Tue, 23 Jun 2026 23:55:48 +0000</pubDate>
      <link>https://dev.to/carlosjcastrog/how-to-build-production-ai-agents-with-azure-ai-foundry-agent-service-4964</link>
      <guid>https://dev.to/carlosjcastrog/how-to-build-production-ai-agents-with-azure-ai-foundry-agent-service-4964</guid>
      <description>&lt;p&gt;For months, the Assistants API in Azure OpenAI was the only real option for building agents on Azure. It worked, but it had clear limits: only OpenAI models, no native multi-agent support, no direct integration with Microsoft's data ecosystem, and an architecture Microsoft was gradually moving away from.&lt;/p&gt;

&lt;p&gt;That chapter closed in March 2026. Azure AI Foundry Agent Service reached general availability and became the official platform for building, deploying, and scaling AI agents on Azure. The classic Assistants API still works, but it has a retirement date: March 31, 2027. If you are starting a new project or thinking about migrating an existing one, Foundry Agent Service is where you should be building.&lt;/p&gt;

&lt;p&gt;This article explains what the service is, how it is organized, what you can build with it, and which technical decisions matter most when designing an agent for production.&lt;/p&gt;

&lt;h2&gt;
  
  
  What an agent is and what it is not
&lt;/h2&gt;

&lt;p&gt;Before getting into the service, it is worth being precise about the term because it gets used in very different ways depending on context.&lt;/p&gt;

&lt;p&gt;An agent in the Microsoft Foundry ecosystem is an AI application that uses a model from the Foundry model catalog to reason about user requests and take autonomous actions to fulfill them. Unlike a chatbot that only generates text, an agent can call tools, access external data, and make decisions across multiple steps to complete a task. In some cases, agents do not even have a chat interface at all: they work autonomously in the background, triggered by system events, completing tasks on a user's or organization's behalf.&lt;/p&gt;

&lt;p&gt;The three basic components of any agent are the model, which provides reasoning and language capabilities; the instructions, which define goals, constraints, and behavior; and the tools, which provide access to data or concrete actions like search, file operations, or API calls.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two agent types in Foundry
&lt;/h2&gt;

&lt;p&gt;Foundry Agent Service organizes agents into two main categories, and the choice between them determines how much code you write and how much control you have.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prompt agents
&lt;/h3&gt;

&lt;p&gt;Prompt agents are agents you define with instructions, tools, and configuration, and Foundry runs them without you having to write or maintain any application code. No compute to pay for, no containers to optimize, no infrastructure to scale. You define the agent from the Foundry portal or through the SDK, and the service handles the rest.&lt;/p&gt;

&lt;p&gt;These are the right choice when the use case is well-defined, the tools available in Foundry cover what you need, and you do not require complex orchestration logic written by hand. For most enterprise automation, customer support, or data analysis scenarios, prompt agents are sufficient and much faster to implement.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hosted agents
&lt;/h3&gt;

&lt;p&gt;Hosted agents let you bring your own agent code, packaged as a container, and have Foundry run it with a managed endpoint, automatic scaling, identity, and built-in observability. You can write that code with Agent Framework, LangGraph, the OpenAI Agents SDK, the Anthropic Agent SDK, the GitHub Copilot SDK, or your own code.&lt;/p&gt;

&lt;p&gt;This path makes sense when you need orchestration logic that cannot be expressed with instructions alone, very specific integrations with proprietary systems, or full control over agent behavior at each step. Hosted agents are expected to reach general availability in early July 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  The technical foundation: Responses API
&lt;/h2&gt;

&lt;p&gt;Foundry Agent Service is built on the OpenAI Responses API. This has an important practical implication: if you already have code running against the Responses API directly, migrating it to Foundry requires minimal changes. What you gain by doing so is enterprise security, private networking, Entra ID access control, full traceability, and evaluation, layered on top of your existing agent logic.&lt;/p&gt;

&lt;p&gt;SDKs are available for Python, JavaScript, TypeScript, Java, and .NET. The stable version is 2.0.0, released in March 2026. Starting with that version, the package bundles &lt;code&gt;openai&lt;/code&gt; and &lt;code&gt;azure-identity&lt;/code&gt; as direct dependencies, so you no longer need to install them separately.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;azure.identity&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;DefaultAzureCredential&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;azure.ai.projects&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AIProjectClient&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;azure.ai.projects.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;PromptAgentDefinition&lt;/span&gt;

&lt;span class="n"&gt;credential&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;DefaultAzureCredential&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AIProjectClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AZURE_AI_FOUNDRY_ENDPOINT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;credential&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;credential&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;support-agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a technical support assistant. Answer questions using the available knowledge base.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;threads&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;thread_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;thread&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;How do I restart the authentication service?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;runs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_and_process&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;thread_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;thread&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;agent_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;messages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;thread_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;thread&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;role&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;assistant&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Available tools
&lt;/h2&gt;

&lt;p&gt;The real utility of an agent depends on which tools it can invoke. Foundry Agent Service has a wide set of built-in tools and supports external tools via MCP.&lt;/p&gt;

&lt;h3&gt;
  
  
  Built-in tools
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;File Search&lt;/strong&gt; lets the agent search through files uploaded to the service, useful for internal knowledge bases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code Interpreter&lt;/strong&gt; runs Python code in an isolated sandbox environment, ideal for data analysis and chart generation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bing Search&lt;/strong&gt; lets the agent search the web to answer questions that require up-to-date information.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SharePoint&lt;/strong&gt; is now a first-class knowledge tool, integrated directly into the service. Agents can access SharePoint documents without building a custom RAG pipeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microsoft Fabric&lt;/strong&gt; through Fabric IQ lets agents query structured data from Microsoft's data platform, including semantic models and ontologies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Logic Apps&lt;/strong&gt; opens access to over 1,400 Azure Logic Apps workflows as tools for agents, covering a huge range of integrations with external systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deep Research&lt;/strong&gt; runs a multi-step research process using the Azure OpenAI &lt;code&gt;o3-deep-research&lt;/code&gt; model with Bing Search as the knowledge source.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Computer Use&lt;/strong&gt; and &lt;strong&gt;Browser Automation&lt;/strong&gt; are in preview. The first lets the agent interact with desktop application user interfaces. The second allows executing real tasks in the browser through natural language, using isolated Microsoft Playwright sessions.&lt;/p&gt;

&lt;h3&gt;
  
  
  MCP and Toolboxes
&lt;/h3&gt;

&lt;p&gt;Model Context Protocol is the open standard Foundry adopted as the primary mechanism for connecting agents with external tools. You can add remote MCP servers directly from the portal catalog, including the Azure DevOps MCP Server in public preview. You can also expose your own tools hosted on Azure Functions through the MCP webhook endpoint.&lt;/p&gt;

&lt;p&gt;Toolboxes, available in public preview since Build 2026, lets you define a curated set of tools once, manage them centrally in Foundry, and expose them through a single MCP-compatible endpoint. Any agent or MCP client can consume a Toolbox regardless of the framework it uses. Toolboxes include explicit versioning to control when changes take effect in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-agent: Connected Agents
&lt;/h2&gt;

&lt;p&gt;When a task is too complex for a single agent, Foundry Agent Service supports multi-agent workflows through Connected Agents, available in preview.&lt;/p&gt;

&lt;p&gt;Connected Agents enable point-to-point interactions where an agent can call other agents as tools to delegate specialized tasks. The primary agent coordinates and the secondary agent handles the subtask, without needing an external orchestrator.&lt;/p&gt;

&lt;p&gt;For more complex workflows, Foundry integrates with the converged runtime for Semantic Kernel and AutoGen, combining AutoGen's dynamic orchestration patterns with Semantic Kernel's modular, production-grade architecture. The result is a unified API for defining, chaining, and managing both single-agent and multi-agent workflows, with consistent behavior between local environments and the cloud.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security for enterprise environments
&lt;/h2&gt;

&lt;p&gt;An agent that accesses internal data, executes actions on production systems, and makes autonomous decisions needs very different security controls than a public chatbot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Entra Agent ID&lt;/strong&gt; gives each agent its own Microsoft Entra identity. This means agents authenticate as entities with their own permissions, not as the user invoking them, which allows applying the principle of least privilege at the agent level.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Private networking&lt;/strong&gt; is supported at GA. You can bring your own virtual network (BYO VNet) for a completely isolated environment, with no public egress, container and subnet injection into your network. Private networking extends to tool connectivity, including MCP servers, Azure AI Search, and Fabric data agents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Integrated content safety&lt;/strong&gt; includes guardrails to reduce unsafe outputs and mitigate prompt injection risks, including Cross-Prompt Injection Attacks (XPIA).&lt;/p&gt;

&lt;h2&gt;
  
  
  Observability in production
&lt;/h2&gt;

&lt;p&gt;Running an agent in production without visibility into what it is doing is not viable. Foundry Agent Service has built-in observability that reached general availability in March 2026.&lt;/p&gt;

&lt;p&gt;Tracing captures the complete end-to-end execution path: requests, tool invocations, and responses, with OpenTelemetry semantics for AI workloads that include memory, state, and planning. Evaluation results link directly to the trace that produced them, so when a regression appears you can go from the score to the exact production trace that exposed it.&lt;/p&gt;

&lt;p&gt;Built-in evaluators cover coherence, relevance, groundedness, retrieval quality, and safety, for both direct generation and RAG scenarios. Custom evaluators, in preview, let you define LLM-as-a-judge evaluation logic aligned to specific business requirements or regulatory standards.&lt;/p&gt;

&lt;h2&gt;
  
  
  Distribution: where agents live
&lt;/h2&gt;

&lt;p&gt;An agent without a distribution channel reaches no users. Foundry supports multiple ways to publish agents.&lt;/p&gt;

&lt;p&gt;The most direct is a REST endpoint that any application can consume. For Microsoft environments, agents can be published directly to Microsoft Teams and Microsoft 365 Copilot, with identity, permissions, and policies flowing automatically through the platform's channels. This capability was planned for general availability in June 2026.&lt;/p&gt;

&lt;p&gt;The Entra Agent Registry centralizes the registration and discovery of agents across the organization, so teams can find and reuse existing agents rather than rebuilding them.&lt;/p&gt;

&lt;p&gt;The A2A (agent-to-agent) protocol, in preview, enables communication between agents from different systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  What not to use today
&lt;/h2&gt;

&lt;p&gt;If you come from Azure OpenAI and use the classic Assistants API, it is deprecated and retires on March 31, 2027. The classic service is now documented under &lt;code&gt;/azure/foundry-classic/agents/&lt;/code&gt; on Microsoft Learn. The new service lives under &lt;code&gt;/azure/foundry/agents/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Migrating from the classic Assistants API to the new Agent Service is not trivial but it is not complex either: the official migration guide is available on Microsoft Learn.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do I get started?
&lt;/h2&gt;

&lt;p&gt;Foundry Toolkit for VS Code reached general availability at Build 2026. It lets you create agents from templates or using GitHub Copilot directly in the IDE, debug runs locally with trace visualization, connect Toolboxes, and deploy to Foundry Agent Service without leaving VS Code.&lt;/p&gt;

&lt;p&gt;If you'd like to experiment without installing anything, the Azure AI Foundry portal at ai.azure.com lets you create, configure, debug, and test agents in no-code mode, view conversation threads, add tools, and interact with the agent directly from the interface.&lt;/p&gt;

&lt;p&gt;If you want to explore the official documentation and quickstarts:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://learn.microsoft.com/azure/ai-foundry/agents/?wt.mc_id=studentamb_510930" rel="noopener noreferrer"&gt;https://learn.microsoft.com/azure/ai-foundry/agents/?wt.mc_id=studentamb_510930&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Building agents on Azure no longer requires assembling infrastructure from scratch or depending on APIs that will disappear. Foundry Agent Service covers the runtime, identity, networking, tools, memory, and observability as parts of the service. What remains on the developer's side is deciding what the agent does, with which tools, and how to distribute it. Which is, in the end, the interesting part.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>microsoft</category>
      <category>azure</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Azure AI Foundry, qué es y por qué reemplaza todo lo que conocías de Azure AI</title>
      <dc:creator>Carlos José Castro Galante</dc:creator>
      <pubDate>Sat, 13 Jun 2026 15:04:07 +0000</pubDate>
      <link>https://dev.to/carlosjcastrog/azure-ai-foundry-que-es-y-por-que-reemplaza-todo-lo-que-conocias-de-azure-ai-4n11</link>
      <guid>https://dev.to/carlosjcastrog/azure-ai-foundry-que-es-y-por-que-reemplaza-todo-lo-que-conocias-de-azure-ai-4n11</guid>
      <description>&lt;p&gt;Si en algún momento trabajaste con Azure OpenAI Service o Azure AI Studio y hoy entrás a la documentación de Microsoft esperando encontrar lo mismo, probablemente te perdiste. Esto es debido a que, los nombres cambiaron, los recursos se consolidaron, y lo que antes eran tres servicios separados ahora vive bajo un solo nombre: Azure AI Foundry.&lt;/p&gt;

&lt;p&gt;Este post explica qué es Azure AI Foundry en 2026, cómo se diferencia de lo que había antes, y qué necesitás entender si estás empezando o si venís de usar Azure OpenAI directamente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué es Azure AI Foundry
&lt;/h2&gt;

&lt;p&gt;Azure AI Foundry es la plataforma unificada de desarrollo de IA de Microsoft. Reemplazó a Azure AI Studio a fines de 2024 y expandió su alcance más allá de los modelos de OpenAI para incluir Phi, Mistral, Llama, Cohere y muchos más.&lt;/p&gt;

&lt;p&gt;En términos concretos, es el lugar donde Microsoft concentró todo lo que antes estaba disperso: el catálogo de modelos, las herramientas de evaluación y prompt engineering, el despliegue de endpoints, el fine-tuning, la observabilidad y la construcción de agentes. Todo bajo un solo portal en ai.azure.com y una sola capa de recursos en Azure.&lt;/p&gt;

&lt;p&gt;El catálogo tiene más de 1900 modelos que van desde Foundation Models y Reasoning Models hasta Small Language Models, modelos multimodales, modelos de dominio específico y modelos industriales.&lt;/p&gt;

&lt;h2&gt;
  
  
  La diferencia con Azure OpenAI Service
&lt;/h2&gt;

&lt;p&gt;Esta es la confusión más común y es importante aclararla&lt;/p&gt;

&lt;p&gt;Azure OpenAI Service es un servicio administrado enfocado exclusivamente en dar acceso a los modelos de OpenAI como GPT-5, GPT-4o, GPT-4.1, embeddings y modelos multimodales. Corre en la infraestructura de Azure y agrega características empresariales como seguridad con Microsoft Entra ID, filtros de contenido, escalabilidad e integración con herramientas de Azure.&lt;/p&gt;

&lt;p&gt;Azure AI Foundry es una plataforma más amplia orientada a construir, personalizar, desplegar y administrar aplicaciones de IA y agentes. Incluye Azure OpenAI como uno de sus componentes bajo Foundry Models.&lt;/p&gt;

&lt;p&gt;La manera más simple de entenderlo: Azure OpenAI Service sigue existiendo y podés usarlo directamente para llamadas a la API sin necesitar todo el ecosistema de Foundry. Pero si estás construyendo algo más complejo, con múltiples modelos, evaluación, agentes o fine-tuning, Azure AI Foundry es donde todo eso vive hoy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Los modelos disponibles
&lt;/h2&gt;

&lt;p&gt;El catálogo incluye modelos de OpenAI, Anthropic Claude, Fireworks AI, DeepSeek, xAI, Hugging Face, Meta, Mistral AI, Cohere, Stability AI, NVIDIA y más.&lt;/p&gt;

&lt;p&gt;Los modelos del catálogo se dividen en dos categorías principales. Los modelos vendidos directamente por Azure son hosteados y vendidos por Microsoft bajo sus propios términos de producto. Microsoft los evaluó y están profundamente integrados en el ecosistema de Azure. Los modelos de partners y comunidad son soportados por sus respectivos proveedores.&lt;/p&gt;

&lt;p&gt;La distinción importa en la práctica porque los modelos directos de Azure vienen con SLA garantizado de Microsoft y soporte de primer nivel, mientras que los modelos de partners tienen niveles variables de soporte. Para producción en entornos empresariales, ese detalle puede ser determinante.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué desapareció y qué va a desaparecer
&lt;/h2&gt;

&lt;p&gt;Hay dos cosas concretas que tenés que tener en cuenta si venís de Azure OpenAI.&lt;/p&gt;

&lt;p&gt;La estructura de recursos colapsó. Antes, un despliegue de IA típico en Azure requería tres recursos separados: una cuenta de Azure OpenAI, una cuenta de Azure AI Services y un AI Hub. Eso se consolidó en un solo recurso de Foundry que hostea múltiples proyectos.&lt;/p&gt;

&lt;p&gt;La Assistants API tiene una fecha de retiro definitiva el 26 de agosto de 2026, reemplazada por la Foundry Agent Service Responses API. Si tenés agentes construidos sobre la Assistants API, el tiempo para migrar es ahora.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lo que podés hacer desde el portal
&lt;/h2&gt;

&lt;p&gt;El portal de Azure AI Foundry en ai.azure.com te da acceso a todo sin tener que tocar código en primera instancia. Podés explorar el catálogo de modelos, comparar modelos lado a lado usando tus propios datos y prompts, hacer fine-tuning de modelos como GPT-4o, GPT-4o-mini, Llama y Phi, desplegar endpoints con un par de clics, y monitorear el comportamiento de los modelos en producción.&lt;/p&gt;

&lt;p&gt;El Serverless API, también llamado Model as a Service o MaaS, es el tipo de despliegue más accesible para empezar. Te permite acceder a modelos hosteados en Azure sin necesidad de provisionar GPUs ni gestionar infraestructura de backend. Pagás por lo que usás.&lt;/p&gt;

&lt;h2&gt;
  
  
  Desde el código
&lt;/h2&gt;

&lt;p&gt;El SDK oficial para trabajar con Azure AI Foundry desde código es &lt;code&gt;azure-ai-projects&lt;/code&gt;, disponible para Python, JavaScript y TypeScript, y .NET. La versión actual es 2.2.0 y trae soporte para definiciones de agentes externos, skills, toolboxes, registro de pesos de modelos, rutinas y trabajos de optimización.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;azure.ai.projects&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AIProjectClient&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;azure.identity&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;DefaultAzureCredential&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AIProjectClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://tu-endpoint.services.ai.azure.com/api/projects/tu-proyecto&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;credential&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;DefaultAzureCredential&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;inference&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_chat_completions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hola, qué es Azure AI Foundry?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para llamadas directas a modelos sin toda la capa de proyectos, podés seguir usando el SDK de Azure OpenAI que ya conocés, ya que los endpoints son compatibles.&lt;/p&gt;

&lt;h2&gt;
  
  
  Y si estudio para la AI-103, ¿dónde encaja esto?
&lt;/h2&gt;

&lt;p&gt;Si estás preparándote para la certificación AI-103, Azure AI Foundry es la plataforma central del examen. Microsoft Foundry reemplazó a Azure AI Studio como el entorno de referencia para construir aplicaciones de IA listas para producción. Entender cómo se organiza el portal, cómo se crean proyectos y cómo se despliegan modelos es conocimiento directamente evaluado.&lt;/p&gt;

&lt;p&gt;Lo mismo aplica si venís del AI-102: la arquitectura que antes estudiabas con Azure Cognitive Services y Azure Applied AI Services ahora está reorganizada dentro de Foundry. Los servicios siguen existiendo, pero el punto de acceso y la forma de gestionarlos cambió.&lt;/p&gt;

&lt;h2&gt;
  
  
  Entonces, ¿cómo empiezo?
&lt;/h2&gt;

&lt;p&gt;Azure AI Foundry tiene una capa gratuita en el portal que te permite explorar el catálogo y probar modelos sin necesitar una suscripción de pago. Para despliegues en producción, el modelo de Serverless API cobra por token consumido dependiendo del modelo que elijas.&lt;/p&gt;

&lt;p&gt;Si querés explorar la documentación oficial y empezar con el portal:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://learn.microsoft.com/azure/ai-foundry/?wt.mc_id=studentamb_510930" rel="noopener noreferrer"&gt;https://learn.microsoft.com/azure/ai-foundry/?wt.mc_id=studentamb_510930&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;La confusión de nombres entre Azure OpenAI, Azure AI Studio y Azure AI Foundry frenó a mucha gente en los últimos meses. La realidad es que la plataforma evolucionó hacia algo más completo y el punto de entrada hoy es uno solo: Foundry. Todo lo demás se accede desde ahí.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Azure Functions para developers que nunca usaron serverless</title>
      <dc:creator>Carlos José Castro Galante</dc:creator>
      <pubDate>Sat, 16 May 2026 03:14:21 +0000</pubDate>
      <link>https://dev.to/carlosjcastrog/azure-functions-para-developers-que-nunca-usaron-serverless-4j0k</link>
      <guid>https://dev.to/carlosjcastrog/azure-functions-para-developers-que-nunca-usaron-serverless-4j0k</guid>
      <description>&lt;p&gt;Si alguna vez escuchaste "serverless" y pensaste que era solo marketing, entendible. El nombre confunde porque los servidores siguen existiendo, simplemente dejás de encargarte de ellos. Azure Functions es el servicio serverless de Microsoft y en 2026 es uno de los más usados para construir backends event-driven, APIs livianas, pipelines de datos y, cada vez más, herramientas para agentes de IA.&lt;/p&gt;

&lt;p&gt;Este post es para developers que nunca tocaron serverless y quieren entender qué es en la práctica, no en teoría.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué resuelve Azure Functions
&lt;/h2&gt;

&lt;p&gt;El modelo tradicional para desplegar código en la nube implica provisionar un servidor o contenedor, configurarlo, mantenerlo activo aunque no haya tráfico, y pagar por ese tiempo aunque esté idle. Funciona bien para aplicaciones que reciben tráfico constante, pero es ineficiente para tareas que se ejecutan cuando pasa algo: llega un archivo, alguien hace un request HTTP, se cumple un horario, llega un mensaje a una cola.&lt;/p&gt;

&lt;p&gt;Azure Functions invierte ese modelo. Escribís el código, definís qué lo dispara, y Azure se encarga de ejecutarlo cuando eso pasa. No pagás cuando no corre. No configurás servidores. No pensás en escalado porque el servicio escala solo en respuesta a la demanda.&lt;/p&gt;

&lt;p&gt;El modelo tiene un nombre técnico más preciso: Functions as a Service (FaaS). Serverless es el paraguas más amplio, pero FaaS es lo que Azure Functions implementa concretamente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lenguajes soportados
&lt;/h2&gt;

&lt;p&gt;Azure Functions soporta C#, Java, JavaScript, TypeScript, Python y PowerShell de forma oficial. También tiene soporte para Go y Rust, aunque con menos integración nativa. Si venís del mundo web y trabajás con JavaScript o TypeScript, podés empezar con lo que ya sabés.&lt;/p&gt;

&lt;h2&gt;
  
  
  Los dos conceptos que tenés que entender bien
&lt;/h2&gt;

&lt;p&gt;Antes de escribir una sola línea de código, hay que tener claros dos conceptos que van a aparecer en toda la documentación.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Triggers&lt;/strong&gt; son los eventos que hacen correr tu función. Una función tiene exactamente un trigger. Algunos ejemplos reales:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Un request HTTP llega a una URL (HTTP trigger)&lt;/li&gt;
&lt;li&gt;Se cumple un horario definido, por ejemplo todos los días a las 3am (Timer trigger)&lt;/li&gt;
&lt;li&gt;Llega un mensaje a una cola de Azure Storage (Queue trigger)&lt;/li&gt;
&lt;li&gt;Se sube un archivo a un blob container (Blob trigger)&lt;/li&gt;
&lt;li&gt;Llega un evento de Azure Event Grid o Event Hubs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bindings&lt;/strong&gt; son declaraciones que conectan tu función con otros servicios de Azure sin que tengas que escribir el código de esa conexión a mano. Hay bindings de entrada (leer datos) y de salida (escribir datos).&lt;/p&gt;

&lt;p&gt;Un ejemplo concreto: tenés una función que se dispara cuando llega un archivo a Blob Storage, lee ese archivo, lo procesa, y escribe el resultado en una tabla de Cosmos DB. En lugar de escribir el SDK de Blob y el SDK de Cosmos DB dentro de la función, declarás esas conexiones como bindings y Azure se encarga de la autenticación y la inyección de los datos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Azure Function con HTTP trigger en JavaScript&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@azure/functions&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;http&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;miPrimeraFuncion&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;GET&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;authLevel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;anonymous&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Función ejecutada&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nombre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;nombre&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mundo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Hola, &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Los planes de hosting y cuál elegir hoy
&lt;/h2&gt;

&lt;p&gt;Esta es la parte donde más gente se pierde porque la documentación lista muchas opciones y no siempre queda claro cuándo usar cada una.&lt;/p&gt;

&lt;p&gt;En 2026, Microsoft recomienda explícitamente el &lt;strong&gt;Flex Consumption plan&lt;/strong&gt; para nuevos proyectos serverless. Es importante saberlo porque mucho material en internet todavía habla del Consumption plan clásico como si fuera la opción estándar, y eso está cambiando.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consumption plan&lt;/strong&gt; es el más conocido. Incluye un free grant mensual de 1 millón de ejecuciones y 400,000 GB-s por suscripción. El problema es que no tiene integración con redes virtuales, tiene un límite de ejecución de 10 minutos, y los cold starts en .NET aislado pueden llegar a entre 2 y 7 segundos. Microsoft anunció el retiro del plan Linux Consumption para septiembre de 2028.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flex Consumption plan&lt;/strong&gt; es el reemplazo recomendado. Tiene cold starts más rápidos, integración con virtual networks, escalado por función individual (no todas las funciones del app escalan juntas), concurrencia configurable y múltiples tamaños de instancia. El free grant es de 250,000 ejecuciones y 100,000 GB-s por mes por suscripción. Tiene SLA de 99.95%.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Premium plan&lt;/strong&gt; elimina los cold starts completamente con instancias pre-calentadas. El costo es de alrededor de 146 dólares por mes como mínimo, lo que lo hace justificable solo cuando los cold starts afectan la experiencia de usuarios reales.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dedicated plan&lt;/strong&gt; corre en un App Service existente. Tiene sentido si ya tenés infraestructura pagada y querés aprovecharla, pero pierde gran parte del valor de serverless.&lt;/p&gt;

&lt;p&gt;La decisión práctica para alguien que arranca es esta: si el proyecto es nuevo, usá Flex Consumption. Si tenés funciones existentes en el Consumption plan clásico sobre Linux, lo correcto es migrarlas antes de que el plan se retire.&lt;/p&gt;

&lt;h2&gt;
  
  
  Algo que tenés que saber si usás .NET
&lt;/h2&gt;

&lt;p&gt;El modelo in-process de Azure Functions, donde el código corre en el mismo proceso que el host, está programado para retirarse en noviembre de 2026. El modelo que hay que usar hoy es el isolated worker model, que corre el código en un proceso separado. Esto le da más flexibilidad en versiones de .NET y mejor aislamiento, pero si encontrás documentación que habla de in-process como si fuera la opción vigente, ese material está desactualizado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Durable Functions para cuando una ejecución no alcanza
&lt;/h2&gt;

&lt;p&gt;Azure Functions tiene un límite de tiempo de ejecución. Si necesitás orquestar un flujo de trabajo más largo, como procesar miles de archivos en secuencia, coordinar múltiples llamadas a APIs externas, o manejar aprobaciones humanas que pueden tardar horas, existe Durable Functions.&lt;/p&gt;

&lt;p&gt;Durable Functions es una extensión que permite escribir workflows con estado en un entorno serverless. El runtime maneja checkpoints, reintentos y recuperación automáticamente. Si una instancia falla en el medio de un workflow, el sistema retoma desde donde estaba.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Ejemplo de orquestación con Durable Functions en Python
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;azure.durable_functions&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;orchestrator_function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DurableOrchestrationContext&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;resultado1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call_activity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ProcesarDatos&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;input1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;resultado2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call_activity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EnviarEmail&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;resultado1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;resultado2&lt;/span&gt;

&lt;span class="n"&gt;main&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Orchestrator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;orchestrator_function&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Azure Functions y agentes de IA en 2026
&lt;/h2&gt;

&lt;p&gt;Una tendencia real en 2026 es usar Azure Functions como infraestructura serverless para agentes de IA. El soporte para servidores MCP (Model Context Protocol) alcanzó disponibilidad general con autenticación OBO (On-Behalf-Of), lo que permite que agentes de IA accedan a herramientas y datos externos de forma segura usando identidades de Microsoft Entra ID.&lt;/p&gt;

&lt;p&gt;En términos prácticos, esto significa que podés deployar un servidor MCP en Azure Functions y que agentes de GitHub Copilot, Microsoft 365 Copilot u otros clientes compatibles puedan invocar las herramientas que exponés, con autenticación empresarial incluida y sin gestionar infraestructura propia.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dónde practicar sin gastar nada
&lt;/h2&gt;

&lt;p&gt;La cuenta gratuita de Azure incluye créditos y el free grant del Consumption plan cubre ampliamente el uso de aprendizaje. Para el Flex Consumption plan, las primeras 250,000 ejecuciones del mes no tienen costo.&lt;/p&gt;

&lt;p&gt;Microsoft Learn tiene un módulo oficial de introducción a Azure Functions que podés seguir en el navegador con un sandbox gratuito, sin necesitar suscripción propia:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://learn.microsoft.com/azure?wt.mc_id=studentamb_510930" rel="noopener noreferrer"&gt;https://learn.microsoft.com/azure?wt.mc_id=studentamb_510930&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;La curva de entrada de Azure Functions es más suave de lo que parece. Si sabés escribir una función en cualquier lenguaje y entendés qué es un evento, ya tenés lo necesario para empezar. El resto se aprende construyendo cosas reales.&lt;/p&gt;

&lt;p&gt;Carlos José Castro Galante es Desarrollador Full Stack y Azure AI Engineer certificado por Microsoft (AI-102, AI-900, AZ-900) e ITBA. Disponible para proyectos freelance desde Argentina.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>serverless</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Python para inteligencia artificial, por dónde empezar si sos developer junior</title>
      <dc:creator>Carlos José Castro Galante</dc:creator>
      <pubDate>Tue, 12 May 2026 14:55:17 +0000</pubDate>
      <link>https://dev.to/carlosjcastrog/python-para-inteligencia-artificial-por-donde-empezar-si-sos-developer-junior-3e3m</link>
      <guid>https://dev.to/carlosjcastrog/python-para-inteligencia-artificial-por-donde-empezar-si-sos-developer-junior-3e3m</guid>
      <description>&lt;p&gt;Python es el lenguaje más popular del mundo según el índice TIOBE de principios de 2026, con más del 21% de participación, y la razón principal de ese número es la IA. En la encuesta de Stack Overflow 2025, el uso de Python entre developers pasó del 51% al 58%, el mayor salto anual de cualquier lenguaje en los últimos años. Es que los frameworks más importantes de IA, TensorFlow, PyTorch, Scikit-learn, todos corren sobre Python.&lt;/p&gt;

&lt;p&gt;Si sos developer junior y querés entrar al mundo de la IA, la pregunta no es si aprender Python. La pregunta es por dónde empezar sin ahogarte en librerías que no vas a necesitar todavía.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por qué Python y no otro lenguaje
&lt;/h2&gt;

&lt;p&gt;Hay razones concretas. Los frameworks de machine learning (ML) más usados en producción son Python-nativos. La comunidad es enorme, lo que significa que vas a encontrar documentación, respuestas en Stack Overflow y tutoriales para casi cualquier problema que tengas. La sintaxis es limpia y permite concentrarse en el problema antes que en el lenguaje.&lt;/p&gt;

&lt;p&gt;Datos reales: según Stack Overflow 2025, el 84% de los developers usa o planea usar herramientas de IA en su trabajo. Python es el lenguaje que conecta esas herramientas. No hay un segundo cercano para ese rol específico.&lt;/p&gt;

&lt;h2&gt;
  
  
  El error más común cuando empezás
&lt;/h2&gt;

&lt;p&gt;La mayoría de los artículos sobre Python para IA te tiran 15 librerías en la primera pantalla. NumPy, Pandas, Matplotlib, Scikit-learn, TensorFlow, PyTorch, Keras, Hugging Face, LangChain, y siguen. El resultado es que no sabés por dónde empezar y terminás aprendiendo el nombre de cosas sin entender cómo se conectan.&lt;/p&gt;

&lt;p&gt;La realidad de un proyecto de machine learning es que tiene un orden. Primero vas a manipular datos, después los vas a visualizar para entender qué tenés, después vas a preparar esos datos para un modelo, y finalmente vas a entrenar y evaluar el modelo. Cada librería existe para una parte específica de ese flujo, y si aprendés en ese orden, todo tiene sentido mucho más rápido.&lt;/p&gt;

&lt;h2&gt;
  
  
  El flujo real y qué usar en cada parte
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Fundamento matemático de los datos&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;NumPy es la base de casi todo el ecosistema. Es una librería para operaciones numéricas con arrays multidimensionales, y la razón por la que Python puede hacer cálculos a velocidad de C sin que vos lo notes. No necesitás dominarla en profundidad al principio, pero entender cómo funciona un array de NumPy te va a evitar mucha confusión después.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;

&lt;span class="n"&gt;datos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;datos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;  &lt;span class="c1"&gt;# 6.0
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;datos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;std&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;   &lt;span class="c1"&gt;# 2.8...
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Manipulación de datos&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pandas es la herramienta para trabajar con datasets reales, los que vienen en CSV, Excel o bases de datos. Te permite cargar, limpiar, filtrar y transformar datos con una API que después de un par de días ya se siente natural.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;

&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;datos.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;head&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isnull&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;  &lt;span class="c1"&gt;# cuántos valores faltantes hay por columna
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En el mundo real, pasar del 70% al 80% del tiempo de un proyecto de ML se va en esta etapa. Datos sucios, columnas mal tipadas, valores faltantes. Pandas es donde se resuelve eso.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Visualización&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Matplotlib es el motor base para gráficos en Python. No es el más bonito, pero es el más compatible con el resto del ecosistema. Seaborn está construido sobre Matplotlib y te da gráficos estadísticos con menos código. Para proyectos donde el resultado tiene que mostrarse en un dashboard o una web, Plotly es la opción más usada en 2026.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;

&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;plot&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Mi primer gráfico&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Machine learning clásico&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Scikit-learn es el punto de entrada correcto para cualquier junior que quiere construir su primer modelo predictivo. Tiene una API consistente que funciona igual para regresión lineal, árboles de decisión, clustering, o métricas de evaluación. Open source, con licencia BSD, y con una de las documentaciones más claras del ecosistema.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;sklearn.linear_model&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;LinearRegression&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;sklearn.model_selection&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;train_test_split&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;sklearn.metrics&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;mean_squared_error&lt;/span&gt;

&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_test&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;train_test_split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;test_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;modelo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;LinearRegression&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;modelo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_train&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;predicciones&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;modelo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;mean_squared_error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;y_test&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;predicciones&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No aprendas TensorFlow ni PyTorch antes de entender bien Scikit-learn. Esa es una de las cosas que más demora el progreso de los developers juniors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deep learning&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Una vez que tenés claro el flujo de datos y entrenaste modelos clásicos con Scikit-learn, recién ahí tiene sentido entrar a deep learning. Las dos opciones principales son PyTorch y TensorFlow.&lt;/p&gt;

&lt;p&gt;PyTorch en 2026 domina en investigación y está ganando terreno fuerte en producción. Su modelo de ejecución es más intuitivo para quien viene de Python porque permite inspeccionar qué pasa en cada paso. TensorFlow tiene ventajas en despliegue a escala, con herramientas como TensorFlow Serving y TFLite para móviles. Keras está integrada como la API de alto nivel de TensorFlow y reduce bastante el boilerplate.&lt;/p&gt;

&lt;p&gt;Para un junior que arranca, PyTorch es el camino más recomendado hoy porque tiene más recursos de aprendizaje modernos y es el que más se usa en el ecosistema open source.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Modelos de lenguaje y NLP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hugging Face Transformers es la librería estándar para trabajar con modelos de lenguaje preentrenados. Modelos como BERT, GPT y sus variantes están disponibles con pocas líneas de código. Para proyectos que necesitan procesar texto en volumen o integrar un LLM, es el punto de entrada correcto.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;transformers&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pipeline&lt;/span&gt;

&lt;span class="n"&gt;clasificador&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;pipeline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sentiment-analysis&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;resultado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;clasificador&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Este artículo es muy útil&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Un roadmap realista en tiempo
&lt;/h2&gt;

&lt;p&gt;Si podés dedicarle entre una y dos horas por día, esta es una progresión que podrías seguir:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Semanas 1 y 2: bases de Python si no las tenés sólidas. Variables, funciones, listas, diccionarios, clases básicas. Sin esto, todo lo demás se complica.&lt;/li&gt;
&lt;li&gt;Semanas 3 y 4: NumPy y Pandas con datasets reales. Kaggle tiene datasets gratuitos para practicar desde el primer día.&lt;/li&gt;
&lt;li&gt;Semana 5: visualización con Matplotlib y Seaborn. No necesitás profundizar mucho, con poder graficar distribuciones y correlaciones alcanza.&lt;/li&gt;
&lt;li&gt;Semanas 6 al 8: Scikit-learn. Regresión lineal, árboles de decisión, evaluación de modelos con train-test split y métricas como accuracy, RMSE y F1.&lt;/li&gt;
&lt;li&gt;Semanas 9 al 12: introducción a PyTorch. Tensores, autograd, tu primera red neuronal.&lt;/li&gt;
&lt;li&gt;Semanas 13 en adelante: proyectos propios. Un clasificador de imágenes, un modelo que predice algo que te interese, un chatbot básico. El portfolio importa más que los cursos.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lo que no necesitás aprender todavía
&lt;/h2&gt;

&lt;p&gt;LangChain, LlamaIndex, MLflow, Ray, Spark, Airflow. Son herramientas reales y muy usadas en producción, pero son para cuando ya sabés construir y evaluar modelos. Aprenderlas antes es como aprender a hacer pit stop en Fórmula 1 antes de aprender a manejar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dónde practicar gratis desde hoy
&lt;/h2&gt;

&lt;p&gt;Kaggle tiene cursos cortos de Python, Pandas y machine learning completamente gratuitos, con entorno de notebooks en el navegador sin instalar nada. Fast.ai tiene un curso de deep learning que es probablemente el mejor recurso gratuito para pasar de Scikit-learn a PyTorch. Microsoft Learn también tiene rutas de aprendizaje sobre Python e IA que podés seguir a tu ritmo:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://learn.microsoft.com/training/browse/?filter-products=python&amp;amp;terms=python&amp;amp;wt.mc_id=studentamb_510930" rel="noopener noreferrer"&gt;https://learn.microsoft.com/training/browse/?filter-products=python&amp;amp;terms=python&amp;amp;wt.mc_id=studentamb_510930&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;El camino no es corto, pero tampoco es imposible. La clave es ir en orden y no saltar a deep learning antes de tener claro cómo funciona un pipeline de datos. Los developers que más rápido avanzan no son los que leen más, son los que construyen cosas desde el primer mes aunque sean simples.&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>machinelearning</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Microsoft 365 Copilot para developers en 2026, lo que de verdad podés construir</title>
      <dc:creator>Carlos José Castro Galante</dc:creator>
      <pubDate>Mon, 27 Apr 2026 01:23:07 +0000</pubDate>
      <link>https://dev.to/carlosjcastrog/microsoft-365-copilot-para-developers-en-2026-lo-que-de-verdad-podes-construir-1886</link>
      <guid>https://dev.to/carlosjcastrog/microsoft-365-copilot-para-developers-en-2026-lo-que-de-verdad-podes-construir-1886</guid>
      <description>&lt;p&gt;Hace unos días publiqué algo sobre GitHub Copilot. Hoy quiero hablar del primo menos entendido pero igual de potente: Microsoft 365 Copilot. La diferencia central es que GitHub Copilot vive en tu IDE y te ayuda a escribir código, mientras que Microsoft 365 Copilot vive dentro de Word, Excel, PowerPoint, Outlook, Teams y SharePoint, y trabaja con los datos reales del negocio. Para quienes desarrollamos, eso abre una superficie de extensibilidad enorme que no termina de explicarse en los anuncios de marketing. Este post intenta dar una imagen precisa de qué podés construir hoy, qué herramientas usar y qué decisiones técnicas vas a tener que tomar.&lt;/p&gt;

&lt;h2&gt;
  
  
  La división fundamental, declarative agents vs custom engine agents
&lt;/h2&gt;

&lt;p&gt;Microsoft tiene dos formas de extender Copilot, y elegir la correcta es la decisión más importante del proyecto.&lt;/p&gt;

&lt;p&gt;Un &lt;strong&gt;declarative agent&lt;/strong&gt; es una versión personalizada de Microsoft 365 Copilot. Vos no traés tu propio modelo ni tu propia orquestación: usás el orquestador, los modelos foundation y la infraestructura de Copilot, pero le declarás instrucciones específicas, conocimiento adicional y acciones que puede ejecutar. En la práctica, es un archivo JSON, el manifest, que le dice a Copilot cómo comportarse para un escenario concreto. No requiere hosting propio, hereda toda la seguridad y compliance de Microsoft 365, y se siente como Copilot porque corre dentro de la misma interfaz.&lt;/p&gt;

&lt;p&gt;Un &lt;strong&gt;custom engine agent&lt;/strong&gt; es lo opuesto en términos de control. Vos traés tu propio orquestador, podés elegir el modelo (Azure OpenAI, otro modelo de Foundry, lo que sea), usar frameworks como Semantic Kernel o LangChain, y desplegarlo a múltiples canales: Microsoft 365 Copilot, Teams, web, custom apps. Requiere hosting propio en Azure, lo pagás vos, y tenés que asegurar compliance y políticas de IA responsable por tu cuenta.&lt;/p&gt;

&lt;p&gt;La regla práctica que sigo: si la pregunta es responder algo basado en datos de la organización con tono y reglas específicas, declarative agent. Si necesitás workflows multi-paso complejos, mensajes proactivos sin que el usuario haga nada, UI custom con Adaptive Cards interactivas, o usuarios sin licencia de Copilot, custom engine agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lo que cambió fuerte en 2026
&lt;/h2&gt;

&lt;p&gt;El primer cambio de fondo es el soporte oficial de &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; dentro de declarative agents. Hasta hace poco, conectar tu agente a un servicio externo significaba escribir un OpenAPI spec, configurar autenticación a mano, y rezar para que el orchestrator lo invocara. Con MCP, le pasás al Agents Toolkit la URL de tu MCP server, el toolkit descubre las tools disponibles, genera el plugin spec y conecta todo. La barrera de entrada para integrar un servicio externo bajó de "una semana de configuración" a "unos minutos".&lt;/p&gt;

&lt;p&gt;El segundo cambio relevante es &lt;strong&gt;MCP Apps y OpenAI Apps SDK&lt;/strong&gt;. Ahora podés agregar widgets de UI interactivos a tus declarative agents extendiendo acciones basadas en MCP servers. Los widgets se renderizan inline o en pantalla completa dentro de Microsoft 365 Copilot. Esto resuelve una de las grandes limitaciones históricas de los declarative agents, que eran solo texto.&lt;/p&gt;

&lt;p&gt;El tercer cambio es el &lt;strong&gt;plugin Microsoft 365 Agents Toolkit para Claude Code y GitHub Copilot CLI&lt;/strong&gt;, parte del paquete microsoft/work-iq. Te permite hacer scaffolding, configurar y desplegar un declarative agent completo (incluido MCP server, autenticación y widget) usando lenguaje natural en la terminal. Está en preview, requiere consentimiento de admin, pero cambia el dev loop radicalmente.&lt;/p&gt;

&lt;p&gt;El cuarto detalle importante es que el &lt;strong&gt;TeamsFx SDK está siendo deprecado&lt;/strong&gt;. Su deprecación completa está planeada para julio de 2026. Si arrancás un proyecto nuevo, no uses TeamsFx, usá Microsoft 365 Agents SDK directamente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Las herramientas que vas a usar
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Microsoft 365 Agents Toolkit&lt;/strong&gt; es la extensión para Visual Studio Code y Visual Studio. Es una evolución del antes llamado Teams Toolkit. Incluye scaffolding, debugging, deployment, integración con Microsoft 365 Agents SDK, Azure AI Foundry y TypeSpec para Copilot. Si vas pro-code, este es el punto de entrada.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microsoft 365 Agents SDK&lt;/strong&gt; es el framework para construir custom engine agents full-stack y multicanal. Es agnóstico al modelo de IA, así que podés combinar Azure OpenAI, modelos open source de Foundry, o lo que necesites. El repositorio oficial está en github.com/microsoft/Agents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Copilot Studio&lt;/strong&gt; es la opción low-code. Funciona como SaaS gestionado, no necesitás manejar infraestructura, y es ideal cuando el equipo no es full developer o cuando querés iterar rápido. Soporta tanto declarative agents como custom engine agents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microsoft 365 Agents Playground&lt;/strong&gt; es un entorno sandbox web para testear agentes localmente sin necesidad de un tenant de developer ni servicios de tunneling. Esto soluciona un dolor de cabeza histórico de Teams development.&lt;/p&gt;

&lt;h2&gt;
  
  
  El stack mental para tomar decisiones
&lt;/h2&gt;

&lt;p&gt;Antes de elegir tooling, conviene responder cuatro preguntas en orden.&lt;/p&gt;

&lt;p&gt;Primero, ¿tus usuarios tienen licencia de Microsoft 365 Copilot? Si la respuesta es no para una porción significativa, los declarative agents quedan limitados o directamente fuera de juego, y vas a custom engine agents donde el costo se mide por consumo de Azure.&lt;/p&gt;

&lt;p&gt;Segundo, ¿necesitás un modelo específico distinto de los que usa Copilot? Si la respuesta es sí, custom engine. Si los modelos que ya trae Copilot te alcanzan, declarative simplifica todo.&lt;/p&gt;

&lt;p&gt;Tercero, ¿el agente necesita iniciar conversaciones por su cuenta o ejecutar acciones sin que el usuario lo invoque? Si la respuesta es sí, custom engine, porque los declarative agents son siempre user-initiated.&lt;/p&gt;

&lt;p&gt;Cuarto, ¿el agente tiene que correr fuera del ecosistema Microsoft 365? Si necesitás soporte de portales custom, web pública, canales externos, custom engine te lo permite, declarative no.&lt;/p&gt;

&lt;p&gt;Cuando las cuatro respuestas apuntan a declarative, declarative gana sin discusión, porque es más rápido de construir, más barato, y hereda toda la seguridad de Microsoft 365 sin que vos tengas que diseñar nada.&lt;/p&gt;

&lt;h2&gt;
  
  
  Costos sin maquillaje
&lt;/h2&gt;

&lt;p&gt;Los declarative agents no incurren costos adicionales de hosting porque corren sobre la infraestructura de Copilot. Los usuarios sin licencia de Copilot pueden acceder a custom engine agents en Microsoft 365 Copilot Chat, pero pueden incurrir cargos pay-as-you-go si el agente interactúa con datos del tenant (SharePoint o Microsoft 365 Copilot connectors), basado en los meters de Copilot Studio.&lt;/p&gt;

&lt;p&gt;Los custom engine agents corren con tu propia orquestación y modelos, así que pagás Azure AI Services por la inferencia, Azure App Service o equivalente para hosting, y opcionalmente Azure Bot Service si los publicás en múltiples canales. El costo total varía con la complejidad de orquestación y el volumen de inferencias.&lt;/p&gt;

&lt;p&gt;Para builders que están armando declarative agents, no necesitás una licencia de Copilot Studio si solo construís agentes. Si querés grounding en datos organizacionales, necesitás licencia o consumo metering en el tenant.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué stack elegir hoy según tu caso
&lt;/h2&gt;

&lt;p&gt;Si arrancás de cero y tu agente vive dentro del ecosistema Microsoft 365, abrí Visual Studio Code con la extensión Microsoft 365 Agents Toolkit, elegí declarative agent, conectalo a un MCP server si necesitás integraciones externas, y desplegalo. Es el camino más rápido.&lt;/p&gt;

&lt;p&gt;Si necesitás integrar modelos custom o lógica compleja, usá Microsoft 365 Agents SDK con TypeScript o Python, montalo en Azure App Service con Azure AI Foundry como backend de modelos, y publicalo a Microsoft 365 Copilot, Teams y los canales que precises. El SDK ya trae los componentes para state, storage, y manejo de actividades.&lt;/p&gt;

&lt;p&gt;Si el equipo no es full developer pero el caso de uso es claro, Copilot Studio te lleva de cero a producción sin escribir tanto código. Es especialmente potente para agentes conversacionales con flujos definidos.&lt;/p&gt;

&lt;h2&gt;
  
  
  El detalle que casi nadie menciona
&lt;/h2&gt;

&lt;p&gt;Microsoft 365 Copilot no es solo una herramienta de productividad, es una plataforma de extensibilidad. La mayoría de los artículos que leés online se quedan en la capa de usuario final, mostrando cómo Copilot resume reuniones o redacta correos. La capa de developer es donde está el trabajo serio: agentes que conectan datos de línea de negocio, automatizan workflows que antes requerían ingeniería compleja, y exponen capacidades de IA dentro del flujo natural del trabajo.&lt;/p&gt;

&lt;p&gt;Para quienes venimos del mundo de Azure AI, esto representa una continuidad lógica. Las certificaciones AI-102 y la próxima AI-103 cubren exactamente este territorio: cómo orquestar IA en escenarios de negocio reales. Y Microsoft 365 Copilot es uno de los lugares más concretos donde esa orquestación se traduce en valor inmediato.&lt;/p&gt;

&lt;p&gt;Si querés explorar la documentación oficial de extensibilidad de Microsoft 365 Copilot, este es el punto de entrada con todos los recursos para developers, agentes, MCP, conectores y más:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://learn.microsoft.com/microsoft-365/copilot/?wt.mc_id=studentamb_510930" rel="noopener noreferrer"&gt;https://learn.microsoft.com/microsoft-365/copilot/?wt.mc_id=studentamb_510930&lt;/a&gt;&lt;/p&gt;

</description>
      <category>microsoft</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>GitHub Copilot in 2026 is not what you think it is anymore</title>
      <dc:creator>Carlos José Castro Galante</dc:creator>
      <pubDate>Sat, 18 Apr 2026 01:31:28 +0000</pubDate>
      <link>https://dev.to/carlosjcastrog/github-copilot-in-2026-is-not-what-you-think-it-is-anymore-ij3</link>
      <guid>https://dev.to/carlosjcastrog/github-copilot-in-2026-is-not-what-you-think-it-is-anymore-ij3</guid>
      <description>&lt;p&gt;If you still think of GitHub Copilot as "the thing that autocompletes your code," you're about two years behind. That's not a criticism - the product has changed faster than most people's mental models of it. This post is an attempt to give you an accurate picture of what Copilot actually is right now, what the research says about its impact, and where the real limits are.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does under the hood
&lt;/h2&gt;

&lt;p&gt;Every time Copilot generates a suggestion, it builds a prompt from whatever context it can gather: the code around your cursor, other open tabs, your repo's URL, any custom instruction files you've set up, and - if you've configured them - indexed repository content or attached data from MCP servers. That prompt goes over TLS to GitHub's Copilot proxy, which handles authentication, content filtering, public-code-match checks, and rate limiting. Then it routes to whatever model you've selected.&lt;/p&gt;

&lt;p&gt;Inline completions use a Fill-in-the-Middle (FIM) approach, meaning the model sees both the code before and after the cursor rather than just a prefix. GitHub ran A/B tests on this and found it lifted accepted completions by around 10%. In 2024 they also swapped out the original completion backend for a custom-trained model that reduced latency by 35%, delivered 12% higher acceptance rates, and tripled throughput.&lt;/p&gt;

&lt;h2&gt;
  
  
  The feature surface in 2026
&lt;/h2&gt;

&lt;p&gt;Copilot has expanded from one feature (inline completions) to something that looks more like a platform.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next Edit Suggestions&lt;/strong&gt; - available since April 2025 in VS Code, Xcode, and Eclipse - predicts where in the file you're going to edit next, not just what comes after the cursor. It's a subtle difference but it changes how you move through a codebase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Copilot Edits / multi-file edit mode&lt;/strong&gt; reached GA in February 2025. It uses a dual-model architecture: one model proposes the changes, a speculative-decoding endpoint applies them fast. You describe what you want at the level of a task, and it touches as many files as needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent mode&lt;/strong&gt; is what changed the product's identity. It's available in VS Code, Visual Studio, JetBrains, Eclipse, and Xcode. In agent mode, Copilot picks the files to touch, proposes terminal commands, runs them, reads the output, and iterates. It keeps going until the task is done or it gets stuck. When GitHub announced it with Claude 3.7 Sonnet in April 2025, it posted a 56% pass rate on SWE-bench Verified.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;cloud agent&lt;/strong&gt; (launched GA in September 2025) is the async version. You assign a GitHub issue to Copilot from the web or CLI, and it runs inside a sandboxed GitHub Actions environment, pushes commits to a draft PR, runs your tests, and requests your review when done. You don't have to be at your desk.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Copilot CLI&lt;/strong&gt; reached GA in February 2026. It's a separate install (npm, Homebrew, or WinGet) that brings a Plan mode, a fully autonomous Autopilot mode, parallel specialized sub-agents (Explore, Task, Code Review, Plan), repository memory across sessions, hooks, plugins, and a built-in GitHub MCP server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Copilot code review&lt;/strong&gt; reached GA in April 2025 and was rearchitected at GitHub Universe 2025 to combine LLM reasoning with deterministic engines like ESLint and CodeQL. In December 2025 it was extended so that PRs from unlicensed contributors in an org can still be reviewed, billed to the org.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Copilot Spaces&lt;/strong&gt; (GA September 2025) are curated bundles of files, issues, PRs, and docs that act as grounding context for any Copilot surface.&lt;/p&gt;

&lt;p&gt;On customization: you can set a &lt;code&gt;.github/copilot-instructions.md&lt;/code&gt; at the repo level, personal or org-level instructions, and since Universe 2025 an &lt;code&gt;AGENTS.md&lt;/code&gt; file that defines custom agents with their own tool sets and behavior per project. MCP has become the primary extension mechanism - servers get invoked automatically based on intent rather than requiring explicit calls.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it runs
&lt;/h2&gt;

&lt;p&gt;Inline completions are supported in VS Code, Visual Studio, JetBrains IDEs, Eclipse, Xcode, Vim/Neovim, and Azure Data Studio. Chat runs in VS Code, Visual Studio, JetBrains, Eclipse, Xcode, GitHub.com, GitHub Mobile, Windows Terminal, and Raycast. Agent mode is in VS Code, Visual Studio, JetBrains, Eclipse, and Xcode. Vim/Neovim gets completions only - no chat. The CLI is cross-platform but not available on the Free tier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Plans and pricing, without the marketing
&lt;/h2&gt;

&lt;p&gt;There are five tiers. The Free plan launched in December 2024 with 2,000 completions and 50 premium requests per month. The Student plan is free for verified GitHub Education users and gives unlimited completions with 300 premium requests. Pro is $10/month (or $100/year) with unlimited completions and 300 premium requests - it includes agent mode, the cloud agent, the CLI, and MCP. Pro+ is $39/month with 1,500 premium requests and access to every available model, including preview models as they ship. Business is $19/user/month (300 premium requests per user, admin controls, audit logs, IP indemnity). Enterprise is $39/user/month (1,000 premium requests per user, organization-codebase indexing, a fine-tuned private completion model, and Bing-grounded web search in GitHub.com chat).&lt;/p&gt;

&lt;p&gt;Overages on every paid plan cost $0.04 per additional premium request. Base-model usage - inline completions, chat with the included models - doesn't count against the premium budget.&lt;/p&gt;

&lt;p&gt;One practical note: &lt;strong&gt;Copilot is not available on GitHub Enterprise Server&lt;/strong&gt;, only on GitHub Enterprise Cloud. That surprises a lot of enterprise architects.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the productivity data actually says
&lt;/h2&gt;

&lt;p&gt;I want to be careful here because the numbers that circulate online are often decontextualized.&lt;/p&gt;

&lt;p&gt;The most cited study is Peng et al. (2022, arXiv:2302.06590). Ninety-five developers on Upwork were randomly split and asked to implement an HTTP server in JavaScript. The Copilot group finished in 1 hour 11 minutes on average; the control group took 2 hours 41 minutes. That's a 55.8% speedup, statistically significant (P=0.0017). Less experienced developers, older developers, and those with higher baseline workloads benefited most. The task was narrow and the sample was controlled, so this number describes one context, not all development work.&lt;/p&gt;

&lt;p&gt;The GitHub × Accenture randomized controlled trial is the strongest enterprise evidence. Across roughly 450 Accenture developers, Copilot produced an 8.69% increase in pull requests per developer, a 15% increase in PR merge rate, and an 84% increase in successful builds. About 30% of Copilot suggestions were accepted, and 88% of accepted characters were retained. Accenture has since rolled Copilot out to more than 12,000 developers.&lt;/p&gt;

&lt;p&gt;A ZoomInfo field study (arXiv:2501.13282) covering 400+ developers through a four-phase rollout found a 33% full-suggestion acceptance rate, a 20% line-of-code acceptance rate, and 72% developer satisfaction.&lt;/p&gt;

&lt;p&gt;The numbers I'd avoid citing without sourcing are the "46% of code written by Copilot" and "15 million users" figures - they come from press announcements rather than controlled studies. The Forrester ROI figures are real but behind a paywall; if you want to cite them, get the original study.&lt;/p&gt;

&lt;h2&gt;
  
  
  The direction things are going
&lt;/h2&gt;

&lt;p&gt;At GitHub Universe 2025, GitHub announced &lt;strong&gt;Agent HQ&lt;/strong&gt;, a control plane that orchestrates agents from Anthropic, OpenAI, Google, Cognition, and xAI across GitHub, VS Code, CLI, and Mobile under a single Copilot subscription. The framing was explicit: Copilot is positioning itself as the interface for all coding agents, not just the home for GitHub's own.&lt;/p&gt;

&lt;p&gt;The economic model is also shifting. Every paid tier includes unlimited use of a base model with a monthly premium-request budget for frontier calls. As frontier models become cheaper, more of them will probably move into the base tier. For now, the budget disciplines how much you use the most powerful models per month.&lt;/p&gt;

&lt;p&gt;If there's one sentence that captures where Copilot is in 2026: it's not a product anymore, it's an orchestration layer. Completions, chat, edits, in-IDE agents, the CLI, and the cloud agent are points on a continuum from "suggest what comes next" to "go do this task and tell me when you're done." The underlying model changes constantly. What stays stable is the interface - and increasingly, the agents you define yourself.&lt;/p&gt;




&lt;p&gt;If you want to dive deeper into Copilot's learning resources, Microsoft Learn has a full set of modules and learning paths covering everything from setup to agent mode and responsible AI:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://learn.microsoft.com/copilot?wt.mc_id=studentamb_510930" rel="noopener noreferrer"&gt;https://learn.microsoft.com/copilot?wt.mc_id=studentamb_510930&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Carlos José Castro Galante is a Full Stack Developer and Azure AI Engineer certified by Microsoft (AI-102, AI-900, AZ-900) and ITBA. Available for freelance projects from Argentina.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>githubcopilot</category>
      <category>ai</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Cómo preparé y aprobé la certificación Azure AI Engineer Associate (AI-102)</title>
      <dc:creator>Carlos José Castro Galante</dc:creator>
      <pubDate>Fri, 10 Apr 2026 22:21:55 +0000</pubDate>
      <link>https://dev.to/carlosjcastrog/como-prepare-y-aprobe-la-certificacion-azure-ai-engineer-associate-ai-102-ba5</link>
      <guid>https://dev.to/carlosjcastrog/como-prepare-y-aprobe-la-certificacion-azure-ai-engineer-associate-ai-102-ba5</guid>
      <description>&lt;p&gt;&lt;strong&gt;Por Carlos José Castro Galante - Full Stack Developer &amp;amp; Azure AI Engineer | Argentina&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;Obtener la certificación &lt;strong&gt;Microsoft Certified: Azure AI Engineer Associate (AI-102)&lt;/strong&gt; fue uno de los pasos más importantes en mi carrera como desarrollador. En este artículo te cuento exactamente cómo lo hice: desde cómo conseguí el voucher hasta el día del examen, con total honestidad sobre lo que funcionó y lo que me costó más de lo esperado. Y al final te cuento algo que cambia completamente el panorama para quien esté pensando en certificarse hoy.&lt;/p&gt;




&lt;h2&gt;
  
  
  Un poco de contexto
&lt;/h2&gt;

&lt;p&gt;Antes de rendir el AI-102, ya tenía la &lt;strong&gt;AZ-900 (Azure Fundamentals)&lt;/strong&gt;, y eso marcó una diferencia enorme. Mi recomendación siempre va a ser la misma: si vas a certificarte en Azure, empezá por la AZ-900. No es un requisito formal, pero sí es la base conceptual de toda la plataforma. Sin ella, muchos conceptos del AI-102 se vuelven confusos innecesariamente, y terminás aprendiendo dos cosas a la vez en lugar de una.&lt;/p&gt;

&lt;p&gt;La AZ-900 me dio el mapa general de Azure: qué es una suscripción, cómo funciona el portal, qué son los recursos y los grupos de recursos, cómo se organiza la plataforma en términos generales. Con esa base, cuando llegué al AI-102 pude enfocarme en profundizar en inteligencia artificial en lugar de estar aprendiendo Azure desde cero al mismo tiempo.&lt;/p&gt;




&lt;h2&gt;
  
  
  Cómo conseguí el voucher
&lt;/h2&gt;

&lt;p&gt;El voucher para el examen lo obtuve a través del &lt;strong&gt;Bootcamp de Azure AI-102 de Código Facilito&lt;/strong&gt;. Para quienes no lo conocen, Código Facilito es una plataforma latinoamericana de educación tecnológica que organiza bootcamps enfocados en preparación para certificaciones Microsoft. El programa incluye clases en vivo, material de estudio y, al completarlo, el voucher para rendir el examen oficial.&lt;/p&gt;

&lt;p&gt;Esto es relevante porque el examen de Microsoft tiene un costo en dólares que puede ser significativo desde Argentina. Poder acceder al voucher a través de un bootcamp es una vía muy concreta para reducir esa barrera de entrada, y es algo que genuinamente agradezco haber encontrado.&lt;/p&gt;




&lt;h2&gt;
  
  
  Cuánto tiempo estudié y cómo lo organicé
&lt;/h2&gt;

&lt;p&gt;Me dediqué &lt;strong&gt;dos meses&lt;/strong&gt; de preparación antes de rendir. Fui bastante sistemático con el material, aunque no seguí un horario rígido, sino que avancé a mi ritmo tratando de entender bien cada tema antes de pasar al siguiente.&lt;/p&gt;

&lt;p&gt;El material de &lt;strong&gt;Código Facilito&lt;/strong&gt; fue la columna vertebral del estudio. Las clases del bootcamp cubren el temario del examen de forma estructurada y orientada a lo que Microsoft realmente evalúa, lo cual ahorra mucho tiempo de no saber por dónde empezar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microsoft Learn&lt;/strong&gt; es indispensable y completamente gratuito. Tiene rutas de aprendizaje específicas para el AI-102 con módulos interactivos, ejercicios en sandbox y preguntas de práctica. Si tuviera que elegir solo un recurso, sería este.&lt;/p&gt;

&lt;p&gt;También usé &lt;strong&gt;videos en YouTube&lt;/strong&gt; para reforzar conceptos específicos, especialmente para ver demostraciones prácticas de servicios como Azure OpenAI, Azure Cognitive Search o Language Studio. Ver los servicios en acción muchas veces explica en cinco minutos lo que un documento tarda páginas en describir.&lt;/p&gt;

&lt;p&gt;Y acá quiero hacer una aclaración importante: &lt;strong&gt;practicar vale más que solo leer&lt;/strong&gt;. El AI-102 no es un examen que se aprueba memorizando definiciones. Las preguntas son de escenarios reales, y Microsoft tiene un banco de preguntas enormemente amplio y muy aleatorio, lo que significa que nunca sabés exactamente qué combinación de preguntas te va a tocar. La única forma de estar preparado para eso es haber practicado lo suficiente como para entender los conceptos de verdad, no solo haberlos leído. Entrar al portal de Azure, crear recursos, probar los servicios, romper cosas y entender por qué fallaron, eso es lo que realmente te prepara.&lt;/p&gt;




&lt;h2&gt;
  
  
  El temario del AI-102: qué cubre el examen
&lt;/h2&gt;

&lt;p&gt;El examen abarca un abanico amplio de servicios de IA en Azure. Los grandes bloques son los siguientes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Soluciones de visión por computadora&lt;/strong&gt; con Azure Computer Vision, Azure Custom Vision y Face API. Conceptos como análisis de imágenes, detección de objetos, OCR y reconocimiento facial.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Procesamiento de lenguaje natural (NLP)&lt;/strong&gt; con Azure AI Language, análisis de sentimientos, extracción de entidades, clasificación de texto y traducción con Azure Translator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Minería de conocimiento&lt;/strong&gt; con Azure Cognitive Search, indexación de documentos, enriquecimiento con IA y skillsets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inteligencia artificial conversacional&lt;/strong&gt; con Azure Bot Service y QnA Maker, ahora integrado en Language Studio, junto con el diseño de flujos conversacionales.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Azure OpenAI&lt;/strong&gt;, que incluye modelos de lenguaje grande, integración de GPT en aplicaciones, prompts y embeddings. Este bloque fue incorporado más recientemente al examen y tiene un peso cada vez más importante.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Responsabilidad en IA&lt;/strong&gt;, porque Microsoft no solo evalúa lo técnico. Hay preguntas conceptuales sobre principios éticos, fairness, transparencia y privacidad en sistemas de IA. Es un bloque que no hay que subestimar.&lt;/p&gt;




&lt;h2&gt;
  
  
  Los temas que más me costaron
&lt;/h2&gt;

&lt;p&gt;Siendo completamente honesto, hubo dos bloques que me llevaron más tiempo que el resto.&lt;/p&gt;

&lt;p&gt;El primero fue &lt;strong&gt;Azure Cognitive Search&lt;/strong&gt;. La arquitectura de indexación, los skillsets de enriquecimiento y cómo se conectan todos los componentes entre sí (datasource, indexer, index, skillset) no es intuitiva la primera vez que la ves. Tuve que releerlo varias veces y hacer ejercicios prácticos en el portal hasta que empezó a tener sentido como sistema.&lt;/p&gt;

&lt;p&gt;El segundo fue &lt;strong&gt;Azure OpenAI&lt;/strong&gt;, no por dificultad técnica sino porque el servicio evolucionó muy rápido y parte del material disponible en internet estaba desactualizado al momento de estudiar. Acá confiar en la documentación oficial de Microsoft Learn fue fundamental, porque es lo que Microsoft actualiza primero.&lt;/p&gt;




&lt;h2&gt;
  
  
  Rendir en inglés o en español
&lt;/h2&gt;

&lt;p&gt;Elegí rendir el examen &lt;strong&gt;en inglés&lt;/strong&gt; y lo recomiendo. Las traducciones al español de los exámenes de Microsoft no siempre son precisas, algunos términos técnicos pierden matiz o se traducen de forma que genera confusión innecesaria. Si tenés un nivel de inglés técnico suficiente para leer documentación, rendilo en inglés. Vale la pena.&lt;/p&gt;




&lt;h2&gt;
  
  
  Lo aprobé al primer intento
&lt;/h2&gt;

&lt;p&gt;Sí, lo aprobé al primer intento. No lo digo para presumir sino para que quede claro que con dos meses de preparación consistente y los recursos correctos es completamente alcanzable, incluso desde Argentina y sin acceso a laboratorios empresariales de Azure. La clave estuvo en combinar teoría con práctica real desde el principio, no esperar a "terminar de estudiar" para tocar el portal.&lt;/p&gt;




&lt;h2&gt;
  
  
  Recursos que recomiendo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Código Facilito&lt;/strong&gt; para el bootcamp y el voucher: &lt;a href="https://codigofacilito.com" rel="noopener noreferrer"&gt;codigofacilito.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microsoft Learn, ruta AI-102&lt;/strong&gt;: &lt;a href="https://learn.microsoft.com/es-es/credentials/certifications/azure-ai-engineer" rel="noopener noreferrer"&gt;learn.microsoft.com/es-es/credentials/certifications/azure-ai-engineer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Portal de Azure&lt;/strong&gt; con una cuenta gratuita para practicar. Muchas preguntas del examen son de escenarios prácticos y nada reemplaza haber usado los servicios de primera mano.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;YouTube&lt;/strong&gt; para ver demostraciones de Language Studio, Vision Studio y Azure OpenAI Studio. Ver los servicios en acción complementa muy bien la lectura de documentación.&lt;/p&gt;




&lt;h2&gt;
  
  
  Lo que viene: el AI-102 se retira el 30 de junio de 2026
&lt;/h2&gt;

&lt;p&gt;Y acá viene la parte que más importa si estás leyendo esto en 2026: &lt;strong&gt;el AI-102 se retira definitivamente el 30 de junio de 2026&lt;/strong&gt;. A partir de esa fecha no vas a poder rendirlo, repetirlo ni renovarlo. Es una fecha dura, sin excepciones.&lt;/p&gt;

&lt;p&gt;Microsoft lo confirmó oficialmente en su página de Microsoft Learn: &lt;em&gt;"This certification, related exam, and renewal assessments will retire on June 30, 2026. You will no longer be able to earn or renew this certification after this date."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Si ya tenés la certificación, no te preocupes: no se revoca ni se invalida. Sigue en tu transcript hasta su fecha de expiración natural. Pero si necesitás renovarla, tenés que hacerlo antes del 30 de junio, después de esa fecha la opción desaparece.&lt;/p&gt;

&lt;p&gt;Y si estás pensando en rendirlo recién ahora, siendo honesto: la ventana es muy corta y el mismo Microsoft recomienda prepararse para el nuevo examen en lugar del AI-102. Los materiales de entrenamiento oficiales del AI-102 ya se retiraron en abril de 2026, lo que complica bastante el estudio desde cero.&lt;/p&gt;




&lt;h2&gt;
  
  
  El reemplazo: AI-103, Azure AI App and Agent Developer
&lt;/h2&gt;

&lt;p&gt;El sucesor del AI-102 se llama &lt;strong&gt;AI-103: Azure AI App and Agent Developer Associate&lt;/strong&gt;, y ya tiene disponible su versión beta desde abril de 2026. La disponibilidad general se espera para junio de 2026, casi en simultáneo con el retiro del AI-102.&lt;/p&gt;

&lt;p&gt;Este cambio no es solo un número nuevo. Es un giro de fondo en lo que Microsoft espera de un AI Engineer hoy. Ya no alcanza con conocer los servicios de Azure o tener base en datos: el nuevo estándar exige saber &lt;strong&gt;cómo orquestar la inteligencia artificial en escenarios reales y en contextos de negocio&lt;/strong&gt;. Agentes autónomos, flujos de razonamiento en múltiples pasos, integración de modelos generativos en aplicaciones productivas, orquestación multi-agente, todo eso es lo que el AI-103 evalúa.&lt;/p&gt;

&lt;p&gt;La plataforma central del nuevo examen es &lt;strong&gt;Microsoft Foundry&lt;/strong&gt;, y el enfoque es desarrollo de aplicaciones de IA listas para producción, no solo conocimiento de los servicios. Es un salto de saber usar la IA a saber construir con ella a escala.&lt;/p&gt;

&lt;p&gt;Este cambio no me sorprende. La industria viene moviéndose exactamente en esa dirección y tiene mucho sentido que Microsoft actualice sus certificaciones para reflejarlo. Quien quiera mantenerse relevante en el ecosistema de Azure AI va a necesitar adaptarse a este nuevo estándar más temprano que tarde.&lt;/p&gt;




&lt;h2&gt;
  
  
  Para cerrar
&lt;/h2&gt;

&lt;p&gt;El AI-102 fue una certificación que valió cada hora de estudio. Me obligó a conocer en profundidad el ecosistema de IA de Azure, y eso se traduce en proyectos reales. Pero el mundo de la IA se mueve rápido, y Microsoft se está moviendo con él.&lt;/p&gt;

&lt;p&gt;Si estás empezando a prepararte hoy, mi consejo es claro: mirá directamente el AI-103. Asegurate de tener la AZ-900 como base, familiarizate con Microsoft Foundry y Azure AI Foundry, y enfocá tu estudio en escenarios agénticos y generativos. Es hacia donde va todo.&lt;/p&gt;

&lt;p&gt;Cualquier duda podés escribirme en &lt;a href="https://carlosjcastrog.com" rel="noopener noreferrer"&gt;carlosjcastrog.com&lt;/a&gt; o encontrarme en &lt;a href="https://www.linkedin.com/in/carlosjcastrog" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Carlos José Castro Galante es Desarrollador Full Stack y Azure AI Engineer certificado por Microsoft (AI-102, AI-900, AZ-900) e ITBA. Disponible para proyectos freelance desde Argentina.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>azure</category>
      <category>microsoft</category>
      <category>programming</category>
    </item>
    <item>
      <title>Building a Real Burger E-commerce Taught Me More Than Any Tutorial Ever Did</title>
      <dc:creator>Carlos José Castro Galante</dc:creator>
      <pubDate>Fri, 03 Apr 2026 18:52:00 +0000</pubDate>
      <link>https://dev.to/carlosjcastrog/building-a-real-burger-e-commerce-taught-me-more-than-any-tutorial-ever-did-3ggo</link>
      <guid>https://dev.to/carlosjcastrog/building-a-real-burger-e-commerce-taught-me-more-than-any-tutorial-ever-did-3ggo</guid>
      <description>&lt;p&gt;When I started this project, I thought I knew exactly what I was doing.&lt;/p&gt;

&lt;p&gt;A small burger place needed a digital menu, a way to take orders, and eventually accept payments. Nothing too ambitious. I had built interfaces before, worked with APIs, handled state.&lt;/p&gt;

&lt;p&gt;It felt like something I could finish quickly.&lt;/p&gt;

&lt;p&gt;That assumption didn’t last long.&lt;/p&gt;

&lt;p&gt;What looked like a simple menu turned into a constant series of small decisions that actually mattered. Not the kind you solve with a library or a tutorial, but the kind that come from dealing with real users and real constraints.&lt;/p&gt;




&lt;p&gt;The first thing that changed my perspective was the data.&lt;/p&gt;

&lt;p&gt;At the beginning, I treated products like static items. Name, price, image. Render a card and move on.&lt;/p&gt;

&lt;p&gt;But that model breaks almost immediately in a real scenario.&lt;/p&gt;

&lt;p&gt;Some burgers had multiple sizes. Others didn’t. Some had temporary discounts. Drinks were fixed. Combos mixed different rules. And then there was stock, which isn’t something you can fake if someone is actually trying to buy.&lt;/p&gt;

&lt;p&gt;The UI started getting messy, not because of styling, but because the data didn’t reflect reality.&lt;/p&gt;

&lt;p&gt;I had to step back and stop thinking in terms of components. The real problem wasn’t how things looked, but how things were defined.&lt;/p&gt;

&lt;p&gt;Once I restructured the data to describe behavior instead of just content, everything became easier to reason about. The UI stopped fighting back.&lt;/p&gt;




&lt;p&gt;Then came the cart.&lt;/p&gt;

&lt;p&gt;This is where things quietly fall apart if you’re not careful.&lt;/p&gt;

&lt;p&gt;Adding a product is easy. But a product with variations, custom notes, and dynamic pricing is not just “an item” anymore.&lt;/p&gt;

&lt;p&gt;At one point, too much of that logic lived inside components. It worked, but it was fragile. Every small change had side effects somewhere else.&lt;/p&gt;

&lt;p&gt;I moved that logic into a centralized context, not because it was trendy, but because I needed control.&lt;/p&gt;

&lt;p&gt;After that, the components became predictable again. They stopped being responsible for decisions and went back to doing what they should do: represent state.&lt;/p&gt;

&lt;p&gt;That shift made the whole app feel stable.&lt;/p&gt;




&lt;p&gt;The WhatsApp integration was another moment where expectations didn’t match reality.&lt;/p&gt;

&lt;p&gt;Technically, sending a message is trivial. It’s just a link.&lt;/p&gt;

&lt;p&gt;But what arrives on the other end matters more than how you send it.&lt;/p&gt;

&lt;p&gt;If the message is messy, incomplete, or hard to read, the business suffers. Orders get misunderstood. Time is lost. Mistakes happen.&lt;/p&gt;

&lt;p&gt;So instead of thinking about the integration itself, I focused on the output.&lt;/p&gt;

&lt;p&gt;I built a formatter that turns the cart into something structured and readable. Clear product names, quantities, totals, user info, delivery details.&lt;/p&gt;

&lt;p&gt;Now the message actually works for the person receiving it.&lt;/p&gt;

&lt;p&gt;That changed more than I expected.&lt;/p&gt;




&lt;p&gt;At some point I started looking into payments, specifically Mercado Pago.&lt;/p&gt;

&lt;p&gt;That’s when I realized something I had been ignoring.&lt;/p&gt;

&lt;p&gt;Payments don’t fix a bad flow.&lt;/p&gt;

&lt;p&gt;If the process is confusing, adding a payment button just makes things worse. People don’t complete what they don’t understand.&lt;/p&gt;

&lt;p&gt;So I paused that part and focused on making the ordering experience feel natural first. Clear steps, no surprises, no friction that didn’t need to exist.&lt;/p&gt;

&lt;p&gt;Only after that does it make sense to introduce payments.&lt;/p&gt;




&lt;p&gt;What this project really did was change how I approach building things.&lt;/p&gt;

&lt;p&gt;I stopped thinking in terms of “features” and started thinking in terms of behavior.&lt;/p&gt;

&lt;p&gt;I stopped assuming that a clean UI means a simple system.&lt;/p&gt;

&lt;p&gt;And more importantly, I stopped relying on ideal scenarios.&lt;/p&gt;

&lt;p&gt;Real users don’t follow perfect paths. They make unexpected choices, skip steps, change their minds. If your system can’t handle that, it doesn’t matter how good your code looks.&lt;/p&gt;




&lt;p&gt;I didn’t build something revolutionary.&lt;/p&gt;

&lt;p&gt;But I built something that works in a real environment, with real constraints, and that forced me to make better decisions than any tutorial ever did.&lt;/p&gt;

&lt;p&gt;And that, at least for me, was the part that actually mattered.&lt;/p&gt;




&lt;h2&gt;
  
  
  About me
&lt;/h2&gt;

&lt;p&gt;I’m Carlos José Castro Galante, a software developer focused on building real-world applications that combine frontend, automation, and practical AI.&lt;/p&gt;

</description>
      <category>react</category>
      <category>typescript</category>
      <category>webdev</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Python Data Analysis Project: Building a Learning Radar for Educational Insights</title>
      <dc:creator>Carlos José Castro Galante</dc:creator>
      <pubDate>Tue, 31 Mar 2026 20:50:17 +0000</pubDate>
      <link>https://dev.to/carlosjcastrog/python-data-analysis-project-building-a-learning-radar-for-educational-insights-3c8j</link>
      <guid>https://dev.to/carlosjcastrog/python-data-analysis-project-building-a-learning-radar-for-educational-insights-3c8j</guid>
      <description>&lt;p&gt;If you are learning Python and data science, one of the best ways to grow is by building real world projects. In this article I will show how I built a complete data analysis project using Python to extract insights from online education data.&lt;/p&gt;

&lt;p&gt;This is not a typical beginner project. The goal was to create something useful, scalable, and portfolio ready.&lt;/p&gt;

&lt;p&gt;The result is Learning Radar, a data driven system designed to analyze course reviews and help understand what really makes an online course valuable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why build a data analysis project like this&lt;/strong&gt;&lt;br&gt;
Most Python data science tutorials focus on small datasets and simple examples. In real scenarios, data is messy, large, and comes from different sources.&lt;/p&gt;

&lt;p&gt;This project focuses on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Working with large datasets&lt;/li&gt;
&lt;li&gt;Cleaning and transforming real data&lt;/li&gt;
&lt;li&gt;Performing exploratory data analysis&lt;/li&gt;
&lt;li&gt;Creating meaningful data visualizations&lt;/li&gt;
&lt;li&gt;Generating insights that solve real problems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is designed to reflect real data science workflows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project goal&lt;/strong&gt;&lt;br&gt;
The main objective was to analyze thousands of course reviews and answer key questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What factors influence course ratings&lt;/li&gt;
&lt;li&gt;How difficulty impacts student satisfaction&lt;/li&gt;
&lt;li&gt;Which categories perform better&lt;/li&gt;
&lt;li&gt;What patterns exist in user feedback&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of just analyzing data, I focused on building an educational intelligence tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dataset and data sources&lt;/strong&gt;&lt;br&gt;
To meet the requirement of working with more than 50000 rows, I combined multiple public datasets related to online courses.&lt;/p&gt;

&lt;p&gt;The final dataset includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Course title&lt;/li&gt;
&lt;li&gt;Category&lt;/li&gt;
&lt;li&gt;Rating&lt;/li&gt;
&lt;li&gt;Review text&lt;/li&gt;
&lt;li&gt;Difficulty level&lt;/li&gt;
&lt;li&gt;Engagement indicators&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Combining datasets allowed me to create a richer and more useful analysis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data cleaning and preprocessing in Python&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Data cleaning is one of the most important steps in any data science project.&lt;/p&gt;

&lt;p&gt;I used Python and Pandas to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remove missing values&lt;/li&gt;
&lt;li&gt;Normalize column names&lt;/li&gt;
&lt;li&gt;Convert data types&lt;/li&gt;
&lt;li&gt;Clean text data from reviews&lt;/li&gt;
&lt;li&gt;Remove duplicates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also created new features to improve analysis:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Review length&lt;/li&gt;
&lt;li&gt;Rating groups&lt;/li&gt;
&lt;li&gt;Difficulty mapping&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This step ensures accuracy and consistency in the results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exploratory Data Analysis with Pandas&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Exploratory Data Analysis is where the real insights begin.&lt;/p&gt;

&lt;p&gt;Using Pandas, I explored:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Distribution of ratings&lt;/li&gt;
&lt;li&gt;Average rating by category&lt;/li&gt;
&lt;li&gt;Relationship between difficulty and rating&lt;/li&gt;
&lt;li&gt;Patterns in review behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This step helps understand the structure of the data and identify trends.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key insights from the analysis&lt;/strong&gt;&lt;br&gt;
Some interesting findings from this project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Courses with medium difficulty often receive better ratings&lt;/li&gt;
&lt;li&gt;Very long reviews usually reflect strong opinions&lt;/li&gt;
&lt;li&gt;Some categories consistently perform better&lt;/li&gt;
&lt;li&gt;High engagement does not always correlate with high ratings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These insights can help students choose better courses and help educators improve content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project structure and best practices&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To make the project scalable and professional, I organized it as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;notebooks for analysis&lt;/li&gt;
&lt;li&gt;data folder for datasets&lt;/li&gt;
&lt;li&gt;src for reusable code&lt;/li&gt;
&lt;li&gt;assets for visualizations&lt;/li&gt;
&lt;li&gt;README for documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This structure follows good software engineering practices and improves maintainability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technologies used&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;Pandas&lt;/li&gt;
&lt;li&gt;NumPy&lt;/li&gt;
&lt;li&gt;Matplotlib&lt;/li&gt;
&lt;li&gt;Seaborn&lt;/li&gt;
&lt;li&gt;Jupyter Notebook&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tools are widely used in data science and provide a strong foundation for analysis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenges faced&lt;/strong&gt;&lt;br&gt;
Working with large datasets introduced several challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Memory optimization&lt;/li&gt;
&lt;li&gt;Data consistency across sources&lt;/li&gt;
&lt;li&gt;Cleaning unstructured text data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These were solved by optimizing data types, validating merges, and applying systematic preprocessing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Future improvements&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This project can be extended in many ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sentiment analysis using Natural Language Processing&lt;/li&gt;
&lt;li&gt;Machine learning models to predict course success&lt;/li&gt;
&lt;li&gt;Interactive dashboards using Streamlit&lt;/li&gt;
&lt;li&gt;Automated data pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The long term goal is to transform this into a full educational analytics platform.&lt;/p&gt;

</description>
      <category>python</category>
      <category>datascience</category>
      <category>machinelearning</category>
      <category>coding</category>
    </item>
  </channel>
</rss>
