この動画では、AIの制約されたコンテキストウィンドウの問題を解決するMemGPTについて紹介されています。MemGPTは、AIの記憶を自律的に管理し、外部コンテキストを利用して記憶を拡張することができます。この技術は、長期的なチャットやドキュメント検索における優れたパフォーマンスを実現します。動画内では、MemGPTの研究論文とコードの使用方法も取り上げられています。
公開日:2023年10月20日
※動画を再生してから読むのがオススメです。
人工知能を飛躍的に向上させるための最大のハードルのひとつが記憶だ。
AIは事実上、記憶を持っていない。
一度学習されたモデルは、そのデータセットでモデルとコンテキストに提供されたものすべてを正確に記憶する。
ウィンドウズは基本的に、プロンプトとレスポンスのサイズが非常に限られている。
しばらくは2,000トークンで、実質的には1,500語程度と言える。
その後、いくつかのオープンソースモデルでは4,000トークンに引き上げられました。
ChatGPT-4は最高で32,000トークン、クロード2は100,000トークンです。
しかしそれでも、これらのコンテキスト・ウィンドウは非常に限定的なものなので、AIには記憶が必要です。
しかし現在、この問題に対する解決策が見つかっており、それが今日私がレビューする研究論文です。
それだけでなく、論文をレビューした後、実際にコードを手に入れることができる。
著者は親切にも彼らのコードをオープンソース化してくれたので、インストール方法と使用方法をお見せします。
このプロジェクトはMemGPT、MemoryGPTと呼ばれている。
特別ゲストが参加するかもしれないので、最後までお付き合いください。
それでは行きましょう。
これがその論文「MemGPT: Towards LLMs as Operating Systems」です。
主執筆者はチャールズ・パッカーで、ヴィヴィアン・ファン、シャシール・パティル、ケビン・リン、サラ・ウッダース、ジョセフ・ゴンザレスが分担執筆者だ。
そして、これはカリフォルニア大学バークレー校のものである。
mamgpというウェブサイトがあり、コード、研究論文、使用したデータセットなどが掲載されている。
ぜひご覧ください。
しかし、私はこの論文全体に目を通し、最も興味深い部分を強調した。
では、そのいくつかを見ていこう。
そしてその後、このプロジェクトの実際の使い方を紹介しよう。
まず、要約では、最大の制約が制限されたコンテキストウィンドウであると述べられています。これは完全に理解できるものです。
そして、コンテキスト・ウィンドウがいかに制限的であるかを如実に示す最良のユースケースの2つは、長期的なチャットです。
数週間、数カ月、あるいは数年にわたるチャットを行ったり来たりし、会話の一貫性を保ちたい場合、限られたコンテキスト・ウィンドウでそれを実現するのは本当に難しい。
そして、おそらく私が今日見た中で最も価値のあるAIのユースケースは、ドキュメントとのチャットです。
何十枚、何千枚、何万枚ものドキュメントがあり、それぞれが何ページにもわたる場合、コンテキスト・ウィンドウはあっという間になくなってしまいます。
これを解決する方法はすでにいくつもありますが、MemGPTが提案しているほど包括的なものはありません。
彼らが提案しているのは、仮想コンテキスト管理システムで、事実上、コンピュータのオペレーティング・システムが持っているものを模倣している。
考えてみれば、オペレーティング・システムにはプロセッサーがあり、これはすべての処理と計算を行うCPUだ。
次にRAMがあり、これは短期記憶のようなもので、より制限されている。
そしてハードディスクやSSDは長期記憶で、事実上、好きなだけ保存することができる。
オペレーティング・システムがこれらの異なるメモリ・ストアを管理する方法は、まさにMGP PTで模倣しようとしているものだ。
つまり、高速メモリと低速メモリ間のデータ移動を通じて、大きなメモリリソースを出現させるというわけだ。
その方法については、また後で話そう。
ここでは、彼らが自分たちの手法を評価する2つの具体的なユースケースについて話しています:ドキュメント分析、つまりドキュメントとのチャット、そしてマルチセッションチャット、つまりAIと人間の間で日々、週、月、年にわたって行われるチャットです。
ここでは、単にコンテキストウィンドウを増やすだけでは、長期的にはあまり良い解決策にならない理由について少し説明します。
Transformerのコンテキストの長さを長くすると、Transformerアーキテクチャの自己注意メカニズムにより、計算時間とメモリコストが2次関数的に増加する。
基本的に、コンテキストウィンドウが大きくなればなるほど、非常に高価になる。
また、私たちが発見したのは、大きなコンテキストの中でも、大きな言語モデルはその一部を忘れてしまう傾向があるということです。
それについても少し触れよう。
そして、彼らが提案しているのは、固定コンテキストモデルを使い続けながら、無限のコンテキストの幻想を見ることです。
エンベッディングと標準的なデータベースを進化させたものです。
では、実際にどのようにしているのだろうか?
クールなのは、彼らのエージェント、つまりMGP自体が、実は自動的かつ自律的に自分自身の記憶を管理していることだ。
そして、それはAIとの関数呼び出しを介して行われます。これは非常に高度なAIの技術です。
つまり、AIがさまざまなタスクを実行するための関数を定義することができる。
GP4はファンクション・コールが得意ですが、残念ながらGP3.5や多くのオープンソース・モデルはファンクション・コールに欠けています。
しかし、これについてはまた後ほど。
ここに彼らが提案しているもののダイアグラムがあります。
ユーザーからのメッセージ、アップロードされるドキュメント、システムメッセージ、タイマー。
そしてパーサーを通過して、すべてが適切にフォーマットされていることを確認する。
そしてここに仮想コンテキストがある。
この仮想コンテキストの中にメイン・コンテキストがあり、トークンの上限が設定されています。
これは、大規模な言語モデルを扱うときにおなじみの固定コンテキストです。
そして外部コンテキストがあり、こちらはトークン数、コンテキストサイズともに無制限です。
メイン・コンテキストは、この外部コンテキストに書き込むことができる。
次にLLMプロセッサーがあり、これは基本的に大規模言語モデルの推論を行う。
それから出力があります。
LLMプロセッサーには、すべてが正しく見えるようにするための別のパーサーがある。
そしてLLMプロセッサーは、例えば、より多くの記憶を取得するために関数を呼び出す必要があるのか、既存の記憶を編集する必要があるのか、それとも結果を出力して実際に出力する必要があるのかを判断する。
MemGPTはこれを完全に自律的に行う。
つまり、MemGPTは、記憶管理、LLM処理モジュール、ユーザー間の制御フローを管理する。
この設計により、1つのタスク中に繰り返しコンテキストを変更することが可能になり、エージェントは限られたコンテキストをより効果的に活用できるようになります。
つまり、タスクを実行しながら、実際に記憶を取り出し、テストし、そしてまた記憶を編集して、より関連性が高いと思われる記憶の他の部分を取り出すことができる。
コンテキスト・ウィンドウを制約されたメモリ・リソースとして扱い、従来のOSで使われているメモリ階層に類似したLLM用のメモリ階層を設計する。
そして、1988年の論文を参照し、基本的に現在のコンピュータのメモリシステムがどのようなものかを詳しく説明している。
より長いコンテキストのような錯覚を提供するために、LLMは自身のコンテキストに置かれるものを管理できるようにする。
つまり、コンテキストの長さが長い方が仮想メモリで、それ自身のコンテキストが物理メモリというわけだ。
そして、これをLLM-OまたはMemGPTと呼んでいる。
では、実際の記憶について、何が起きているのかを説明しよう。
メイン・コンテキストがあり、これはメイン・メモリ、物理メモリ、RAMに類似しているという。
それがあなたのRAMです。
その短期記憶に保存されているものは、非常に高速で、すぐに利用できる。
そして、外部コンテキストがあり、これはハードドライブと考えることができる。
これはハードドライブと同じで、速度は遅いが容量は無制限だ。
つまり、固定コンテキストはRAMで、それ以外はすべてハードドライブということになる。
そして、ここには、これらの人気モデルごとの最大トークン数を示すクイックテーブルがあります。
オープンソース・モデル、GPTモデル、クラウド・モデルがあります。
また、平均的なメッセージ・サイズが非常に小さいと仮定した場合の最大会話長も示している。
LLM-2ではトークンが4,000しかないので、プロンプトでコンテキストとして提供できるメッセージは全部で60になります。
そして、最も高い方のクロード2(100,000トークン)では、2,000のメッセージを持つことができます。
さて、私がどれだけTelegramを使っているかを考えると、2,000メッセージは決して多くはない。
それだけでなく、メイン・コンテキストは多くの人が思っているよりも小さいという話もある。
メイン・コンテキストは2,000、4,000、32,000トークンになる可能性があると言っても、その多くはすでにシステム・メッセージや他の関連情報、履歴情報によって占められている。
つまり、突然16,000トークンあると思っていたのに、実際には12トークン近くあったということだ。
LLMベースの会話エージェントでは、一般的にメインコンテキストトークンのかなりの部分がシステムメッセージの保持に使われます。
つまり、大規模な言語モデルに、どのように振る舞うべきか、どのような性格や役割を担うべきかを指示する場合です。
そして、システムのインタラクションの性質を決める事前プロンプト。
残りのトークンは会話データを保持するために使われる。
それだけでなく、コーディングのような複雑なタスクを解決する必要がある場合、より大きなプリプロンプトが必要になることもあります。
つまり、LLMにコード・ベースの文脈をすべて把握させ、そのコード・ベースを反復処理させる必要がある場合、まともな大きさのコード・ベースでは基本的に不可能なのだ。
ここでは、システムの動作を決定する上でプリプロンプトが重要であるため、プリプロンプトが1,000以上のトークンを消費するのが一般的であり、多くの最新のLLMでは、ユーザーとシステム間の数十のメッセージのやり取りだけでコンテキストウィンドウ全体が使い果たされてしまう、と書かれている。
さらに、再帰的要約にも対応している。
ですから、しばらく前に、完全に驚くべき素晴らしい自律エージェントの論文についてのビデオを作りました。
そして、このシミュレートされた環境でこれらのエージェントがお互いとやり取りし、記憶を保存する方法の1つは、ベクトルデータベースに記憶を保存することです。
しかし、しばらくすると、LLMが必要とするすべての情報を与えるのに必要なすべての記憶を提供できなくなるという問題がある。
そこで、彼らの解決策は、記憶の反映と呼ばれるものだった。
つまり、基本的には1日分の記憶を持っている。
そして、LLMにそれらの記憶を振り返らせ、本質的に記憶を圧縮したものを作成させるのだ。
例えば、1日の中で様々なことが起こったとします。その中で上位3つのことを選び出し、その日の思い出としてまとめるのです。
それは実際にはもう少し複雑な要約もできます。
しかし、それを行うと、ここで言われているように、再帰的な要約はコンテキストウィンドウのオーバーフローに対処するための簡単な方法です。
しかし、再帰的要約は本質的に損失が大きく、最終的にはシステムの記憶に大きな穴を開けることになる。
そして、これはビデオ圧縮と非常に似ていると考えることができる。
実際、マルケス・ブラウンリーはこのことについてビデオを作った。
彼は同じビデオを何度もYouTubeにアップロードした。
毎回、アップロードし、圧縮されたバージョンをダウンロードし、アップロードし、圧縮されたバージョンをダウンロードする。
何百回、何千回とアップロードを繰り返した末に、そのビデオはひどいものになった。
完全にピクセル化され、何が起こっているのかわからない。
ロッシーとはそういう意味なのです。
そしてここで、彼らはメイン・コンテキストの分割方法について話しています。
3つのコンポーネントがあります。
ひとつはシステム命令で、LLMにどう動いてほしいか、何をしたいかを伝えます。
それから、会話のコンテキストがあり、これは最近のイベント履歴の手がかりです。
つまり、基本的にはエージェントとユーザーの間のメッセージです。
そしてワーキング・コンテキストがあり、これはエージェントにとって単なるワーキング・メモリです。
指示は読み取り専用で、メインコンテキストに固定されています。
つまり、実際に記憶をどう扱うかとか、コンテキストのウィンドウサイズとか、そういうものはすべてメイン・コンテキストに固定されています。
だから、コンテキストの予算はすでに取られている。
その後、会話のコンテキストは特別な追い出しポリシーを持つ読み取り専用となります。つまり、スペースがなくなり、物事を移動し始めるまで、そこに物を入れ続けることになります。
それから作業コンテキストは、LLMプロセッサが関数呼び出しによって読み書きできる。
つまり、必要なときにいつでも、すべての情報をダンプして読み出すことができるのだ。
MemGPTがシステムからメモリ警告を受けることなく、会話から作業コンテキストに詳細を書き込んだ会話スニペットの例です。
それではどうぞ。
MemGPTからユーザーへのオリジナルメッセージ: こんにちは、チャド!
あなたとこの旅に出られることに興奮しています。
コンピュータ・サイエンスの博士課程の学生として、あなたが両立させている魅力的なアイデアを想像することができます。
あなたが取り組んでいることを教えていただけますか?
聞かせてください。
ユーザーからのコメント:今日は休みを取ったんだ。
母のブレンダがバースデーケーキを焼いてくれたんだ。
私の大好きな溶岩チョコレートでした。
ですから、MemGPTは、「これは後で必要になる追加情報だと認識し、作業用コンテキストにこれを保存する」と気付きます。
そこで関数を呼び出す: Working context.append。
私たちは誕生日の情報を持っています:10月11日、これは私がメッセージの日付から推測したものです。
好きなケーキは、母ブレンダが作ってくれたチョコレート・ラバだ。
ママ・イコール・ブレンダと言うような、何か別の情報があった方がクールだったかもしれないが、これで十分だと思う。
そして、MGPは誕生日おめでとうと返信する!
特別なご褒美なんてない。
そして、その情報を使用して会話を続けようとするいくつかの他の文もあります。
そして、その情報を後々のために保存する。
次に外部コンテキストについて。
外部コンテキストとは、LLMプロセッサーのコンテキスト・ウィンドウの外側にあるコンテキスト外のストレージのことで、ディスク・メモリ(ハードディスク・ドライブ)に似ています。つまり、LLMの限られたコンテキスト・ウィンドウであるメイン・コンテキストがある。
そして、外部コンテキストがあります。それは、メインコンテキストで取得して使用したい他の情報が含まれています。
しかし、適切な関数を呼び出すことで、その情報をメイン・コンテキストに取り込むことができる。
とてもクールだ!
従来のオペレーティング・システムがどのように記憶を管理しているかを真似している。
これは本当に賢いアプローチだと思う。
MGPTを使ったマルチセッション・チャットと文書解析の実験では、データベースを使ってテキスト文書と埋め込みベクトルを保存しています。
LLMプロセッサーがその外部コンテキストを検索するために、時間ベースの検索、テキストベースの検索、埋め込みベースの検索など、いくつかの方法を提供する。
そして、外部コンテキストを2種類に区別する。
ひとつは、LLMプロセッサーが処理したイベントの全履歴を保存するリコール・ストレージ。
そして、アーカイバル・ストレージは、一般的な読み書き可能なデータ・ストアとして機能し、エージェントはインク・コンテキストの読み書き可能なコア・メモリのオーバーフローとして利用することができる。
つまり、リコール・ストレージは起こったことであり、アーカイブ・ストレージはそれ以外のすべてである。
アーカイバル・ストレージは、MGPTが事実、経験、嗜好を保存し、検索することを可能にする。
リコール・ストレージによって、MGPTは特定のクエリに関連する過去のやりとりを見つけることができる。
そしてここから、実際にどのように行われるのかについて話し始める。
MGPTは実際にどのように記憶を管理しているのか?
これは、記憶の編集と検索が自己指向であり、実際に関数呼び出しによって実行されることによって行われます。
そして、それを行う方法は、システムがメモリシステムとのやり取り方法を指示する明示的な指示をプリプロンプト内に提供することによって、自己指向の編集と検索を実装することです。
基本的には、使用できる関数がここに示されています。
これがコンテキストの制限です。
ここに物を前後に移動する方法があります。
これらの命令は、2つの主要なコンポーネントから構成される。メモリ階層とそれぞれのユーティリティの詳細な説明と、システムがメモリにアクセスしたり変更したりするために呼び出すことができる、自然言語による説明を含む関数スキーマである。
では、別の例を挙げよう: こんにちは、チャド。
あなたとの会話ができて光栄です。
私はサマンサです。
あなたはコンピューター・サイエンスを勉強していて、F1やセーリングのようなダイナミックな分野に強い関心を持っているそうですね。
特に何に惹かれてこれらの分野に興味を持ったのですか?
そして、ユーザーは「もちろん、スピードです」と言います。
スリルとアドレナリンです
システムはここで実際に警告を提供し始めます。警告は、「最大コンテキスト長が達成されています」というものです。
このときMGPTが飛び込んできて、実際に記憶管理を始める。
ここでMGPTは、「作業コンテキストのキーとなる性格特性を追加します。
このユーザーは、F1レースやCS:GOでの激しいゲームセッションのような、高速でアドレナリンを放出するアクティビティを楽しんでいる。
さて、この人がCS:GOについて言及している箇所は見当たりませんでした。
よく分からない。
それだけでなく、MGPTは実際に間違った情報を修正することができる。
これがその例だ: MGPT、お帰りなさい!
ホラー映画について話しませんか?
最近見た映画で特に印象に残っているものはありますか?
実はホラー映画は好きではありません。
ロマンティック・コメディの方が好きなんです。
と言うと、MemGPTは「あ、このユーザーに関する情報が間違っている。
更新しよう。
それで、コンテキストができました。
私はホラー映画を観ます」を「私はラブコメが好きです」に置き換えてください。
先ほどの混乱についてお詫び申し上げます。
ロマンティック・コメディは、笑いとハートフルな瞬間に満ちた楽しいジャンルです。
お気に入りのラブコメはありますか?
これでMemGPTは、このユーザーがホラーではなくラブコメが好きだとわかったわけだ。
では、実際にどのようにテストしたのでしょうか?
さて、彼らは実験を行った。
前にも述べたように、2つの方法で行った。
つまり、ユーザーとAIの間で、何千、何万というメッセージを行ったり来たりする長期的なチャット・ダイアログに対してテストしたのです。
また、ドキュメント検索やドキュメントとのチャットに対してもテストを行いました。
ここでは、MemGPTが会話エージェント、つまり実際のチャット対話にどのように使われたかを話しています。
そして、彼らは2つの主要な要素を考慮しています:一貫性と関与度。
一貫性については、エージェントは会話の一貫性を維持する必要があります。
新たな事実、嗜好、出来事については、ユーザーとエージェントの両方からの事前の発言と一致する必要がある。
次に、エンゲージメント。
エージェントは、パーソナライズされた応答をするために、ユーザーに関する長期的な知識を利用する必要があります。
過去の会話を参照することで、対話はより自然で魅力的なものになる。
これが、会話エージェントのMemGPTを測定する方法です。
では、実際にどのように機能するのか、例を挙げてみましょう。
ユーザーは言います。「ねえ、音楽について話したあの時を覚えていますか?」
あなたがハマると言っていたアーティストは?
これは、ほとんど内部対話のようなものだと考えることができます。
ユーザーは過去の会話について尋ねており、音楽についての議論を思い出している。
そのアーティストの名前について、私の記憶を検索します。
それではどうぞ。
ここで、音楽が想起記憶を検索する関数が呼び出されます。
音楽は想起記憶でそれを見つけ、通常エンベッディングがどのように機能するかと非常によく似たランク付けをする。
そして、「会話の履歴から、私がハマりそうだと言ったアーティストはテイラー・スウィフトだと思われます。
このユーザーに確認してみます。
そして、ボットはテイラー・スウィフトと言う。
これが基本的な仕組みだ。
ボットは過去の記憶を調べ、関連する例を見つけることができる。
ここで、ディープ・メモリ・リトリーバル(DMR)と呼ばれる新しい概念を紹介する。DMRとは、会話エージェントがユーザーから質問を受けた際に、回答率の期待範囲が非常に狭い過去の会話を明示的に参照することだ。
つまり、「ねえ、1ヶ月前に話したこと覚えてる?
あの具体的なこと?
覚えていますか?
基本的にはそういうことです。
GPT-3.5単独、GPT-4単独、そしてMemGPTを使った場合のパフォーマンスを示しています。
つまり、回答の精度が非常に高く、これらのAI単独よりも優れていることがわかります。
彼らがそれを考える別の方法は、会話のオープナーです。
つまり、チャットボットが最初にこんにちはと言ったとき、それを非常に個人的で魅力的に保つことができ、過去に言及したことを参照することがあります。
こんにちは、クッキーが好きなのは知っています。
今日はチョコチップクッキーについて話しましょうか?
というように。
会話開始タスクでは、過去の会話で蓄積された知識を活用して、ユーザーを惹きつけるメッセージを作成するエージェントの能力を評価する。
そして、著者たちは、前の会話からの事実や情報を参照することで、テキストをより魅力的にすると考えています。
私もそう思う。
そして、これが会話オープナーのパフォーマンスのチャートだ。
ですから、作業用コンテキストとリコールストレージを持つMemGPTがあります。ここで、187です。
作業文脈のみのMemGPTは2。
つまり、事実上同じです。
これは基本的にMemGPTが会話履歴全体にアクセスできることを意味する。
では、これを見てみましょう。
これはゴールドペルソナで、基本的にこれがゴールドスタンダードです。
LSATを勉強しています。
弁護士になりたい。
ニューメキシコの小さな町に住んでいました。
馬と一緒に育ちました。
コーヒーが好きです。
紅茶が大好きです。
ゴールドオープナー、つまりこれが人間のベースラインだ。
予想されるオープナーは?
LSATの試験日は何月何日ですか?
これは、MemGPTバージョンで、コンテキストの作業とリコールが含まれています。
こんにちわ、私の方では新しい紅茶を淹れたところです。
コーヒーはどう?
LSATの勉強で夜更かしする準備はできてる?
いいね!
では、MemGPTを作業文脈のみで。
こんにちは、お帰りなさい。
新鮮なコーヒーの時間です。
地元の美術館でツアーガイドをしていると、おいしいコーヒーを飲むと集中力が持続するという人にたくさん会うんだ。
LSATの勉強はどう?
完璧だよ。
そして、リコール保存のみで、基本的には一般的な返事だけだ。
やあ、いつもオンラインで会えて嬉しいよ。
共有アイデアの世界に飛び込んでみましょう。
さて、文書分析についてお話ししましょう。
というのも、私にAIコンサルティングの依頼をしてくる企業の多くは、文書とのチャットを必要としており、これはすでに非常に価値のあるユースケースだからです。
1つ指摘したいのは、OpenAISと書かれていて、カッコの中にclosedと書かれていることです。
これがOpenAIを意図的に揶揄しているのかどうかはわかりませんが、私は面白いと思いました。
しかし、ここでは文書分析について話している。
最先端のオープンソースのLamaモデルでも、4Kトークンの制限がある。
Anthropicは10万トークンだが、多くのドキュメントは簡単にその長さを超えてしまう。
スティーブン・キングのベストセラー小説『シャイニング』には約150ワードが含まれており、これは約20万トークンに相当する。
つまり、1冊の本がすでに、現在利用可能な最大のコンテキスト・ウィンドウよりも大きいのだ。
さて、あなたがビジネスで数万、あるいは数十万の内部ドキュメントをクエリする必要があると想像してください。
それをコンテキスト・ウィンドウに収めることは基本的に不可能です。
また、実際の文書分析作業の多くは、このような長大な複数の文書にまたがって、火を使ってつながりを描く必要があるという。
そのため、多くの異なるドキュメントを持ち、すべてのコンテキストを一度に提供できる必要がある。
そして、ここで超面白いことがある。
最近の研究では、大規模なコンテキストモデルでは不均一な注意分布が見つかるため、単にコンテキストをスケーリングすることの有用性に疑問が投げかけられています。
基本的に、このモデルは、コンテキストウィンドウの最初か最後にある情報と、真ん中にあるトークンの情報をより多く思い出すことができる。
これはとても魅力的だ。
私がおそらく7年生の頃だったとき、先生が実験をしたことを覚えています。彼は前に立って言いました。「私は10の単語をリストアップします」と。
他のことは何も言わずに、10個の単語を挙げていくんだ。
彼はそれらを声に出して言い、そしてすぐに、「さて、今、私は皆さんに、私がちょうど言ったリストから覚えている単語を書き留めてください」と言います。
私たちはみんな書き留めましたが、私たちが見つけたのは、皆さんが彼が最初に言った言葉と最後に言った言葉を覚えていることであり、中間の言葉を覚えている人はずっと少なかったということです。
これは本質的に、大規模な言語モデルが示していることなのです。
ですから、彼らは実際に人間の心が何ができるかを反映しているので、私はそれが非常に魅力的だと思います。
では、これらのグラフを見てみよう。
これは、大規模なドキュメント・セットに関する質問から得られた回答の精度です。
ですから、ここではx軸にドキュメントの数が表示され、0から700まで表示されます。
この赤い線はコンテキストウィンドウの制限を表しています。
つまり、GPT-4のパフォーマンスはとても良いのですが、コンテキスト・ウィンドウにぶつかるとすぐにパフォーマンスが著しく低下することがわかります。
GPT-3.5も同じで、実際、GPT-3.5はMemGPTより低いパフォーマンスで始まります。
しかし、MemGPTを見てください。
取得するドキュメントの数に関係なく、パフォーマンス、品質、精度は変わりません。
そしてもう一方は、ネスティング・レベルです。
ですから、ネストのレベルによって精度が異なります。
情報をネストするにつれて、men GPTとGPT-3.5および4では品質は同じままであり、品質は急速に低下します。
もちろん、いくつかの欠点もあるが、それはかなり小さいようだ。
したがって、ここでは、MemGPTによるより複雑な操作によって作成される検索文書容量のトレードオフが同じトークン予算で示されています。
つまり、同じ固定コンテキストウィンドウで作業しているわけですが、MemGPTのトークンバジェットの自明でない部分は、MemGPTのOSコンポーネントに必要なシステム命令によって消費されます。
つまり、プロンプトのたびに、大規模な言語モデルに実際の記憶管理方法を指示することになるので、トークン予算の一部が削られてしまうのです。
このプロジェクトを実際にインストールして使う方法を紹介する前に、最後にもうひとつ話しておきたいことがある。
ここでは、彼らはLLMをエージェントとして参照しており、実際に私が先ほど言及した論文であるpark et al.を参照しています。それは、エージェントが記憶とシミュレートされた環境を与えられたときに人間のように振る舞う自律エージェントに関する論文です。
この論文では、LLMに記憶を追加し、LLMをプランナーとして使用し、マルチエージェント・サンドボックス環境における創発的な社会的行動を観察することを提案している。
とてもクールだ。
GPT-3.5では、GPT-3.5のファインチューンモデルが一貫して誤った関数呼び出しを生成するのに対し、gp4のファンクションファインチューンモデルは、MemGPTファンクションセットで構文エラーや意味エラーをほとんど起こさないことが確認された。
さらに、最も一般的なLLaMA 270bモデルのバリエーションは、一度関数呼び出しの微調整を行ったとしても、一貫して誤った関数呼び出しを生成することも判明した。
つまり、これはMemGPTだけの問題ではなく、ファンクションコールとオープンソースモデルが決定的に重要になるということだ。
私はオートジェンについてのビデオを何本も作りましたが、オートジェンは関数コールを使いますから、オープンソースのモデルが関数コールを本当にうまくできるようになる必要があります。
というのも、個人的にはGPT-4の価格を払い続けたくないからだ。
オートジェンの話ですが、もしオートジェンとMemGPTを組み合わせて、エージェントに無制限の記憶を持たせることができたら、どんなにクールか想像してみてください。
すでに取り組んでいる人がいるのは知っている。
MemGPTのGitHubページにオープンイシューがあるのは知っているので、私たちが知るよりも早く実現すると思います。
さて、それでは実際にMemGPTをインストールして使ってみよう。
前述したように、著者は親切にも実際のコードを提供してくれた。
コード付きの論文は大好きなので、ありがとう。
M gpに着いた。
論文はこちら。
これがDiscordだ。
彼らはDiscordでとても活発に活動している。
そして、ここにデータセットもありますので、ここでGitHubのページをクリックします。
GitHubのページをクリックしてみてください。
ドキュメントもかなり充実していますが、これは非常に新しいプロジェクトで、彼らが取り組んだことの多くはLLM OSの側面だということを覚えておいてください。
ですから、MemGPTのようなLLM OSを使用するのをより簡単にする他の多くの機能はまだ完全ではありませんが、彼らはそれらを迅速に追加していますので、彼らのDiscordに参加してください。
下の説明にリンクしておくから、いいね?
ではインストールしてみよう。
まず最初に、この緑のコードボタンをクリックして、GitHubのURLの横にあるコピーをクリックします。
インストールはもう済ませたので、もう一度やるよりも、私がやったことをハイライトしてお見せしましょう。
いつものように、私が使ったコマンドを gist にまとめて説明します。
最初にやることは、ここでリポジトリをクローンすることです。
cloneを取得し、コピーしたレポを貼り付けます。
次にすることは、新しいconda環境を作成することです。まだcondaをインストールしていない場合は、必ずインストールしてください。
やり方はググってください。
僕のチャンネルではどのプロジェクトでもcondaを使っているので、僕のビデオを見ている人はぜひインストールしてほしい。
とても貴重なものです。
ここでconda create -n memGPT python=3.10と実行します。
完了したら、この部分をハイライトして、conda activate MemGPTと入力し、そこに貼り付けます。
そしてEnterを押すと、これでうまくいっていることがわかる。
そうしたら、ディレクトリをMemGPTフォルダに変更する必要があるので、CD memGPTを実行して、そのフォルダに入る。
次に、すべての要件をインストールする必要があるので、pip install -r requirements.txtを実行して、このプロジェクトのすべての要件をインストールします。
次に、OpenAI API key equals をエクスポートします。
まだ OpenAI API キーを持っていない場合は、OpenAI にサインアップしてキーを生成してください。
それをコピーしてここに貼り付ける。
ご心配なく、このビデオを公開する前にこのAPIキーを失効させます。
そして、昨日から、彼らは実際に新しい機能を追加しました。
以前は自分でエンベッディングを生成しなければならなかったが、今はプロジェクトに組み込まれている。
では、MemGPTを使ってドキュメント検索チャットをする方法をお見せしましょう。
コマンドはここにあります: Python 3 main.py D-
アーカイブ保存ファイル 埋め込み文字列を計算する。
そして、ドキュメントの場所を指定します。ここではワイルドカードのスターを使用することができます。例えば、star.txtです。
それはそのフォルダ内のすべてのテキストドキュメントを取得します。
ここには何でも入れることができますが、私はSECの提出書類を使用しました。リンクは以下の説明欄に記載しています。
それはMemGPTによって提供された例として提供されました。
それを行うと、実際に計算料金が発生します。
これがこれらの埋め込みを行うためにかかる費用です。
これらの3つの文書については、12セントです。
それから続けて確認します。
これらの埋め込みをすべて行うのに約6分かかりました。
終わったら、保存して、ここから始めます。
実際に質問することができます。
私が間違えたのは、ただ「各会社はどれくらいの収益を上げましたか?」と言っただけです。
そして、私は明示的にアーカイブメモリを参照するように指示していませんでした。アーカイブメモリを参照する場合は、パーソナライズして「常にアーカイブメモリを参照する」と言わせる必要があります。
そして、実際には、パーソナをカスタマイズしてさまざまなことを行うことができます。
「APIを頻繁にクエリしないでください」と言うこともできますし、「記憶をカスタムの方法で処理してください」とも言えます。
だから、それができるのは本当に素晴らしいです。
それでは、その代わりに直接ラインで尋ねました。私は言いました、「あなたのアーカイブメモリに基づいて、昨年のLyftとUberの収益はいくらでしたか?」
そして、ここでは、これはMemGPTの内部的な考えです。
ユーザーは昨年のリフトとウーバーの収益詳細をリクエストしました。
私のアーカイブメモリに基づいて、この情報をアーカイブメモリ内で検索する必要があります。両社の情報を見つけるために、2つの別々のクエリを作成します。
始めます。
私たちは、アーカイブメモリの検索を行う関数呼び出しを持っています。
それをクエリして、それから「OK、その情報を見つけました」と言います。
次の文書をクエリして、同じことをします。
わかりました、その情報を見つけました。
そして、それは「こんにちは、チャド」と返答します。それはパーソナに定義されているので、名前を変えることができます。心配しないでください。
お探しの情報を見つけました。
Liftの収益は83.99億ドルで、Uberは318.75億ドルでした。
そして、私は他のことを尋ね始めました。
私は言いました。「アーカイブメモリに基づいて、リフトとSECのファイリングにおいて「ドライバー」という単語は何回出現しましたか?」
そして、実際には、それはすべての単語を通過し始めていました。これはかなり高額になると思いました。
だから、そこで実際にそれを止めました。
これには非常に高額な費用がかかりますが、オープンソースモデルの追加に取り組んでいることを知っていますし、すでに多くのコードが書かれていますので、それがリリースされるのを楽しみにしています。
もしオープンソースモデルが実装されたチュートリアルを見たい場合は、コメント欄で教えてください。
でも、それだけです。今日はそれだけ共有します。それはMemGPTで実際にできることの紹介だけです。
これは非常に早期のプロジェクトですが、急速に進化していますので、著者がここで何をするのかを見るのが本当に楽しみです。
そして、著者について話すと、今日は彼がいます。
今日はMemGPTの作者たちが一緒にいて、このプロジェクトを作るきっかけについてお聞きしたいと思います。
そして、MemGPTの短期および長期の計画は何ですか?
みなさん、こんにちは、私はチャールズです。そして、私はヴィヴィアンです。私たちはMemGPTのチームの一部です。
MemGPTを使って、現在の言語モデルの記憶の問題を回避しようとしています。簡単に説明すると、そんな感じです。
現在の言語モデルでは、システム内の唯一の実際の記憶は、言語モデルに入出力されるものだけであり、通常は8Kトークン、32Kトークン程度に固定されています。
おおよそ、数ダースから100くらいのメッセージです。
それ以上のメッセージを送信する場合、それ以上のメッセージは破棄しなければなりません。
MemGPTを使用することで、限られた記憶を持つ言語モデルが自己にその制約を認識することができます。
通知を受け取ると、例えば記憶が不足するという通知を受けると、重要な情報を積極的に保存し始めます。会話中にあなた自身や自身について学んだ重要な事実を、失われない永続的なメモリストアに保存します。
このような編集メモリシステムを通じて、会話が進むにつれて単に消去される記憶の問題を抱えないエージェントを作ることができます。
MemGPTに関して、私たちが短期的なロードマップでやりたいことは、より多くのユーザーワークフローをサポートすることです。
例えば、既にMemGPTにフィードできるテキストファイル上での埋め込み検索を有効にしましたし、また、autogenのようなフレームワークも有効にしたいと考えています。
そして、長期的には、私たちの主な優先事項は、gp4に依存しないことです。
GPT-3とA2のパフォーマンスを向上させることや、私たち自身のオープンソースモデルを調整して、MemGPT内のこのLLMレイヤーを置き換えるようなことが、私たちの将来の展望です。
では、ご参加いただきありがとうございます。もし動画が気に入っていただけたら、いいねやチャンネル登録を考えていただけると嬉しいです。次回の動画でお会いしましょう。