Introducción a los Agentes de AI con el Framework de CrewAI

Los avances en la inteligencia artificial (IA) han revolucionado la manera en que interactuamos con las máquinas y cómo las utilizamos para mejorar la eficiencia en diversas tareas. Uno de los desarrollos más significativos en este campo es la creación de agentes de AI que utilizan modelos de lenguaje grande (LLMs, por sus siglas en inglés) para predecir y generar contenido, así como para interactuar de manera más humana y eficaz.

En este contexto, el framework crewAI se ha convertido en una herramienta poderosa para diseñar y desplegar agentes de AI que pueden automatizar y mejorar una amplia gama de tareas.

Veamos como funciona y desarrollemos un ejemplo de generadores de contenido simple.

La fuente de este contenido proviene de los cursos cortos de Deeplearning, concretamente del curso impartido por Joao Moura, Founder de CrewAI: «Multi ai agent systems with crewai»

Repasemos rápidamente algunos conceptos clave sobre agentes.

Regular Prompting Experience

Regular Prompting Experience

Esta imagen ilustra la experiencia típica de interacción con un modelo de lenguaje grande (LLM). El usuario proporciona un prompt (una entrada o consulta) y el modelo genera una respuesta en función de su entrenamiento previo. En esta configuración, el LLM actúa principalmente como un predictor de texto, generando contenido que se ajustan al contexto y la estructura del prompt dado.

An Agent is Born

An Agent is Born

Esta otra lógica muestra el proceso mediante el cual un agente de AI se desarrolla y adquiere capacidades más complejas. En este esquema, los LLMs de diversas plataformas como OpenAI, HuggingFace, y Ollama se integran para predecir el siguiente token más probable y crear contenido. Este proceso implica un tipo de cognición, donde el agente no solo crea contenido, sino que también reacciona de manera razonable a diferentes inputs, lo que lo convierte en un agente funcional.

Estructura de un Agente

Estructura de un Agente

Esta tercera imagen detalla la estructura operativa de un agente de AI. Aquí se muestra cómo un agente recibe una tarea específica y utiliza diversas herramientas para procesar esta tarea y generar una respuesta adecuada. El flujo básico es el siguiente:

  1. Task (Tarea): El agente recibe una tarea específica que debe resolver.
  2. Agent (Agente): El agente, alimentado por un LLM, procesa la tarea utilizando sus capacidades cognitivas para entender y generar respuestas adecuadas.
  3. Tools (Herramientas): El agente puede utilizar varias herramientas a su disposición para realizar la tarea, mejorando su capacidad de respuesta y precisión.
  4. Answer (Respuesta): Finalmente, el agente proporciona una respuesta basada en el procesamiento de la tarea y el uso de herramientas.

Multi Agents System

Multi Agents System

Adicionalmente podemos crear un conjunto de agentes que se requieran para determinadas tareas los unos a los otros e incluso que detrás tengan distintos LLMs ejecutando cada tarea.

Proyecto: Multi Agent System para creación de contenidos

Vamos a crear un sencillo sistema multi agente para la creación de contenidos.

Nota: La ventaja de utilizar varias cadenas :

varname = «línea 1 del texto»
«línea 2 del texto»
frente a la docstring con comillas triples

varname = «»»línea 1 del texto
línea 2 del texto
«»»
es que puede evitar añadir esos espacios en blanco y caracteres de nueva línea, haciéndolo mejor formateado para pasarlo al LLM.

Como siempre lo primero, las dependencias del proyecto:

crewai==0.28.8
crewai_tools==0.1.6
langchain_community==0.0.29

Luego las configuraciones de API y modelo, en esta caso utilizamos GPT 3.5 pero puedes trabajar con multiples modelos a través de este framework

from crewai import Agent, Task, Crew

import os
from utils import get_openai_api_key

openai_api_key = get_openai_api_key()
os.environ["OPENAI_MODEL_NAME"] = 'gpt-3.5-turbo'

Agent: Planner

Definimos un agente que planifica

planner = Agent(
    role="Content Planner",
    goal="Plan engaging and factually accurate content on {topic}",
    backstory="You're working on planning a blog article "
              "about the topic: {topic}."
              "You collect information that helps the "
              "audience learn something "
              "and make informed decisions. "
              "Your work is the basis for "
              "the Content Writer to write an article on this topic,"
              "lenaguage output: spanish",
    allow_delegation=False, #no delegar tareas en otro agente
	verbose=True
)

Agent: Writer

Definimos un agente que escribe

