IA Agéntica con Langgraph y MCP: Curso Intensivo - Parte 1
Esta nota de insights de YouTube fue creada con LilysAI. Regístrate gratis y obtén insights 10× más rápidos y profundos de los videos.
Q: ¿Qué se aprende en la Parte 1 del curso de LangGraph y Agentic AI?
Q: ¿Cuáles son los componentes principales de LangGraph?
¿Qué es LangGraph y por qué es importante para la IA? LangGraph es una biblioteca de Python que permite a los desarrolladores construir aplicaciones de IA agenticas con un control preciso sobre el flujo de ejecución, la memoria y la integración de herramientas.
1. Introducción al curso intensivo de LangGraph y aplicaciones de IA con agentes
Este curso intensivo está dividido en tres partes, cubriendo desde los fundamentos hasta la creación de proyectos completos de IA con agentes utilizando LangGraph.1.1. Descripción general del curso intensivo
- El curso intensivo se divide en tres partes, cada una con una duración aproximada de 2 a 3 horas de video.
- La Parte 1 se centra en técnicas fundamentales para construir aplicaciones de IA con agentes.
- Los temas incluyen la creación de chatbots, la integración de herramientas (individuales y múltiples), la adición de memoria, la incorporación de retroalimentación humana en el bucle, el uso de técnicas de streaming y la construcción de MCP (Protocolo de Computación Múltiple) desde cero.
- También se cubrirán conceptos como estados, grafos, nodos y aristas con la API de Grafos.
- La Parte 2 aborda conceptos avanzados de LangGraph, centrándose en flujos de trabajo y agentes.
- Se desarrollarán aplicaciones donde los agentes se comunican entre sí para resolver flujos de trabajo complejos.
- Otros temas incluyen la gestión de múltiples estados en multiagentes, el uso de la API funcional y la depuración y monitorización en LangGraph Studio.
- La Parte 3 se dedica a la construcción de proyectos completos, incluyendo la pipeline de LLM, técnicas de despliegue y evaluación de modelos de lenguaje grandes con herramientas como MLflow y AWS.
- El despliegue se realizará utilizando Hugging Face Spaces.
1.2. Preparación del entorno de desarrollo
- Para comenzar, se utiliza un espacio de trabajo de proyecto vacío y se abre la línea de comandos.
- Se recomienda crear un entorno virtual para el proyecto.
- Se utiliza el gestor de paquetes uv, que es rápido y está escrito en Rust.
- uv es de 10 a 100 veces más rápido que pip y reemplaza a varias herramientas de gestión de paquetes de Python.
- La instalación de uv se realiza mediante comandos específicos para macOS/Linux, Windows (PowerShell) o Raspberry Pi.
- Después de la instalación de uv, se inicializa el repositorio del proyecto con
uv init.- Esto crea archivos como
.gitignore,python-version,main.pyypyproject.toml. pyproject.tomlcontiene información del proyecto y las dependencias.
- Esto crea archivos como
1.3. Configuración del entorno virtual y dependencias
- Después de inicializar el proyecto, se crea un entorno virtual con
uv venv.- El entorno virtual se activa con un comando específico.
- Se crea un archivo
requirements.txtpara listar las bibliotecas necesarias.- Las bibliotecas incluyen LangGraph, LangChain y Langsmith (para seguimiento y evaluación en la nube de LangGraph).
- Las bibliotecas se instalan utilizando
uv pip install -r requirements.txt. - Para el desarrollo inicial, se crea una carpeta llamada "one" y un archivo
basic_chatbot.ipynb.- Se requiere la biblioteca
ipykernelpara ejecutar Jupyter Notebooks, la cual se instala si es necesario.
- Se requiere la biblioteca
2. Construcción de un chatbot básico con LangGraph
Este apartado explica cómo construir un chatbot básico utilizando la API de Grafos de LangGraph, detallando sus componentes principales: aristas, nodos y estado.
2.1. Componentes fundamentales de LangGraph
- Para construir un chatbot básico, se utiliza la API de Grafos de LangGraph, considerada la forma más eficiente de aprender la biblioteca.
- Los tres componentes principales de LangGraph son: aristas, nodos y estado.
2.2. Ejemplo de flujo de trabajo: creación de un blog a partir de un video de YouTube
- Se presenta un caso de uso para ilustrar los componentes de LangGraph: crear un blog a partir de un video de YouTube.
- El flujo de trabajo para este caso de uso consta de tres pasos:
- Extraer la transcripción del video de YouTube.
- Crear el título del blog utilizando la transcripción.
- Generar el contenido del blog a partir del título y la transcripción.
- Los LLM (modelos de lenguaje grandes) son muy efectivos para la generación de contenido y pueden usarse para resolver este flujo de trabajo.
2.3. Estructura del grafo para el flujo de trabajo
- Para resolver el flujo de trabajo, se crea una estructura de grafo que define el flujo de ejecución.
- El grafo incluye los siguientes elementos:
- Nodo de inicio: donde se proporciona la entrada, en este caso, la URL de YouTube.
- Nodo "Generador de transcripciones": toma la URL de YouTube como entrada y genera la transcripción.
- Una arista conecta el nodo de inicio con el nodo "Generador de transcripciones".
- Nodo "Generador de títulos": toma la transcripción como entrada y genera el título del blog.
- Una arista conecta el nodo "Generador de transcripciones" con el nodo "Generador de títulos".
- Este nodo utiliza un LLM y un prompt para generar el título.
- Nodo "Generador de contenido": toma el título y la transcripción como entrada y genera el contenido del blog.
- Una arista conecta el nodo "Generador de títulos" con el nodo "Generador de contenido".
- Este nodo también utiliza un LLM y un prompt para generar el contenido.
- Nodo final: donde se obtiene la salida combinada (transcripción, título y contenido).
- Las aristas representan el flujo de información de un nodo a otro.
- Cada nodo tiene una implementación que define su funcionalidad.
2.4. El concepto de estado en LangGraph
- El estado en LangGraph permite definir variables que pueden ser accedidas por cualquier nodo en el grafo.
- En el ejemplo del blog, el estado podría incluir variables como:
transcripción: para guardar la transcripción generada.título: para guardar el título generado.contenido: para guardar el contenido generado.
- La ventaja de guardar valores en el estado es que cualquier nodo del grafo puede acceder a estas variables.
- Un grafo que mantiene el contexto del estado en cada nodo se denomina grafo de estado.
- El estado no debe confundirse con la memoria externa, que se discutirá más adelante.
3. Implementación de un chatbot básico con LangGraph
Esta sección detalla los pasos para construir un chatbot básico utilizando la API de Grafos de LangGraph, incluyendo la configuración del entorno, la definición del estado, la creación de nodos y aristas, y la ejecución del grafo.
3.1. Preparación e importación de bibliotecas
- Se importan bibliotecas esenciales para construir el chatbot:
Annotateddetypingpara añadir metadatos contextuales a los tipos.Typedetyping_extensions.StateGraph,STARTyENDdelanggraph.graphpara definir el grafo de estado.add_messagesdelanggraph.graph.messagepara gestionar los mensajes.
add_messageses un reductor que se utiliza para añadir mensajes a una lista sin reemplazarlos, manteniendo el historial de la conversación.
3.2. Definición del estado del chatbot
- Se define una clase
Stateque hereda deTypedDict(oType[dict]) para representar el estado del grafo.- El estado es un diccionario que contendrá las variables accesibles por los nodos.
- Dentro de la clase
State, se crea una variablemessagesde tipolist.- Esta variable se anota con
Annotatedy la funciónadd_messages. add_messagesasegura que los nuevos mensajes se añadan a la listamessagesen lugar de sobrescribir los anteriores, actuando como un reductor.
- Esta variable se anota con
- Se inicializa un
graph_buildercomo una instancia deStateGraph, pasándole la claseState.
3.3. Configuración del modelo de lenguaje (LLM)
- Se instalan las bibliotecas necesarias para interactuar con modelos de lenguaje, como
langchain-grok. - Se cargan las variables de entorno desde un archivo
.envpara las claves API (por ejemplo,GROQ_API_KEY). - Se inicializa el LLM utilizando
ChatGROQoinit_chat_modelde LangChain.- Se puede especificar el nombre del modelo, como "Llama 3 8B 8192".
3.4. Creación del nodo del chatbot y el grafo
- Se define la función
chatbotque actuará como la implementación del nodo del chatbot.- Esta función toma el
stateactual como entrada. - Invoca el LLM con los mensajes del estado (
llm.invoke(state["messages"])) y devuelve el resultado en la clavemessagesdel estado. - Esto asegura que la respuesta del LLM se añada al historial de mensajes.
- Esta función toma el
- Se construye el grafo utilizando el
graph_builder:- Se añade un nodo llamado "LLMChatbot" con la función
chatbotcomo su definición. - Se añade una arista desde el
STARTdel grafo al nodo "LLMChatbot". - Se añade una arista desde el nodo "LLMChatbot" al
ENDdel grafo.
- Se añade un nodo llamado "LLMChatbot" con la función
- Finalmente, se compila el grafo con
graph_builder.compile().
3.5. Visualización y ejecución del chatbot
- Se puede visualizar el grafo utilizando
graph.get_graph().draw_mermaid_png().- El grafo muestra un flujo simple:
START->LLMChatbot->END.
- El grafo muestra un flujo simple:
- Para ejecutar el chatbot, se utiliza el método
graph.invoke().- La entrada se proporciona como un diccionario con la clave
messages(por ejemplo,{"messages": "Hi"}). - Si la clave API no se carga correctamente, puede ser necesario reiniciar el kernel.
- La respuesta del chatbot se guarda en la variable
messagesdel estado, que contiene tanto el mensaje humano como la respuesta de la IA. - El método
add_messagesconvierte automáticamente el mensaje de entrada en un "human message" y la respuesta del LLM en un "AI message", añadiéndolos a la lista. - Se puede acceder al último mensaje de la conversación utilizando
response["messages"][-1].content.
- La entrada se proporciona como un diccionario con la clave
- Técnicas de streaming:
- Se puede utilizar
graph.stream()para obtener la salida del chatbot en tiempo real. - Al iterar sobre los eventos del stream, se puede imprimir cada evento o acceder a los valores específicos.
- El streaming permite ver cómo se generan los mensajes de la IA a medida que el grafo se ejecuta.
- Se puede utilizar
4. Integración de herramientas externas en el chatbot
Esta sección explora cómo integrar herramientas externas en un chatbot de LangGraph para manejar preguntas que requieren información en tiempo real o funcionalidades específicas, introduciendo el concepto de agentes React.
4.1. Necesidad de herramientas externas
- Un chatbot básico con un LLM no puede responder preguntas que requieren datos en vivo o información más allá de su entrenamiento.
- Por ejemplo, preguntar "Proporcióname las últimas noticias de IA" no puede ser respondido por un LLM sin herramientas externas.
- Aquí es donde entran en juego las herramientas externas.
4.2. Flujo de trabajo con herramientas externas
- Cuando el chatbot recibe una pregunta que no puede responder, debe realizar una llamada a una herramienta.
- Se introduce un nodo de herramienta en el grafo.
- Este nodo puede contener APIs de terceros (como un motor de búsqueda de Google) o herramientas específicas como Tavily, un motor de búsqueda web que proporciona una API de búsqueda.
- El flujo sería:
START->Chatbot->Llamada a herramienta->Nodo de herramienta->END.
- El LLM dentro del chatbot es el "cerebro" que decide cuándo y qué herramienta llamar.
- Las herramientas se pueden vincular al LLM.
- Cada herramienta debe tener un docstring que describa su función, entradas y argumentos.
- Si la entrada del chatbot coincide con los requisitos de una herramienta, el LLM activará una llamada a esa herramienta.
- Se pueden combinar múltiples herramientas en un solo nodo de herramienta.
- También se introduce una condición de herramienta para gestionar el flujo de ejecución.
4.3. Implementación de un chatbot con herramientas
- Se instala la biblioteca
langchain-tavilypara usar la API de búsqueda de Tavily. - Se obtiene una clave API de Tavily desde
console.tavily.com. - Se inicializa el LLM y se carga la clave API de Tavily en el archivo
.env. - Se crea una instancia de
TavilySearchy se añade a una lista de herramientas.- Se puede probar la herramienta invocándola con una pregunta como "What is LangGraph?".
- Se crea una función personalizada (por ejemplo,
multiply) para demostrar la integración de herramientas personalizadas.- La función incluye un docstring que describe su propósito y parámetros (
a: int, b: int). - Este docstring es crucial para que el LLM entienda la herramienta.
- Se añade la función
multiplya la lista de herramientas.
- La función incluye un docstring que describe su propósito y parámetros (
- Se vinculan las herramientas al LLM utilizando
llm.bind_tools(tools).- Esto crea un
LLM_with_toolsque tiene conocimiento de todas las herramientas disponibles (Tavily Search, Multiply).
- Esto crea un
- Se define la clase
Statey se inicializa elStateGraphcomo antes. - Se importan
ToolNodeytools_conditiondelanggraph.prebuilt.ToolNodeconvierte una lista de herramientas en un nodo de herramienta.tools_conditiones una función que decide el siguiente paso en el grafo.
- Se definen los nodos del grafo:
- "Tool Calling LLM": un nodo que utiliza el
LLM_with_toolspara invocar mensajes. - "Tools": un nodo de tipo
ToolNodeque encapsula todas las herramientas definidas.
- "Tool Calling LLM": un nodo que utiliza el
- Se añaden las aristas al grafo:
- Una arista desde
STARTa "Tool Calling LLM". - Aristas condicionales desde "Tool Calling LLM" utilizando
builder.add_conditional_edges().- La función
tools_conditionse utiliza para decidir el siguiente nodo. - Si el último mensaje del asistente es una llamada a una herramienta, se dirige al nodo "Tools".
- Si no es una llamada a una herramienta, se dirige al
END.
- La función
- Una arista desde el nodo "Tools" al
END.
- Una arista desde
- Se compila el grafo y se visualiza.
4.4. Ejecución del chatbot con herramientas
- Se invoca el grafo con una pregunta que requiere una herramienta, como "What is the recent AI news?".
- El LLM realiza una llamada a la herramienta
TavilySearchy devuelve los resultados. - La respuesta incluye el mensaje humano, la llamada a la herramienta y el mensaje de la herramienta con los resultados.
- El LLM realiza una llamada a la herramienta
- Se invoca el grafo con una pregunta que requiere la herramienta
multiply, como "What is 2 * 3?".- El LLM realiza una llamada a la herramienta
multiplyy devuelve el resultado (por ejemplo, 10 para 5 * 2). - Es importante que la función
multiplytenga una sentenciareturnpara que la operación se realice correctamente.
- El LLM realiza una llamada a la herramienta
- Limitación del flujo actual: Si se hace una pregunta compuesta como "Give me the recent AI news and then multiply 5 by 10", el grafo actual solo procesará la primera parte (noticias de IA) y luego terminará, sin procesar la segunda parte (multiplicación).
- Esto se debe a que, después de que el nodo de herramienta devuelve una respuesta, el flujo va directamente al
ENDen lugar de volver al LLM para procesar el resto de la consulta.
- Esto se debe a que, después de que el nodo de herramienta devuelve una respuesta, el flujo va directamente al
4.5. Introducción al agente React
- Para resolver la limitación de las consultas compuestas, se utiliza la arquitectura de agente React.
- En un agente React, el flujo de ejecución se modifica: después de que el nodo de herramienta devuelve una respuesta, esta se envía de vuelta al LLM (el "cerebro").
- El LLM mantiene el contexto de la consulta original y puede decidir si necesita realizar otra llamada a una herramienta o si puede finalizar.
- Si hay más partes en la consulta (como "multiply 5 by 5"), el LLM realiza otra llamada a la herramienta, obtiene la respuesta y la envía de vuelta al LLM.
- Una vez que no hay más acciones, el LLM resume y proporciona la salida final.
- Los tres términos clave en React son: Actuar, Observar y Razonar.
- Actuar: el LLM realiza una llamada a una herramienta cuando recibe una entrada.
- Observar: el LLM evalúa la salida de la herramienta y decide si necesita otra acción.
- Razonar: el LLM toma decisiones sobre el siguiente paso, ya sea otra llamada a una herramienta o finalizar.
- Implementación del agente React:
- Se modifica el grafo para que, después del nodo "Tools", la arista regrese al nodo "Tool Calling LLM" en lugar de ir al
END. - El diagrama del grafo ahora muestra un bucle:
START->Tool Calling LLM->Tools->Tool Calling LLM->END. - Al ejecutar la consulta compuesta "Give me the recent AI news and then multiply 5 by 10", el agente React procesa ambas partes de la consulta secuencialmente, utilizando las herramientas necesarias y volviendo al LLM para cada paso.
- Se modifica el grafo para que, después del nodo "Tools", la arista regrese al nodo "Tool Calling LLM" en lugar de ir al
- El agente React permite al LLM ser el factor decisivo para elegir qué herramienta usar y cuándo.
5. Adición de memoria y técnicas de streaming en LangGraph
Esta sección aborda cómo añadir memoria a un grafo de agentes para mantener el contexto de las conversaciones y explora diferentes técnicas de streaming para obtener respuestas del chatbot.
5.1. Adición de memoria al grafo de agentes
- La memoria en LangGraph resuelve el problema del checkpointing persistente, permitiendo que el chatbot recuerde interacciones anteriores.
- Sin memoria, el chatbot no recordará información previamente proporcionada, como el nombre del usuario.
- Para añadir memoria, se utiliza
MemorySaverdelanggraph.checkpointer.memory.MemorySaveres un guardador de checkpoints en memoria que almacena la información de cada nodo ejecutado.
- La memoria se añade como un parámetro
checkpointerdurante la compilación del grafo (graph_builder.compile(checkpointer=memory)). - Para utilizar la memoria, se necesita un ID de hilo (
thread_id) único para cada sesión de conversación.- Este ID se pasa en la configuración (
config) al invocar el grafo.
- Este ID se pasa en la configuración (
- Al invocar el grafo con un mensaje y el
configque incluye elthread_id, el chatbot puede recordar el contexto de la conversación.- Por ejemplo, si se le dice "Hi, my name is Krishna" y luego se pregunta "What is my name?", el chatbot responderá "Yes, your name is Kush".
5.2. Técnicas de streaming en LangGraph
- LangGraph ofrece diferentes técnicas de streaming para obtener respuestas del chatbot, además del método
invoke(). - Se crea un grafo simple con un nodo "SuperBot" para demostrar el streaming.
- Los métodos
stream()yastream()(para operaciones asíncronas) tienen dos parámetros principales:valueyupdates.- Modo
updates: solo muestra el mensaje que se está actualizando actualmente en cada paso de la ejecución del nodo.- Por ejemplo, si un nodo genera "Hi", solo se mostrará "Hi". Si el siguiente nodo genera "My name is", solo se mostrará "My name is".
- Modo
values: muestra todos los mensajes acumulados hasta el momento en cada paso de la ejecución del nodo.- Por ejemplo, si el primer nodo genera "Hi", se mostrará "Hi". Si el segundo nodo genera "My name is", se mostrará ["Hi", "My name is"].
- Al usar
mode=valuescon memoria, se puede ver cómo se añade la conversación anterior a cada nueva interacción.
- Modo
- El método
stream_events()proporciona información más detallada sobre los diferentes eventos que ocurren durante la ejecución del grafo, útil para la depuración.
6. Human in the Loop (Retroalimentación Humana) en LangGraph
Esta sección explica cómo integrar la retroalimentación humana en un grafo de agentes, permitiendo que un humano intervenga y proporcione información crucial para el flujo de ejecución.
6.1. Concepto de Human in the Loop
- Human in the Loop (también conocido como retroalimentación humana) permite que un humano intervenga en un flujo de trabajo de IA.
- En un grafo de agentes, si un chatbot (vinculado con herramientas) recibe una entrada que requiere asistencia humana, puede activar una llamada a una herramienta de asistencia humana.
- En lugar de llamar a una API externa, se interrumpe el flujo y se espera la retroalimentación del humano.
- Una vez que el humano proporciona la retroalimentación, el chatbot reanuda la ejecución.
- Esto es útil en flujos de trabajo complejos donde se requiere la aprobación humana antes de completar una tarea.
6.2. Implementación de Human in the Loop
- Se utilizan las bibliotecas
CommandeInterruptde LangGraph para gestionar las interrupciones y reanudaciones del flujo. - Se define una herramienta personalizada llamada
HumanAssistance.- Esta herramienta tiene un docstring que indica "Request assistance from a human".
- La función
HumanAssistanceutilizaInterrupt.query()para detener el flujo y esperar una entrada humana. - La respuesta humana se devuelve como
human_response_data.
- Se combinan las herramientas (por ejemplo,
TavilySearchyHumanAssistance) y se vinculan al LLM. - Se construye el grafo con un nodo de chatbot y un nodo de herramientas, similar al agente React.
- El grafo incluye
START->Chatbot->Tools->Chatbot->END. - La interrupción (
Interrupt) ocurre en el nodo de herramientas si se activa la herramientaHumanAssistance.
- El grafo incluye
- Ejecución con interrupción:
- Se invoca el grafo con una entrada que activa la herramienta
HumanAssistance, como "I need some expert guidance for building AI agents. Could you please provide assistance to me?". - El LLM detecta la necesidad de asistencia y realiza una llamada a la herramienta
HumanAssistance. - El flujo se interrumpe, esperando la entrada humana.
- Se proporciona una respuesta humana (por ejemplo, "We, the experts, are here to help you out. We recommend you check out LangGraph to build your agent.").
- Se utiliza
graph.stream(human_command, config=thread_id)para reanudar el flujo con la respuesta humana. - El chatbot procesa la respuesta humana y continúa la conversación.
- Se invoca el grafo con una entrada que activa la herramienta
- Este mecanismo permite integrar la supervisión y la toma de decisiones humanas en cualquier punto del flujo de trabajo del agente.
7. Construcción e integración de servidores MCP (Protocolo de Computación Múltiple)
Esta sección explica cómo construir servidores MCP desde cero, integrarlos con un cliente MCP y utilizar diferentes protocolos de transporte para la comunicación.
7.1. Conceptos básicos de MCP
- Los servidores MCP permiten tener múltiples herramientas (cálculos matemáticos, APIs de terceros) que pueden ser accedidas por un cliente MCP.
- El servidor MCP proporciona herramientas contextuales y prompts al cliente.
- El cliente MCP mantiene una conexión uno a uno con el servidor dentro de la aplicación host.
- La aplicación (cloud, escritorio, etc.) interactúa con el cliente MCP.
- Flujo de comunicación:
- El usuario proporciona una entrada a la aplicación (chatbot).
- El LLM de la aplicación decide si necesita una llamada a un servidor MCP.
- El servidor MCP tiene herramientas (por ejemplo, suma, multiplicación, API de clima).
- Si el LLM no puede responder (por ejemplo, "What is the weather in New York?"), realiza una llamada a la herramienta a través del protocolo MCP.
- El cliente MCP interno facilita la comunicación con el servidor.
- La herramienta específica se llama y se obtiene una respuesta.
- Protocolos de transporte: Se utilizan diferentes protocolos para la comunicación entre el cliente y el servidor MCP.
- HTTP/2 y HTTP son ejemplos de protocolos de transporte.
7.2. Configuración del entorno y dependencias para MCP
- Se utiliza la biblioteca Fast MCP (
fastmcp) para construir servidores y clientes MCP de manera eficiente. - Se crea un entorno virtual con
uv venvy se activa. - Se crea un archivo
requirements.txtcon las siguientes bibliotecas:langchain-groklangchain-mcp-adaptersfastmcp
- Se instalan las bibliotecas con
uv pip install -r requirements.txt.
7.3. Creación de servidores MCP
- Servidor de matemáticas (
math_server.py):- Se importa
FastAPIdemcp.server.fastapiy se inicializaMCPcon el nombre del servidor "math". - Se definen herramientas como
addymultiplyutilizando el decorador@mcp.tool.- Cada función de herramienta tiene un docstring que describe su propósito.
- El servidor se ejecuta con
mcp.run(transport="stdio").- El transporte
stdioutiliza la entrada y salida estándar (línea de comandos) para recibir y responder llamadas a herramientas. - Esto es útil para pruebas locales, donde el cliente interactúa directamente con el servidor a través de la línea de comandos.
- El transporte
- Se importa
- Servidor de clima (
weather_server.py):- Se importa
MCPdemcp.serveryfastapiy se inicializaMCPcon el nombre del servidor "weather". - Se define una herramienta
get_weatherque toma unalocation(str) y devuelve unstr.- Se incluye un docstring para la herramienta.
- Por simplicidad, devuelve un valor constante ("It's always raining in California"), pero en un escenario real interactuaría con una API de clima.
- El servidor se ejecuta con
mcp.run(transport="streamable_http").- El transporte
streamable_httpejecuta el servidor como un servicio API en una URL (por ejemplo,http://127.0.0.1:8000). - A diferencia de
stdio, este servidor se ejecuta como un servicio web accesible a través de HTTP. - La URL del servidor MCP se encuentra en
/mcp(por ejemplo,http://127.0.0.1:8000/mcp).
- El transporte
- Se importa
7.4. Creación del cliente MCP (client.py)
- Se importa
clientdelangchain_mcp.adapterspara crear un cliente MCP multiserver. - Se importa
create_react_agentdelanggraph.prebuiltpara construir un agente que interactúe con los servidores MCP. - Se importa
ChatGROQdelangchain_grokpara el LLM. - Se cargan las variables de entorno (por ejemplo,
GROQ_API_KEY). - Se define una función asíncrona
mainpara ejecutar el cliente. - Se crea una instancia de
MultiServerMcpClienty se configuran los servidores:- Servidor de matemáticas: se especifica el comando (
python), los argumentos (math_server.py) y el transporte (stdio). - Servidor de clima: se especifica la URL (
http://localhost:8000/mcp) y el transporte (streamable_http).
- Servidor de matemáticas: se especifica el comando (
- Se obtienen las herramientas de los servidores MCP utilizando
await client.get_tools(). - Se inicializa el LLM (
ChatGROQ) y se crea un agente React con el LLM y las herramientas. - Ejecución de consultas:
- Se invoca al agente con una pregunta matemática (por ejemplo, "What is 3 + 5 * 12?").
- El agente utiliza la herramienta
addymultiplydel servidor de matemáticas (math_server.py) a través del transportestdio.
- El agente utiliza la herramienta
- Se invoca al agente con una pregunta sobre el clima (por ejemplo, "What is the weather in NYC or California?").
- El agente utiliza la herramienta
get_weatherdel servidor de clima (weather_server.py) a través del transportestreamable_http.
- El agente utiliza la herramienta
- La función
mainse ejecuta utilizandoasyncio.run(main()).
- Se invoca al agente con una pregunta matemática (por ejemplo, "What is 3 + 5 * 12?").
- Este cliente puede comunicarse con múltiples servidores MCP que utilizan diferentes protocolos de transporte, demostrando la flexibilidad del protocolo MCP.
Comprende grandes cantidades de material como un genio — con LilysAI
Más de 1.000.000 de exploradores del conocimiento usan Lilys AI.
