Agentes impulsados por Gemini Pro: Desbloqueando flujos de trabajo de agencia con LangTrace

Descubre cómo Gemini Pro y LangTrace desbloquean flujos de trabajo ágiles para capacidades avanzadas de LLM. Explora la planificación, el uso de herramientas externas y el rastreo para sistemas de IA listos para la producción.

24 de febrero de 2025

party-gif

Desbloquea el poder de los agentes impulsados por IA con el modelo experimental Gemini Pro. Descubre cómo este modelo de lenguaje de vanguardia puede integrar sin problemas herramientas y API externas para abordar tareas complejas, ofreciendo respuestas integrales y personalizadas. Explora los beneficios de este enfoque basado en agentes y desbloquea nuevas posibilidades para tus contenidos y flujos de trabajo.

¿Qué es un Agente y cómo funciona?

Un agente es esencialmente un modelo de lenguaje grande (LLM) con capacidades adicionales, que incluyen:

  1. Planificación: El agente puede descomponer la consulta del usuario y elaborar un plan integral para abordarla.

  2. Herramientas/API externas: El agente tiene acceso a herramientas o API externas que puede utilizar para ejecutar su plan.

  3. Memoria: El agente hace un seguimiento de dónde se encuentra en la ejecución del plan y qué pasos adicionales debe dar.

En el ejemplo proporcionado, el agente utiliza el modelo experimental Gemini 1.5 Pro como LLM, y tiene acceso a dos herramientas:

  1. RAG (Generación Aumentada por Recuperación): Actúa como la base de conocimientos del agente, utilizando el documento "Attention is All You Need".

  2. Búsqueda web: El agente puede buscar información en la web para complementar sus conocimientos.

El agente utiliza LangTrace para hacer un seguimiento de todos los pasos que da en la ejecución del plan. Esta observabilidad es crucial para comprender el proceso de toma de decisiones del agente, especialmente en un entorno de producción.

Configuración del Entorno

Para comenzar, necesitamos instalar los paquetes necesarios y configurar las claves de API requeridas. Así es como lo haremos:

  1. Instalar paquetes: Instalaremos el paquete Google Generative AI, LangChain, Tavly Python (nuestro motor de búsqueda), FAISS (almacén de vectores) y el SDK de Python de LangTrace.

  2. Importar paquetes: Importaremos el divisor de texto de caracteres recursivo, el cargador de PDF, los resultados de búsqueda de Tavly y el modelo de incrustación de la API de generación de Google.

  3. Configurar claves de API:

    • Clave de API de Tavly: Puedes obtener la clave de API de Tavly haciendo clic en el enlace "obtener clave de API" proporcionado en la descripción del video.
    • Clave de API de Google: Puedes obtener la clave de API de Google desde tu Google AI Studio.
    • Clave de API de LangTrace: Deberás crear una cuenta en LangTrace, una plataforma de observabilidad de código abierto para aplicaciones de LLM. Luego, puedes hacer clic en "generar clave de API" para obtener tu clave de API.
  4. Establecer variables de entorno: Estableceremos la clave de API de Tavly y la clave de API de LangTrace como variables de entorno.

  5. Manejar errores: Si ves algún error relacionado con las integraciones de LangSmith, no te preocupes por ellos. Estamos interesados únicamente en LangChain y la integración de Gemini Pro en este momento.

Ahora que tenemos el entorno configurado, podemos pasar a los siguientes pasos para construir el agente e integrar las herramientas necesarias.

Creación de la Canalización RAG

Para configurar una canalización RAG básica, primero debemos cargar el documento PDF que servirá como nuestra base de conocimientos. En este caso, tenemos el archivo "transformers.pdf", que contiene 12 páginas de contenido.

A continuación, utilizamos el RecursiveCharacterTextSplitter del módulo langchain.text_splitter para dividir el documento en piezas más pequeñas, cada una con hasta 500 tokens y un solapamiento de 100 tokens. Esto nos permite crear un total de 24 fragmentos diferentes que se pueden utilizar para la recuperación.