writer = Agent(
    role="Content Writer",
    goal="Write insightful and factually accurate "
         "opinion piece about the topic: {topic}",
    backstory="You're working on a writing "
              "a new opinion piece about the topic: {topic}. "
              "You base your writing on the work of "
              "the Content Planner, who provides an outline "
              "and relevant context about the topic. "
              "You follow the main objectives and "
              "direction of the outline, "
              "as provide by the Content Planner. "
              "You also provide objective and impartial insights "
              "and back them up with information "
              "provide by the Content Planner. "
              "You acknowledge in your opinion piece "
              "when your statements are opinions "
              "as opposed to objective statements,"
              "lenaguage output: spanish",
    allow_delegation=False,
    verbose=True
)

Agent: Editor

Deifinimos un agente editor

editor = Agent(
    role="Editor",
    goal="Edit a given blog post to align with "
         "the writing style of the organization. ",
    backstory="You are an editor who receives a blog post "
              "from the Content Writer. "
              "Your goal is to review the blog post "
              "to ensure that it follows journalistic best practices,"
              "provides balanced viewpoints "
              "when providing opinions or assertions, "
              "and also avoids major controversial topics "
              "or opinions when possible,"
              "lenaguage output: spanish",
    allow_delegation=False,
    verbose=True
)

Creating Tasks

Definimos tareas para cada agente y proporcionamos una descripción, un resultado esperado y un agente que debe ejecutarla. Algo importante a tener en cuenta es que las tareas en el framework de CrewAI son por defecto secuenciales, es decir, se ejecutan en el orden en que fueron declaradas.

Task: Plan

Definimos la tarea para el agente que planifica.

plan = Task(
    description=(
        "1. Prioritize the latest trends, key players, "
            "and noteworthy news on {topic}.\n"
        "2. Identify the target audience, considering "
            "their interests and pain points.\n"
        "3. Develop a detailed content outline including "
            "an introduction, key points, and a call to action.\n"
        "4. Include SEO keywords and relevant data or sources."
    ),
    expected_output="A comprehensive content plan document "
        "with an outline, audience analysis, "
        "SEO keywords, and resources,"
        "lenguage output: spanish",
    agent=planner,
)

Task: Write

Definimos la tarea para el agente que escribe.

write = Task(
    description=(
        "1. Use the content plan to craft a compelling "
            "blog post in spanish lenguage on {topic}.\n"
        "2. Incorporate SEO keywords naturally.\n"
		"3. Sections/Subtitles are properly named "
            "in an engaging manner.\n"
        "4. Ensure the post is structured with an "
            "engaging introduction, insightful body, "
            "and a summarizing conclusion.\n"
        "5. Proofread for grammatical errors and "
            "alignment with the brand's voice.\n"
    ),
    expected_output="A well-written blog post in Spanish lenguage "
        "in markdown format, ready for publication, "
        "each section should have 2 or 3 paragraphs.",
    agent=writer,
)

Task: Edit

Definimos la tarea para el agente que edita.

edit = Task(
    description=("Proofread the given blog post for "
                 "grammatical errors and "
                 "alignment with the brand's voice."),
    expected_output="A well-written blog post in markdown format, "
                    "lenguage output: spanish,"
                    "ready for publication, "
                    "each section should have 2 or 3 paragraphs.",
    agent=editor
)

Creating the Crew

Creamos la tripulación de Agentes. Pasamos las tareas a realizar por dichos Agentes.
Nota: Para este sencillo ejemplo, las tareas se ejecutarán secuencialmente (es decir, son dependientes unas de otras), por lo que el orden de la tarea en la lista si que importa.
verbose=2 permite ver todos los logs de la ejecución.

crew = Crew(
    agents=[planner, writer, editor],
    tasks=[plan, write, edit],
    verbose=2 #define la cantidad de log que quiero ver
)

Ejecutamos el trabajo de la tripulación.
Nota: Los LLM pueden proporcionar diferentes resultados para la misma entrada.

result = crew.kickoff(inputs={"topic": "Multi AI Agent System con crewAI"})

Resultado

El impacto de los sistemas Multi AI Agent con crewAI en el mundo empresarial

Introducción

En la actualidad, el uso de sistemas Multi AI Agent con crewAI está revolucionando diversas industrias, desde la atención médica hasta el comercio electrónico. Empresas de renombre como Google, Amazon y Microsoft están invirtiendo recursos significativos en el desarrollo de estos sistemas para mejorar la eficiencia operativa y la toma de decisiones. La integración de la inteligencia artificial en equipos de trabajo se perfila como una de las principales tendencias tecnológicas del futuro cercano.

Tendencias actuales en sistemas Multi AI Agent con crewAI
La empresa líder en el campo de los sistemas Multi AI Agent es crewAI, que ofrece soluciones personalizadas para diferentes sectores. Junto a crewAI, empresas como IBM Watson, Salesforce Einstein y Oracle AI están liderando la implementación de estos sistemas innovadores. Recientemente, crewAI lanzó una importante actualización de su plataforma, permitiendo una mayor integración de múltiples agentes de inteligencia artificial en un solo sistema.

