{"id":5119,"date":"2026-02-10T03:12:33","date_gmt":"2026-02-10T11:12:33","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/semantic-kernel\/?p=5119"},"modified":"2026-02-10T03:12:33","modified_gmt":"2026-02-10T11:12:33","slug":"from-local-models-to-agent-workflows-building-a-deep-research-solution-with-microsoft-agent-framework-on-microsoft-foundry-local","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/agent-framework\/from-local-models-to-agent-workflows-building-a-deep-research-solution-with-microsoft-agent-framework-on-microsoft-foundry-local\/","title":{"rendered":"From Local Models to Agent Workflows: Building a Deep Research Solution with Microsoft Agent Framework on Microsoft Foundry Local"},"content":{"rendered":"<h2 id=\"introduction-a-new-paradigm-for-ai-application-development\" class=\"code-line\" dir=\"auto\" data-line=\"2\">Introduction: A New Paradigm for AI Application Development<\/h2>\n<p class=\"code-line\" dir=\"auto\" data-line=\"6\">In enterprise AI application development, we often face this dilemma: while cloud-based large language models are powerful, issues such as data privacy, network latency, and cost control make many scenarios difficult to implement. Traditional local small models, although lightweight, lack complete development, evaluation, and orchestration frameworks.<\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"8\">The combination of Microsoft Foundry Local and Agent Framework (MAF) provides an elegant solution to this dilemma. This article will guide you from zero to one in building a complete Deep Research agent workflow, covering the entire pipeline from model safety evaluation, workflow orchestration, interactive debugging to performance optimization.<\/p>\n<h2 id=\"introduction-a-new-paradigm-for-ai-application-development\" class=\"code-line\" dir=\"auto\" data-line=\"2\"><a href=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2026\/02\/bg.webp\"><img decoding=\"async\" class=\"size-full wp-image-5120 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2026\/02\/bg.webp\" alt=\"bg image\" width=\"512\" height=\"512\" srcset=\"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/bg.webp 512w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/bg-300x300.webp 300w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/bg-150x150.webp 150w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/bg-24x24.webp 24w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/bg-48x48.webp 48w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/bg-96x96.webp 96w\" sizes=\"(max-width: 512px) 100vw, 512px\" \/><\/a><\/h2>\n<h2 id=\"why-choose-foundry-local\" class=\"code-line\" dir=\"auto\" data-line=\"10\">Why Choose Foundry Local?<\/h2>\n<p class=\"code-line\" dir=\"auto\" data-line=\"12\">Foundry Local is not just a local model runtime, but an extension of Microsoft&#8217;s AI ecosystem to the edge:<\/p>\n<ul class=\"code-line\" dir=\"auto\" data-line=\"14\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"14\"><strong>Privacy First<\/strong>: All data and inference processes are completed locally, meeting strict compliance requirements<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"15\"><strong>Zero Latency<\/strong>: No network round trips required, suitable for real-time interactive scenarios<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"16\"><strong>Cost Control<\/strong>: Avoid cloud API call fees, suitable for high-frequency calling scenarios<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"17\"><strong>Rapid Iteration<\/strong>: Local development and debugging, shortening feedback cycles<\/li>\n<\/ul>\n<p class=\"code-line\" dir=\"auto\" data-line=\"19\">Combined with the Microsoft Agent Framework, you can build complex agent applications just like using Azure OpenAI.<\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"21\">Example Code:<\/p>\n<pre class=\"prettyprint language-py\"><code class=\"language-py\">agent = FoundryLocalClient(model_id=\"qwen2.5-1.5b-instruct-generic-cpu:4\").as_agent(\r\n    name=\"LocalAgent\",\r\n    instructions=\"\"\"You are an assistant.\r\n\r\nYour responsibilities:\r\n- Answering questions and providing professional advice\r\n- Helping users understand concepts\r\n- Offering users different suggestions\r\n\"\"\",\r\n)<\/code><\/pre>\n<h2 id=\"how-to-evaluate-an-agent\" class=\"code-line\" dir=\"auto\" data-line=\"36\">How to Evaluate an Agent?\n<a href=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2026\/02\/eval.webp\"><img decoding=\"async\" class=\"size-full wp-image-5121 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2026\/02\/eval.webp\" alt=\"eval image\" width=\"1286\" height=\"1054\" srcset=\"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/eval.webp 1286w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/eval-300x246.webp 300w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/eval-1024x839.webp 1024w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/eval-768x629.webp 768w\" sizes=\"(max-width: 1286px) 100vw, 1286px\" \/><\/a><\/h2>\n<p class=\"code-line\" dir=\"auto\" data-line=\"40\">Based on the Agent Framework evaluation samples, here are three complementary evaluation methods, with corresponding implementations and configurations in this repository:<\/p>\n<ol class=\"code-line\" dir=\"auto\" data-line=\"42\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"42\">\n<p class=\"code-line\" dir=\"auto\" data-line=\"42\"><strong>Red Teaming (Security and Robustness)<\/strong><\/p>\n<ul class=\"code-line\" dir=\"auto\" data-line=\"43\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"43\">Purpose: Use systematic adversarial prompts to cover high-risk content and test the agent&#8217;s security boundaries.<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"44\">Method: Execute multiple attack strategies against the target agent, covering risk categories such as violence, hate\/unfairness, sexual content, and self-harm.<\/li>\n<\/ul>\n<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"46\">\n<p class=\"code-line\" dir=\"auto\" data-line=\"46\"><strong>Self-Reflection (Quality Verification)<\/strong><\/p>\n<ul class=\"code-line\" dir=\"auto\" data-line=\"47\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"47\">Purpose: Let the agent perform secondary review of its own output, checking factual consistency, coverage, citation completeness, and answer structure.<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"48\">Method: Add a &#8220;reflection round&#8221; after task output, where the agent provides self-assessment and improvement suggestions based on fixed dimensions, producing a revised version.<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"49\"><em>This content is temporarily omitted in the example<\/em><\/li>\n<\/ul>\n<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"51\">\n<p class=\"code-line\" dir=\"auto\" data-line=\"51\"><strong>Observability (Performance Metrics)<\/strong><\/p>\n<ul class=\"code-line\" dir=\"auto\" data-line=\"52\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"52\">Purpose: Measure end-to-end latency, stage-wise time consumption, and tool invocation overhead using metrics and distributed tracing.<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"53\">Method: Enable OpenTelemetry to report workflow execution processes and tool invocations.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h2 id=\"complete-development-process-from-security-to-production\" class=\"code-line\" dir=\"auto\" data-line=\"55\">Complete Development Process: From Security to Production<\/h2>\n<h3 id=\"step-1-red-team-evaluation---securing-the-safety-baseline\" class=\"code-line\" dir=\"auto\" data-line=\"57\">Step 1: Red Team Evaluation &#8211; Securing the Safety Baseline<\/h3>\n<p class=\"code-line\" dir=\"auto\" data-line=\"59\">Before putting any model into production, security evaluation is an essential step. MAF provides out-of-the-box Red Teaming capabilities, combined with Microsoft Foundry to complete Red Team evaluation:<\/p>\n<pre class=\"prettyprint language-py\"><code class=\"language-py\"># 01.foundrylocal_maf_evaluation.py\r\nfrom azure.ai.evaluation.red_team import AttackStrategy, RedTeam, RiskCategory\r\nfrom azure.identity import AzureCliCredential\r\nfrom agent_framework_foundry_local import FoundryLocalClient\r\n\r\ncredential = AzureCliCredential()\r\nagent = FoundryLocalClient(model_id=\"qwen2.5-1.5b-instruct-generic-cpu:4\").as_agent(\r\n    name=\"LocalAgent\",\r\n    instructions=\"\"\"You are an assistant.\r\n\r\nYour responsibilities:\r\n- Answering questions and providing professional advice\r\n- Helping users understand concepts\r\n- Offering users different suggestions\r\n\"\"\",\r\n)\r\n\r\ndef agent_callback(query: str) -&gt; str:\r\n    async def _run():\r\n        return await agent.run(query)\r\n    response = asyncio.get_event_loop().run_until_complete(_run())\r\n    return response.text\r\n\r\nred_team = RedTeam(\r\n    azure_ai_project=os.environ[\"AZURE_AI_PROJECT_ENDPOINT\"],\r\n    credential=credential,\r\n    risk_categories=[\r\n        RiskCategory.Violence,\r\n        RiskCategory.HateUnfairness,\r\n        RiskCategory.Sexual,\r\n        RiskCategory.SelfHarm,\r\n    ],\r\n    num_objectives=2,\r\n)\r\n\r\nresults = await red_team.scan(\r\n    target=agent_callback,\r\n    scan_name=\"Qwen2.5-1.5B-Agent\",\r\n    attack_strategies=[\r\n        AttackStrategy.EASY,\r\n        AttackStrategy.MODERATE,\r\n        AttackStrategy.CharacterSpace,\r\n        AttackStrategy.ROT13,\r\n        AttackStrategy.UnicodeConfusable,\r\n        AttackStrategy.CharSwap,\r\n        AttackStrategy.Morse,\r\n        AttackStrategy.Leetspeak,\r\n        AttackStrategy.Url,\r\n        AttackStrategy.Binary,\r\n        AttackStrategy.Compose([AttackStrategy.Base64, AttackStrategy.ROT13]),\r\n    ],\r\n    output_path=\"Qwen2.5-1.5B-Redteam-Results.json\",\r\n)<\/code><\/pre>\n<p class=\"code-line\" dir=\"auto\" data-line=\"117\"><strong>Evaluation Dimensions<\/strong>:<\/p>\n<ul class=\"code-line\" dir=\"auto\" data-line=\"118\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"118\"><strong>Risk Categories<\/strong>: Violence, hate\/unfairness, sexual content, self-harm<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"119\"><strong>Attack Strategies<\/strong>: Encoding obfuscation, character substitution, prompt injection, etc.<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"120\"><strong>Output Analysis<\/strong>: Generate detailed risk scorecards and response samples<\/li>\n<\/ul>\n<p class=\"code-line\" dir=\"auto\" data-line=\"122\">Evaluation results are saved as JSON for traceability and continuous monitoring. This step ensures the model&#8217;s robustness when facing malicious inputs.<\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"124\">This is a screenshot after running\u00a0<strong><em>01.foundrylocal_maf_evaluation.py<\/em><\/strong>. You can improve results by adjusting the prompt.<\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"59\"><a href=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2026\/02\/redteam.webp\"><img decoding=\"async\" class=\"alignnone size-full wp-image-5122\" src=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2026\/02\/redteam.webp\" alt=\"redteam image\" width=\"2120\" height=\"364\" srcset=\"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/redteam.webp 2120w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/redteam-300x52.webp 300w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/redteam-1024x176.webp 1024w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/redteam-768x132.webp 768w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/redteam-1536x264.webp 1536w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/redteam-2048x352.webp 2048w\" sizes=\"(max-width: 2120px) 100vw, 2120px\" \/><\/a><\/p>\n<h3 id=\"step-2-deep-research-workflow-design---multi-round-iterative-intelligence\" class=\"code-line\" dir=\"auto\" data-line=\"128\">Step 2: Deep Research Workflow Design &#8211; Multi-Round Iterative Intelligence<\/h3>\n<p class=\"code-line\" dir=\"auto\" data-line=\"130\">The core of Deep Research is the &#8220;research-judge-research again&#8221; iterative loop. MAF Workflows makes this complex logic clear and maintainable:<\/p>\n<p dir=\"auto\" data-line=\"130\"><a href=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2026\/02\/workflow.webp\"><img decoding=\"async\" class=\"size-full wp-image-5123 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2026\/02\/workflow.webp\" alt=\"workflow image\" width=\"235\" height=\"671\" srcset=\"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/workflow.webp 235w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/workflow-105x300.webp 105w\" sizes=\"(max-width: 235px) 100vw, 235px\" \/><\/a><\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"134\"><strong>Key Components<\/strong>:<\/p>\n<ol class=\"code-line\" dir=\"auto\" data-line=\"136\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"136\">\n<p class=\"code-line\" dir=\"auto\" data-line=\"136\"><strong>Research Agent<\/strong><\/p>\n<ul class=\"code-line\" dir=\"auto\" data-line=\"137\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"137\">Equipped with\u00a0<code>search_web<\/code>\u00a0tool for real-time external information retrieval<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"138\">Generates summaries and identifies knowledge gaps in each round<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"139\">Accumulates context to avoid redundant searches<\/li>\n<\/ul>\n<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"141\">\n<p class=\"code-line\" dir=\"auto\" data-line=\"141\"><strong>Iteration Controller<\/strong><\/p>\n<ul class=\"code-line\" dir=\"auto\" data-line=\"142\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"142\">Evaluates current information completeness<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"143\">Decision-making: Continue deeper vs Generate report<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"144\">Prevents infinite loops (sets maximum rounds)<\/li>\n<\/ul>\n<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"146\">\n<p class=\"code-line\" dir=\"auto\" data-line=\"146\"><strong>Final Reporter<\/strong><\/p>\n<ul class=\"code-line\" dir=\"auto\" data-line=\"147\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"147\">Integrates findings from all iterations<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"148\">Generates structured reports with citations<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p class=\"code-line\" dir=\"auto\" data-line=\"150\"><strong>Code Implementation<\/strong>\u00a0(simplified):<\/p>\n<pre class=\"prettyprint language-py\"><code class=\"language-py\">from agent_framework import WorkflowBuilder\r\nfrom agent_framework_foundry_local import FoundryLocalClient\r\n\r\nworkflow_builder = WorkflowBuilder(\r\n    name=\"Deep Research Workflow\",\r\n    description=\"Multi-agent deep research workflow with iterative web search\"\r\n)\r\n\r\nworkflow_builder.register_executor(lambda: StartExecutor(state=state), name=\"start_executor\")\r\nworkflow_builder.register_executor(lambda: ResearchAgentExecutor(), name=\"research_executor\")\r\nworkflow_builder.register_executor(lambda: iteration_control, name=\"iteration_control\")\r\nworkflow_builder.register_executor(lambda: FinalReportExecutor(), name=\"final_report\")\r\nworkflow_builder.register_executor(lambda: OutputExecutor(), name=\"output_executor\")\r\n\r\nworkflow_builder.register_agent(\r\n    lambda: FoundryLocalClient(model_id=\"qwen2.5-1.5b-instruct-generic-cpu:4\").as_agent(\r\n        name=\"research_agent\",\r\n        instructions=\"...\",\r\n        tools=search_web,\r\n        default_options={\"temperature\": 0.7, \"max_tokens\": 4096},\r\n    ),\r\n    name=\"research_agent\",\r\n)\r\n\r\nworkflow_builder.add_edge(\"start_executor\", \"research_executor\")\r\nworkflow_builder.add_edge(\"research_executor\", \"research_agent\")\r\nworkflow_builder.add_edge(\"research_agent\", \"iteration_control\")\r\nworkflow_builder.add_edge(\r\n    \"iteration_control\",\r\n    \"research_executor\",\r\n    condition=lambda decision: decision.signal == ResearchSignal.CONTINUE,\r\n)\r\nworkflow_builder.add_edge(\r\n    \"iteration_control\",\r\n    \"final_report\",\r\n    condition=lambda decision: decision.signal == ResearchSignal.COMPLETE,\r\n)\r\nworkflow_builder.add_edge(\"final_report\", \"final_reporter_agent\")\r\nworkflow_builder.add_edge(\"final_reporter_agent\", \"output_executor\")<\/code><\/pre>\n<p class=\"code-line\" dir=\"auto\" data-line=\"194\">The beauty of this design lies in:<\/p>\n<ul class=\"code-line\" dir=\"auto\" data-line=\"195\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"195\"><strong>Modularity<\/strong>: Each executor has a single responsibility, easy to test and replace<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"196\"><strong>Observability<\/strong>: Inputs and outputs of each node can be tracked<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"197\"><strong>Extensibility<\/strong>: Easy to add new tools or decision logic<\/li>\n<\/ul>\n<h3 id=\"step-3-devui-interactive-debugging---making-workflows-visible\" class=\"code-line\" dir=\"auto\" data-line=\"199\">Step 3: DevUI Interactive Debugging &#8211; Making Workflows Visible<\/h3>\n<p class=\"code-line\" dir=\"auto\" data-line=\"201\">Traditional agent debugging is often a &#8220;black box&#8221; experience. MAF DevUI visualizes the entire execution process:<\/p>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\">python 02.foundrylocal_maf_workflow_deep_research_devui.py\r\n# DevUI starts at http:\/\/localhost:8093<\/code><\/pre>\n<p class=\"code-line\" dir=\"auto\" data-line=\"208\"><strong>DevUI Provides<\/strong>:<\/p>\n<ul class=\"code-line\" dir=\"auto\" data-line=\"209\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"209\"><strong>Workflow Topology Diagram<\/strong>: Intuitively see node and edge relationships<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"210\"><strong>Step-by-Step Execution<\/strong>: View input, output, and status of each node<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"211\"><strong>Real-time Injection<\/strong>: Dynamically modify input parameters to test different scenarios<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"212\"><strong>Log Aggregation<\/strong>: Unified view of all agent logs and tool invocations<\/li>\n<\/ul>\n<p class=\"code-line\" dir=\"auto\" data-line=\"214\"><strong>Debugging Scenario Example<\/strong>:<\/p>\n<ul class=\"code-line\" dir=\"auto\" data-line=\"215\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"215\">Input: &#8220;GPT-5.3-Codex vs Anthropic Claud 4.6&#8221;<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"216\">Observe: Evolution of search keywords across 3 rounds by the research agent<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"217\">Verify: Whether the iteration controller&#8217;s decision basis is reasonable<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"218\">Check: Whether the final report covers all sub-topics<\/li>\n<\/ul>\n<p class=\"code-line\" dir=\"auto\" data-line=\"220\">This interactive experience significantly shortens the time from discovering problems to solving them.<\/p>\n<p dir=\"auto\" data-line=\"220\"><a href=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2026\/02\/devui-scaled.webp\"><img decoding=\"async\" class=\"alignnone size-full wp-image-5124\" src=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2026\/02\/devui-scaled.webp\" alt=\"devui image\" width=\"2500\" height=\"1167\" srcset=\"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/devui-scaled.webp 2500w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/devui-300x140.webp 300w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/devui-1024x478.webp 1024w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/devui-768x358.webp 768w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/devui-1536x717.webp 1536w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/devui-2048x956.webp 2048w\" sizes=\"(max-width: 2500px) 100vw, 2500px\" \/><\/a><\/p>\n<h3 id=\"step-4-performance-evaluation-and-optimization---net-aspire-integration\" class=\"code-line\" dir=\"auto\" data-line=\"224\">Step 4: Performance Evaluation and Optimization &#8211; .NET Aspire Integration<\/h3>\n<p class=\"code-line\" dir=\"auto\" data-line=\"226\">In production environments, performance is a dimension that cannot be ignored. MAF&#8217;s integration with .NET Aspire provides enterprise-grade observability:<\/p>\n<p class=\"code-line\" dir=\"auto\" data-line=\"228\"><strong>Enable Telemetry<\/strong>:<\/p>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\"># Configure OpenTelemetry\r\nexport OTLP_ENDPOINT=\"http:\/\/localhost:4317\"\r\n\r\n# Workflow automatically reports\r\n- Latency: Time consumption of each executor\r\n- Throughput: Concurrent request processing capacity\r\n- Tool Usage: search_web call frequency and time consumption<\/code><\/pre>\n<p class=\"code-line\" dir=\"auto\" data-line=\"239\"><strong>Key Metrics<\/strong>:<\/p>\n<ul class=\"code-line\" dir=\"auto\" data-line=\"240\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"240\"><strong>End-to-End Latency<\/strong>: Time from user input to final report<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"241\"><strong>Model Inference Time<\/strong>: Response speed of local model<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"242\"><strong>Tool Invocation Overhead<\/strong>: Impact of external APIs (such as search)<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"243\"><strong>Memory Usage<\/strong>: Context accumulation across multiple iterations<\/li>\n<\/ul>\n<p class=\"code-line\" dir=\"auto\" data-line=\"245\"><strong>Optimization Strategies<\/strong>:<\/p>\n<ul class=\"code-line\" dir=\"auto\" data-line=\"246\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"246\">Use smaller models (such as Qwen2.5-1.5B) to balance speed and quality<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"247\">Cache common search results to reduce API calls<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"248\">Limit iteration depth to avoid excessive research<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"249\">Streaming output to improve user experience<\/li>\n<\/ul>\n<p class=\"code-line\" dir=\"auto\" data-line=\"251\">Through distributed tracing, you can precisely locate bottlenecks and make data-driven optimization decisions.<\/p>\n<p dir=\"auto\" data-line=\"251\"><a href=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2026\/02\/tracing.webp\"><img decoding=\"async\" class=\"alignnone size-full wp-image-5125\" src=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/wp-content\/uploads\/sites\/78\/2026\/02\/tracing.webp\" alt=\"tracing image\" width=\"1852\" height=\"1254\" srcset=\"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/tracing.webp 1852w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/tracing-300x203.webp 300w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/tracing-1024x693.webp 1024w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/tracing-768x520.webp 768w, https:\/\/devblogs.microsoft.com\/agent-framework\/wp-content\/uploads\/sites\/78\/2026\/02\/tracing-1536x1040.webp 1536w\" sizes=\"(max-width: 1852px) 100vw, 1852px\" \/><\/a><\/p>\n<h2 id=\"practical-guide-quick-start\" class=\"code-line\" dir=\"auto\" data-line=\"255\">Practical Guide: Quick Start<\/h2>\n<h3 class=\"code-line\" dir=\"auto\" data-line=\"257\"><span style=\"font-size: 12pt;\">GitHub Repo :\u00a0<a href=\"https:\/\/github.com\/microsoft\/Agent-Framework-Samples\/blob\/main\/09.Cases\/FoundryLocalPipeline\/\" data-href=\"https:\/\/github.com\/microsoft\/Agent-Framework-Samples\/blob\/main\/09.Cases\/FoundryLocalPipeline\/\">https:\/\/github.com\/microsoft\/Agent-Framework-Samples\/blob\/main\/09.Cases\/FoundryLocalPipeline\/<\/a><\/span><\/h3>\n<p>Environment Setup<\/p>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\"># 1. Set environment variables\r\nexport FOUNDRYLOCAL_ENDPOINT=\"http:\/\/localhost:8000\"\r\nexport FOUNDRYLOCAL_MODEL_DEPLOYMENT_NAME=\"qwen2.5-1.5b-instruct-generic-cpu:4\"\r\nexport SERPAPI_API_KEY=\"your_serpapi_key\"\r\nexport AZURE_AI_PROJECT_ENDPOINT=\"your_azure_endpoint\"\r\nexport OTLP_ENDPOINT=\"http:\/\/localhost:4317\"\r\n\r\n# 2. Azure authentication (for evaluation)\r\naz login\r\n\r\n# 3. Install dependencies (example)\r\npip install azure-ai-evaluation azure-ai-evaluation[redteam] agent-framework agent-framework-foundry-local<\/code><\/pre>\n<h3 id=\"three-step-launch\" class=\"code-line\" dir=\"auto\" data-line=\"274\">Three-Step Launch<\/h3>\n<p class=\"code-line\" dir=\"auto\" data-line=\"276\"><strong>Step 1: Security Evaluation<\/strong><\/p>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\">python 01.foundrylocal_maf_evaluation.py\r\n# View results: Qwen2.5-1.5B-Redteam-Results.json<\/code><\/pre>\n<p class=\"code-line\" dir=\"auto\" data-line=\"150\"><strong>Step 2: DevUI Mode (Recommended)<\/strong><\/p>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\">python 02.foundrylocal_maf_workflow_deep_research_devui.py\r\n# Open in browser: http:\/\/localhost:8093\r\n# Enter research topic, observe iteration process<\/code><\/pre>\n<p dir=\"auto\" data-line=\"150\"><strong>Step 3: CLI Mode (Production)<\/strong><\/p>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\">python 02.foundrylocal_maf_workflow_deep_research_devui.py --cli\r\n# Directly output final report<\/code><\/pre>\n<h2 id=\"architectural-insights-evolution-from-model-to-agent\" class=\"code-line\" dir=\"auto\" data-line=\"305\">Architectural Insights: Evolution from Model to Agent<\/h2>\n<p class=\"code-line\" dir=\"auto\" data-line=\"307\">This case demonstrates three levels of modern AI application development:<\/p>\n<ol class=\"code-line\" dir=\"auto\" data-line=\"309\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"309\"><strong>Model Layer (Foundation)<\/strong>: Foundry Local provides reliable inference capabilities<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"310\"><strong>Agent Layer<\/strong>: ChatAgent + Tools encapsulate business logic<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"311\"><strong>Orchestration Layer<\/strong>: MAF Workflows handle complex processes<\/li>\n<\/ol>\n<p class=\"code-line\" dir=\"auto\" data-line=\"313\">Traditional development often stops at model invocation, while MAF allows you to stand at a higher level of abstraction:<\/p>\n<ul class=\"code-line\" dir=\"auto\" data-line=\"314\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"314\">No more manual loops and state management<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"315\">Automatic handling of tool invocations and result parsing<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"316\">Built-in observability and error handling<\/li>\n<\/ul>\n<p class=\"code-line\" dir=\"auto\" data-line=\"318\">This &#8220;framework-first&#8221; approach is key to moving enterprise AI from POC to production.<\/p>\n<h2 id=\"use-cases-and-extension-directions\" class=\"code-line\" dir=\"auto\" data-line=\"320\">Use Cases and Extension Directions<\/h2>\n<p class=\"code-line\" dir=\"auto\" data-line=\"322\"><strong>Current Solution Suitable For<\/strong>:<\/p>\n<ul class=\"code-line\" dir=\"auto\" data-line=\"323\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"323\">Research tasks requiring multi-round information synthesis<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"324\">Enterprise scenarios sensitive to data privacy<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"325\">Cost optimization needs for high-frequency calls<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"326\">Offline or weak network environments<\/li>\n<\/ul>\n<p class=\"code-line\" dir=\"auto\" data-line=\"328\"><strong>Extension Directions<\/strong>:<\/p>\n<ul class=\"code-line\" dir=\"auto\" data-line=\"329\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"329\"><strong>Multi-Agent Collaboration<\/strong>: Add expert agents (such as data analysts, code generators)<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"330\"><strong>Knowledge Base Integration<\/strong>: Combine with vector databases to retrieve private documents<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"331\"><strong>Human-in-the-Loop<\/strong>: Add manual review at critical decision points<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"332\"><strong>Multimodal Support<\/strong>: Process rich media inputs such as images, PDFs<\/li>\n<\/ul>\n<h2 id=\"conclusion-the-infinite-possibilities-of-localized-ai\" class=\"code-line\" dir=\"auto\" data-line=\"334\">Conclusion: The Infinite Possibilities of Localized AI<\/h2>\n<p class=\"code-line\" dir=\"auto\" data-line=\"336\">The combination of Microsoft Foundry Local + Agent Framework proves that local small models can also build production-grade intelligent applications. Through this Deep Research case, we see:<\/p>\n<ul class=\"code-line\" dir=\"auto\" data-line=\"338\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"338\"><strong>Security and Control<\/strong>: Red Team evaluation ensures model behavior meets expectations<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"339\"><strong>Efficient Orchestration<\/strong>: Workflows make complex logic clear and maintainable<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"340\"><strong>Rapid Iteration<\/strong>: DevUI provides instant feedback, shortening development cycles<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"341\"><strong>Performance Transparency<\/strong>: Aspire integration makes optimization evidence-based<\/li>\n<\/ul>\n<p class=\"code-line\" dir=\"auto\" data-line=\"343\">More importantly, this solution is\u00a0<strong>open and composable<\/strong>. You can:<\/p>\n<ul class=\"code-line\" dir=\"auto\" data-line=\"344\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"344\">Integrate custom tools (database queries, internal APIs)<\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"345\">Deploy to edge devices or private clouds<\/li>\n<\/ul>\n<p class=\"code-line\" dir=\"auto\" data-line=\"347\">The future of AI applications lies not only in the cloud, but in the\u00a0<strong>flexible architecture of cloud-edge collaboration<\/strong>. Foundry Local provides enterprises with a practical path, enabling every developer to build agent systems that are both powerful and controllable.<\/p>\n<hr class=\"code-line\" dir=\"auto\" data-line=\"349\" \/>\n<p class=\"code-line\" dir=\"auto\" data-line=\"351\"><strong>Related Resources<\/strong>:<\/p>\n<ul class=\"code-line\" dir=\"auto\" data-line=\"352\">\n<li class=\"code-line\" dir=\"auto\" data-line=\"352\"><a href=\"https:\/\/github.com\/microsoft\/agent-framework\" data-href=\"https:\/\/github.com\/microsoft\/agent-framework\">Microsoft Agent Framework GitHub<\/a><\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"353\"><a href=\"https:\/\/github.com\/microsoft\/agent-framework-samples\" data-href=\"https:\/\/github.com\/microsoft\/agent-framework-samples\">Microsoft Agent Framework Samples GitHub<\/a><\/li>\n<li class=\"code-line\" dir=\"auto\" data-line=\"354\"><a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/ai-foundry\/foundry-local\/what-is-foundry-local\" data-href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/ai-foundry\/foundry-local\/what-is-foundry-local\">Foundry Local Official Documentation<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Introduction: A New Paradigm for AI Application Development In enterprise AI application development, we often face this dilemma: while cloud-based large language models are powerful, issues such as data privacy, network latency, and cost control make many scenarios difficult to implement. Traditional local small models, although lightweight, lack complete development, evaluation, and orchestration frameworks. The [&hellip;]<\/p>\n","protected":false},"author":106050,"featured_media":5137,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[143,27,34],"tags":[],"class_list":["post-5119","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-agent-framework","category-agents","category-python-2"],"acf":[],"blog_post_summary":"<p>Introduction: A New Paradigm for AI Application Development In enterprise AI application development, we often face this dilemma: while cloud-based large language models are powerful, issues such as data privacy, network latency, and cost control make many scenarios difficult to implement. Traditional local small models, although lightweight, lack complete development, evaluation, and orchestration frameworks. The [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/posts\/5119","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/users\/106050"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/comments?post=5119"}],"version-history":[{"count":1,"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/posts\/5119\/revisions"}],"predecessor-version":[{"id":5132,"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/posts\/5119\/revisions\/5132"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/media\/5137"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/media?parent=5119"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/categories?post=5119"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/agent-framework\/wp-json\/wp\/v2\/tags?post=5119"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}