¿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.
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 Microsoft1 . 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.
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.
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:
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.
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 LangChain, LangGraph y crewAI.
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.
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.
Ahora ya puede trabajar con Ollama y Granite.
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:
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.
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
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.
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,
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.
Para configurar un proveedor de búsqueda (por ejemplo, SearXNG), siga esta guía.
Los parámetros de configuración son los siguientes:
| Parámetro | Descripción | Valor predeterminado |
|---|---|---|
| task_model_id | Modelo principal para la ejecución de tareas | granito3.2:8b |
| vision_model_id | Modelo de visión para el análisis de imágenes | granite-vision3.2:2b |
| openai_api_url | Endpoint de API para llamadas de modelos de estilo OpenAI | http://localhost:11434 |
| openai_api_key | Clave de API para autenticación | Ollama |
| vision_api_url | Endpoint para tareas relacionadas con la visión | http://localhost:11434 |
| model_temperature | Controla la aleatoriedad de la respuesta | 0 |
| max_plan_steps | Pasos máximos en la planificación de agentes | 6 |
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.
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.
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.
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.
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.
[1] Wu, Qingyun, et al. “AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation Framework”. GitHub. 2023. github.com/microsoft/autogen.