警告
JSエージェントは、アイデアをテストするための初期の図書館であり、積極的に開発されていません。 ModElfusion -JSエージェントからの私の学習を組み込んだTypeScriptのより一般的なAIライブラリをご覧ください。
JSエージェントは、JavaScriptとTypeScriptを使用してAIエージェントを作成するための構成可能で拡張可能なフレームワークです。
エージェントのプロトタイプの作成は簡単ですが、その信頼性と堅牢性を高めることは複雑であり、かなりの実験が必要です。 JSエージェントは、堅牢なビルディングブロックとツールを提供して、岩帯状のエージェントをより速く開発するのに役立ちます。
チュートリアル
ウィキペディア検索エンジンにアクセスし、ウィキペディアの記事を読むことができるエージェント。それを使用して、ウィキペディアのコンテンツに関する質問に答えることができます。
使用済みの機能: gpt-3.5-turbo
、カスタムツール(Wikipediaの検索、Wikipediaの記事を読む)、次のステップループを生成し、Max Steps Run Controller
Dockerコンテナで動作する自動開発エージェント。ファイルを読み取り、ファイルの書き込み、コマンドを実行できます。プロジェクトに合わせて調整し、コードを文書化したり、テストを書き、テストや機能を更新したりするなどして使用できます。
使用済みの機能: gpt-4
、Dockerコンテナでのツール実行、固定セットアップステップを備えたエージェント、複数のエージェント実行プロパティ、次のステップループ、ツール(読み取りファイル、書き込みファイル、実行、コマンド、ASKユーザー)、エージェント実行後のコスト計算
babyagiのJSエージェント実装。
使用する機能:HTTPエージェントサーバー、テキスト完了モデル( text-davinci-003
)、カスタマイズされたコンソール出力、更新タスク計画ループ
PDFとトピックを取得し、トピックに関連するPDFからのすべてのコンテンツを含むTwitterスレッドを作成します。
使用される機能:関数構成(エージェントなし)、PDFロード、スプリット抽出拒否 - rewrite
テキストをチャンクに分割し、埋め込みを生成します。
使用される機能:直接関数呼び出し(エージェントなし)、分割テキスト(GPT3トコーネザー)、埋め込みの生成
text-davinci-003
など)gpt-4
、 gpt-3.5-turbo
)text-embedding-ada-002
)Step
およびAgentRun
など)。npm install js-agent
エージェントの作成方法を学ぶための例とドキュメントを参照してください。
import * as $ from "js-agent" ;
const openai = $ . provider . openai ;
export async function runWikipediaAgent ( {
wikipediaSearchKey ,
wikipediaSearchCx ,
openAiApiKey ,
task ,
} : {
openAiApiKey : string ;
wikipediaSearchKey : string ;
wikipediaSearchCx : string ;
task : string ;
} ) {
const searchWikipediaAction = $ . tool . programmableGoogleSearchEngineAction ( {
id : "search-wikipedia" ,
description :
"Search wikipedia using a search term. Returns a list of pages." ,
execute : $ . tool . executeProgrammableGoogleSearchEngineAction ( {
key : wikipediaSearchKey ,
cx : wikipediaSearchCx ,
} ) ,
} ) ;
const readWikipediaArticleAction = $ . tool . extractInformationFromWebpage ( {
id : "read-wikipedia-article" ,
description :
"Read a wikipedia article and summarize it considering the query." ,
inputExample : {
url : "https://en.wikipedia.org/wiki/Artificial_intelligence" ,
topic : "{query that you are answering}" ,
} ,
execute : $ . tool . executeExtractInformationFromWebpage ( {
extract : $ . text . extractRecursively . asExtractFunction ( {
split : $ . text . splitRecursivelyAtToken . asSplitFunction ( {
tokenizer : openai . tokenizer . forModel ( {
model : "gpt-3.5-turbo" ,
} ) ,
maxChunkSize : 2048 , // needs to fit into a gpt-3.5-turbo prompt and leave room for the answer
} ) ,
extract : $ . text . generateText . asFunction ( {
prompt : $ . prompt . extractChatPrompt ( ) ,
model : openai . chatModel ( {
apiKey : openAiApiKey ,
model : "gpt-3.5-turbo" ,
} ) ,
} ) ,
} ) ,
} ) ,
} ) ;
return $ . runAgent < { task : string } > ( {
properties : { task } ,
agent : $ . step . generateNextStepLoop ( {
actions : [ searchWikipediaAction , readWikipediaArticleAction ] ,
actionFormat : $ . action . format . flexibleJson ( ) ,
prompt : $ . prompt . concatChatPrompts (
async ( { runState : { task } } ) => [
{
role : "system" ,
content : `## ROLE
You are an knowledge worker that answers questions using Wikipedia content. You speak perfect JSON.
## CONSTRAINTS
All facts for your answer must be from Wikipedia articles that you have read.
## TASK
${ task } ` ,
} ,
] ,
$ . prompt . availableActionsChatPrompt ( ) ,
$ . prompt . recentStepsChatPrompt ( { maxSteps : 6 } )
) ,
model : openai . chatModel ( {
apiKey : openAiApiKey ,
model : "gpt-3.5-turbo" ,
} ) ,
} ) ,
controller : $ . agent . controller . maxSteps ( 20 ) ,
observer : $ . agent . observer . showRunInConsole ( { name : "Wikipedia Agent" } ) ,
} ) ;
}