Tavily Search

Intermedio
LangChain
LangChain
Actualizado: 02/12/2025

Instalación y configuración de Tavily API

Tavily Search representa una evolución significativa en las herramientas de búsqueda diseñadas específicamente para agentes de inteligencia artificial. A diferencia de los motores de búsqueda tradicionales que devuelven enlaces y fragmentos de texto, Tavily proporciona respuestas estructuradas y optimizadas para el procesamiento por parte de modelos de lenguaje.

La principal ventaja de Tavily radica en su capacidad para entregar información factual en tiempo real con un formato que los LLMs pueden interpretar de manera más eficiente. Esto elimina la necesidad de procesar múltiples resultados de búsqueda y extraer información relevante.

Instalación del paquete

Para integrar Tavily en tu proyecto de LangChain, necesitas instalar el paquete específico:

pip install langchain-tavily langchain-openai

Este paquete incluye todas las dependencias necesarias y está optimizado para las últimas versiones de LangChain.

Obtención de la clave API

El primer paso para utilizar Tavily es registrarse en su plataforma y obtener una clave API. Dirígete a tavily.com y crea una cuenta. Una vez registrado, accede al panel de control donde encontrarás tu clave API única.

Tavily ofrece un plan gratuito que incluye un número limitado de consultas mensuales, suficiente para desarrollo y pruebas.

Configuración de variables de entorno

La forma más segura de gestionar tu clave API es utilizando variables de entorno. Crea un archivo .env en la raíz de tu proyecto:

TAVILY_API_KEY=tu_clave_api_aqui

Para cargar automáticamente las variables de entorno:

from dotenv import load_dotenv
import os

# Cargar variables de entorno
load_dotenv()

# Verificar que la clave está disponible
tavily_api_key = os.getenv("TAVILY_API_KEY")
if not tavily_api_key:
    raise ValueError("TAVILY_API_KEY no encontrada en las variables de entorno")

Verificación de la instalación

Para confirmar que la instalación y configuración son correctas:

from langchain_tavily import TavilySearch

# Crear instancia de TavilySearch
search = TavilySearch()

# Verificar que la herramienta se inicializa correctamente
print(f"Herramienta configurada: {search.name}")
print(f"Descripción: {search.description}")

Consideraciones de seguridad

Mantén tu clave API segura y nunca la incluyas directamente en el código fuente que pueda ser compartido. Utiliza siempre variables de entorno o sistemas de gestión de secretos en entornos de producción.

Tavily implementa límites de velocidad (rate limiting) para prevenir el abuso de su API. Monitorea tu uso a través del panel de control de Tavily.

TavilySearch para búsquedas optimizadas para IA

Una vez configurada la API de Tavily, podemos explorar las capacidades específicas que hacen de TavilySearch una herramienta superior para aplicaciones de IA.

Importación y configuración básica

La integración con LangChain se realiza mediante la importación directa de la clase TavilySearch:

from langchain_tavily import TavilySearch

# Crear instancia básica
search_tool = TavilySearch()

Parámetros de configuración avanzada

TavilySearch permite personalizar varios aspectos de la búsqueda:

from langchain_tavily import TavilySearch

# Configuración personalizada
search_tool = TavilySearch(
    max_results=5,           # Número máximo de resultados
    search_depth="advanced", # Profundidad de búsqueda
    include_domains=["reuters.com", "bbc.com"],  # Dominios específicos
    exclude_domains=["example.com"],             # Dominios a excluir
    include_answer=True,     # Incluir respuesta resumida
    include_raw_content=False # Excluir contenido HTML crudo
)

El parámetro max_results controla la cantidad de resultados devueltos. Para aplicaciones que requieren respuestas rápidas, valores entre 3-5 suelen ser óptimos.

El search_depth puede configurarse como "basic" o "advanced". El modo avanzado proporciona análisis más profundo pero consume más recursos.

Ejemplo completo de uso

import os
import getpass
from langchain_tavily import TavilySearch
from langchain_openai import ChatOpenAI

# Configurar API keys
if not os.environ.get("TAVILY_API_KEY"):
    os.environ["TAVILY_API_KEY"] = getpass.getpass("Tavily API key:\n")

if not os.environ.get("OPENAI_API_KEY"):
    os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API key:\n")

# Instanciar la herramienta de búsqueda
search_tool = TavilySearch(
    max_results=5,
    topic="general",
    include_answer=True,
    include_raw_content=False,
    include_images=False,
    search_depth="basic"
)