Principales actores en el mercado y sus soluciones innovadoras
La implementación de sistemas Multi AI Agent con crewAI ha demostrado impactar positivamente la productividad empresarial. Un estudio reciente reveló que las empresas que utilizan estos sistemas experimentaron un aumento del 30% en la productividad de sus equipos. Esta tendencia ha llevado a un crecimiento significativo en la adopción de soluciones de inteligencia artificial en el entorno empresarial.

Impacto de estos sistemas en la productividad y eficiencia empresarial
Los sistemas Multi AI Agent con crewAI no solo mejoran la eficiencia operativa, sino que también optimizan la toma de decisiones en las organizaciones. Los profesionales de la tecnología, empresarios y tomadores de decisiones están interesados en implementar estas soluciones para mantenerse actualizados sobre las últimas tendencias tecnológicas y mejorar la eficiencia en sus empresas.

Conclusión
En resumen, la implementación de sistemas Multi AI Agent con crewAI ofrece una amplia gama de beneficios para las organizaciones, desde el aumento de la productividad hasta la optimización de la toma de decisiones. Es crucial para las empresas interesadas en mejorar su eficiencia operativa explorar estas soluciones innovadoras y mantenerse a la vanguardia en un entorno empresarial cada vez más competitivo. ¡No pierdas la oportunidad de aprovechar el poder de la inteligencia artificial en tu empresa!

Proyecto: Customer Support

Intentemos algo más de complejidad haciendo uso de tools, memoria y delegación de tareas.

En este caso crearemos un equipo para soporte de atención al cliente de CrewAI basado en su documentación.

La idea es tener un agente que da soporte de atención y otro que revisa el trabajo hecho y lo devuelve en caso de que sea necesario.

Juegos de rol, concentración y cooperación

Este proyecto consta de 2 agentes que cooperan, uno de ellos tiene la capacidad de dar feedback y otro puede acceder a la documentación oficial de Crewai a través de la herramienta de scraping del framework.

Delegación de tareas entre agentes

Lo interesante en este caso es que permitimos que los agentes deleguen sus tareas en caso que lo vean necesario. Al no establecer allow_delegation=False, allow_delegation toma su valor por defecto de ser True.

¡Al lío! definimos lo primero como en el proyecto anterior.

from crewai import Agent, Task, Crew
import os
from utils import get_openai_api_key

openai_api_key = get_openai_api_key()
os.environ["OPENAI_MODEL_NAME"] = 'gpt-3.5-turbo'

Support Agent

support_agent = Agent(
    role="Senior Support Representative",
	goal="Be the most friendly and helpful "
        "support representative in your team",
	backstory=(
		"You work at crewAI (https://crewai.com) and "
        " are now working on providing "
		"support to {customer}, a super important customer "
        " for your company."
		"You need to make sure that you provide the best support!"
		"Make sure to provide full complete answers, "
        " and make no assumptions."
	),
	allow_delegation=False,
	verbose=True
)

"""By not setting allow_delegation=False, allow_delegation takes its default value of being True.
This means the agent can delegate its work to another agent which is better suited to do a particular task."""

QA Agent

Es recomendable tener un agente de testing en proyectos de equipo de agentes para supervisar el trabajo hecho y dar feedcbak.

support_quality_assurance_agent = Agent(
	role="Support Quality Assurance Specialist",
	goal="Get recognition for providing the "
    "best support quality assurance in your team",
	backstory=(
		"You work at crewAI (https://crewai.com) and "
        "are now working with your team "
		"on a request from {customer} ensuring that "
        "the support representative is "
		"providing the best support possible.\n"
		"You need to make sure that the support representative "
        "is providing full"
		"complete answers, and make no assumptions."
	),
	verbose=True
)

"""Role Playing: Both agents have been given a role, goal and backstory.
Focus: Both agents have been prompted to get into the character of the roles they are playing.
Cooperation: Support Quality Assurance Agent can delegate work back to the Support Agent, allowing for these agents to work together."""

Tools

La asignación de herramientas se puede hacer a nivel de agente o de tarea, pero, se debe tener en cuenta que las tools asigandas en una tarea sobreescriben a las asignadas a nivel de agente.

Asignación de herramientas a los agentes IA
#Import CrewAI tools

from crewai_tools import SerperDevTool, \
                         ScrapeWebsiteTool, \
                         WebsiteSearchTool

"""Possible Custom Tools
Load customer data
Tap into previous conversations
Load data from a CRM
Checking existing bug reports
Checking existing feature requests
Checking ongoing tickets
... and more

#Some ways of using CrewAI tools

search_tool = SerperDevTool()
scrape_tool = ScrapeWebsiteTool()
"""

