// Copyright (c) Microsoft. All rights reserved. // This sample shows how to use the Responses API Web Search Tool with AI Agents. using Azure.AI.Projects; using Azure.AI.Projects.OpenAI; using Azure.Identity; using Microsoft.Agents.AI; using Microsoft.Extensions.AI; using OpenAI.Responses; string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set."); string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-4o-mini"; const string AgentInstructions = "You are a helpful assistant that can search the web to find current information and answer questions accurately."; const string AgentName = "WebSearchAgent"; // Get a client to create/retrieve/delete server side agents with Azure Foundry Agents. AIProjectClient aiProjectClient = new(new Uri(endpoint), new DefaultAzureCredential()); // Option 1 - Using HostedWebSearchTool (MEAI + AgentFramework) AIAgent agent = await CreateAgentWithMEAIAsync(); // Option 2 - Using PromptAgentDefinition with the Responses API native type // AIAgent agent = await CreateAgentWithNativeSDKAsync(); AgentResponse response = await agent.RunAsync("What's the weather today in Seattle?"); // Get the text response Console.WriteLine($"Response: {response.Text}"); // Getting any annotations/citations generated by the web search tool foreach (AIAnnotation annotation in response.Messages.SelectMany(m => m.Contents).SelectMany(c => c.Annotations ?? [])) { Console.WriteLine($"Annotation: {annotation}"); if (annotation.RawRepresentation is UriCitationMessageAnnotation urlCitation) { Console.WriteLine($$""" Title: {{urlCitation.Title}} URL: {{urlCitation.Uri}} """); } } // Cleanup by agent name removes the agent version created. await aiProjectClient.Agents.DeleteAgentAsync(agent.Name); // Creates the agent using the HostedWebSearchTool MEAI abstraction that maps to the built-in Responses API web search tool. async Task CreateAgentWithMEAIAsync() => await aiProjectClient.CreateAIAgentAsync( name: AgentName, model: deploymentName, instructions: AgentInstructions, tools: [new HostedWebSearchTool()]); // Creates the agent using the PromptAgentDefinition with the Responses API native ResponseTool.CreateWebSearchTool(). async Task CreateAgentWithNativeSDKAsync() => await aiProjectClient.CreateAIAgentAsync( AgentName, new AgentVersionCreationOptions( new PromptAgentDefinition(model: deploymentName) { Instructions = AgentInstructions, Tools = { ResponseTool.CreateWebSearchTool() } }));