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, un proceso que consume tokens y tiempo de procesamiento.
Instalación del paquete
Para integrar Tavily en tu proyecto de LangChain, necesitas instalar el paquete específico que proporciona la integración nativa:
pip install langchain-tavily langchain-openai
Este paquete incluye todas las dependencias necesarias y está optimizado para LangChain 0.3, garantizando compatibilidad con las últimas características del framework.
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. Para aplicaciones en producción, están disponibles planes de pago con límites más amplios y características adicionales.
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 en tu aplicación Python, instala y utiliza python-dotenv
:
pip install python-dotenv
Luego, en tu código Python:
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")
Configuración alternativa
Si prefieres no utilizar variables de entorno, puedes configurar la clave directamente en tu código, aunque no se recomienda para aplicaciones en producción:
import os
# Configuración directa (solo para desarrollo)
os.environ["TAVILY_API_KEY"] = "tu_clave_api_aqui"
Verificación de la instalación
Para confirmar que la instalación y configuración son correctas, ejecuta una prueba básica de conectividad:
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}")
Si la configuración es correcta, deberías ver la información básica de la herramienta sin errores de autenticación.
Consideraciones de seguridad
Mantén tu clave API segura y nunca la incluyas directamente en el código fuente que pueda ser compartido o versionado. 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. Estos límites varían según tu plan de suscripción y se aplican tanto por minuto como por mes. Monitorea tu uso a través del panel de control de Tavily para evitar interrupciones en tu aplicación.
TavilySearch para búsquedas optimizadas para IA
Guarda tu progreso
Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.
Más de 25.000 desarrolladores ya confían en CertiDevs
Una vez configurada la API de Tavily, podemos explorar las capacidades específicas que hacen de TavilySearch una herramienta superior para agentes de IA. La clase TavilySearch
de LangChain proporciona una interfaz optimizada que aprovecha al máximo las características únicas de este motor de búsqueda.
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()
Esta configuración básica utiliza los parámetros por defecto optimizados para la mayoría de casos de uso. Sin embargo, TavilySearch ofrece múltiples parámetros de configuración que permiten ajustar el comportamiento según las necesidades específicas de tu aplicación.
Parámetros de configuración avanzada
TavilySearch permite personalizar varios aspectos de la búsqueda para optimizar los resultados según el contexto de uso:
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, equilibrando entre completitud de información y eficiencia de procesamiento. 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 del contenido pero consume más recursos y tiempo de procesamiento.
Ejemplo completo:
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)
Integración con herramientas de LangChain
TavilySearch se integra perfectamente con el ecosistema de herramientas de LangChain, permitiendo su uso en cadenas más complejas:
from langchain_core.tools import Tool
from langchain_tavily import TavilySearch
# Crear herramienta personalizada
tavily_search = TavilySearch(max_results=3)
# Definir herramienta para uso en cadenas
search_tool = Tool(
name="tavily_search",
description="Busca información actualizada en tiempo real usando Tavily",
func=tavily_search.invoke
)
# Ejemplo de uso en una cadena
def buscar_y_resumir(consulta):
# Buscar información
resultados = search_tool.invoke(consulta)
# Procesar con LLM
prompt = f"Resume la siguiente información: {resultados}"
respuesta = llm.invoke(prompt)
return respuesta.content
Uso básico con LCEL en LangChain
El siguiente ejemplo muestra cómo armar un pipeline típico de langchain pero 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 de forma clara y precisa:
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)
Otro ejemplo pero usando RunnablePassthrough:
from langchain_core.runnables import RunnablePassthrough, RunnableLambda
# Función que solo hace la búsqueda
def do_search(inputs):
query = inputs["query"]
search_results = search_tool.invoke(query)
return search_results
# Prompt que recibe ambos
prompt = ChatPromptTemplate.from_template("""
Basándote en los siguientes resultados de búsqueda, responde la pregunta:
Pregunta: {query}
Resultados:
{search_results}
Respuesta:
""")
# Cadena LCEL más elegante
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 para aplicaciones de IA:
- Respuestas estructuradas: Los resultados vienen pre-procesados y organizados, eliminando la necesidad de parsing HTML complejo.
- Optimización para LLMs: El contenido se presenta en un formato que los modelos de lenguaje pueden interpretar más eficientemente.
- Información factual: Tavily prioriza fuentes confiables y información verificada, reduciendo la propagación de desinformación.
- Tiempo real: Los resultados incluyen información actualizada, crucial para consultas sobre eventos recientes o datos cambiantes.
Manejo de errores y limitaciones
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, es recomendable formular consultas específicas y contextualizadas:
# Consultas optimizadas para Tavily
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, maximizando el valor de cada llamada a la API.
Aprendizajes de esta lección
- Comprender la instalación y configuración de la API de Tavily en proyectos LangChain.
- Aprender a gestionar de forma segura la clave API mediante variables de entorno.
- Conocer los parámetros de configuración avanzada para personalizar las búsquedas con TavilySearch.
- Integrar TavilySearch con LangChain y utilizarlo en cadenas de procesamiento con LCEL.
- Identificar las ventajas de Tavily frente a motores de búsqueda tradicionales y cómo optimizar consultas para obtener mejores resultados.
Completa LangChain y certifícate
Únete a nuestra plataforma y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.
Asistente IA
Resuelve dudas al instante
Ejercicios
Practica con proyectos reales
Certificados
Valida tus conocimientos
Más de 25.000 desarrolladores ya se han certificado con CertiDevs