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

人工知能

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

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

人工知能

『DeepHowのCEO兼共同創業者、サム・ジェン氏によるインタビューシリーズ』

ディープハウのCEO兼共同創設者であるサム・ジェンは、著名な投資家から支持される急速に進化するスタートアップを率いていま...

機械学習

3つの質問:大規模言語モデルについて、Jacob Andreasに聞く

CSAILの科学者は、最新の機械学習モデルを通じた自然言語処理の研究と、言語が他の種類の人工知能をどのように高めるかの調査...

人工知能

「コマンドバーの創設者兼CEO、ジェームズ・エバンスによるインタビューシリーズ」

ジェームズ・エバンズは、CommandBarの創設者兼CEOであり、製品、マーケティング、顧客チームを支援するために設計されたAIパ...

人工知能

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

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

機械学習

「Prolificの機械学習エンジニア兼AIコンサルタント、ノラ・ペトロヴァ – インタビューシリーズ」

『Nora Petrovaは、Prolificの機械学習エンジニア兼AIコンサルタントですProlificは2014年に設立され、既にGoogle、スタンフ...