LangChainの解説です。
公開日:2023年4月23日
※動画を再生してから、インタビューを読むのがオススメです。
人工知能とウェブ開発について語るStarMorphへようこそ。
今日は、自分のデータをLangChainに持ち込み、GPT-4で使用するための知識ベースを構築することについて説明します。
では、GPT-4と連動させるために、どのように特定のデータを持ち込むのでしょうか?
前回のビデオでは、GPT-4でできること、つまり、コンテンツに対してより具体的な回答を与えることを紹介しました。
このプレゼンテーションでは、このようなナレッジベースを構築する際に必要となる、さまざまな要素について説明します。
エンベッディング、ベクトルストレージ、LangChainドキュメントについて説明する予定です。
つまり、知識ベースを構築するための全体的な概要を説明するものです。
では、さっそく始めましょう。
さて、まず最初に、このアプリに取り込みたいデータは何でしょうか?
このアプリに取り込むことができるデータは?
これらは、LangChainでサポートされているファイルローダーの一部です。
また、Webローダーもあります。
Amazon S3のファイルを持ち込んだり、GitHubのリポジトリを持ち込んだり、puppeteerやCheerioのようなものでウェブスクレイピングをしたりすることができるのです。
そして、これらのファイルローダーも利用できます。
ファイルローダーについて少し説明すると、私は通常、PDFファイルローダーや、テキストファイル、Markdownドキュメントを使用することがあります。
これらはとてもうまくいっています。
doc xファイルについては、いくつか問題がありました。
また、CSVファイルローダーは、ヘッダーや行、列を特定する必要があり、設定が必要です。
ですから、LLMは生テキスト、特に構造化されたテストが可能であれば、うまくいきます。
だから、私はこれまでそうしてきたのです。
でも私のやり方としては、ディレクトリを作成し、ディレクトリローダーも使って、そのディレクトリに入れたPDFやテキストファイルを埋め込みや次のステップに読み込むことができます。
ファイルタイプやデータの形式を特定したら、ドキュメントローダーを使ってデータをLangChainアプリケーションに読み込み、LangChainドキュメントを作成します。
これはJavaScriptで、このプレゼンテーションはすべてJavaScriptのLangChainで行われますが、LangChainからテキストローダーをインポートしています。
そして、テキストローダーを使って、テキストファイルを読み込んでいるところです。
これは重要なことです。ドキュメントを読み込むというこのコンセプトは、LangChainアプリケーションでデータを扱うためのアクセスを開始する方法だからです。
さらに、テキストを解析するためのツールも用意されています。
つまり、テキストを分割したり、チャンク化したりすることができるのです。
これもLangChainが提供するツールのひとつですね。
さて、ドキュメントができたら、次のピースはエンベッディングを作ることです。
では、まずエンベッディングとは何なのかを説明しましょう。
エンベッディングは、ここに書いてあるように、テキストデータを数値で表現するために使います。
ベクターは数の集まりで、それぞれの数値が近いほど類似しており、数値間の距離が埋め込みの異なる部分がどれだけ類似しているかを示します。
では、ここを少し拡大してみましょう。
これは、これから埋め込むものを可視化したものです。
埋め込みは、ドキュメントを表す数字で構成されたベクトルを作成することになります。
そして、これから行うのは、この埋め込みに対して類似性検索を行うことです。
さらに、ベクトルの保存と、この埋め込みのためのデータベースの作成についても説明し、この類似性検索のプロセスでも使用します。
これは、私たちが実際にやろうとしていることを視覚化したものです。
テキストファイルであれ、PDFファイルであれ、ソースドキュメントを読み込み、ベクトル構造を作成して、情報を数字で整理します。
そして、この埋め込み形式を利用して、類似検索を行います。
また、これはOpenAIに送ることができるフォーマットでもあり、GPT-4とエンベッディングで対話することができます。
さて、これがエンベッディングとは何かということを少し説明します。
これは、ソース文書のコンテキストについて教えてくれる数字のリストなんだ。
そして、素晴らしいウェブサイトがあります。
このことについて書かれた素晴らしいウェブサイトがたくさんあります。
私がいつも見ているのは、OpenAIのエンベッディングに関するページです。
エンベッディングとは何か、テキスト文字列の関連性を測定すること、そして検索や他の機能についても知ることができる素晴らしいリソースです。
では、LangChainでエンベッディングを作成することについて説明しましょう。
どのように使うのですか?
そこで、ライブラリのOpenAIエンベッディングの部分をインポートすることができます。
そしてこれも、このページで紹介するOpenAI APIで直接利用することができます。
そして、LangChainでできる埋め込みは2種類あるんです。
1つ目は、クエリの埋め込みです。
チャットボットを使っているとき、ユーザーがボットに入力するプロンプトを、私たちはその検索に埋め込むことができるのです。
また、ドキュメントを埋め込むこともできます。先ほど、ドキュメントローダーを導入してドキュメントを埋め込むという話をしました。
そして、ドキュメントを埋め込む際に、クエリを埋め込むことができるのだと思います。
このように、クエリ埋め込みとドキュメント埋め込みの2種類の埋め込みができるんです。
これは、LangChainのドキュメントに書いてあることです。
さて、これでドキュメントの埋め込みができたので、クエリの埋め込みもできるようになりました。
では、これらのエンベッディングの管理について説明しましょう。
そこで、ベクターストレージの話をします。
これは今、非常にエキサイティングな分野です。
これらの企業は、素晴らしい技術を持っています。
ChromaはシリーズBを調達したばかり、WeaveyはシリーズBを調達したばかり、Lane Chainはスーパーベースがベクターデータベースのプラグインを開発したところです(詳しくは後述します)。
このように、本当にエキサイティングなことがたくさん起こっています。
これらの企業の皆さん、おめでとうございます。
そして、ここから生まれてくるであろう、あらゆるツールに期待しています。
そして、このようなものに飛びつき、学び始めるには絶好の機会だと思います。
これらのツールが初期段階にあり、より高度なものになる前に、今基礎を学んでおくことで、それらが発展したときにどのように使い続けることができるかを理解することができます。
さて、ここからは盛りだくさんの内容です。
ベクターストレージ、なんだかクレイジーに聞こえますね。
ベクターストレージを使い始めたいなら、どこから手をつければいいのでしょう。
私の考えでは、主に2つのことを考慮する必要があります。
1つ目は、どのような環境でコーディングするかということです。
Dockerでうまくいくものもあれば、Node.jsアプリで使えるもの、ブラウザやサーバーレスで使えるものもあるからです。
ですから、どのような環境でコーディングするのかを考えてみてください。
そして2つ目は、どのような規模でベクターストレージアプリを構築するかということです。
もし、プロダクションレベルのSASで、大規模なホスティングサービスを使いたいのであれば、Pineconeのようなものが素晴らしい選択肢になるでしょう。
GitHubのレポに小さなファイルを置きたいなら、LangChainに付属しているHNSW libツールを使うのが手っ取り早いと思います。
このツールは埋め込みデータを作成し、それをGitHubレポのローカルファイルに保存してくれます。
そして、リモートとローカルのベクターストレージを管理するのは、超簡単なファイルだけです。
だから、これを始めるには最適な方法だと思うんです。
LangChainのドキュメントに、それぞれの違いについてのページがあります。
それで、ベクターストアに行くと、ここでは、LangChainが何を選べばいいかを推奨しています。
また、先ほどの話と同じように、さまざまな環境について説明しています。
Nodeアプリケーションの場合はHNSW、ブラウザの場合はVerselのサーバーレスを推奨しており、LangChainのメモリベクターストアを使うことができる。
あれはまだ使ってないんですけど。
Pythonのドキュメントには、Pythonのオプションもたくさんあります。
ローカルでDockerを使って実行している場合やバックエンド開発者であれば、Chromaを使うことができます。そして、SuperBaseはデータベースパッケージのパッケージマネージャーを立ち上げました。
npmのようなものですが、データベースパッケージのためのもので、ベクターストアもあります。
これを試してみるのが楽しみです。
SuperBaseは素晴らしいローンチウィークを迎え、たくさんの新しいクールなものを発表しています。
私はSuperBaseを使うのが大好きです。
以上、簡単にですが、それぞれの違いをご紹介しました。
いろいろなものを試してみて、さまざまな機能性を確認しながら始めるといいでしょう。
私の場合は、まずSuperBaseから始めることをお勧めします。
そして、Pinecone、さらに大規模なPinecone。
しかし、私は間違いなく、これらのツールすべてでもっと遊んでみたいと思っています。
というわけで、いくつかのオプションの概要について、少しでもお役に立てれば幸いです。
そして、これらを一緒に使うにはどうすればいいかという話に移ります。
このコードスニペットは、申し訳ありませんが、少しぼやけていて、LangChainのドキュメントから引用したものです。
ここでは、いくつかのステップを実行しています。
まず、テキストドキュメントを読み込み、それからLangChainドキュメントを作成し、このドキュメントをベクターストアに読み込みます。また、OpenAIを使って新しい埋め込みを作成し、それもベクターストアに読み込みます。
そして、ベクターストア.類似性検索を行うことができます。
これで、すべてのピースが揃い始めたことになります。
ドキュメントを作成し、エンベッディングを作成し、それをベクターストアに保存することで、データをロードしているのです。
そして、最後の2番目のスライドに進みます。
これは、マクロ的な視点から見たものです。
この他にも、LLMの出番があるのは間違いありません。
これまで話したことを簡単にまとめると、ファイルやWebからデータを取り込んで、ローダーを使ってLangChainドキュメントを作成し、OpenAIのAPIを使って埋め込みを作成できます。
そして、ユーザーが検索したときに、その検索のエンベッディングを作成する。
そして、このエンベッディングを、ドキュメントと同様にベクターデータベースに保存することができる。
これが、舞台裏で何が起きているのかについての、私の現時点での最良の理解です。
これらはすべて、非常に急速に変化しています。
ですから、LangChainのドキュメントは、より最新のものになるはずです。
そして、私はこれからも学び続け、より良いものにし、ここで起こっていることを学びながら、より良い情報を共有していきたいと思います。
しかし、これは、これらの知識ベースがどのように機能しているかについての、私の現時点での最良の理解なのです。
ですから、これが役に立つ概要であることを願っています。
そして、このようなことについてもっと学ぶという意味で、私が学んできたYouTubeチャンネルやコミュニティをいくつか紹介します。
LangChain、知識ベースの構築、大規模な言語モデルとの連携など、素晴らしいコンテンツを提供しています。
ドキュメントを読むだけでも、正直なところ、座ってドキュメントを読むだけでも、とても価値があります。
しかも、彼らは毎日、毎週、Twitterで更新していて、新しいものばかりです。
とてもエキサイティングな空間です。
このようなツールをカスタムデータに取り入れることができるのは、とても素晴らしいことですから、多くの企業が興味を持っています。
これには様々な用途があり、質問回答やビジネス用のアセットの生成、または400ページの大量のドキュメントを読む時間がない場合でも、いくつかの質問を投げかけることができます。
LangChainがどのように機能するのか、その概要についてご理解いただけたと思います。
そして、皆さんはこの件に関するコーディングもご覧になりたいと思うでしょう。
ドキュメントにあるスニペットをいくつか紹介します。
でも、将来はぜひビデオを作りたいですね。私はまだこれに取り組んでいますが、このコードを構築して、その断片をアプリに追加していくような内容です。
なぜなら、みなさんもそうしたいはずだからです。
これはそのためのステップなのです。
このビデオがお役に立てれば幸いです。
ご覧いただき、ありがとうございました。
このビデオが役に立ったと思ったら、ぜひ「いいね!」と「購読」をお願いします。
それでは、また次のビデオでお会いしましょう。