LangChainの解説です。
公開日:2023年4月24日
※動画を再生してから、インタビューを読むのがオススメです。
ChatGPTのような大規模な言語モデルは、ソフトウェアを支配しています。
すべてのスタートアップは、大規模な言語モデルを搭載した機械学習を自社のスタックに取り込もうと急速に動いています。
Wolfram Alphaは現在、ChatGPTに接続されています。
カーンアカデミーには教育AIがあります。
SalesforceにはEinstein GPTがあります。
Bloombergは、さらに一歩進んで、独自のGPTモデルを微調整しています。
では、なぜ私たちはそれをやらないのでしょうか?
このビデオでは、プログラミングコミュニティで話題のフレームワークを使用して、独自のAutoGPTモデルを構築する方法を実際に紹介します。
これまで、このようなことを行うのは困難でした。
機械学習モデルを構築し、訓練し、生産化するためには、組織には機械学習エンジニアのチームが必要でした。
ほとんどの企業にとって、それはあまりにも大きな投資であり、わざわざ引き受ける必要はありませんでしたが、今はそうではありません。
LangChainのようなフレームワークがあれば、劇的に簡単に始めることができます。
LangChainは、ジェットパックを装備したスパイダーマンのようなものだと考えてください。
超高速で、ウェブに接続されているのです。
プログラマーは、OpenAI、Hugging Face、cohereなどの大規模な言語モデルを活用するために、このシステムを使うことができます。
しかし、ここからが超面白いのですが、エージェントを使う機能が提供されるのです。
つまり、独自のアプリをウェブにリーチさせたり、独自のGPTパイプラインの中で独自のドキュメントを使用したりすることができるのです。
LangChainには、6つの主要なモジュールがあります。
モデル、プロンプト、インデックス、メモリ、チェーン、エージェントです。
モデルズは、大規模な言語モデルへのアクセスを提供します。
プロンプトは、テンプレートでプロンプトを構成します。
Indexesは、大規模な言語モデルで作業するためのドキュメントを準備します。
Memoryは、ChatGPTのように、LLMチェーンが過去の入力にアクセスできるようにします。
チェーンは、すべてをつなぎ合わせることができ、エージェントは、WikipediaやGoogle検索にアクセスするようなツールを提供します。
さて、LangChainフレームワークについて少しわかったところで、StreamlitとLangChainを使ってアプリケーションを構築してみることにします。
モジュールの多くを実行します。
そして、YouTubeのスクリプトジェネレータとタイトルを作るアプリケーションを作ることができるようになります。
さて、時間の都合上、この情報をできるだけ早くお届けするために、15分のタイマーをセットします。
まず、2つのファイルを作成する必要があります。
apikey.pyというファイルを作成し、app.pyというファイルも作成する必要があります。
apikey.pyファイルの中に、新しい変数apikeyを作成し、OpenAI内で利用可能なapikeyに設定します。
これで、異なるLLMサービスプロバイダを使うことができます。
どのようなものか、この先で少しお見せします。
もしAPIサービスを使いたくなかったら、その必要はありません。
さて、app.pyファイルの中で、これをインポートすることにします。
import OSを実行し、apikeyも取り込みます。
つまり、apikeyからimport apikeyです。
次に、これを OpenAI サービスで利用できるようにする必要があります。
os.environ を実行し、角括弧の中に辞書キーを設定します。
OpenAI、OpenAI underscore API underscore key、そしてこのapikeyと同じものを設定します。
つまり、このキーと同じに設定します。
美しい。
さて、次にやるべきことは、レーンチェーンサービスを活用するために、いくつかの依存関係をインストールすることです。
ターミナルを開いて、pip installを実行します。
あれ、ちょっと変な感じですね。
これを表示させます。
クリアしましょう。
あ、もうエラーが出てる。
pip install, streamlit.
レーンチェーンも必要です。
時の人。
OpenAI、Wikipedia、chroma、db、tick tokenも必要です。
つまり、6種類のサービスをインストールすることになります。
pip install, streamlit, lane chain, OpenAI, Wikipedia, chroma, db and tick token.
これを実行すると、これですべてのサービスがインストールされました。
さて、次は実際にこれらのサービスを導入してみましょう。
Streamlitをstとしてインポートします。
Streamlitはアプリケーションフレームワークとなり、さまざまなサービスと連携することができます。
では、Depthsを取り込みます。
これを少し分けて、OpenAIサーバを取り込みます。
Lanechain.llmsから始めます。
OpenAIをインポートします。
これで、大規模な言語モデルを活用するためのOpenAIサービスを利用できるようになります。
次にやりたいことは、アプリを少しセットアップして、どんな風に見えるかを確認することでしょう。
まず最初に、タイトルを作成します。
st.titleで、lanechainのドキュメントから絵文字をいくつか取ってきます。
そして、これは文字列のセットではなく、YouTube GPT creatorと同じになるようにします。
私より良いタイトルが思いつくでしょう。
次に、LLMにプロンプトを渡すための場所を作成します。
そのために、promptという新しい変数を作り、st.textInputと等しい値に設定します。
そして、ここではラベルを含めることにします。
プロンプトを挿入してください。
さて、これでアプリのフレームワークができました。
では、アプリを起動してみましょう。
これをクリアします。
アプリを起動するには、streamlit run app.pyを実行してください。
これが私たちのアプリケーションです。
実行されているようで、きれいですね。
タイトルが表示され、プロンプトを表示するためのラベルが表示されているのがわかります。
これを動かしてみましょう。
ここでプロンプトを表示させて、「世界で一番速い車は何ですか?
今はまだ、LLMに接続されていないので、何もできませんが。
では、さっそく接続してみましょう。
そのために必要なのは、OpenAIサービスのインスタンスを作成することです。
では、そうしましょう。
LLMを作成します。
LLMという新しい変数を作り、OpenAIと同じ値に設定します。
そして、これに温度値やキーワードの引数を渡す必要があります。
これにより、大規模な言語モデルがどれだけ創造的か、創造的でないかを決定することになります。
OpenAIサービスの新しいインスタンスを作成したところです。
次に、LLMにプロンプトをトリガーする方法が必要です。
プロンプトが表示されたら、応答用の新しい変数を作成することになります。
そして、このプロンプトを実際にLLMに渡すことになります。
つまり、LLMと言いながら、プロンプトを通過させるのです。
そして、実際にこれを画面にレンダリングする方法が必要です。
そこで、stまたはst.writeを実行し、そこでレスポンスを渡すことができます。
これで、プロンプトがあれば、実際に画面に表示されることになります。
さて、それではアプリに戻りましょう。
再実行しましょう。
今はプロンプトが表示されていません。
だから、画面には何も表示されません。
しかし、「世界で一番速い車は何ですか」と言うことはできます。
これは理論上、OpenAPIサービスに送られるはずです。
そして、見てください、応答が返ってきました。
世界最速の車は、ブガッティ・シロン・スーパースポーツ300プラスで、最高速度は時速304マイルです。
また、ディープラーニングに関するYouTube動画のタイトルを書いてくださいということもできます。
万事休す、見てみてください。
ディープラーニングの基礎知識、クラッシュコースです。
そのビデオを見たいなら、教えてください。
ともあれ、アプリの話に戻りましょう。
今、私たちはこのプロンプト全体を書き出す必要がありました。
このようなことは避けたいものです。
特に、ユーザーが直接操作するタイプのアプリケーションを作りたい場合。
理想的には、ユーザーがトピックを通過するだけで、それに基づいてプロンプトを書き出すようなアプリケーションを作りたいものです。
そこで登場するのが、プロンプトテンプレートです。
そこで、アプリに飛び込んで、プロンプト・テンプレートを持ち込むことにします。
langchain.promptsから、プロンプト・テンプレートをインポートすることにします。
そして、LLMチェーンも同様にインポートすることにします。
Langchainから、Langchainチェーンによって、トピックをプロンプト・テンプレートで実行し、出力を生成することができます。
だから、langchain.chainsからLLMをインポートするとします。
いや、Siriは必要ない、LLMチェーンだ。
オーケー、クールだ。
これで、インポートされたことになります。
この2行を書きました。
それでは、プロンプトテンプレートを作成したいと思います。このプロンプトテンプレートは、トピックを受け取り、YouTubeのビデオタイトルを作成するように求めるプロンプトを書き、そこに変数を挿入します。
ですから、この先、必ずしもユーザーが全部書く必要はありません。
それでは、プロンプト・テンプレートを作成しましょう。
タイトルテンプレートという新しい変数を作成します。
この変数にプロンプト・テンプレートと同じ値を設定します。
次に必要なのは、入力変数を指示することです。
入力変数には、トピックを指定します。
そして、ここにテンプレートを作成します。
テンプレートは、文字列のフォーマットと同じように、変数を渡すことができる文字列です。
ここで書いたものをそのまま使ってみましょう。
これをコピーして、ここに差し込んでみましょう。
YouTubeのビデオのタイトルを書いて、それを変数に渡します。
ここでトピック変数を通過させることができます。
これは、このプロンプトテンプレートを使用する場合、トピックを渡すだけで、それをここにあるトピックと共にフォーマットするようにプロンプトします。
さて、これを使うには、実際にLLMチェーンを使用することになります。
つまり、生のLLMをただ使うのではなく、実際にチェーンで繋いでいくのです。
では、ここにちょっとしたコメントを作ってみましょう。
これがプロンプトのテンプレートになります。
そして、LLMのチェーンを作成します。
実はこれがタイトルチェーンになります。
そして、これをLLMチェーン、LLMチェーンと同じに設定します。
そして、LLMを通過させて、このLLMと等しい値に設定する必要があります。
つまり、これはLLMチェーンに渡されるのです。
次に、プロンプトを設定します。
プロンプトはタイトルテンプレートに等しいと言えます。
そして、LLMを直接ここで実行する代わりに、タイトルチェーンを取得し、そのプロンプトに基づいてrunメソッドを使用するか、パススルーすることができます。
そうすると、プロンプトのトピックがここに表示されます。
つまり、トピックをプロンプトと同じに設定しているのです。
さて、これを実行すると、トピックがこの特定のプロンプトに効果的にフォーマットされるはずです。
つまり、「特定のトピックに関するYouTubeビデオのタイトルを書いてください」と実行されるはずです。
verboseをtrueに設定することができますので、これを横に移動します。
そして、実際に実行されながら、ランチェーンが表示されます。
もう少しよく見えるように、ズームアウトしてみましょう。
では、実際に先に進んで、これをこちら側に持ってきてみましょう。
このトピックを削除して、ディープラーニングのトピックだけに変更すれば、今これを実行すると、チェーンが効果的に実行されるのがわかるはずです。
リフレッシュしてみると、エラーが出ています。
何が起こったのでしょうか?
おそらく入力変数でしょう。
そこを変えてみてください。
再実行しましょう。
正常に実行されているように見えます。
下の方に、ちょっと小さいですが、新しいLLMチェーンが入力されているのがわかると思います。
そして、これがフォーマット後のプロンプトであることがお分かりいただけると思います。
ディープラーニングに関するYouTubeビデオのタイトルを書いてください。
このように、実際にプロンプトが表示され、フォーマットされました。
このように、生のトピックをプロンプトテンプレートに渡しています。
このように、プロンプト・テンプレートを使うことで、非常にシンプルになります。
しかし、今はまだプロンプトのタイトルとYouTubeのタイトルしか生成されていません。
スクリプトも必要です。
これだけでは終わりません。
もう一歩踏み込みたい。
そこで便利なのがチェーンです。
今、私たちは1つのチェーンを使用しているだけです。
LLMチェーンを使っているのです。
しかし、実際にできることは、このようなチェーンをいくつもつなげることです。
つまり、これらを順次組み合わせて、さまざまなことができるようになるのです。
そこで、LLMチェーン・モジュールから、シンプルなシーケンシャル・チェーンをインポートすることにしました。
これを使えば、複数の出力を生成するために、これらを積み重ねることができるようになります。
でも、これについてはまた後ほど説明します。
では、実際に別のプロンプト・テンプレートを作成します。
次のプロンプトテンプレートは、タイトルだけでなく、YouTubeスクリプトを実際に生成するためのものです。
このテンプレートをコピーして、タイトルテンプレートにします。
このテンプレートをスクリプトテンプレートに変換します。
スクリプトテンプレートの入力は、YouTubeのタイトルになります。
つまり、入力変数にはタイトルが入ります。
ズームアウトしてください、ちょっと拡大しすぎですね。
そして、テンプレートは、このタイトルに基づいてYouTubeビデオのスクリプトを作成する、というものです。
タイトルを入力します。
そして、このtitle変数をプロンプトテンプレートに渡します。
プロンプト・テンプレートがいかに便利か、おわかりいただけたでしょうか。
なぜなら、プロンプトの書式がすでに決まっているからです。
あとは、文脈に応じた変数を渡すだけです。
特に、後で説明するように、たくさんのドキュメントを扱う必要がある場合、作業が非常に楽になります。
さて、これでスクリプトのテンプレートは完成しました。
さて、次は別のチェーンを作成する必要がありますが、このチェーンはスクリプトチェーン用にします。
タイトルチェーンをここにコピーして、これをスクリプトチェーンに作成または変換します。
時間はどうなっているのでしょうか?
あと4分です。
ああ、すごい、これは作れないね。
スクリプト・チェーンに、スクリプト・テンプレートを取り込み、それをプロンプトとして設定します。
これで2つのチェーンができたことがわかります。
テンプレートも2つあります。
タイトルチャンプを用意しました。
タイトルテンプレートとスクリプトテンプレートがあり、これでタイトルチェーンとスクリプトチェーンができました。
この2つのチェーンは、それぞれ独立して動作しています。
一方が他方と相互作用することはありません。
そこで、先ほど紹介したシンプルなシーケンシャル・チェーンの出番です。
そこで、これをコピーして、シーケンシャル・チェーンの新しいインスタンスを作成します。
そこで、シーケンシャル・チェーンと言い、シンプル・シーケンシャル・チェーンと同じに設定します。
単純なシーケンシャル・チェーンに設定する位置引数が1つあり、それがchains位置引数です。
これは、すべてのシーケンシャル・チェーンのリストです。
ここでは、順序がとても重要です。
つまり、最初にこのチェーンを実行し、次に次のチェーンを実行する、あるいは特定のLLMチェーンを最初に実行し、次に次のチェーンを実行するというように、基本的に指定することになります。
まず最初に実行するのはタイトルチェーンで、ビデオのタイトルを生成します。
そして、タイトルチェーンの出力はスクリプトチェーンに渡されます。
単純なシーケンシャル・チェーンです。
1つの出力が次のチェーンに渡されます。
しかし、もう少し洗練されたものにすることも可能で、それは後ほど説明します。
チェーンにスクリプトチェーンを追加し、2つ目のチェーンにします。
そして、verboseをtrueに指定します。
これで、2つのテンプレート、2つのチェーンができました。また、それらをすべてまとめる単純な順序チェーンもあります。
うわー、何回チェーンって言ったんだろう?
では、この順序チェーンを取得し、sequential chain.runを実行し、トピックをその順序チェーンに渡します。
これで、タイトルチェーンが実行され、出力が生成され、タイトルをスクリプトチェーンに渡してスクリプトが生成されるはずです。
では、これから面白くなりそうなので、ターミナルを表示できるようにしておきましょう。
アプリを更新すると、自動的にこのチェーンが実行されるはずです。
これが最初のもので、ディープラーニングに関するYouTubeビデオのタイトルを書いてくれ、そして万事休す。
これは保存されましたか?
保存していません。保存しましょう。
よし、もう一度ターミナルを開いてみよう。
再実行しましょう。
キーがない、入力がない
いやはや、エラーが出てしまいました。
もしこのビデオがお気に入りで、Pythonを機械学習、ディープラーニング、データサイエンスに使用する方法についてもう少し学びたいと思うなら、go.coursesfromnick.com forward slash pythonにアクセスして、私のテック基礎コースを無料で始めてみてください。
このコースでは、機械学習、深層学習、データサイエンスに必要な知識を一から学べるようになっています。
ビデオに戻ります。
申し訳ありません、トピックは必要ないと気づきました。
それを取り除きましょう。
美しい。
アプリに戻りましょう。
再実行しましょう。
ターミナルを開きましょう。
見てみてください。
今、実際に生成しているので、明らかに時間がかかりそうです。
そして、見てください。
実際にシーケンシャル・チェーンが実行されます。
最初に実行されるチェーンはタイトルの生成であることがわかります。
これはタイトルです。
そして、そのタイトルは次のチェーンに渡されます。
このスクリプトは、ディープラーニングに基づいて実行されます。
なんて素晴らしいんでしょう。
さて、見てみましょう。
これはスクリプトそのものを出力しているに過ぎません。
タイトルを出力しているわけではありません。
出力するだけなので、単純なシーケンシャル・チェーンが少し失敗しているところです。
その端末を最小化しましょう。
出力されるのは、シーケンシャル・チェーンの最後の出力だけです。
もし、複数の出力を生成したり、取得したりしたいのであれば、少し厄介になります。
いずれにしても時間切れですが、このままさらに進めて、これがどれほど強力なものかをお見せしたいと思います。
単純なシーケンシャル・チェーンを使っていますが、これは最後の出力だけを出力することに留意してください。
これを逐次連鎖に置き換えると、複数の出力セットを得ることができるようになります。
ただし、タイトルチェーンとスクリプトチェーンのそれぞれから出力キーを指定する必要があります。
つまり、タイトルチェーンが出力する、あるいは出力キーがタイトルになる、ということです。
だから、そのチェーンを更新するだけです。
そして、スクリプト・チェーンも更新する必要があります。
こちらは出力キーがscriptになります。
次に、シーケンシャル・チェーンとシンプル・シーケンシャル・チェーンを入れ替えることができます。
そして、シーケンシャル・チェーンへの入力キーや入力変数を、純粋にトピックに指定します。
もう少し見やすくするために、言葉で説明します。
つまり、入力はトピックで、出力変数は複数の出力変数になります。
つまり、これから行うのは、タイトルを出力し、スクリプトを出力することです。
これで、シーケンシャル・チェーンから1つの出力だけでなく、複数の出力を取得することができるようになります。
ここで、APIがちょっと変だと思うのは、ここで単にrunを使うことができないことです。
実際にはaを使うか、辞書を通す必要があります。この辞書には、キーとしてtopic、そしてプロンプトが入ります。
このように、さまざまなタイプのチェーンを使い分けるには、ちょっとしたニュアンスが必要なのです。
これで、タイトルとスクリプトを効果的に表示することができるようになりました。
ただし、これからレスポンス変数の各キーを取得できるようにするために、タイトルを取得し、スクリプトも書き出します。
これで、両方の変数に別々にアクセスできるようになるはずです。
そこで、タイトルとスクリプトを別々に取得することにします。
そうすると、このように表示されるはずです。
さて、あとはコードが保存されていることを確認するだけです。
アプリケーションに戻り、こちら側にターミナルを投げて見えるようにし、再実行しましょう。
プロンプトの書式設定が行われているのがわかると思います。
ディープラーニング入門」と「ニューラルネットワーク入門」ですね。
次に、タイトルとスクリプトを書き出します。
見てください、これが私たちのタイトルです。
ディープラーニング入門、ニューラルネットワーク入門、そしてこの下にスクリプトがあります。
これで、複数の異なる出力セットを得ることができるようになりました。
ChatJPTがクールなのは、記憶を取り入れることができる点です。
過去に何が起こったかを知ることができるのです。
これまでのところ、レーンチェーンアプリにメモリを組み込んでいませんでしたが、それをやってみましょう。
さて、アプリケーションにメモリを追加するために、別のレーンチェーンクラウドにアクセスすることにします。
つまり、lane chain.memoryから、向こう側にある会話バッファのメモリをインポートすることになります。
そして、このインスタンスを作成する必要があります。
さて、これからmemoryクラスを使いますが、実際にはプロンプティングに使うわけではありません。
純粋に履歴を保存するために使うのです。
チャットベースのアプリケーションを作成する場合、これは非常に便利なものです。
そこで、memoryという新しい変数を作成し、これを会話バッファのメモリと等しく設定します。
そして、2つの値を設定する必要があります。
入力キーを設定し、メモリキーを保存します。
入力キーはトピックと同じにします。
そして、これは現時点ではディープラーニングになる予定です。
そしてメモリーキーはチャット履歴になります。
さて、このメモリ値やメモリクラスをLLMチェーンの両方に渡すことができます。
このあたりは、ツールを追加していく中で明らかにしていく予定です。
楽しみにしていてください。
次に、それをスクリプト・チェーンに追加します。
そして、実際にやりたいことは、これをスクリーンにレンダリングして、メモリを実際に確認することです。
そこで、プロンプトのすぐ下にある、書き込みを行った場所に、Streamlitエクスパンダを使用します。
st.expanderとし、expanderのタイトルをメッセージ履歴とします。
そして、情報ボックスを設置します。
st.infoとし、メモリドットバッファの値を渡します。
これで再実行すると、アコーディオンのようなエクスパンダが表示されるはずです。
そしてその中に、それぞれのチェーンから送られてくるメモリを格納する情報ボックスができます。
バッファを作成し、それをチェーンに渡して、エキスパンダーに書き出しました。
では、アプリを更新してみましょう。
今、下には何もない状態です。
キーボードのRを押して再実行します。
下にスクロールして見てください。
メッセージの履歴が表示されました。
これを開くと、出力が表示されているのがわかると思います。
ただ、これは私が必ずしも好きではない点です。
現在のところ、私はおそらく順序付けられたクラスに最適でないクラスを使用しているため、ここでの入力はディープラーニングであり、AIはタイトルに出力しています。
もしどなたか、これをもう少しうまくやる方法をご存じでしたら、下の説明文に書いて教えてください。
というのも、こちらの右側では、またトピックを取っていて、AIを出力しているのがわかります。
タイトルを出力する方法もあるかもしれませんが、2つの別々のクラスという観点で、これを分割することにします。
ツールに入れば、それがわかると思います。
さて、LangChainが本当に面白いのは、1つだけあります。
それは、ツールを活用する能力です。
さて、次に必要なのはツールを追加することです。
これからが本番です、お付き合いください。
では、順を追って説明します。
まず最初に、langchain.utilsに行く必要があります。
わあ、入力しにくかった。
LangChainユーティリティ、すごいな。
Wikipedia API wrapperをインポートします。
これでWikipedia APIへのAPIコールができるようになります。
次に必要なのは、プロンプト・テンプレートを更新することです。
プロンプト・テンプレートは、もはやタイトルだけを取り込むのではありません。
Wikipediaの調査結果も取り込むことになります。
つまり、Wikipediaをバックアップとしてプロンプトを表示することができるようになります。
今、私たちが使っているプロンプトは、「タイトルに基づいてYouTubeビデオのスクリプトを書いてください」というものです。
しかし、ウィキペディアのリサーチを活用しながら、こう言うこともできるのです。
ウィキペディアの研究。
そして、その変数を通過させることができます。
つまり、「Wikipediaリサーチ」と言えばいいのです。
それをコピーして、そこにペーストします。
これでWikipedia APIラッパーを導入することができました。
プロンプトも更新されました。
次に必要なのは、メモリを取り出すことです。
タイトルのメモリーを用意します。
また、WordRapはいまのところ好きではありません。
少しズームアウトしてみます。
タイトルメモリと、スクリプトメモリがあります。
スクリプトメモリの入力キーは、タイトルになります。
そして、タイトルの入力キーは、トピックになります。
なるほど、なるほど。
では、次に各項目を更新します。
タイトルのメモリは、おそらく私の頭がそれを覆っているのでしょう。
念のため、もう少し上に持ってきてみましょう。
タイトル・メモリはタイトル・チェーンに移動します。
このコードはすべてGitHubで公開されます。
だから、WordRapと書いておくことにしよう。
そしてスクリプト・メモリはスクリプト・チェインに移動します。
これで、いい感じです。
そして、実際に必要なのは、シーケンシャル・チェーンを取り除くことです。
今までよく働いてくれたけど、もういいや。
つまり、2つのLLMチェーンが独立して稼働していることになります。
次に必要なのは、Wikipedia APIラッパーを導入して、その新しいインスタンスを作成することです。
Wikiと呼ぶことにします。
そして、トピックをタイトルチェーンに渡します。
タイトルが生成されます。
そして、そのタイトルとWikipediaの調査結果をスクリプトチェーンに渡します。
つまり、これから行うのは、実際にシーケンシャル・チェーンを実行することではありません。
3つの別々の呼び出しを実行することになります。
つまり、タイトルはタイトルチェーンに戻ることになります。
そして、トピックを受け取り、プロンプトと同じ値にします。
そしてタイトルをWikipediaに渡しますが、Wikipedia APIラッパーを使用します。
そこで、プロンプトも同様に渡します。
そして最後に、スクリプトを生成します。
このスクリプトは2つの入力を受け取ります。
スクリプト・チェーンは、タイトルとウィキペディアの調査結果を入力します。
つまり、タイトルはあそこから入ってきます。
つまり、タイトルはタイトルとウィキペディアで調べたものと同じになります。
キーコードは何ですか?
ウィキペディアの調査結果をフルに反映させる必要があります。
つまり、このようになります。
これで、タイトルとWikiリサーチ、そしてスクリプトを取得することができました。
また、バッファを更新する必要があります。メモリバッファが2つになったからです。
そこで、もう1つのエキスパンダーを作成しましょう。
タイトルの履歴はタイトルメモリバッファから取得することになります。
そして、スクリプト履歴はスクリプトメモリバッファから取得することになります。
完璧です。
そして、ウィキペディアの研究のために、もう1つエキスパンダーを追加します。
この下にあるWikipedia Researchはここに置くことにします。
そして、どうするかというと、Wikipediaの全文をあそこに出力するのです。
完璧です。
そしてこちらでは、これを変更する必要があります。
これは、向こうのタイトルを書き出して、向こうのスクリプトを書き出すだけです。
だから、ツールを追加することで、ちょっとずつ崩していくんです。
せっかく作り上げたのに、ちょっと残念ですが、これが私が見つけたドキュメントに基づく一番簡単な方法です。
それは常に進化し続けています。
というわけで、万全を期すなら、これで実行できるはずです。
試してみましょう。
アプリにアクセスして、更新してみましょう。
予期せぬエラーが発生しました。
タイトルチェーンの中で、トピックというキーワードを削除してみましょう。
ここで、これを削除してください。
また、これを実行する必要があります。
title chain.run、script chain.runを実行します。
リフレッシュしてください。
見てみてください、まだエラーは出ていないようです。
では、見てみましょう。
スクリプトが出力されていますね。
また、ビデオスクリプトも出力されています。
タイトルの履歴を見ると、人間がディープラーニングを通過し、AIがそれに応えていることがわかります。
スクリプトの履歴を見ると、人間がタイトルを通過し、ビデオスクリプトが出力されていることがわかります。
このように、特に複数の入力がある場合に、メモリをより有効に活用することができます。
また、ウィキペディアの調査も見ることができます。
Wikipediaの研究を見てください。
サウスパークのエピソードも出てきます。
サウスパークに関連するものを取り入れたことがあったでしょうか?
以前はそうだったと思います。
しかし、私たちの場合、これはビデオスクリプトが完成したものです。
そして、LangChainのクラッシュコースも完成しました。
ただ1つだけ、ここでカバーしきれなかったことがあり、それはインデックスです。
でも、もしそれに関するビデオを見たいなら、下のコメント欄で教えてください。
次回のビデオでご紹介します。
さて、いかがでしたでしょうか?
LangChainを使って何を作ろうと思っていますか?
もし、私が運動ベースの検出を可能にする機械学習モデルをゼロから構築するのを見たいのであれば、こちらを見てください。