Introducendo Agents.js Dai strumenti ai tuoi LLMs utilizzando JavaScript
Introducendo Agents.js per LLMs con JavaScript
Abbiamo recentemente lavorato su Agents.js su huggingface.js. È una nuova libreria per dare accesso agli LLM da JavaScript sia nel browser che nel server. Viene fornita con alcuni strumenti multi-modalità già pronti all’uso e può essere facilmente estesa con i propri strumenti e modelli linguistici.
Installazione
Iniziare è molto facile, puoi ottenere la libreria da npm con il seguente comando:
npm install @huggingface/agents
Utilizzo
La libreria espone l’oggetto HfAgent
che è il punto di ingresso alla libreria. Puoi istanziarlo in questo modo:
import { HfAgent } from "@huggingface/agents";
const HF_ACCESS_TOKEN = "hf_..."; // ottieni il tuo token su https://huggingface.co/settings/tokens
const agent = new HfAgent(HF_ACCESS_TOKEN);
In seguito, utilizzare l’agente è semplice. Gli si fornisce un comando in testo semplice e restituirà alcuni messaggi.
- Machine Unlearning nel 2023 Dove siamo e dove stiamo andando
- IA che insegna ad altre IA
- Top 15 YouTubers di AI da seguire nel 2023
const code = await agent.generateCode(
"Disegna una foto di un'anatra di gomma con un cappello a cilindro, poi descrivi questa foto."
);
che in questo caso ha generato il seguente codice
// codice generato dal LLM
async function generate() {
const output = await textToImage("anatra di gomma con un cappello a cilindro");
message("Generiamo l'immagine dell'anatra", output);
const caption = await imageToText(output);
message("Ora descriviamo l'immagine", caption);
return output;
}
Quindi il codice può essere valutato come segue:
const messages = await agent.evaluateCode(code);
I messaggi restituiti dall’agente sono oggetti con la seguente struttura:
export interface Update {
message: string;
data: undefined | string | Blob;
dove message
è un testo informativo e data
può contenere una stringa o un blob. Il blob può essere utilizzato per visualizzare immagini o audio.
Se ti fidi del tuo ambiente (vedi avviso), puoi anche eseguire il codice direttamente dall’invito con run
:
const messages = await agent.run(
"Disegna una foto di un'anatra di gomma con un cappello a cilindro, poi descrivi questa foto."
);
Avviso sull’utilizzo
Attualmente utilizzare questa libreria significherà valutare codice arbitrario nel browser (o in Node). Questo è un rischio per la sicurezza e non dovrebbe essere fatto in un ambiente non attendibile. Consigliamo di utilizzare generateCode
e evaluateCode
invece di run
per verificare quale codice si sta eseguendo.
LLM personalizzati 💬
Per impostazione predefinita, HfAgent
utilizzerà OpenAssistant/oasst-sft-4-pythia-12b-epoch-3.5 come LLM ospitato nell’API di inferenza. Tuttavia, questo può essere personalizzato.
Quando istanzi il tuo HfAgent
, puoi passare un LLM personalizzato. Un LLM in questo contesto è qualsiasi funzione asincrona che prende un input di tipo stringa e restituisce una promise per una stringa. Ad esempio, se hai una chiave API di OpenAI, puoi utilizzarla in questo modo:
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 agent = new HfAgent(HF_ACCESS_TOKEN, llmOpenAI);
Strumenti personalizzati 🛠️
Agents.js è stato progettato per essere facilmente espandibile con strumenti e esempi personalizzati. Ad esempio, se volessi aggiungere uno strumento che traducesse il testo dall’inglese al tedesco, potresti farlo in questo modo:
import type { Tool } from "@huggingface/agents/src/types";
const englishToGermanTool: Tool = {
name: "englishToGerman",
description:
"Prende una stringa di input in inglese e restituisce una traduzione in tedesco. ",
examples: [
{
prompt: "traduci la stringa 'hello world' in tedesco",
code: `const output = englishToGerman("hello world")`,
tools: ["englishToGerman"],
},
{
prompt:
"traduci la stringa 'The quick brown fox jumps over the lazy dog` in tedesco",
code: `const output = englishToGerman("The quick brown fox jumps over the lazy dog")`,
tools: ["englishToGerman"],
},
],
call: async (input, inference) => {
const data = await input;
if (typeof data !== "string") {
throw new Error("L'input deve essere una stringa");
}
const result = await inference.translation({
model: "t5-base",
inputs: input,
});
return result.translation_text;
},
};
Ora questo strumento può essere aggiunto alla lista degli strumenti durante l’inizializzazione dell’agente.
import { HfAgent, LLMFromHub, defaultTools } from "@huggingface/agents";
const HF_ACCESS_TOKEN = "hf_...";
const agent = new HfAgent(HF_ACCESS_TOKEN, LLMFromHub("hf_..."), [
englishToGermanTool,
...defaultTools,
]);
Passaggio dei file di input all’agente 🖼️
L’agente può anche prendere file di input da passare agli strumenti. Puoi passare un parametro opzionale FileList
a generateCode
e evaluateCode
come segue:
Se hai il seguente html:
<input id="fileItem" type="file" />
Allora puoi fare:
const agent = new HfAgent(HF_ACCESS_TOKEN);
const files = document.getElementById("fileItem").files; // Tipo FileList
const code = agent.generateCode(
"Aggiungi una didascalia all'immagine e poi leggi il testo ad alta voce.",
files
);
Che genera il seguente codice quando viene passata un’immagine:
// codice generato dal LLM
async function generate(image) {
const caption = await imageToText(image);
message("Prima aggiungiamo una didascalia all'immagine", caption);
const output = await textToSpeech(caption);
message("Poi leggiamo la didascalia ad alta voce", output);
return output;
}
Demo 🎉
Abbiamo lavorato su una demo per Agents.js che puoi provare qui. Attualmente, per ottenere i migliori risultati, dovresti passare una chiave API di OpenAI da utilizzare come tuo LLM. Stiamo lavorando per aggiungere migliori LLM open source a questa demo per dimostrare appieno la potenza del software open source. 🚀