# Framework Integrations ## Table of Contents - [LangChain](#langchain) - [Pydantic AI](#pydantic-ai) - [LlamaIndex](#llamaindex) - [Agno](#agno) - [OpenAI Function Calling](#openai-function-calling) - [Anthropic Tool Calling](#anthropic-tool-calling) - [Google ADK](#google-adk) - [Vercel AI SDK](#vercel-ai-sdk) - [CrewAI](#crewai) - [No-Code Platforms](#no-code-platforms) --- ## LangChain We recommend the official `langchain-tavily` package for LangChain integrations. > Warning: `langchain_community.tools.tavily_search.tool` is deprecated. Migrate to `langchain-tavily` for actively maintained Search, Extract, Map, Crawl, and Research tools. ### Installation ```bash pip install -U langchain-tavily ``` ### Credentials ```python import getpass import os if not os.environ.get("TAVILY_API_KEY"): os.environ["TAVILY_API_KEY"] = getpass.getpass("Tavily API key:\n") ``` ### Tavily Search **Available parameters** - `max_results` (default: `5`) - `topic` (`"general"`, `"news"`, `"finance"`) - `include_answer` - `include_raw_content` - `include_images` - `include_image_descriptions` - `search_depth` (`"basic"` or `"advanced"`) - `time_range` (`"day"`, `"week"`, `"month"`, `"year"`) - `start_date` (`YYYY-MM-DD`) - `end_date` (`YYYY-MM-DD`) - `include_domains` - `exclude_domains` - `include_usage` **Instantiation** ```python from langchain_tavily import TavilySearch tavily_search = TavilySearch( max_results=5, topic="general" ) ``` **Invoke directly with args** - Required: `query` - Can also be overridden at invocation: `include_images`, `search_depth`, `time_range`, `include_domains`, `exclude_domains`, `start_date`, `end_date` - `include_answer` and `include_raw_content` should be set at instantiation time for predictable response sizes ```python result = tavily_search.invoke({"query": "What happened at the last Wimbledon?"}) ``` **Use with agent** ```python from langchain.agents import create_agent from langchain_openai import ChatOpenAI agent = create_agent( model=ChatOpenAI(model="gpt-5"), tools=[tavily_search], system_prompt="You are a helpful research assistant. Use web search to find accurate, up-to-date information.", ) response = agent.invoke({ "messages": [{ "role": "user", "content": "What is the most popular sport in the world? Include only Wikipedia sources.", }] }) ``` Tip: include today's date in the system prompt for time-aware queries. ### Tavily Extract **Available parameters** - `extract_depth` (`"basic"` or `"advanced"`) - `include_images` ```python from langchain_tavily import TavilyExtract tavily_extract = TavilyExtract( extract_depth="basic", # or "advanced" # include_images=False, ) result = tavily_extract.invoke({ "urls": ["https://en.wikipedia.org/wiki/Lionel_Messi"] }) ``` ### Tavily Map/Crawl ```python from langchain_tavily import TavilyMap tavily_map = TavilyMap() result = tavily_map.invoke({ "url": "https://docs.example.com", "instructions": "Find all documentation and tutorial pages" }) # Returns: {"base_url": ..., "results": [urls...], "response_time": ...} ``` ```python from langchain_tavily import TavilyCrawl tavily_crawl = TavilyCrawl() result = tavily_crawl.invoke({ "url": "https://docs.example.com", "instructions": "Extract API documentation and code examples" }) # Returns: {"base_url": ..., "results": [{url, raw_content}...], "response_time": ...} ``` ### Tavily Research **Available parameters** - `input` (required) - `model` (`"mini"`, `"pro"`, `"auto"`) - `output_schema` - `stream` - `citation_format` (`"numbered"`, `"mla"`, `"apa"`, `"chicago"`) ```python from langchain_tavily import TavilyResearch tavily_research = TavilyResearch() result = tavily_research.invoke({ "input": "Research the latest developments in AI and summarize key trends.", "model": "mini", "citation_format": "apa" }) ``` ### Tavily Get Research ```python from langchain_tavily import TavilyGetResearch tavily_get_research = TavilyGetResearch() final = tavily_get_research.invoke({"request_id": result["request_id"]}) ``` --- ## Pydantic AI Tavily is available for integration through Pydantic AI. ### Introduction Integrate Tavily with Pydantic AI to enhance your AI agents with powerful web search capabilities. Pydantic AI provides a framework for building AI agents with tools, making it easy to incorporate real-time web search and data extraction into your applications. ### Step-by-Step Integration Guide #### Step 1: Install Required Packages Install the necessary Python packages: ```bash pip install "pydantic-ai-slim[tavily]" ``` #### Step 2: Set Up API Keys - Tavily API Key: [Get your Tavily API key](https://app.tavily.com/home) Set this as an environment variable: ```bash export TAVILY_API_KEY=your_tavily_api_key ``` #### Step 3: Initialize Pydantic AI Agent with Tavily Tools ```python import os from pydantic_ai.agent import Agent from pydantic_ai.common_tools.tavily import tavily_search_tool # Get API key from environment api_key = os.getenv("TAVILY_API_KEY") assert api_key is not None # Initialize the agent with Tavily tools agent = Agent( "openai:o3-mini", tools=[tavily_search_tool(api_key)], system_prompt="Search Tavily for the given query and return the results.", ) ``` #### Step 4: Example Use Cases ```python # Example 1: Basic search for news result = agent.run_sync("Tell me the top news in the GenAI world, give me links.") print(result.output) ``` --- ## LlamaIndex ```python from llama_index.tools.tavily_research import TavilyToolSpec # Initialize tools tavily_tool = TavilyToolSpec(api_key="tvly-YOUR_API_KEY") tools = tavily_tool.to_tool_list() # Use with agent from llama_index.agent.openai import OpenAIAgent agent = OpenAIAgent.from_tools(tools) response = agent.chat("What are the latest AI developments?") ``` --- ## Agno Tavily is available for integration through Agno, a lightweight framework for building agents with tools, memory, and reasoning. ### Introduction Integrate Tavily with Agno to enhance your AI agents with powerful web search capabilities. Agno makes it easy to incorporate real-time web search and data extraction into your AI applications. ### Step-by-Step Integration Guide #### Step 1: Install Required Packages ```bash pip install agno tavily-python ``` #### Step 2: Set Up API Keys - Tavily API Key: [Get your Tavily API key](https://app.tavily.com/home) - OpenAI API Key: [Get your OpenAI API key](https://platform.openai.com/api-keys) Set these as environment variables: ```bash export TAVILY_API_KEY=your_tavily_api_key export OPENAI_API_KEY=your_openai_api_key ``` #### Step 3: Initialize Agno Agent with Tavily Tools ```python from agno.agent import Agent from agno.tools.tavily import TavilyTools # Initialize the agent with Tavily tools agent = Agent( tools=[ TavilyTools( search=True, # Enable search functionality max_tokens=8000, # Increase max tokens for detailed results search_depth="advanced", # Use advanced search for comprehensive results format="markdown", # Format results as markdown ) ], show_tool_calls=True, ) ``` #### Step 4: Example Use Cases ```python # Example 1: Basic search with default parameters agent.print_response("Latest developments in quantum computing", markdown=True) # Example 2: Market research with multiple parameters agent.print_response( "Analyze the competitive landscape of AI-powered customer service solutions in 2026, " "focusing on market leaders and emerging trends", markdown=True, ) # Example 3: Technical documentation search agent.print_response( "Find the latest documentation and tutorials about Python async programming, " "focusing on asyncio and FastAPI", markdown=True, ) # Example 4: News aggregation agent.print_response( "Gather the latest news about artificial intelligence from tech news websites " "published in the last week", markdown=True, ) ``` ### Additional Use Cases - Content curation: Gather and organize information from multiple sources - Real-time data integration: Keep your AI agents up to date with the latest information - Technical documentation: Search and analyze technical documentation - Market analysis: Conduct comprehensive market research and analysis --- ## OpenAI Function Calling Define Tavily as an OpenAI function: ```python from openai import OpenAI from tavily import TavilyClient import json openai_client = OpenAI() tavily_client = TavilyClient() tools = [{ "type": "function", "function": { "name": "web_search", "description": "Search the web for current information", "parameters": { "type": "object", "properties": { "query": { "type": "string", "description": "The search query" } }, "required": ["query"] } } }] def handle_tool_call(tool_call): if tool_call.function.name == "web_search": args = json.loads(tool_call.function.arguments) return tavily_client.search(args["query"]) # Chat completion with tools response = openai_client.chat.completions.create( model="gpt-4", messages=[{"role": "user", "content": "What are the latest AI trends?"}], tools=tools ) if response.choices[0].message.tool_calls: tool_call = response.choices[0].message.tool_calls[0] search_results = handle_tool_call(tool_call) # Continue conversation with results messages = [ {"role": "user", "content": "What are the latest AI trends?"}, response.choices[0].message, {"role": "tool", "tool_call_id": tool_call.id, "content": json.dumps(search_results)} ] final = openai_client.chat.completions.create( model="gpt-4", messages=messages ) ``` --- ## Anthropic Tool Calling Integrate Tavily with Anthropic Claude to add real-time web search in tool-calling workflows. ### Installation ```bash pip install anthropic tavily-python ``` ### Setup ```bash export ANTHROPIC_API_KEY="your-anthropic-api-key" export TAVILY_API_KEY="your-tavily-api-key" ``` ### Using Tavily With Anthropic Tool Calling ```python import json import os from anthropic import Anthropic from tavily import TavilyClient client = Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"]) tavily_client = TavilyClient(api_key=os.environ["TAVILY_API_KEY"]) MODEL_NAME = "claude-sonnet" ``` ### Implementation #### System prompt ```python SYSTEM_PROMPT = ( "You are a research assistant. Use the tavily_search tool when needed. " "After tools run and tool results are provided back to you, produce a concise, " "well-structured summary with key bullets and a Sources section listing URLs." ) ``` #### Tool schema ```python tools = [ { "name": "tavily_search", "description": "Search the web using Tavily and return relevant links and summaries.", "input_schema": { "type": "object", "properties": { "query": {"type": "string", "description": "Search query string."}, "max_results": {"type": "integer", "default": 5}, "search_depth": { "type": "string", "enum": ["basic", "advanced"], "default": "basic", }, }, "required": ["query"], }, } ] ``` #### Tool execution ```python def tavily_search(**kwargs): return tavily_client.search(**kwargs) def process_tool_call(name, args): if name == "tavily_search": return tavily_search(**args) raise ValueError(f"Unknown tool: {name}") ``` #### Main chat function ```python def chat_with_claude(user_message: str): # Call 1: allow tool use initial_response = client.messages.create( model=MODEL_NAME, max_tokens=4096, system=SYSTEM_PROMPT, messages=[{"role": "user", "content": [{"type": "text", "text": user_message}]}], tools=tools, ) # If Claude answers without tools, return text directly if initial_response.stop_reason != "tool_use": return "".join( block.text for block in initial_response.content if getattr(block, "type", None) == "text" ) # Execute all requested tools tool_result_blocks = [] for block in initial_response.content: if getattr(block, "type", None) == "tool_use": result = process_tool_call(block.name, block.input) tool_result_blocks.append( { "type": "tool_result", "tool_use_id": block.id, "content": json.dumps(result), } ) # Call 2: send tool results and ask Claude for final synthesis final_response = client.messages.create( model=MODEL_NAME, max_tokens=4096, system=SYSTEM_PROMPT, messages=[ {"role": "user", "content": [{"type": "text", "text": user_message}]}, {"role": "assistant", "content": initial_response.content}, {"role": "user", "content": tool_result_blocks}, { "role": "user", "content": [{ "type": "text", "text": "Please synthesize the final answer now based on the tool results above. Include 3-7 bullets and a Sources section with URLs.", }], }, ], ) return "".join( block.text for block in final_response.content if getattr(block, "type", None) == "text" ) ``` ### Usage example ```python chat_with_claude("What is trending now in the agents space in 2026?") ``` Reference: https://docs.tavily.com/documentation/integrations/anthropic --- ## Google ADK Google ADK can connect to Tavily through Tavily's remote MCP server, giving your Gemini-based agent live search, extraction, and site exploration capabilities. ### Prerequisites - Python 3.9+ - Tavily API key: https://app.tavily.com/home - Gemini API key: https://aistudio.google.com/app/apikey ### Installation ```bash pip install google-adk mcp ``` ### Agent Setup ```python import os from google.adk.agents import Agent from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPServerParams from google.adk.tools.mcp_tool.mcp_toolset import MCPToolset tavily_api_key = os.getenv("TAVILY_API_KEY") root_agent = Agent( model="gemini-2.5-pro", name="tavily_agent", instruction=( "You are a helpful assistant that uses Tavily to search the web, " "extract content, and explore websites. Use Tavily tools to provide " "up-to-date information." ), tools=[ MCPToolset( connection_params=StreamableHTTPServerParams( url="https://mcp.tavily.com/mcp/", headers={"Authorization": f"Bearer {tavily_api_key}"}, ) ) ], ) ``` ### Environment Variables ```bash export GOOGLE_API_KEY="your_gemini_api_key_here" export TAVILY_API_KEY="your_tavily_api_key_here" ``` ### Run ```bash adk create my_agent adk run my_agent # Optional web UI: adk web --port 8000 ``` ### Available Tavily MCP tools - `tavily-search` - `tavily-extract` - `tavily-map` - `tavily-crawl` Reference: https://docs.tavily.com/documentation/integrations/google-adk --- ## Vercel AI SDK The `@tavily/ai-sdk` package provides pre-built tools for Vercel AI SDK v5. ### Installation ```bash npm install ai @ai-sdk/openai @tavily/ai-sdk ``` ### Usage ```typescript import { tavilySearch, tavilyCrawl } from "@tavily/ai-sdk"; import { generateText } from "ai"; import { openai } from "@ai-sdk/openai"; // Search const result = await generateText({ model: openai("gpt-4"), prompt: "What are the latest AI developments?", tools: { tavilySearch: tavilySearch({ maxResults: 5, searchDepth: "advanced", }), }, }); // Crawl const crawlResult = await generateText({ model: openai("gpt-4"), prompt: "Crawl tavily.com and summarize their features", tools: { tavilyCrawl: tavilyCrawl({ maxDepth: 2, limit: 50, }), }, }); ``` **Available tools:** `tavilySearch`, `tavilyExtract`, `tavilyCrawl`, `tavilyMap` --- ## CrewAI CrewAI provides built-in Tavily tools for multi-agent workflows. ### Installation ```bash pip install 'crewai[tools]' ``` ### Usage ```python import os from crewai import Agent, Task, Crew from crewai_tools import TavilySearchTool, TavilyExtractTool os.environ["TAVILY_API_KEY"] = "your-api-key" # Search tool search_tool = TavilySearchTool() # Create agent with Tavily researcher = Agent( role="Research Analyst", goal="Find and analyze information on given topics", tools=[search_tool], backstory="Expert at finding relevant information online" ) task = Task( description="Research the latest developments in quantum computing", expected_output="A comprehensive summary with sources", agent=researcher ) crew = Crew(agents=[researcher], tasks=[task]) result = crew.kickoff() ``` --- ## No-Code Platforms Tavily integrates with popular no-code automation platforms: | Platform | Features | Best For | |----------|----------|----------| | **Zapier** | Search, Extract | CRM enrichment, automated research | | **Make** | Search, Extract | Complex workflows, multi-step automations | | **n8n** | Search, Extract, AI Agent tool | Self-hosted, AI agent workflows | | **Dify** | Search, Extract | No-code AI apps, chatflows | | **FlowiseAI** | Search | Visual LLM builders, RAG systems | | **Langflow** | Search, Extract | Visual agent building | --- ## Additional Integrations See the [full integrations documentation](https://docs.tavily.com/documentation/integrations) for complete guides.