# Usar la herramienta directamente
result = search_tool.invoke("¿Cuál es la capital de Francia?")
print(result)

Uso básico con LCEL en LangChain

El siguiente ejemplo muestra cómo armar un pipeline típico de LangChain incorporando TavilySearch utilizando RunnableLambda:

from langchain_tavily import TavilySearch
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnableLambda
from langchain_core.output_parsers import StrOutputParser

search_tool = TavilySearch(max_results=5, include_answer=True)
llm = ChatOpenAI(model="gpt-4o", temperature=0)

prompt = ChatPromptTemplate.from_template("""
Basándote en los siguientes resultados de búsqueda, responde la pregunta:

Pregunta: {query}

Resultados de búsqueda:
{search_results}

Respuesta:
""")

# Función que combina búsqueda y formateo
def search_and_format(query):
    search_results = search_tool.invoke(query)
    return {
        "query": query,
        "search_results": search_results
    }

# Crear la cadena LCEL
chain = (
    RunnableLambda(search_and_format)
    | prompt
    | llm
    | StrOutputParser()
)

# Usar
result = chain.invoke("¿Cuál es el precio actual del Bitcoin?")
print(result)

Ejemplo con RunnablePassthrough

Otra forma elegante de integrar la búsqueda:

from langchain_core.runnables import RunnablePassthrough, RunnableLambda

def do_search(inputs):
    query = inputs["query"]
    search_results = search_tool.invoke(query)
    return search_results

prompt = ChatPromptTemplate.from_template("""
Basándote en los siguientes resultados de búsqueda, responde la pregunta:

Pregunta: {query}

Resultados:
{search_results}

Respuesta:
""")

# Cadena LCEL
chain = (
    {"query": RunnablePassthrough(), "search_results": RunnableLambda(do_search)}
    | prompt
    | llm
    | StrOutputParser()
)

# Usar - solo pasas la query como string
result = chain.invoke("¿Cuáles son las últimas noticias sobre inteligencia artificial?")
print(result)

Ventajas sobre alternativas tradicionales

Comparado con Google Search o DuckDuckGo, Tavily ofrece ventajas específicas:

  • Respuestas estructuradas: Los resultados vienen pre-procesados y organizados
  • Optimización para LLMs: El contenido se presenta en formato que los modelos interpretan eficientemente
  • Información factual: Tavily prioriza fuentes confiables y información verificada
  • Tiempo real: Los resultados incluyen información actualizada

Manejo de errores

Es importante implementar manejo de errores robusto al trabajar con APIs externas:

from langchain_tavily import TavilySearch
import logging

def busqueda_segura(query, max_intentos=3):
    search_tool = TavilySearch(max_results=3)
    
    for intento in range(max_intentos):
        try:
            resultados = search_tool.invoke(query)
            return resultados
        
        except Exception as e:
            logging.warning(f"Intento {intento + 1} fallido: {e}")
            if intento == max_intentos - 1:
                return {"error": "Búsqueda no disponible temporalmente"}
    
    return None

Optimización de consultas

Para obtener los mejores resultados con Tavily, formula consultas específicas y contextualizadas:

# Consultas efectivas
consultas_efectivas = [
    "precio actual Bitcoin enero 2024",  # Específica y temporal
    "nuevas regulaciones IA Unión Europea 2024",  # Contextualizada
    "resultados elecciones España últimas noticias"  # Actualizada
]

# Evitar consultas muy generales
consultas_ineficientes = [
    "qué es Bitcoin",  # Muy general
    "inteligencia artificial",  # Demasiado amplia
    "noticias"  # Sin contexto
]

La especificidad en las consultas permite a Tavily devolver información más relevante y actualizada.

Fuentes y referencias

Documentación oficial y recursos externos para profundizar en LangChain

Documentación oficial de LangChain
Alan Sastre - Autor del tutorial

Alan Sastre

Ingeniero de Software y formador, CEO en CertiDevs

Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, LangChain es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.

Más tutoriales de LangChain

Explora más contenido relacionado con LangChain y continúa aprendiendo con nuestros tutoriales gratuitos.

Aprendizajes de esta lección

Configurar Tavily Search API, usar TavilySearchResults para búsquedas web, entender cómo Tavily optimiza resultados para LLMs, trabajar con respuestas estructuradas, y comparar Tavily con motores de búsqueda tradicionales.

Cursos que incluyen esta lección

Esta lección forma parte de los siguientes cursos estructurados con rutas de aprendizaje