The Tavily SDK provides AIFunction tool wrappers compatible with Microsoft.Extensions.AI. These tools can be used with any IChatClient to give AI models web search and content extraction capabilities.
Installation
1
dotnetaddpackagetryAGI.Tavily
Web Search Tool
Use AsSearchTool() to create an AIFunction that wraps Tavily search. Pass it to any IChatClient via ChatOptions.Tools.
usingMicrosoft.Extensions.AI;usingTavily;// Create the Tavily search toolvartavilyClient=newTavilyClient(apiKey:Environment.GetEnvironmentVariable("TAVILY_API_KEY")!);AIFunctionsearchTool=tavilyClient.AsSearchTool(maxResults:5,searchDepth:RequestSearchDepth.Basic,includeAnswer:true);// Use with any IChatClient (OpenAI, Anthropic, Ollama, etc.)IChatClientchatClient=/* your chat client */;varoptions=newChatOptions{Tools=[searchTool],};varmessages=newList<ChatMessage>{new(ChatRole.User,"What are the latest developments in .NET 10?"),};while(true){varresponse=awaitchatClient.GetResponseAsync(messages,options);messages.AddRange(response.ToChatMessages());if(response.FinishReason==ChatFinishReason.ToolCalls){varresults=awaitresponse.CallToolsAsync(options);messages.AddRange(results);continue;}Console.WriteLine(response.Text);break;}
Content Extraction Tool
Use AsExtractTool() to create an AIFunction that extracts content from URLs.
1 2 3 4 5 6 7 8 9101112131415161718192021
usingMicrosoft.Extensions.AI;usingTavily;vartavilyClient=newTavilyClient(apiKey:Environment.GetEnvironmentVariable("TAVILY_API_KEY")!);AIFunctionextractTool=tavilyClient.AsExtractTool();// Use with any IChatClientIChatClientchatClient=/* your chat client */;varoptions=newChatOptions{Tools=[extractTool],};varresponse=awaitchatClient.GetResponseAsync("Summarize the content at https://learn.microsoft.com/en-us/dotnet/ai/",options);Console.WriteLine(response.Text);
Combining Both Tools
You can provide both search and extract tools simultaneously, letting the model decide which to use.
usingMicrosoft.Extensions.AI;usingTavily;vartavilyClient=newTavilyClient(apiKey:Environment.GetEnvironmentVariable("TAVILY_API_KEY")!);varoptions=newChatOptions{Tools=[ tavilyClient.AsSearchTool(maxResults: 3), tavilyClient.AsExtractTool(), ],};IChatClientchatClient=/* your chat client */;varmessages=newList<ChatMessage>{new(ChatRole.User,"Find a recent article about AI safety and summarize its main points."),};while(true){varresponse=awaitchatClient.GetResponseAsync(messages,options);messages.AddRange(response.ToChatMessages());if(response.FinishReason==ChatFinishReason.ToolCalls){varresults=awaitresponse.CallToolsAsync(options);messages.AddRange(results);continue;}Console.WriteLine(response.Text);break;}
Tool Details
Method
Tool Name
Description
AsSearchTool()
WebSearch
Searches the web for current information on a given query
AsExtractTool()
ExtractWebContent
Extracts and returns the main content from a given URL