Ahora hacemos el scraping para obtener la documentación de CrewAI

#Instantiate a document scraper tool.
#The tool will scrape a page (only 1 URL) of the CrewAI documentation.

docs_scrape_tool = ScrapeWebsiteTool(
    website_url="https://docs.crewai.com/how-to/Creating-a-Crew-and-kick-it-off/"
)

"""Different Ways to Give Agents Tools
Agent Level: The Agent can use the Tool(s) on any Task it performs.
Task Level: The Agent will only use the Tool(s) when performing that specific Task.
Note: Task Tools override the Agent Tools."""

Pasamos la herramienta al nivel de la tarea y se la aseignamos al agente de soporte

#You are passing the Tool on the Task Level.

inquiry_resolution = Task(
    description=(
        "{customer} just reached out with a super important ask:\n"
	    "{inquiry}\n\n"
        "{person} from {customer} is the one that reached out. "
		"Make sure to use everything you know "
        "to provide the best support possible."
		"You must strive to provide a complete "
        "and accurate response to the customer's inquiry."
    ),
    expected_output=(
	    "A detailed, informative response to the "
        "customer's inquiry that addresses "
        "all aspects of their question.\n"
        "The response should include references "
        "to everything you used to find the answer, "
        "including external data or solutions. "
        "Ensure the answer is complete, "
		"leaving no questions unanswered, and maintain a helpful and friendly "
		"tone throughout."
    ),
	tools=[docs_scrape_tool],
    agent=support_agent,
)

Tarea para el QA Agent

#quality_assurance_review is not using any Tool(s)
#Here the QA Agent will only review the work of the Support Agent

quality_assurance_review = Task(
    description=(
        "Review the response drafted by the Senior Support Representative for {customer}'s inquiry. "
        "Ensure that the answer is comprehensive, accurate, and adheres to the "
		"high-quality standards expected for customer support.\n"
        "Verify that all parts of the customer's inquiry "
        "have been addressed "
		"thoroughly, with a helpful and friendly tone.\n"
        "Check for references and sources used to "
        " find the information, "
		"ensuring the response is well-supported and "
        "leaves no questions unanswered."
    ),
    expected_output=(
        "A final, detailed, and informative response "
        "ready to be sent to the customer.\n"
        "This response should fully address the "
        "customer's inquiry, incorporating all "
		"relevant feedback and improvements.\n"
		"Don't be too formal, we are a chill and cool company "
	    "but maintain a professional and friendly tone throughout."
    ),
    agent=support_quality_assurance_agent,
)

Creamos la Crew y definimos la memoria a True, lo que nos permite brincar de memoria a nuestros agentes para que cuenten con un mejor contexto, esta es una posibilidad que brinda el framework de Crewai.

#Memory: Setting `memory=True` when putting the crew together enables Memory.

crew = Crew(
  agents=[support_agent, support_quality_assurance_agent],
  tasks=[inquiry_resolution, quality_assurance_review],
  verbose=2,
  memory=True
)

¡A correr!

#Guardrails: By running the execution below, you can see that the agents and the responses are within the scope of what we expect from them.

inputs = {
    "customer": "DeepLearningAI",
    "person": "Andrew Ng",
    "inquiry": "I need help with setting up a Crew "
               "and kicking it off, specifically "
               "how can I add memory to my crew? "
               "Can you provide guidance?"
}
result = crew.kickoff(inputs=inputs)

Visualizamos el resultado:

# Display the final result as Markdown

from IPython.display import Markdown
Markdown(result)

Sobre roles y agentes de IA

Sobre los roles y los agentes que queremos que «trabajen» en nuestro equipo, debemos posicionarnos como managers y pensar en las capacidades, tareas, enfoques, y características que tendrá cada uno, tal y como pensamos en los integrantes de un equipo de trabajo.

Sobre roles y agentes de IA

Mientras más completas, granulares y detallada sea una tarea o un rol mejores serán los resultados.

Conclusiones

Con este framework tenemos mucho recorrido en cuanto a la prevensión y manejo de errores, al uso de memoria, utilización de herramientas y delegación de tareas entre muchas otras cosas.

Crear agentes que operan tomando decisiones antes de arrojar el resultado es un enfoque experimental que gana cada vez más adeptos. Permiten definir roles específicos, conseguir objetivos definidos y realizar multiples tareas haciendo uso de herramientas de las que estos agentes se valen para alcanzar el mejor resultado.

Mi consejo si te interesa este mundo es explorar la doucmentación de CrewAi y hacer el curso corto de Deeplearning. Para casos de uso que involucran más complejidad te aconsejo leer AI Agents: Encuentra trabajo con este sistema de agentes

Cualquier aporte es bienvenido =)

Deja un comentario

Scroll al inicio