Luego, cargamos el modelo de incrustación de la API de generación de Google, que se utilizará para calcular las incrustaciones de cada uno de los fragmentos del documento. Las incrustaciones tienen una dimensionalidad de 768.

Para almacenar las incrustaciones, utilizamos el almacén de vectores FAISS. Esto nos permite realizar búsquedas de similitud eficientes en los fragmentos del documento cuando se proporciona una consulta.

Finalmente, creamos una herramienta RetrievalQA que el agente puede utilizar para recuperar información relevante de la base de conocimientos. La herramienta se configura con el buscador FAISS y una descripción que indica que es útil para recuperar información relacionada con el documento "Attention is All You Need".

Con esta configuración, el agente podrá utilizar la canalización RAG para encontrar y recuperar información relevante al responder preguntas sobre transformers y temas relacionados.

Configuración de las Herramientas

Para configurar las herramientas de nuestro agente, primero debemos instalar los paquetes necesarios:

# Instalar paquetes requeridos
!pip install google-generative-ai langchain tavlpy faiss-cpu langtracing

A continuación, importamos los módulos requeridos y configuramos las claves de API para los diferentes servicios que utilizaremos:

import os
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langtracing.sdk.python import LangTracer

# Configurar clave de API de Tavly
TAVLY_API_KEY = os.environ.get("TAVLY_API_KEY")

# Configurar clave de API de LangTrace
LANGTRACING_API_KEY = os.environ.get("LANGTRACING_API_KEY")

Luego, configuramos la canalización RAG (Generación Aumentada por Recuperación) cargando el documento PDF, dividiéndolo en fragmentos y creando las incrustaciones y el almacén de vectores:

# Cargar el documento PDF
loader = PyPDFLoader("transformers.pdf")
documents = loader.load()

# Dividir el documento en fragmentos
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100, length_function=len)
chunks = text_splitter.split_documents(documents)

# Crear incrustaciones y almacén de vectores
embeddings = OpenAIEmbeddings()
vector_store = FAISS.from_documents(chunks, embeddings)

Finalmente, creamos las dos herramientas a las que tendrá acceso nuestro agente: la herramienta de recuperación y la herramienta de búsqueda:

from langchain.agents import Tool

# Crear la herramienta de recuperación
retriever_tool = Tool(
    name="retriever_tool",
    description="Para cualquier información relacionada con la arquitectura de transformers, utiliza esta herramienta. Útil para recuperar información relacionada con el documento Attention is all you need.",
    func=lambda query: vector_store.similarity_search(query, k=3)
)

# Crear la herramienta de búsqueda
search_tool = Tool(
    name="search_tool",
    description="Un motor de búsqueda optimizado para resultados completos, precisos y confiables. Útil cuando necesitas responder preguntas sobre eventos actuales. La entrada debe ser una consulta de búsqueda.",
    func=lambda query: Tavly(TAVLY_API_KEY).search(query)
)

Con las herramientas configuradas, ya estamos listos para crear el agente y comenzar a utilizarlo para responder preguntas.

Creación del Agente

Para crear el agente, utilizaremos la clase de agente ReAct de LangChain. Este es un tipo especial de agente que puede hacer planificación, tiene memoria y tiene acceso a las herramientas que queremos que utilice.

Primero debemos proporcionar un aviso o instrucciones detalladas al agente para controlar las herramientas y elaborar un plan. LangChain proporciona una plantilla para esto utilizando el LangChain Hub, que es similar al Llama Index Hub.

Utilizaremos la plantilla ReAct y la modificaremos según sea necesario. El aviso incluye lo siguiente:

  1. Responde las siguientes preguntas lo mejor que puedas.
  2. Tienes acceso a las siguientes herramientas:
    • Herramienta de recuperación: Para cualquier información relacionada con el documento "Attention is All You Need".
    • Herramienta de búsqueda: Un motor de búsqueda optimizado para resultados completos, precisos y confiables. Útil para responder preguntas sobre eventos actuales.
  3. Utiliza el siguiente formato:
    • La pregunta de entrada que debes responder.
    • Tu proceso de pensamiento.
    • La acción a tomar (es decir, qué herramienta utilizar).
    • La salida de la herramienta.
    • La respuesta final.

