Contenido del curso

Agentes LangChain con Tavily y RAG

Resumen

Crear agentes con LangChain te permite que un modelo de lenguaje no solo genere texto, sino que decida qué herramientas usar para resolver una consulta. Aquí aprendes a construir un agente que combina búsqueda en internet con Tavily y consultas a una base vectorial alimentada con la documentación de LangSmith, ideal si trabajas con LLMs y quieres conectarlos a datos en tiempo real.

¿Qué es un agente en LangChain y por qué importa?

En LangChain, un agente es un sistema que usa un Large Language Model como motor de razonamiento para decidir qué acciones tomar y con qué entradas ejecutarlas. La diferencia con un chatbot tradicional está en que el agente puede llamar a APIs externas, consultar bases vectoriales o hacer búsquedas web según el contexto de la pregunta.

¿Qué hace exactamente un agente de LangChain? Usa un modelo de lenguaje para razonar qué herramienta invocar (búsqueda web, base vectorial, API) y con qué parámetros, en lugar de responder solo con texto generado.

Esto abre la puerta a tareas complejas: responder con datos actualizados, consultar documentación interna o encadenar varias acciones en una sola conversación [00:14].

¿Cómo configurar Tavily Search como herramienta del agente?

Para este proyecto vas a usar Tavily Search, un servicio que permite búsquedas en internet en tiempo real desde tu código [00:35]. Necesitas crear una cuenta, obtener una API key y cargarla junto con la de OpenAI.

El flujo de configuración es directo:

  • Cargar las dependencias y las dos API keys: OpenAI y Tavily.
  • Inicializar el Large Language Model base.
  • Importar desde langchain_community el módulo de herramientas y traer TavilySearchResults.
  • Instanciar la búsqueda con max_results=2 para limitar resultados [01:20].

Una vez creada la herramienta, puedes probarla con una consulta directa. En la clase se pregunta ¿qué es OpenAI o1-mini? y Tavily devuelve dos URLs, incluida la documentación oficial de OpenAI, con un extracto del contenido relevante [01:45].

¿Para qué sirve Tavily dentro del agente?

Tavily actúa como los ojos del agente en la web. Cuando el modelo detecta que la pregunta requiere información externa o actualizada, invoca esta herramienta en lugar de responder con su conocimiento entrenado.

¿Cómo construir la base vectorial con la documentación de LangSmith?

La segunda herramienta del agente es un retriever que consulta una base vectorial alimentada con la documentación de LangSmith [02:35]. Aquí entran varios componentes clave de LangChain trabajando en conjunto.

El proceso paso a paso:

  1. Importar WebBaseLoader para cargar el contenido desde la URL de la documentación.
  2. Cargar los documentos con el método load().
  3. Dividir el texto con un TextSplitter configurado en chunk_size=1000 y overlap=200 para mantener contexto entre fragmentos [03:35].
  4. Generar los embeddings con OpenAIEmbeddings y crear el vector store con from_documents.
  5. Convertir el vector store en un retriever con .as_retriever() [04:15].

¿Qué es un retriever en LangChain? Es el componente que toma una consulta, la convierte en vector y devuelve los fragmentos más relevantes de la base vectorial para alimentar al modelo.

El chunk_size de 1000 caracteres con overlap de 200 es un equilibrio común: fragmentos lo bastante grandes para tener contexto, pero con solapamiento para no cortar ideas a la mitad.

¿Cómo convertir el retriever en una herramienta del agente?

Un retriever por sí solo no es una tool. Hay que envolverlo con create_retriever_tool desde langchain.tools.retriever y darle:

  • Un nombre, en este caso langsmith_search.
  • Una descripción tipo busca información sobre LangSmith; usa esta herramienta para cualquier pregunta sobre LangSmith.
  • El retriever ya creado [05:10].

Esa descripción es crítica: es lo que el modelo lee para decidir si usar esta herramienta o no.

¿Cómo unir las herramientas con el modelo y probar el agente?

Con Tavily y el retriever tool listos, los agrupas en una lista tools y los enlazas al modelo con bind_tools. En la clase se usa GPT-4o como motor de razonamiento [06:00].

Para enviar mensajes al agente importas HumanMessage desde langchain_core.messages e invocas el modelo:

python response = model_with_tools.invoke([HumanMessage(content="hi")]) print(f"Content: {response.content}") print(f"Tool calls: {response.tool_calls}")

Los resultados muestran cómo razona el agente:

  • Con un input simple como hi, el modelo responde directamente y tool_calls queda vacío. No necesita herramientas.
  • Con una pregunta tipo ¿cuál es el clima en Bogotá?, el modelo decide invocar Tavily y devuelve el llamado a la herramienta en tool_calls [06:50].

Esa decisión automática es la esencia del agente: el modelo evalúa si puede responder solo o si requiere datos externos.

¿Qué falta para tener un agente completo?

En este punto tienes el modelo conectado a herramientas, pero todavía no es un agente con memoria ni con un executor que orqueste múltiples pasos. Ese es el siguiente nivel: darle estructura, añadir memoria conversacional y permitir que ejecute varias acciones encadenadas para construir una respuesta final al usuario.

¿Qué herramienta externa conectarías primero a tu agente: una API de datos, una base vectorial propia o búsqueda web? Cuéntalo en los comentarios.