Agents.jsをご紹介します:JavaScriptを使用して、あなたのLLMにツールを提供します

Agents.js JavaScript tool for your LLM

最近、私たちはhuggingface.jsでAgents.jsに取り組んでいます。これはJavaScriptからLLMsに対するツールアクセスを提供するための新しいライブラリで、ブラウザまたはサーバーのどちらでも使用できます。デフォルトでいくつかのマルチモーダルツールが付属しており、独自のツールや言語モデルで簡単に拡張することができます。

インストール

始めるのは非常に簡単です。次のコマンドでnpmからライブラリを取得できます:

npm install @huggingface/agents

使用方法

このライブラリはHfAgentオブジェクトを公開しており、これがライブラリへのエントリーポイントです。次のようにインスタンス化することができます:

import { HfAgent } from "@huggingface/agents";

const HF_ACCESS_TOKEN = "hf_..."; // 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."
);

この場合、次のコードが生成されました

// 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);

エージェントが返すメッセージは次の形式のオブジェクトです:

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."
);

使用上の注意

現在、このライブラリを使用するとブラウザ(またはNode)で任意のコードを評価することになります。これはセキュリティリスクであり、信頼できない環境で行うべきではありません。実行するコードを確認するために、generateCodeevaluateCoderunの代わりに使用することをお勧めします。

カスタムLLMs 💬

デフォルトでは、HfAgentは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<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);

カスタムツール 🛠️

Agents.jsは、独自のツールや例を簡単に追加できるように設計されています。たとえば、英語からドイツ語へのテキストの翻訳ツールを追加したい場合は、次のようにすることができます:

import type { Tool } from "@huggingface/agents/src/types";

const englishToGermanTool: Tool = {
  name: "englishToGerman",
  description:
    "英語の入力文字列を受け取り、ドイツ語の翻訳を返すツール。",
  examples: [
    {
      prompt: "文字列 'hello world' をドイツ語に翻訳する",
      code: `const output = englishToGerman("hello world")`,
      tools: ["englishToGerman"],
    },
    {
      prompt:
        "文字列 'The quick brown fox jumps over the lazy dog' をドイツ語に翻訳する",
      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("入力は文字列である必要があります");
    }
    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,
]);

エージェントに入力ファイルを渡す方法 🖼️

エージェントは、ツールに渡すための入力ファイルを受け取ることもできます。以下のようにgenerateCodeおよびevaluateCodeにオプションのFileListを渡すことができます。

以下のようなhtmlがある場合:

<input id="fileItem" type="file" />

次のようにすることができます:

const agent = new HfAgent(HF_ACCESS_TOKEN);
const files = document.getElementById("fileItem").files; // FileList型
const code = agent.generateCode(
  "画像のキャプションを作成して、テキストを読み上げます。",
  files
);

画像を渡した場合、以下のコードが生成されます:

// LLMによって生成されたコード
async function generate(image) {
  const caption = await imageToText(image);
  message("まず、画像のキャプションを作成します", caption);
  const output = await textToSpeech(caption);
  message("次に、キャプションを読み上げます", output);
  return output;
}

デモ 🎉

Agents.jsのデモを作成しましたので、こちらで試すことができます。現在、最良の結果を得るためには、OpenAI APIキーをLLMとして使用する必要があります。このデモには、オープンソースのフルパワーを実証するために、より優れたオープンLLMを追加する作業を進めています。🚀

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

人工知能

「ジンディのCEO兼共同創設者、セリーナ・リー― インタビューシリーズ」

「Celina Leeは、ZindiのCEO兼共同創設者であり、アフリカのデータサイエンティスト向けの最大の専門ネットワークです Celina...

機械学習

「機械学習 vs AI vs ディープラーニング vs ニューラルネットワーク:違いは何ですか?」

テクノロジーの急速な進化は、ビジネスが効率化のために洗練されたアルゴリズムにますます頼ることで、私たちの日常生活を形...

人工知能

「aiOlaのCEO兼共同創設者、アミール・ハラマティによるインタビューシリーズ」

アミール・ハラマティは、aiOlaのCEO兼共同創業者であり、スピーチを作業可能にし、どこでも完全な正確さで業界固有のプロセ...

人工知能

「サティスファイラボのCEO兼共同創設者、ドニー・ホワイト- インタビューシリーズ」

2016年に設立されたSatisfi Labsは、会話型AI企業のリーディングカンパニーです早期の成功は、ニューヨーク・メッツ、メイシ...

人工知能

ディープAIの共同創業者兼CEO、ケビン・バラゴナ氏- インタビューシリーズ

ディープAIの創設者であるケビン・バラゴナは、10年以上の経験を持つプロのソフトウェアエンジニア兼製品開発者です彼の目標...

人工知能

「Ntropyの共同創設者兼CEO、ナレ・ヴァルダニアンについて - インタビューシリーズ」

「Ntropyの共同創設者兼CEOであるナレ・ヴァルダニアンは、超人的な精度で100ミリ秒以下で金融取引を解析することを可能にす...