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

Aprendizaje Automático

Científicos mejoran la detección de delirio utilizando Inteligencia Artificial y electroencefalogramas de respuesta rápida.

Detectar el delirio no es fácil, pero puede tener grandes beneficios: acelerar la atención esencial para los paciente...

Aprendizaje Automático

Moldeando el Futuro de la IA Una Encuesta Exhaustiva sobre Modelos de Pre-Entrenamiento Visión-Lenguaje y su Papel en Tareas Uni-Modales y Multi-Modales.

En la última publicación de artículos en investigación de inteligencia artificial, un equipo de investigadores profun...

Inteligencia Artificial

Conoce a Llemma el modelo de lenguaje matemático de próxima generación que supera los estándares actuales

Los modelos de lenguaje entrenados en diversas mezclas de texto muestran una comprensión y generación de lenguaje gen...

Inteligencia Artificial

Molino de Turing la supercomputadora de IA impulsa el motor económico del Reino Unido

El hogar de la primera revolución industrial acaba de hacer una inversión masiva en la próxima. El gobierno del Reino...

Inteligencia Artificial

Este artículo de IA hace público HyperDreamer un avance en la creación de contenido 3D con texturizado avanzado, modelado de 360 grados y edición interactiva

No es fácil generar modelos en 3D detallados y realistas a partir de una sola imagen RGB. Investigadores del Laborato...

Inteligencia Artificial

Un novedoso modelo de aprendizaje automático acelera la evaluación de catalizadores de descarbonización de meses a milisegundos

La biomasa se refiere a la materia orgánica, como plantas, madera, residuos agrícolas y otros materiales biológicos, ...