From 6325873906d4e80d917a26507c004cbc167921e6 Mon Sep 17 00:00:00 2001
From: SergeyMenshykh <68852919+SergeyMenshykh@users.noreply.github.com>
Date: Wed, 29 Oct 2025 12:42:21 +0000
Subject: [PATCH] .NET: Add deep-research sample (#1752)
* add deep-research sample
* update sample description
* update readme
* remove duplicating section
* Update dotnet/samples/GettingStarted/Agents/README.md
Co-authored-by: westey <164392973+westey-m@users.noreply.github.com>
* Update dotnet/samples/GettingStarted/Agents/Agent_Step18_DeepResearch/Program.cs
Co-authored-by: westey <164392973+westey-m@users.noreply.github.com>
* Update dotnet/samples/GettingStarted/Agents/Agent_Step18_DeepResearch/Program.cs
Co-authored-by: westey <164392973+westey-m@users.noreply.github.com>
* Use CreateAIAgentAsync extension method to create agent
* move deep research agent sample to the catalog folder
---------
Co-authored-by: westey <164392973+westey-m@users.noreply.github.com>
---
dotnet/agent-framework-dotnet.slnx | 5 +-
.../DeepResearchAgent.csproj | 20 +++++++
.../Catalog/DeepResearchAgent/Program.cs | 52 +++++++++++++++++++
.../Catalog/DeepResearchAgent/README.md | 47 +++++++++++++++++
4 files changed, 123 insertions(+), 1 deletion(-)
create mode 100644 dotnet/samples/Catalog/DeepResearchAgent/DeepResearchAgent.csproj
create mode 100644 dotnet/samples/Catalog/DeepResearchAgent/Program.cs
create mode 100644 dotnet/samples/Catalog/DeepResearchAgent/README.md
diff --git a/dotnet/agent-framework-dotnet.slnx b/dotnet/agent-framework-dotnet.slnx
index 1a14b73115..6ede4d8e79 100644
--- a/dotnet/agent-framework-dotnet.slnx
+++ b/dotnet/agent-framework-dotnet.slnx
@@ -136,6 +136,9 @@
+
+
+
@@ -294,4 +297,4 @@
-
\ No newline at end of file
+
diff --git a/dotnet/samples/Catalog/DeepResearchAgent/DeepResearchAgent.csproj b/dotnet/samples/Catalog/DeepResearchAgent/DeepResearchAgent.csproj
new file mode 100644
index 0000000000..d006616a15
--- /dev/null
+++ b/dotnet/samples/Catalog/DeepResearchAgent/DeepResearchAgent.csproj
@@ -0,0 +1,20 @@
+
+
+
+ Exe
+ net9.0
+
+ enable
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dotnet/samples/Catalog/DeepResearchAgent/Program.cs b/dotnet/samples/Catalog/DeepResearchAgent/Program.cs
new file mode 100644
index 0000000000..f6aa825a54
--- /dev/null
+++ b/dotnet/samples/Catalog/DeepResearchAgent/Program.cs
@@ -0,0 +1,52 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+// This sample shows how to create an Azure AI Foundry Agent with the Deep Research Tool.
+
+using Azure.AI.Agents.Persistent;
+using Azure.Identity;
+using Microsoft.Agents.AI;
+
+var endpoint = Environment.GetEnvironmentVariable("AZURE_FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_FOUNDRY_PROJECT_ENDPOINT is not set.");
+var deepResearchDeploymentName = Environment.GetEnvironmentVariable("AZURE_FOUNDRY_PROJECT_DEEP_RESEARCH_DEPLOYMENT_NAME") ?? "o3-deep-research";
+var modelDeploymentName = Environment.GetEnvironmentVariable("AZURE_FOUNDRY_PROJECT_DEPLOYMENT_NAME") ?? "gpt-4o";
+var bingConnectionId = Environment.GetEnvironmentVariable("BING_CONNECTION_ID") ?? throw new InvalidOperationException("BING_CONNECTION_ID is not set.");
+
+// Configure extended network timeout for long-running Deep Research tasks.
+PersistentAgentsAdministrationClientOptions persistentAgentsClientOptions = new();
+persistentAgentsClientOptions.Retry.NetworkTimeout = TimeSpan.FromMinutes(20);
+
+// Get a client to create/retrieve server side agents with.
+PersistentAgentsClient persistentAgentsClient = new(endpoint, new AzureCliCredential(), persistentAgentsClientOptions);
+
+// Define and configure the Deep Research tool.
+DeepResearchToolDefinition deepResearchTool = new(new DeepResearchDetails(
+ bingGroundingConnections: [new(bingConnectionId)],
+ model: deepResearchDeploymentName)
+ );
+
+// Create an agent with the Deep Research tool on the Azure AI agent service.
+AIAgent agent = await persistentAgentsClient.CreateAIAgentAsync(
+ model: modelDeploymentName,
+ name: "DeepResearchAgent",
+ instructions: "You are a helpful Agent that assists in researching scientific topics.",
+ tools: [deepResearchTool]);
+
+const string Task = "Research the current state of studies on orca intelligence and orca language, " +
+ "including what is currently known about orcas' cognitive capabilities and communication systems.";
+
+Console.WriteLine($"# User: '{Task}'");
+Console.WriteLine();
+
+try
+{
+ AgentThread thread = agent.GetNewThread();
+
+ await foreach (var response in agent.RunStreamingAsync(Task, thread))
+ {
+ Console.Write(response.Text);
+ }
+}
+finally
+{
+ await persistentAgentsClient.Administration.DeleteAgentAsync(agent.Id);
+}
diff --git a/dotnet/samples/Catalog/DeepResearchAgent/README.md b/dotnet/samples/Catalog/DeepResearchAgent/README.md
new file mode 100644
index 0000000000..0404054306
--- /dev/null
+++ b/dotnet/samples/Catalog/DeepResearchAgent/README.md
@@ -0,0 +1,47 @@
+# What this sample demonstrates
+
+This sample demonstrates how to create an Azure AI Agent with the Deep Research Tool, which leverages the o3-deep-research reasoning model to perform comprehensive research on complex topics.
+
+Key features:
+- Configuring and using the Deep Research Tool with Bing grounding
+- Creating a persistent AI agent with deep research capabilities
+- Executing deep research queries and retrieving results
+
+## Prerequisites
+
+Before running this sample, ensure you have:
+
+1. An Azure AI Foundry project set up
+2. A deep research model deployment (e.g., o3-deep-research)
+3. A model deployment (e.g., gpt-4o)
+4. A Bing Connection configured in your Azure AI Foundry project
+5. Azure CLI installed and authenticated
+
+**Important**: Please visit the following documentation for detailed setup instructions:
+- [Deep Research Tool Documentation](https://aka.ms/agents-deep-research)
+- [Research Tool Setup](https://learn.microsoft.com/en-us/azure/ai-foundry/agents/how-to/tools/deep-research#research-tool-setup)
+
+Pay special attention to the purple `Note` boxes in the Azure documentation.
+
+**Note**: The Bing Connection ID must be from the **project**, not the resource. It has the following format:
+
+```
+/subscriptions//resourceGroups//providers//accounts//projects//connections/
+```
+
+## Environment Variables
+
+Set the following environment variables:
+
+```powershell
+# Replace with your Azure AI Foundry project endpoint
+$env:AZURE_FOUNDRY_PROJECT_ENDPOINT="https://your-project.services.ai.azure.com/"
+
+# Replace with your Bing connection ID from the project
+$env:BING_CONNECTION_ID="/subscriptions/.../connections/your-bing-connection"
+
+# Optional, defaults to o3-deep-research
+$env:AZURE_FOUNDRY_PROJECT_DEEP_RESEARCH_DEPLOYMENT_NAME="o3-deep-research"
+
+# Optional, defaults to gpt-4o
+$env:AZURE_FOUNDRY_PROJECT_DEPLOYMENT_NAME="gpt-4o"