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

人工知能

「Ami Hever、UVeyeの共同創設者兼CEO - インタビューシリーズ」

עמיר חבר הוא המנכל והמייסד של UVeye, סטארט-אפ ראיה ממוחשבת בלמידה עמוקה, המציבה את התקן הגלובלי לבדיקת רכבים עם זיהוי...

人工知能

ピーター・マッキー、Sonarの開発者担当責任者-インタビューシリーズ

ピーター・マッキーはSonarのDeveloper Relationsの責任者です Sonarは、悪いコードの1兆ドルの課題を解決するプラットフォー...

人工知能

スコット・スティーブンソン、スペルブックの共同創設者兼CEO- インタビューシリーズ

スコット・スティーブンソンは、Spellbookの共同創設者兼CEOであり、OpenAIのGPT-4および他の大規模な言語モデル(LLM)に基...

人工知能

ジョナサン・ダムブロット、Cranium AIのCEO兼共同創設者- インタビューシリーズ

ジョナサン・ダムブロットは、Cranium AIのCEO兼共同創業者ですCranium AIは、サイバーセキュリティおよびデータサイエンスチ...

人工知能

「15Rockの共同創業者兼CEO、ガウタム・バクシ氏によるインタビューシリーズ」

「ガウタム・バクシは、気候リスク管理とアドバイザリーサービスのグローバルリーダーである15Rockの共同創設者兼CEOですガウ...

データサイエンス

「3つの質問:ロボットの認識とマッピングの研磨」

MIT LIDSのLuca CarloneさんとJonathan Howさんは、将来のロボットが環境をどのように知覚し、相互作用するかについて議論し...