Con este aviso, podemos crear el agente ReAct:

agent = ReActAgent(
    name="Gemini 1.5 Pro",
    tools=tools,
    system_message=system_prompt
)

Aquí, tools es la lista de herramientas que definimos anteriormente, y system_prompt es el aviso que creamos en función de la plantilla ReAct.

Ahora, podemos utilizar el AgentExecutor para ejecutar el agente y proporcionarle consultas:

executor = AgentExecutor(
    agent=agent,
    tools=tools,
    verbose=True
)

result = executor.run("¿Cuál es el clima actual en LA?")
print(result)

El agente seguirá su proceso de pensamiento, utilizará las herramientas apropiadas y proporcionará la respuesta final. También puedes inspeccionar los rastros utilizando la biblioteca LangTrace para comprender el proceso de toma de decisiones del agente.

Interacción con el Agente

El agente que hemos configurado es un Agente Reactivo, lo que significa que puede planificar, ejecutar acciones y actualizar su estado interno en función de los resultados de esas acciones. Veamos cómo podemos interactuar con este agente.

Primero, le haremos al agente una pregunta sencilla sobre el clima actual en Los Ángeles:

question = "¿Cuál es el clima actual en LA?"
result = agent.run(question)
print(result)

El agente sigue un proceso de pensamiento, decide utilizar la herramienta de búsqueda para buscar el clima actual, ejecuta la búsqueda y luego proporciona la respuesta final.

A continuación, le pediremos al agente una lista de medallas de oro por país en los Juegos Olímpicos actuales:

question = "¿Puedes darme una lista de medallas de oro por país en los Juegos Olímpicos actuales?"
result = agent.run(question)
print(result)

Aquí, el agente nuevamente decide utilizar la herramienta de búsqueda para buscar la información relevante, procesa los resultados y proporciona la respuesta.

Finalmente, le pediremos al agente que explique el concepto de atención en los transformers:

question = "¿Puedes explicar el concepto de atención en los transformers?"
result = agent.run(question)
print(result)

En este caso, el agente reconoce que la pregunta está relacionada con el documento "Attention is All You Need", por lo que decide utilizar la herramienta de recuperación para obtener información relevante del documento. Luego, procesa la información y proporciona una explicación concisa del concepto central de la atención de producto escalar.

A lo largo de estas interacciones, puedes ver el proceso de pensamiento del agente y los pasos que sigue para llegar a la respuesta final. El uso de herramientas como LangTrace nos ayuda a comprender el funcionamiento interno del agente y el rendimiento del sistema.

Conclusión

El modelo experimental Gemini 1.5 Pro ha demostrado sus capacidades como un agente eficaz, aprovechando herramientas como RAG y la búsqueda web para proporcionar respuestas completas y concisas a diversas consultas. El uso de LangTrace ha sido fundamental para rastrear el proceso de pensamiento y los pasos de ejecución del agente, proporcionando valiosos conocimientos para optimizar el rendimiento del sistema.

Si bien la información sobre el clima del modelo no era del todo precisa, la capacidad del agente para reescribir las consultas y recuperar información más relevante muestra su adaptabilidad y habilidades de resolución de problemas. Las explicaciones detalladas sobre los conceptos centrales de la atención en los transformers resaltan aún más la profundidad de comprensión del modelo y su potencial para servir como una herramienta valiosa para los usuarios que buscan información e ideas.

En general, el modelo experimental Gemini 1.5 Pro ha demostrado ser un agente prometedor, capaz de integrar herramientas externas, planificar y ejecutar respuestas integrales. A medida que el campo de los modelos de lenguaje grandes y los sistemas basados en agentes continúa evolucionando, este ejemplo sirve como un testimonio de los avances en el campo y el potencial de agentes aún más sofisticados y capaces en el futuro.

Preguntas más frecuentes