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
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