HuggingFace ブログ : Agents.js の紹介: JavaScript を使用した LLM ツールの提供

HuggingFace ブログ : Agents.js の紹介: JavaScript を使用した LLM ツールの提供 (翻訳/解説)

翻訳 : クラスキャット セールスインフォメーション
作成日時 : 10/10/2023

* 本ページは、HuggingFace Blog の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

クラスキャット 人工知能 研究開発支援サービス

クラスキャット は人工知能・テレワークに関する各種サービスを提供しています。お気軽にご相談ください :

◆ 人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。スケジュール
  • お住まいの地域に関係なく 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 モデルで支援されていて、ハブから呼び出されるツールを使用しています。🚀

 

以上