Presentando Agents.js Dale herramientas a tus LLMs utilizando JavaScript

Agents.js Herramientas para tus LLMs con JavaScript

Recientemente hemos estado trabajando en Agents.js en huggingface.js. Es una nueva biblioteca para dar acceso a herramientas a LLMs desde JavaScript en el navegador o en el servidor. Viene con algunas herramientas multimodales predefinidas y se puede ampliar fácilmente con sus propias herramientas y modelos de lenguaje.

Instalación

Comenzar es muy fácil, puedes obtener la biblioteca desde npm con el siguiente comando:

npm install @huggingface/agents

Uso

La biblioteca expone el objeto HfAgent que es el punto de entrada a la biblioteca. Puedes instanciarlo de la siguiente manera:

import { HfAgent } from "@huggingface/agents";

const HF_ACCESS_TOKEN = "hf_..."; // obtén tu token en https://huggingface.co/settings/tokens

const agente = new HfAgent(HF_ACCESS_TOKEN);

Después, usar el agente es fácil. Le das un comando de texto plano y este devolverá algunos mensajes.

const codigo = await agente.generateCode(
  "Dibuja una imagen de un pato de goma con un sombrero de copa, luego describe esta imagen."
);

que en este caso generó el siguiente código

// código generado por el LLM
async function generar() {
  const salida = await textoAImagen("pato de goma con un sombrero de copa");
  mensaje("Generamos la imagen del pato", salida);
  const descripcion = await imagenATexto(salida);
  mensaje("Ahora describimos la imagen", descripcion);
  return salida;
}

Luego el código se puede evaluar de la siguiente manera:

const mensajes = await agente.evaluateCode(codigo);

Los mensajes devueltos por el agente son objetos con la siguiente estructura:

export interface Actualización {
    mensaje: string;
    datos: undefined | string | Bloque;

donde mensaje es un texto informativo y datos puede contener una cadena de texto o un bloque. El bloque se puede utilizar para mostrar imágenes o audio.

Si confías en tu entorno (ver advertencia), también puedes ejecutar el código directamente desde el prompt con run:

const mensajes = await agente.run(
  "Dibuja una imagen de un pato de goma con un sombrero de copa, luego describe esta imagen."
);

Advertencia de uso

Actualmente, el uso de esta biblioteca significará evaluar código arbitrario en el navegador (o en Node). Esto representa un riesgo de seguridad y no se debe hacer en un entorno no confiable. Recomendamos que uses generateCode y evaluateCode en lugar de run para verificar qué código estás ejecutando.

LLMs personalizados 💬

Por defecto, HfAgent utilizará OpenAssistant/oasst-sft-4-pythia-12b-epoch-3.5 como el LLM en la API de inferencia. Sin embargo, esto se puede personalizar.

Cuando instancies tu HfAgent, puedes pasar un LLM personalizado. Un LLM en este contexto es cualquier función asíncrona que toma una cadena de entrada y devuelve una promesa de una cadena de salida. Por ejemplo, si tienes una clave de API de OpenAI, podrías hacer uso de ella de la siguiente manera:

import { Configuration, OpenAIApi } from "openai";

const HF_ACCESS_TOKEN = "hf_...";
const api = new OpenAIApi(new Configuration({ apiKey: "sk-..." }));

const llmOpenAI = async (prompt: string): Promise<string> => {
  return (
    (
      await api.createCompletion({
        model: "text-davinci-003",
        prompt: prompt,
        max_tokens: 1000,
      })
    ).data.choices[0].text ?? ""
  );
};

const agente = new HfAgent(HF_ACCESS_TOKEN, llmOpenAI);

Herramientas personalizadas 🛠️

Agents.js fue diseñado para ser fácilmente ampliado con herramientas y ejemplos personalizados. Por ejemplo, si quisieras agregar una herramienta que tradujera texto de inglés a alemán, podrías hacerlo de la siguiente manera:

import type { Herramienta } from "@huggingface/agents/src/types";

const herramientaInglesAleman: Herramienta = {
  nombre: "inglesAleman",
  descripción:
    "Toma una cadena de entrada en inglés y devuelve una traducción al alemán. ",
  ejemplos: [
    {
      prompt: "traduce la cadena 'hello world' al alemán",
      código: `const salida = inglesAleman("hello world")`,
      herramientas: ["inglesAleman"],
    },
    {
      prompt:
        "traduce la cadena 'The quick brown fox jumps over the lazy dog` al alemán",
      código: `const salida = inglesAleman("The quick brown fox jumps over the lazy dog")`,
      herramientas: ["inglesAleman"],
    },
  ],
  llamada: async (entrada, inferencia) => {
    const datos = await entrada;
    if (typeof datos !== "string") {
      throw new Error("La entrada debe ser una cadena de texto");
    }
    const resultado = await inferencia.traducción({
      modelo: "t5-base",
      entradas: entrada,
    });
    return resultado.texto_traducción;
  },
};

Ahora esta herramienta se puede agregar a la lista de herramientas al iniciar su agente.

import { HfAgent, LLMFromHub, defaultTools } from "@huggingface/agents";

const HF_ACCESS_TOKEN = "hf_...";

const agent = new HfAgent(HF_ACCESS_TOKEN, LLMFromHub("hf_..."), [
  englishToGermanTool,
  ...defaultTools,
]);

Pasando archivos de entrada al agente 🖼️

El agente también puede recibir archivos de entrada para pasar a las herramientas. Puede pasar un FileList opcional a generateCode y evaluateCode de la siguiente manera:

Si tiene el siguiente html:

<input id="fileItem" type="file" />

Entonces puede hacer lo siguiente:

const agent = new HfAgent(HF_ACCESS_TOKEN);
const files = document.getElementById("fileItem").files; // Tipo FileList
const code = agent.generateCode(
  "Describa la imagen y luego lea el texto en voz alta.",
  files
);

Lo cual genera el siguiente código al pasar una imagen:

// código generado por el LLM
async function generate(image) {
  const caption = await imageToText(image);
  message("Primero describimos la imagen", caption);
  const output = await textToSpeech(caption);
  message("Luego leemos la descripción en voz alta", output);
  return output;
}

Demostración 🎉

Hemos estado trabajando en una demostración para Agents.js que puedes probar aquí. Actualmente, para obtener mejores resultados, debes pasar una clave de API de OpenAI para usar como tu LLM. Actualmente estamos trabajando en agregar mejores LLM abiertos a esta demostración para demostrar, con suerte, todo el poder del código abierto. 🚀

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Luma AI lanza Genie un nuevo modelo de IA generativa en 3D que te permite crear objetos en 3D a partir de texto.

En el modelado 3D, crear objetos 3D realistas a menudo ha sido una tarea compleja y que consume mucho tiempo. Las per...

Inteligencia Artificial

Perro robot establece récord mundial de velocidad

El Instituto Avanzado de Ciencia y Tecnología de Corea ha recibido reconocimiento del Guinness World Records por su i...

Inteligencia Artificial

Microsoft presenta Python en Excel uniendo habilidades analíticas con familiaridad para mejorar la comprensión de los datos.

El ámbito del análisis de datos ha luchado durante mucho tiempo por integrar de manera fluida las capacidades de Pyth...