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.
- IA que enseña a otras IA
- Los 15 principales YouTubers de IA para seguir en 2023
- Jasper Vs. Scalenut ¿Cuál es la mejor herramienta de escritura? (Julio 2023)
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!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- Cómo aprovechar la IA generativa para desarrollar estrategias de lanzamiento al mercado globales, ágiles y efectivas
- La investigación de IA en el CNRS francés propone un meta-imager inteligente programable y adaptativo al ruido un enfoque oportuno para la detección específica de tareas y adaptativa al ruido
- 8 cosas que la mayoría de los programas de ciencia de datos no enseñan (pero deberías saber) – Parte 1
- Cómo resolver problemas de optimización utilizando programación lineal
- 3 formas de superar los desafíos de calidad de datos en un proyecto de análisis
- dbt Incremental – La forma correcta
- Optimizando tus estrategias con enfoques más allá de las pruebas A/B