HuggingFace ブログ : Agents.js の紹介: JavaScript を使用した LLM ツールの提供 (翻訳/解説)
翻訳 : クラスキャット セールスインフォメーション
作成日時 : 10/10/2023
* 本ページは、HuggingFace Blog の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
- Introducing Agents.js: Give tools to your LLMs using JavaScript (Authors : Nathan Sarrazin ; Published : 07/24/2023)
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
- クラスキャット セールス・マーケティング本部 セールス・インフォメーション
- sales-info@classcat.com ; Web: www.classcat.com ; ClassCatJP
HuggingFace ブログ : Agents.js の紹介: JavaScript を使用した LLM ツールの提供
私たちは最近 huggingface.js で Agents.js に取り組んでいます。それはブラウザあるいはサーバで JavaScript から LLM にアクセスするツールを提供する新しいライブラリです。それはそのまま利用できる幾つかのマルチモーダルなツールを提供し、貴方自身のツールと言語モデルで簡単に拡張することができます。
インストール
開始するのは非常に簡単で、以下で npm からライブラリを取得することができます :
npm install @huggingface/agents
使用方法
ライブラリは、ライブラリへのエントリポイントである HfAgent オブジェクトを公開しています。このようにしてそれをインスタンス化できます :
import { HfAgent } from "@huggingface/agents";
const HF_ACCESS_TOKEN = "hf_..."; // get your token at https://huggingface.co/settings/tokens
const agent = new HfAgent(HF_ACCESS_TOKEN);
その後、エージェントの使用は簡単です。それにプレーンテキストのコマンドを与えると幾つかのメッセージを返します。
const code = await agent.generateCode(
"Draw a picture of a rubber duck with a top hat, then caption this picture."
);
これはこの場合、以下のコードを生成しました :
// code generated by the LLM
async function generate() {
const output = await textToImage("rubber duck with a top hat");
message("We generate the duck picture", output);
const caption = await imageToText(output);
message("Now we caption the image", caption);
return output;
}
そしてコードは以下のように評価できます :
const messages = await agent.evaluateCode(code);
エージェントにより返されるメッセージは以下の shape を持つオブジェクトです :
export interface Update {
message: string;
data: undefined | string | Blob;
ここで message は情報テキストで、data は文字列か blob のいずれかを含むことができます。blob は画像や音声を表示するために使用できます。
環境を信頼できる場合 (後述の注意を参照)、以下を run (実行) してプロンプトから直接コードを実行することもできます :
const messages = await agent.run(
"Draw a picture of a rubber duck with a top hat, then caption this picture."
);
使用上の注意
現状、このライブラリの使用はブラウザ (or Node ) で任意のコードを評価することを意味します。これはセキュリティ・リスクであり、信頼できない環境で行われるべきではありません。実行しているコードをチェックするため、run の代わりに generateCode と evaluateCode を使用することを勧めます。
カスタム LLMs 💬
デフォルトでは HfAgent は LLM として OpenAssistant/oasst-sft-4-pythia-12b-epoch-3.5 がホストされた推論 API を使用します。しかしこれはカスタマイズ可能です。
HfAgent をインスタンス化するときカスタム LLM を渡すことができます。このコンテキストでの LLM は、文字列入力を受け取り、文字列に対する promise を返す非同期関数です。例えば OpenAI API キーを持つならばこのようにそれを使用できるでしょう :
import { Configuration, OpenAIApi } from "openai";
const HF_ACCESS_TOKEN = "hf_...";
const api = new OpenAIApi(new Configuration({ apiKey: "sk-..." }));
const llmOpenAI = async (prompt: string): Promise => {
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);
カスタムツール🛠️
Agents.js はカスタムツール & サンプルで簡単に強化されるように設計されました。例えば、テキストを英語からドイツ語に翻訳するツールを追加したい場合、このようにしてそれを行えるでしょう :
import type { Tool } from "@huggingface/agents/src/types";
const englishToGermanTool: Tool = {
name: "englishToGerman",
description:
"Takes an input string in english and returns a german translation. ",
examples: [
{
prompt: "translate the string 'hello world' to german",
code: `const output = englishToGerman("hello world")`,
tools: ["englishToGerman"],
},
{
prompt:
"translate the string 'The quick brown fox jumps over the lazy dog` into german",
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("Input must be a string");
}
const result = await inference.translation({
model: "t5-base",
inputs: input,
});
return result.translation_text;
},
};
そしてエージェントをインスタンス化するとき、このツールはツールのリストに追加できます。
import { HfAgent, LLMFromHub, defaultTools } from "@huggingface/agents";
const HF_ACCESS_TOKEN = "hf_...";
const agent = new HfAgent(HF_ACCESS_TOKEN, LLMFromHub("hf_..."), [
englishToGermanTool,
...defaultTools,
]);
入力ファイルをエージェントに渡す 🖼️
エージェントはまた入力ファイルを受け取りツールに渡すこともできます。以下のようにオプションの FileList を generateCode と evaluateCode に渡すことができます :
If you have the following html:
<input id="fileItem" type="file" />
Then you can do:
const agent = new HfAgent(HF_ACCESS_TOKEN);
const files = document.getElementById("fileItem").files; // FileList type
const code = agent.generateCode(
"Caption the image and then read the text out loud.",
files
);
Which generated the following code when passing an image:
// code generated by the LLM
async function generate(image) {
const caption = await imageToText(image);
message("First we caption the image", caption);
const output = await textToSpeech(caption);
message("Then we read the caption out loud", output);
return output;
}
デモ 🎉
私たちは ここ で貴方が試すことができる Agents.js 用のデモに取り組んできました。それは HuggingChat で使用しているのと同じ Open Assistant 30B モデルで支援されていて、ハブから呼び出されるツールを使用しています。🚀
以上