最終更新日:
ChatGPTの流行と同AIのプラグイン利用開始によって、OpenAIが提供するLLMを活用したLLMアプリが台頭してました。そうしたアプリとしてPDF文書を入力するとその文書の要約文が生成されるような単純なインタラクションのものが発表された後、BabyAGIのような特定のタスクを指示すると、タスク達成のために必要なサブタスクを自律的に実行するタイプのものが登場しました。こうした自律的なサブタスク実行能力を備えたLLMアプリをキルパトリック氏はGPTエージェントと命名しました。
キルパトリック氏はGPTエージェントこそが今後台頭する次世代LLMアプリのカテゴリーと予想しており、そうしたアプリを開発している企業をリストアップしたインフォグラフィックを作成して公開しています(インフォグラフィックの詳細は以下の翻訳記事本文参照)。また、LangChainやLangSmithといったLLMアプリ開発ツールが充実することにより、GPTエージェントの開発が容易になるとも同氏は考えています。
なお、キルパトリック氏はGPTエージェントの台頭を「個人的な見解と考え」と位置づけていますが、同氏がOpenAI DevRelというポジションを明らかにしたうえでGPTエージェントを称賛していることから、OpenAIとしてもGPTエージェントの台頭を容認していると推測されます。
なお、以下の記事本文はローガン・キルパトリック氏に直接コンタクトをとり、翻訳許可を頂いたうえで翻訳したものです。また、翻訳記事の内容は同氏の見解であり、特定の国や地域ならびに組織や団体を代表するものではなく、翻訳者およびAINOW編集部の主義主張を表明したものでもありません。
以下の翻訳記事を作成するにあたっては、日本語の文章として読み易くするために、意訳やコンテクストを明確にするための補足を行っています。
エージェントがAIの未来の中核となる理由を学ぶ
先週、GPTエージェントのアイデアにもとづいたクールな製品を作っているのは誰か、と尋ねるツイートをわたしはしたのだが、その反響に圧倒された(※訳註1)。また、エージェントとは何か、なぜエージェントがこれほど普及しつつあるのかを理解していない人が多いことにも驚いた。
Who are people building cool things with GPT agents and what are they building?
Please connect them with me 👇🏻🧵
— Logan.GPT (@OfficialLoganK) July 14, 2023
この投稿は、「自律型GPTエージェントが何なのかわからない」状態から、このトピックについて友人やオンライン上で理にかなった議論ができるようになるために執筆したものである。
私たちはエージェントとは何か、この領域がどこへ行こうとしているのか、そしてこの初期のテクノロジーが実際に動いている素晴らしい例をたくさん取り上げる。いつものように、この記事はこのトピックに関する私の個人的な見解と考えを反映しており、こうした事情こそが私の個人的なブログ記事を読む理由となっている。では、飛び込もう!
・・・
(基本的な)GPTエージェントとは何か?😎
まずいくつかの用語を定義してから、GPTエージェントについて詳しく説明しよう。誰だって語彙の宿題をするのは好きではないが、今日AIで使われている奇妙な言葉を考えると、正しい用語で舞台を整えることは非常に重要だ。以下の用語は非常に専門的なのだが、ChatGPTを通じて大衆に広まった。
GPT = Generative Pre-trained Transformer(生成的訓練済みTransformer)、これはChatGPTのような大規模言語モデル(LLM)を動かす中核となるLM(Language Model:言語モデル)モデル・アーキテクチャだ。
次に、エージェントとは何かを見てみよう。
エージェント = いくつかのゴール/タスクが定義され、繰り返し実行されるように設定された大規模言語モデル。これは、ChatGPTのようなツールで大規模言語モデル(LLM)が「通常」使用される方法とは異なる。通常、LLMユーザは単独の質問を投げかけ、その回答として単一の応答を得る。対してエージェントは複雑なワークフローを持ち、人間がインタラクションのすべての部分を強制することなく、モデルが本質的に自分自身と対話する。
上記の定義はChatGPTとエージェントは関連しているが、全く異なるユーザエクスペリエンスを提供するという文脈を理解するのに非常に役立つ。ChatGPTは単一的なクエリの入力を受け取り、出力を返す。そのため、一度に1つより多いタスクを実行できない。ChatGPTのインタラクションはプラグインが登場したことで少し変化し、外部ツールを利用して1ステップあたり最大10リクエストまで実行できるようになった。プラグインによって、ChatGPTの内部で「エージェント」のアイデアが最初に現れたと言える。エージェントはモデルが何をすべきか、そして追加のリクエストを送るかどうかの判断を下している。
プラグインを試したことがない人のために説明しておくと、その基本的な考え方は、ChatGPTに外部ツールのAPIがどのように動作するかを伝えれば、ユーザのクエリにもとづいてChatGPTが外部APIにリクエストを送るコードを書いて実行できる。もしユーザが天気予報のプラグインをインストールしていたとして、「NVCの気温は何度?」と質問した場合、モデルはそれに答えられないことを理解し、ユーザがインストールしている利用可能なプラグインを調べる。例えばChatGPTがリクエストを送信し、APIが「NYCは有効なロケーションではないので、略称ではなく正式な都市名を使用してください」というエラーメッセージを返したとしよう。モデルは実際にそのエラーを読み、それを修正するために新しいリクエストを送信できる。これが、今日の製品ワークフローで動作するエージェントの最も単純な例である。
最後に、エージェントのことをGPTエージェントと呼んでいるのは、単に「エージェント」が非常に一般的な単語であり、断りなくこの単語を使うと文脈が明確でなくなることが多いからである。GPTエージェントという用語を使えば、この用語がChatGPTやAIと多少関係があるため、エージェントを別の角度から見る必要があるいう考えを強めてくれる。もっとも今後エージェント、自律エージェント、GPTエージェントという言葉を耳にするかも知れないが、これらはすべて同じものを指している。
・・・
基本を超えて
AutoGPTやBabyAGIのようなGPTエージェントを普及させたプロジェクトは、これまでに作られたオープンソースプロジェクトの中で最も人気のある部類である。エージェントのアイデアは開発者の想像力をかき立て、人々はこのアイデアに関連したツールや会社を作ろうと躍起になっている。
付言すれば、もし読者諸氏が開発者でエージェント体験を構築したいのであれば、Langchainには開発者がゼロからすべてを構築することなく、これを実現するのに役立つ素晴らしいライブラリとツール群がある(※訳註2)。
BabyAGIのようなシステムがどのように機能するかの詳細な図を見る前に、アイデアを単純化してみるのは価値がある。エージェントとは何かを一言で表すとすれば、次のようになるだろう。「大規模言語モデルに目標を与え、(その目標達成のために)ループの中でモデル自身がプロンプトを生成する能力」である。これが本当に起こっていることのすべてだ。インタラクションが(ユーザとLLMとの会話という)単線的なものである代わりに、パラレル(複数のプロンプトが同時に同じ目標を解決しようとする)であったり、シングルプレイヤー(会話に人間が必要ない)であったりする。
簡単なお願い:まず、ここまで読んでくれてありがとう。私の兄(ペンシルバニア大学卒、ハーバード大学の学生、元NASAの契約社員)がAIについて書き始めている。以下の彼のMediumアカウントのフォローを検討してもらえると、私にとって大きな意味がある。
https://medium.com/@crskilpatrick807彼が取り組んでいるコンテンツは本当に超エキサイティングだ。このコンテンツは乞うご期待であり、ぜひ読んで頂けるとありがたい。
以下の図はBabyAGIがどのように動作するかを表した図であり、少しのあいだ凝視して欲しい。少しわかりにくいかも知れないが、順を追って見ていけばより理解できるようになるだろう。
エージェントのゴールとメインタスクを作成した後、BabyAGIの処理は以下の3つのステップに分けられる。
- 最初の未完了タスクを取得する
- 結果をエンリッチし、ベクターデータベースに保存する(現時点でこの意味がわからなくても心配ない)
- 新しいタスクを作成し、タスクリストを再編成する
具体的な例を挙げて、一緒に考えてみよう。タスクは例えば「ChatGPTとそれができることに関する1500語のブログ記事を作成する」ことから始められる。エージェントを操作するユーザとして、あなたはタスクの要件について書き出せるし、それを好きなだけ詳しく説明できる。
モデルはこれらの要求を受け取り、以下のようなことを実行する。
sub_tasks = openai.ChatCompletion.create( model="gpt-4", messages=[ {"role": "system", "content": "You are an world class assistant designed to help people accomplishh tasks"}, {"role": "user", "content": "Create a 1500 word blog post on ChatGPT and what it can do"}, {"role": "user", "content": "Take the users request above and break it down into simple sub-tasks which can be easily done."} ] )
この例では、エージェントを動かすためにOpenAI APIを使っている。システムメッセージによって、エージェントをある程度定義できる。この例では、私たちはシステムメッセージをあまり使っていない。そして、ユーザクエリを追加し、次の重要なステップとしてクエリをサブタスクに分割するタスクを追加している(※訳註3)。
- “role”: “system”, “content”に続くメッセージでは、「あなたは、人々がタスクを達成するのを助けるように設計された世界クラスのアシスタントだ」とLLMの振舞いを指示している。
- 次の”role”: “user”, “content”に続くメッセージでは、「ChatGPTとそれができることに関する1500語のブログ記事を作成する」というユーザの要求を入力として受けている。
- さらに次の”role”: “user”, “content”に続くメッセージでは「上記のユーザの要求を、簡単に実行できる単純なサブタスクに分解しなさい」という指示をLLMに出している。
続いてサブタスクを取り出してそれらを実行するループにおいて、追加的なクエリがさまざまなシステムメッセージを使ってモデルを呼び出す(こうしたアーキテクチャをもつエージェントにはライティングエージェント、リサーチエージェントなどさまざまなものが考られる)。このタスクでは「何をすべきかが100%明確になり、高い精度でタスクを実行できるようになるまで、より単純なサブタスクに分解しなさい」というようなことが要求されるだろう。こうすることで、モデルがタスクを追加する無限ループに陥ることはない(無限ループはプロンプトエンジニアリングを正しく行わない場合に、今日のエージェントでよく生じる問題だ)。
余談だが、GPTエージェントを実現するには多くのOpenAI APIリクエストが必要になる、とあなたは言うかも知れない。その通りであり、エージェントのワークフローは多くのLLM使用量を消費する。それゆえ、ChatGPTのプレイグラウンドを使う際は注意が必要である。最近3時間あたり50通に増えたとは言え、今日の制限ではその上限を考えると、おそらくChatGPTで自律エージェントを実行できないだろう(ChatGPTの制限に関する詳細は以下の記事を参照。)(※訳註4)。
現況を振り返ると、エージェントを構築する最初のステップ、最初のタスクのサブタスクへの分割、そしてリスト内のタスクを実行するモデルを見てきた。BabyAGIのフローで言及する価値のあるいくつかの部分は次の通りである。「エンリッチ リザルト(enrich results:結果を豊かにする)」処理は、タスクをより具体的で詳細なものにするようモデルに依頼するという単純な意味であり、自動プロンプトエンジニアリングの一形態である。また、結果がベクターデータベースに保存されることも示しており、処理を通じてモデルが行ったすべてのステップを確実に追跡するのに役立つ。最初のゴールにもとづいて、ある最終状態に到達するためにモデルが行った「作業」を見ることで、そうした作業をどのように行ったかを直感的に理解できるようになる。
BabyAGIのワークフローで興味深い最後のことは、リストに優先順位をつけるというアイデアだ。この処理は、人間であれば誰しもが仕事をうまくこなすために意識的に、あるいは無意識のうちにやっていることだろう。デフォルトではモデルは要求された順番に物事を実行するのだが、この処理があることで、モデルが実際にタスクを完了させるのに適した順序で関連するタスクが完了することが保証される。
・・・
行動するエージェント👀
これまでエージェントのハイレベルとローレベルについて多くのことを話してきた。しかし、これらのエージェントが実際に動いているのを見ると、すべてがもっとエキサイティングになる。多くの例を紹介する前に、この分野で立ち上げられた企業やプロジェクトを紹介した私が作成したインフォグラフィックをご覧いただきたい(画像が長くて申し訳ない)。
基盤エージェントは私が汎用的だと考えているもので、どんなタスクでもエージェントのワークフローでうまく機能するように分解できるように設計されている。こうしたエージェントには、BabyAGIやAutoGPTのようなプロジェクトがある。歴史的にはAutoGPTが最もよく使われるプロジェクトであったが、最近ウェブアプリを閉鎖したため、ローカルで行う必要がある。
エージェントの動きを見るために、オンラインでコードを実行できる環境である以下の素晴らしいHugging Faceスペースを使ってみよう。
APIキーを外部のウェブサイトに貼り付けるのは非常に慎重にするべきことに注意しよう。実験用に新しいものを作成し、その後すぐに削除してAPIが流出しないようにする価値はある。
まずは、私がコードを学ぶのを助けるという目標から始めよう。
BabyAGIの最初のステップは、私の目標にもとづいてタスクリストを作ることだ。このエージェントは、「Pythonのコードを教えて」を以下のタスクに分割した。
- Pythonをインストールし、Pythonインタプリタに慣れる
- Pythonの基本構文とデータ型を学ぶ
- 制御フローと意思決定を理解する
- 関数とクラスについて学ぶ
- モジュールとパッケージについて学ぶ
などなど。
次のステップは、最初の項目を学ぶのに役立つテキストをモデルが書いてくれることだ。これを自分で試してみると、結果が少々奇妙であることがわかるだろう。例えば、BabyAGIは最初のステップを無視して、代わりにhello worldプログラムを実行する。また、スペース内のUIレイヤーは、起こっていることの一部を抽象化しているのかも知れない。他に何が可能かを知るために、ここで遊んでみることをお勧めする。今日、最初のエージェントを動かすことは、このテクノロジーの最先端に立つための素晴らしい方法だ。
・・・
エージェントの未来🔮
エージェントのアイデア自体がこれから大きく変わることはない。これらは、タスクを解決できる汎用AIを搭載した最初の存在であり続ける。時間の経過とともに、より強力なモデルとツールによって、エージェントはより洗練されていくだろう。例えばある人の問題を取り上げ、それを反復的に分解して解決し、答えを検証できる単純なカスタマーサービス・エージェントの誕生が想像できる。そのためには、以下のようないくつかのことが必要だ。
- GPT-4は素晴らしい機能を持つが、現状ではまだ使用事例が限られている。
- 我々が見たBabyAGIの事例は超シンプルだが便利なものの好例だが、真の製品ユースケースを満たすには能力が不足している。
- モデルが進化するにつれて、ゴールをサブタスクに分割することはもはや正しい設計決定ではないかも知れず、(サブタスクに分解する)アーキテクチャとは異なったものが考案されるかも知れない。最終的な状態から出発し、そこから逆算して潜在的に効率的な順序で作業を実行するようなアプローチなど代替案はいくらでも考えられる。
ツールの面ではLangChainのような組織がLangSmithのような製品を発表し、開発者がLangSmithのワークフローを使ってGPTエージェントの製品化するのを支援している(※訳註6)。
キルパトリック氏はLangSmithライクなLLMアプリ開発環境が今後多数リリースされると予想しており、LangSmith以外の製品としてVercel AI SDKを挙げている。
現実には、この次世代のエージェントを実現するために、全く新しいフレームワークが生まれるだろう。こうしたエージェントがプラグインとAutoGPTから始まったと考えると、とてもエキサイティングだ。(次世代エージェントがもたらす)未来と世界トップクラスのエージェントを活用する能力を私が取り組む仕事に役立てることに、私はとても期待している。
もし、エージェントに関する質問があれば、コメント欄に書き込んでほしい。それらに対応するセクションをこの記事の一番下に追加するつもりだ!
コーディング
commit.dev | エンジニアのキャリア設計を支援するエージェント「Career Copilot」を提供 |
Automata | コード生成エージェント |
Bitbuilder | GitHubリポジトリに常駐するインターンレベルのコード生成エージェント |
BambooAI | 平易な英語で質問を投げかけるだけで、回答とともに必要に応じてすぐに使えるビジュアライゼーションを提供するエージェント |
Fine.dev | コーディング支援エージェント |
AI2SQL | SQLコーディング支援エージェント |
E2B.dev | ファイルのアップロードなどのOSタスクを実行するエージェント |
CreateAppAI | 簡単な指示でアプリを自動生成するエージェント |
Infrahive | 各種開発タスクや事務タスクを実行するエージェントを提供 |
Codestory | VSCode対応のコード生成エージェント |
汎用目的
Datagran | データサイエンスプロジェクトを実行するエージェント |
AutoGPT | 各種タスクを実行するエージェント |
Socra | 目標達成を支援するパーソナルエージェント |
Multion | 日常的なタスク遂行を支援するライフコパイロット |
Argil.ai | 各種ビジネスタスクを自動化するエージェント |
Agent.so | 各種タスクを実行するエージェントを簡単に訓練できる |
BabyAGI | 本記事で解説 |
Judini | ユーザが所望するタスクを実行するエージェントを提供 |
産性向上/ビジネス
Sublayer | 顧客のソフトウェア開発を支援するエージェント |
Modellution | ソフトウェアシステムの要件定義からコーディングまで支援すエージェント |
Aomni | 顧客管理支援エージェント |
Gista | ウェブセールスエージェント |
GenForge | 文書読解支援エージェント |
AskViable | データ分析エージェント |
Talktodata | 自然言語の質問をSQLクエリに変換するエージェント |
Fermat | タスクを実行するエージェントを設計できるツール |
Pragma | マルチプラットフォームのナレッジエージェント |
Azule.ai | 顧客対応エージェント |
求職
Ambition | 求職活動支援エージェント |
Hello Interview | 面接訓練エージェント |
その他
Heights Platform | ビジネスコーティングエージェント |
AILifeStory | 自伝出版支援エージェント |
Voyager | Minecraftプレイエージェント |
Idomoo | 動画制作支援エージェント |
原文
『What are GPT Agents? A deep dive into the AI interface of the future』
著者
ローガン・キルパトリック(Logan Kilpatrick)
翻訳
吉本幸記(フリーライター、JDLA Deep Learning for GENERAL 2019 #1取得)
編集
おざけん