RAG multiagente con AutoGen: cree localmente con Granite

Autores

Kelly Abuelsaad

Architect & Engineer, AI Platform

IBM

Anna Gutowska

AI Engineer, Developer Advocate

IBM

¿Puede crear flujos de trabajo de agentes sin necesidad de [modelos de lenguaje de gran tamaño (LLM)] extremadamente grandes y costosos (https://www.ibm.com/es-es/think/topics/large-language-models)? La respuesta es sí. En este tutorial, demostraremos cómo crear un sistema RAG multiagente localmente con AutoGen utilizando IBM® Granite.

Descripción general de RAG agéntica

La generación aumentada por recuperación (RAG) es una forma eficaz de proporcionar a un LLM conjuntos de datos adicionales de varias fuentes de datos sin necesidad de costosos ajustes. Del mismo modo, la RAG agéntica aprovecha la capacidad de un agente de IA para planificar y ejecutar subtareas junto con la recuperación de información relevante para complementar la base de conocimientos de un LLM. Esta capacidad permite la optimización y una mayor escalabilidad de las aplicaciones RAG en comparación con los chatbots tradicionales. Ya no necesitamos escribir consultas SQL complejas para extraer datos relevantes de una base de conocimientos.

El futuro de la RAG agéntica es RAG multiagente, donde varios agentes especializados colaboran para lograr una latencia y eficiencia óptimas. Demostraremos esta colaboración utilizando un modelo pequeño y eficiente como Granite 3.2 y combinándolo con una arquitectura de agente modular. Utilizaremos múltiples "miniagentes" especializados que colaboran para lograr tareas a través de la planificación adaptativa y la llamada a herramientas o funciones. Al igual que los humanos, un equipo de agentes, o un sistema multiagente, a menudo supera los heroicos esfuerzos de un individuo, especialmente cuando tienen roles claramente definidos y una comunicación efectiva.

Para la orquestación de esta colaboración, podemos utilizar AutoGen (AG2) como marco central para gestionar los flujos de trabajo y la toma de decisiones, junto con otras herramientas como Ollama para el servicio LLM local y Open WebUI para la interacción. AutoGen es un marco para crear aplicaciones de IA multiagente desarrollado por Microsoft. Cabe destacar que todos los componentes aprovechados en este tutorial son de código abierto. Juntas, estas herramientas le permiten crear un sistema de IA potente y respetuoso con la privacidad, sin salir de su ordenador portátil.

Arquitectura multiagente: cuando la colaboración supera a la competencia

Nuestro agente de recuperación Granite se basa en una arquitectura modular en la que cada agente tiene una función especializada. Al igual que los seres humanos, los agentes rinden mejor cuando reciben instrucciones específicas y el contexto suficiente para tomar una decisión informada. Demasiada información superflua, como un historial de chat sin filtrar, puede crear un problema de "aguja en un pajar", en el que resulta cada vez más difícil descifrar la señal del ruido.

Diagrama de arquitectura agéntica Arquitectura agéntica

En esta arquitectura de IA agéntica, los agentes trabajan juntos de forma secuencial para lograr el objetivo. Así es como se organiza el sistema de IA generativa:

Agente planificador: crea el plan inicial de alto nivel, una vez al principio del flujo de trabajo. Por ejemplo, si un usuario pregunta: "¿Qué proyectos de código abierto son comparables a los que utiliza mi equipo?", a continuación, el agente elaborará un plan paso a paso que podría ser algo así: "1. Buscar en los documentos del equipo tecnologías de código abierto. 2. Buscar en la web proyectos de código abierto similares a los encontrados en el paso 1". Si alguno de estos pasos falla o proporciona resultados insuficientes, el agente de reflexión puede adaptarlos posteriormente.

Asistente de investigación: el asistente de investigación es el caballo de batalla del sistema. Toma y ejecuta instrucciones como "Buscar documentos del equipo para tecnologías de código abierto". Para el paso 1 del plan, utiliza las instrucciones iniciales del agente planificador. Para los pasos posteriores, también recibe un contexto seleccionado de los resultados de los pasos anteriores.

Por ejemplo, si se le pide que "busque en la web proyectos de código abierto similares", también recibirá el resultado del paso anterior de búsqueda de documentos. Dependiendo de las instrucciones, el asistente de investigación puede utilizar herramientas como la búsqueda web o la búsqueda de documentos, o ambas, para cumplir con su tarea.

Crítico de pasos: el crítico de pasos es responsable de decidir si el resultado del paso anterior cumplió satisfactoriamente con la instrucción que se le dio. Recibe dos datos: la instrucción de un solo paso que acaba de ejecutarse y el resultado de esa instrucción. Contar con la opinión de un crítico externo en la conversación aporta claridad sobre si se ha alcanzado el objetivo, lo cual es necesario para planificar el siguiente paso.

Juez de objetivos: el juez de objetivos determina si se ha cumplido el objetivo final, basándose en todos los requisitos del objetivo proporcionado, los planes elaborados para lograrlo y la información recopilada hasta el momento. La respuesta del juez es "SÍ" o "AÚN NO", seguida de una breve explicación que no supera una o dos frases.

Agente de reflexión: el agente de reflexión es nuestro responsable ejecutivo de la toma de decisiones. Decide qué paso dar a continuación, ya sea avanzar hacia el siguiente paso previsto, cambiar de rumbo para compensar los contratiempos o confirmar que se ha alcanzado el objetivo. Al igual que un CEO de la vida real, toma mejores decisiones cuando tiene un objetivo claro en mente y se le presentan conclusiones concisas sobre el progreso que se ha realizado o no para alcanzar ese objetivo. El resultado del agente de reflexión es el siguiente paso a seguir o las instrucciones para terminar si se ha alcanzado el objetivo. Presentamos el agente de reflexión con los siguientes elementos:

  • El objetivo
  • El plan original
  • El último paso que se ejecutó
  • El resultado del último paso que indica el éxito o el fracaso
  • Una secuencia concisa de instrucciones ejecutadas previamente (solo las instrucciones, no su resultado)

La presentación de estos elementos en un formato estructurado deja claro a nuestro responsable de la toma de decisiones lo que se ha hecho para que pueda decidir qué debe suceder a continuación.

Generador de informes: una vez alcanzado el objetivo, el generador de informes sintetiza todos los hallazgos en un resultado cohesivo que responde directamente a la consulta original. Aunque cada paso del proceso genera resultados específicos, el generador de informes une todo en un informe final.

Aprovechar las herramientas de código abierto

Para los principiantes, puede ser difícil crear una aplicación de IA agéntica desde cero. Por lo tanto, utilizaremos un conjunto de herramientas de código abierto. El Granite Retrieval Agent integra múltiples herramientas para la RAG agéntica.

Open WebUI: el usuario interactúa con el sistema a través de una interfaz de chat intuitiva alojada en Open WebUI. Esta interfaz actúa como el punto principal para enviar consultas (como "Búsqueme los últimos artículos de noticias relacionados con las notas de mi proyecto") y ver los resultados.

Agente basado en Python (marco AG2): en el núcleo del sistema se encuentra un agente basado en Python creado mediante AutoGen (AG2). Este agente coordina el flujo de trabajo desglosando tareas y llamando dinámicamente a herramientas para ejecutar pasos.

El agente tiene acceso a dos herramientas principales:

  • Herramienta de búsqueda de documentos: obtiene información relevante de una base de datos vectorial que contiene notas de proyectos cargadas o documentos almacenados como embeddings. Esta búsqueda vectorial aprovecha las API de recuperación de documentos integradas dentro de Open WebUI, en lugar de configurar un almacén de datos completamente independiente.

  • Herramienta de búsqueda web: realiza búsquedas basadas en la web para recopilar conocimientos externos e información en tiempo real. En este caso, estamos utilizando SearXNG como nuestro metabuscador.

Ollama: IBM® Granite 3.2 LLM sirve como modelo de lenguaje que impulsa el sistema. Se aloja localmente mediante el uso de Ollama, lo que garantiza una inferencia rápida, la rentabilidad y la protección de datos. Si está interesado en ejecutar este proyecto con modelos más grandes, acceda a la API a través de IBM® watsonx.ai u OpenAI, por ejemplo. Sin embargo, este enfoque requiere una clave de API watsonx.ai u OpenAI. En su lugar, utilizamos Ollama alojado localmente en este tutorial.

Otros marcos de agente de código abierto comunes que no se tratan en este tutorial incluyen LangChainLangGraph y crewAI.

Pasos

Las instrucciones detalladas de configuración, así como todo el proyecto, se pueden ver en  IBM® Granite Community GitHub. La versión Jupyter Notebook de este tutorial también se puede encontrar en GitHub.

Los siguientes pasos proporcionan una configuración rápida para el agente de recuperación de Granite.

Paso 1: Instalar Ollama

Instalar Ollama es tan sencillo como descargar el cliente desde el sitio oficial de Ollama. Después de instalar Ollama, ejecute el siguiente comando para extraer Granite 3.2 LLM.

ollama pull granite3.2:8b

Ahora ya puede trabajar con Ollama y Granite.

Paso 2. Crear un agente simple (opcional) Una solución low-code para crear flujos de trabajo de agente es AutoGen Studio. Sin embargo, crear un agente simple nosotros mismos puede ayudarnos a comprender mejor la configuración de este completo proyecto RAG multiagente. Para continuar, configure un Jupyter Notebook en su entorno de desarrollo integrado (IDE) preferido y active un entorno virtual ejecutando los siguientes comandos en su terminal.

python3.11 -m venv venv
source venv/bin/activate

Necesitaremos algunas bibliotecas y módulos para este agente sencillo. Asegúrese de instalar e importar los siguientes.

!pip install -qU langchain chromadb tf-keras pyautogen "ag2[ollama]" sentence_transformers
import getpass
from autogen.agentchat.contrib.retrieve_assistant_agent import AssistantAgent
from autogen.agentchat.contrib.retrieve_user_proxy_agent import RetrieveUserProxyAgent

Hay varios parámetros de configuración que se deben establecer localmente para invocar el LLM correcto que obtuvimos utilizando Ollama.

ollama_llm_config = {
    "config_list": [
        {
            "model": "granite3.2:8b",
            "api_type": "ollama",
        }
    ],
}

Podemos pasar estos parámetros de configuración en el parámetro llm_config de la clase AssistantAgent para crear una instancia de nuestro primer agente de IA.

assistant = AssistantAgent(
    name="assistant",
    system_message="You are a helpful assistant.",
    llm_config=ollama_llm_config,
)

Este agente utiliza Granite 3.2 para sintetizar la información devuelta por el agente ragproxyagent. El documento que proporcionamos al agente RAG como contexto adicional es el archivo README Markdown sin procesar que se encuentra en el repositorio de AutoGen en GitHub. Además, podemos pasar un nuevo diccionario de configuraciones específicas para el agente de recuperación. Algunas claves adicionales que pueden resultarle útiles son vector_db, chunk_token_size e embedding_model.

Para obtener una lista completa de las claves de configuración, consulte la documentación oficial.

ragproxyagent = RetrieveUserProxyAgent(
    name="ragproxyagent",
    max_consecutive_auto_reply=3,
    is_termination_msg=lambda msg: msg.get("content") is not None or "TERMINATE" in msg["content"],
    system_message = "Context retrieval assistant.",
    retrieve_config={
        "task": "qa",
        "docs_path": "https://raw.githubusercontent.com/microsoft/autogen/main/README.md",
        "get_or_create": True,      
        "collection_name": "autogen_docs",
        "overwrite": True
    },
    code_execution_config=False,
    human_input_mode="NEVER",
)

Ahora, podemos iniciar un chat con nuestro agente de RAG para hacerle una pregunta relacionada con el documento proporcionado como contexto.

qs = "What languages does AutoGen support?"
result = ragproxyagent.initiate_chat(
    assistant, message=ragproxyagent.message_generator, problem=qs
)  

print(result)

Tenga en cuenta que el contenido del archivo README Markdown se ha eliminado de la salida por motivos de brevedad.

Resultado:

Intentando crear una colección.

2025-07-21 12:20:36,125 - autogen.agentchat.contrib.retrieve_user_proxy_agent - INFO - Found 1 chunks.
2025-07-21 12:20:36,129 - autogen.agentchat.contrib.vectordb.chromadb - INFO - No content embedding is provided. Will use the VectorDB's embedding function to generate the content embedding.

VectorDB devuelve doc_ids: [['8e9131c7']]
Añadiendo contenido del documento 8e9131c7 al contexto.

ragproxyagent (al asistente):

Es un chatbot de recuperación aumentada. Responda a las preguntas del usuario basándose en sus propios conocimientos y en el contexto proporcionado por el usuario.
Si no puede responder a la pregunta con o sin el contexto actual, debe responder exactamente "ACTUALIZAR CONTEXTO".
Debe dar una respuesta lo más breve posible.

La pregunta del usuario es: ¿Qué idiomas admite AutoGen?

El contexto es: 

[REDACTADO]


asistente (a ragproxyagent):

El texto proporcionado parece ser un Archivo README para el proyecto AutoGen, una iniciativa de código abierto de Microsoft. He aquí un resumen de su contenido:

  1. Descripción general del proyecto: AutoGen es un sistema para crear y gestionar aplicaciones complejas y distribuidas. Admite varios lenguajes (C#, Python) y proporciona un entorno de tiempo de ejecución para implementar y escalar estas aplicaciones.
  2. Componentes clave:
    • AutoGen Core: la biblioteca principal que contiene las clases e interfaces fundamentales para crear aplicaciones AutoGen.
      • AutoGen Agent: un componente de tiempo de ejecución responsable de gestionar el ciclo de vida de las aplicaciones AutoGen.
      • AutoGen Runtime Gateway: un servicio que facilita la comunicación entre agentes y permite el equilibrio de carga, el escalado y la tolerancia a fallos.
  3. Lenguajes compatibles: C# y Python son compatibles actualmente.
  4. Primeros pasos: el archivo README proporciona instrucciones sobre cómo instalar los paquetes necesarios, crear un nuevo proyecto y crear/ejecutar una aplicación AutoGen.
  5. Documentación: enlaces a documentación detallada de referencia, incluidas referencias de API, guías y tutoriales.
  6. Comunidad y contribución: directrices para contribuir al proyecto, incluida información sobre el seguimiento de problemas, solicitudes de extracción y estándares de codificación.
  7. Avisos legales: información sobre licencias y avisos de marcas registradas.
  8. Soporte y preguntas frecuentes: información sobre cómo hacer preguntas, informar de problemas y encontrar respuestas a consultas comunes.

El archivo README también incluye una tabla que resume los paquetes disponibles para cada lenguaje compatible (C# y Python) y sus respectivos gestores de paquetes (NuGet y PyPI). Esto facilita a los desarrolladores la identificación rápida de los componentes necesarios para empezar a utilizar AutoGen en su idioma preferido.


>>>>>>>> TERMINATING RUN (601a53dc-8a5d-4e19-8503-1517fe3c7634 ): se cumplió la condición del mensaje de terminación en el agente 'ragproxyagent'

¡Genial! Nuestro agente asistente y el agente RAG sintetizaron con éxito el contexto adicional para responder correctamente a la consulta del usuario con los lenguajes de programación compatibles actualmente con AutoGen. Puede pensar en esto como un chat grupal entre agentes que intercambian información. Este ejemplo es una demostración sencilla de la implementación local de RAG agéntica con AutoGen.

Paso 3. Instalar Open WebUI

Ahora, vamos a crear un sistema RAG agéntica más avanzado. En su terminal, instale y ejecute Open WebUI.

pip install open-webui
open-webui serve

Paso 4. Configurar la búsqueda web

Para la búsqueda web, aprovecharemos las capacidades de búsqueda web integradas en Open WebUI.

Open WebUI admite varios proveedores de búsqueda. En términos generales, puede utilizar un servicio de interfaz de programación de aplicaciones (API) de terceros, para el que necesitará obtener una clave API, o puede configurar localmente un contenedor SearXNG Docker. En cualquier caso, deberá configurar su proveedor de búsqueda en la consola Open WebUI.

Esta configuración, ya sea un puntero a SearXNG o la introducción de su clave API, se encuentra en Panel de administración > Configuración > Búsqueda web en la consola Open WebUI.

Consulte las instrucciones en la documentación de Open WebUI para obtener instrucciones más detalladas.

Paso 5. Importar el agente en Open WebUI

1. En su navegador, vaya a http://localhost:8080/ para acceder a Open Web IU. Si es la primera vez que abre la interfaz Open WebUI, registre un nombre de usuario y una contraseña. Esta información se mantiene completamente local en su máquina.

2. Después de información de registro, haga clic en el icono en la parte inferior izquierda donde se encuentra su nombre de usuario. En el menú, haga clic en Panel de administración.

3. En la pestaña Funciones, haga clic en + para añadir una nueva función.

4. Asigne un nombre a la función, como "Agente RAG Granite", y una descripción, str tipo.

5. Pegue el script de Python granite_autogen_rag.py en el cuadro de texto proporcionado, reemplazando cualquier contenido existente. 

6. Haga clic en Guardar en la parte inferior de la pantalla.

7. De vuelta en la página Funciones, asegúrese de que el agente esté activado.

8. Haga clic en el icono de engranaje situado junto al interruptor de activación para personalizar cualquier configuración, como el endpoint de inferencia, el endpoint SearXNG o el ID del modelo.

Ahora, su nuevo agente AutoGen aparece como modelo en la interfaz Open WebUI. Puede seleccionarlo y proporcionarle consultas de usuario.

Paso 6. Cargar documentos en Open WebUI 1. En Open WebUI, vaya a Espacio de trabajo > Conocimiento.

  1. Haga clic en *+ para crear una nueva colección.
  2. Cargue documentos para que los consulte el agente de recuperación de Granite.

Paso 7. Configurar la búsqueda web en Open WebUI

Para configurar un proveedor de búsqueda (por ejemplo, SearXNG), siga esta guía.

Los parámetros de configuración son los siguientes:

ParámetroDescripciónValor predeterminado
task_model_idModelo principal para la ejecución de tareasgranito3.2:8b
vision_model_idModelo de visión para el análisis de imágenesgranite-vision3.2:2b
openai_api_urlEndpoint de API para llamadas de modelos de estilo OpenAIhttp://localhost:11434
openai_api_keyClave de API para autenticaciónOllama
vision_api_urlEndpoint para tareas relacionadas con la visiónhttp://localhost:11434
model_temperatureControla la aleatoriedad de la respuesta0
max_plan_stepsPasos máximos en la planificación de agentes6

Nota: Estos parámetros se pueden configurar a través del icono de engranaje en la sección "Funciones" del panel de administración de Open WebUI después de agregar la función.

Paso 8. Consultar el sistema agéntico

El agente de recuperación Granite realiza RAG basado en AG2 consultando documentos locales y fuentes web, planificando tareas multiagente y aplicando una ejecución adaptativa. Inicie un chat y proporcione a su sistema agéntico una consulta relacionada con los documentos proporcionados para ver la cadena RAG en acción.

Resumen

Una configuración multiagente permite la creación de herramientas prácticas y utilizables aprovechando al máximo los modelos de código abierto de tamaño moderado como Granite 3.2. Esta arquitectura RAG agéntica, construida con herramientas de código abierto, puede servir como punto de partida para diseñar y personalizar sus agentes de respuesta a preguntas y algoritmos de IA. También se puede utilizar fuera de la caja para una amplia gama de casos de uso. En este tutorial, tuvo la oportunidad de profundizar en sistemas de agencia simples y complejos, aprovechando las capacidades de AutoGen. El LLM Granite se invocó utilizando Ollama, lo que permitió una exploración totalmente local de estos sistemas. Como siguiente paso, considere la posibilidad de integrar más herramientas personalizadas en su sistema agéntico.

Soluciones relacionadas
Desarrollo de agentes de IA de IBM 

Permita a los desarrolladores crear, implementar y monitorizar agentes de IA con el estudio IBM watsonx.ai.

 

Explore watsonx.ai
Soluciones de inteligencia artificial

Ponga la IA a trabajar en su negocio con la experiencia líder en IA del sector de IBM y junto a su cartera de soluciones.

Explore las soluciones de IA
Consultoría y servicios de IA

Reinvente las operaciones y flujos de trabajo críticos añadiendo IA para maximizar las experiencias, la toma de decisiones en tiempo real y el valor empresarial.

Explore los servicios de IA
Dé el siguiente paso

Tanto si opta por personalizar las aplicaciones y habilidades prediseñadas como si prefiere crear e implementar servicios agentivos personalizados mediante un estudio de IA, la plataforma IBM watsonx le ofrece todo lo que necesita.

Explore watsonx Orchestrate Explore watsonx.ai
Notas a pie de página

[1] Wu, Qingyun, et al. “AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation Framework”. GitHub. 2023. github.com/microsoft/autogen.