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"