Cómo crear un agente utilizando Bee Agent Framework y watsonx.ai

watsonx.aiLLMAgentes
Publicado el 10/11/2024
Fecha de ultima actualización: 10/11/2024

IBM Research ha lanzado Bee Agent Framework como un proyecto de código abierto, una herramienta potente diseñada para facilitar la creación, implementación y gestión de agentes de inteligencia artificial. Este framework es independiente del modelo, lo que significa que puede usarse tanto con modelos de código abierto como con modelos propietarios, permitiendo así construir workflow’s robustos para diversas aplicaciones. El framework está desarrollado en TypeScript/JavaScript, aunque también se pueden crear tools utilizando Python.

Al igual que otros framework’s para agentes de IA, utiliza una técnica llamada Reasoning and Acting (ReAct). Esta técnica añade pasos accionables que el agente puede ejecutar dentro de su entorno, mejorando así su capacidad de razonamiento y toma de decisiones.

¿Qué es Bee Agent Framework?

Bee Agent Framework facilita la creación de workflow’s basados en agentes escalables, utilizando modelos de IA. Está diseñado para funcionar de manera robusta con modelos avanzados como IBM Granite y Llama 3.x, incluyendo Llama 3.1.

Beneficios

  • Compatibilidad con Múltiples Modelos: Optimizado para IBM Granite y Llama 3.x.
  • Flexibilidad en el Desarrollo: Puedes usar agentes predefinidos o crear los tuyos personalizados.
  • Interpretación de Código Segura: Ejecuta código en contenedores sandbox para evitar riesgos de seguridad.
  • Estrategias de Memoria Avanzadas: Diferentes métodos para optimizar el uso de tokens y reducir costos.

Creacion del agente

En este ejemplo, crearemos un agente con una herramienta (Tool) que extraerá palabras clave de un párrafo y devolverá una de ellas de manera aleatoria. Con este ejercicio, aprenderemos a crear un agente, definir una herramienta e integrar un modelo de lenguaje (LLM) de watsonx.ai.

Paso 1: Inicializar el proyecto

Comencemos configurando el proyecto e instalando Bee Agent Framework:

cmd
npm init -y
npm install bee-agent-framework dotenv
npm install -D tsx

Paso 2: Configuración de watsonx.ai

Configura tus credenciales de watsonx.ai creando un archivo .env:

.env
WATSONX_API_KEY=Tu API Key aquí
WATSONX_PROJECT_ID=El ID de tu proyecto aquí

Paso 3: Creacion de una Tool

A continuación, crearemos un archivo tool.ts que contendrá nuestra herramienta.

  • Iniciaremos importando las funciones y clases necesarias del framework:
tool.ts
import { StringToolOutput, Tool, ToolInput, ToolInputValidationError } from "bee-agent-framework/tools/base"
import { z } from "zod"
  • Creamos una clase llamada KeywordsTool que definirá nuestra herramienta, indicando su nombre y descripción:
KeywordsTool.ts
export class KeywordsTool extends Tool<StringToolOutput> {
name = "Keywords"
description = "Este tool extrae palabras clave a partir de un párrafo dado. Utiliza técnicas de análisis de texto para identificar términos importantes.";
// Registro de la Tool en Bee Agent Framework
static {
this.register()
}
}
  • Especificamos el esquema de entrada que esperamos recibir para procesar las palabras clave:
KeywordsTool.ts
export class KeywordsTool extends Tool<StringToolOutput> {
...
inputSchema() {
return z.object({
keywords: z.array(z.string()) .describe("Lista de palabras claves")
});
}
}
  • Definimos el método _run que se encargará de procesar la lista de palabras clave y devolver una palabra seleccionada al azar:
KeywordsTool.ts
export class KeywordsTool extends Tool<StringToolOutput> {
...
protected async _run(input: ToolInput<this>): Promise<StringToolOutput> {
const keywords = input.keywords
// Selecciona una palabra clave aleatoriamente
const response = keywords[Math.floor(Math.random() * keywords.length)]
if (!response) {
throw new ToolInputValidationError(`No se encontraron palabras claves`)
}
return new StringToolOutput(response)
}
}

Paso 4: Instanciar el agente

  • Creamos el archivo main.ts e instanciamos nuestro agente, donde definiremos el nombre del modelo a utilizar y la tool que hemos creado:
main.ts
import { BeeAgent } from "bee-agent-framework/agents/bee/agent"
import { WatsonXChatLLM } from "bee-agent-framework/adapters/watsonx/chat"
import { TokenMemory } from "bee-agent-framework/memory/tokenMemory"
import { KeywordsTool } from "./tool"
const llm = WatsonXChatLLM.fromPreset("meta-llama/llama-3-1-70b-instruct", {
apiKey: process.env.WATSONX_API_KEY,
projectId: process.env.WATSONX_PROJECT_ID,
parameters: {
decoding_method: "greedy",
max_new_tokens: 200,
temperature: 0
}
})
// Instanciación del agente con la memoria y la tool creada
const agent = new BeeAgent({
llm,
memory: new TokenMemory({ llm }),
tools: [new KeywordsTool()],
});
  • Finalmente, ejecutamos el agente para obtener una palabra clave de un párrafo:
main.ts
const response = await agent
.run({ prompt: "Dame una palabra clave del siguiente parrafo: La inteligencia artificial (IA) ha revolucionado múltiples industrias, desde la salud hasta la educación, al automatizar tareas complejas y mejorar la toma de decisiones. Los modelos de lenguaje natural, como los desarrollados por IBM con watsonx.ai, permiten crear agentes conversacionales avanzados que comprenden y responden a preguntas de manera precisa, facilitando así la interacción entre humanos y máquinas." })
.observe((emitter) => {
emitter.on("error", ({ error }) => {
reader.write(`Agent 🤖 : `, FrameworkError.ensure(error).dump());
});
emitter.on("update", async ({ data, update, meta }) => {
console.log(`Agent (${update.key}) 🤖 : `, update.value);
});
});
// Imprimir la respuesta final del agente
console.log(`Agent 🤖 : `, response.result.text);

Paso 5: Ejecutar el agente

Podemos correr nuestro agente utilizando el siguiente comando: tsx main.ts.

Conclusión

En este ejemplo, hemos demostrado cómo crear un agente utilizando Bee Agent Framework. Aunque el framework aún se encuentra en fase Alpha, ofrece un gran potencial y es probable que reciba mejoras que optimicen el rendimiento de los agentes creados.

Si bien el objetivo de este tutorial fue mostrar cómo crear rápidamente un agente funcional, Bee Agent Framework también proporciona características avanzadas como gestión de caché, manejo de errores y reintentos automáticos, lo que permite a los desarrolladores crear aplicaciones más robustas y eficientes. A medida que el framework evoluciona, estas funcionalidades seguirán mejorando, lo que aumentará su capacidad para crear agentes aún más complejos y con mejor desempeño.