// Copyright (c) Microsoft. All rights reserved. // This sample shows how to use the Web Search Tool with a ChatClientAgent. using Azure.AI.Projects; using Azure.Identity; using Microsoft.Agents.AI; using Microsoft.Extensions.AI; using OpenAI.Responses; 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-RAPI"; 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-5.4-mini"; // WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production. // In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid // latency issues, unintended credential probing, and potential security risks from fallback mechanisms. AIProjectClient aiProjectClient = new(new Uri(endpoint), new DefaultAzureCredential()); // Create a AIAgent with HostedWebSearchTool. AIAgent agent = aiProjectClient.AsAIAgent(deploymentName, instructions: AgentInstructions, name: AgentName, tools: [new HostedWebSearchTool()]); 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}} """); } }