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);
その後、エージェントの使用は簡単です。プレーンテキストのコマンドを渡すと、いくつかのメッセージが返されます。
- 「ジェネレーティブAIを活用してグローバルでアジャイルかつ効果的なゴートゥーマーケット戦略を開発する方法」
- 「ChatGPTの新しいカスタム指示がリリースされました使い方は以下の通りです」
- 線形プログラミングを使用して最適化問題を解決する方法
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)で任意のコードを評価することになります。これはセキュリティリスクであり、信頼できない環境で行うべきではありません。実行するコードを確認するために、generateCode
とevaluateCode
をrun
の代わりに使用することをお勧めします。
カスタム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!
Was this article helpful?
93 out of 132 found this helpful
Related articles