正直に言うと､ この時点で私には焦る理由がある｡
私たちはずっとラガについてしゃべってきたのに､ あなたはまだ実際にラガを使う機会がなかった｡
ベクターについて話したばかりだ｡
プロンプトとコンテクスト､ そしてラグの廉価版について話してきた｡
いよいよ本番だ｡
今日は､ ボロ・パイプラインを実行に移す時だ｡
そして､ バカバカしくなる｡
簡単だ｡
待っていてくれ｡
それで今日はどうなるんだ？
私たちはロング・チェーンで会話の連鎖を作ろうと思っています｡ ロング・チェーンは､
ラグとのリトリーバルで会話をするために､ さまざまなピースを接着剤でくっつけたものです｡
私たちは､ 専門家の理解を示す質問と回答を得ることで､ 最終的にはチャットUIを備えたナレッジワーカーアシスタントを構築するつもりです｡
そして､ すでに学んだ素晴らしいことのおかげで､ もちろん､ 信じられないほど簡単になることがわかるだろう｡
まず最初に､ 簡単に説明すると､ ロングチェーンにはいくつかの抽象化された概念がある｡
今日使うのはこの3つだ｡
まず第一に､ LLMには抽象的なイメージがある｡
LLMは､ 我々の場合はOpenAIを表しているに過ぎない｡
だが､ 他の選手を代表する可能性もある｡
そして梁城は､ モデルを抽象化した1つのオブジェクトを提供する｡
そして､ レトリーバーと呼ばれる抽象的な存在がある｡
そしてそれは､ ベクターストアのようなものへのインターフェースのようなものだ｡
この場合､ ラグ検索に使われるのはクロマーである｡
つまり､ ベクトルを受け取ってプロンプトを充実させることができる､ レトリーバー・インターフェースのようなものだ｡
そして3つ目の抽象化がメモリーだ｡
そしてそれは､ チャットボットとのディスカッションの履歴のようなもの､ 記憶を表している｡
だから実際には､ 私たちがここで慣れ親しんでいるのは､ ディクツのリスト､ 一番上のシステム・メッセージのようなものからなるリスト､
そしてユーザー・アシスタント､ ユーザー・アシスタントだ｡
しかし､ それはロングチェーン・メモリーという概念に抽象化され､ その裏側では､ リストやその他のさまざまなモデルが必要とするフォーマットを処理する｡
これが､ ロング・チェインから得られる､ より多くの機能を包む3つの主要なラッパーだ｡
そのことを念頭に置いて､ ラグ・パイプラインをいかにシンプルにまとめるかを見てみよう｡
これは4行のコードでできる｡
そしてこれが､ 今目の前にある4行のコードだ｡
そして､ これこそが1行目にある輝きなのだ｡
LMは､ ラングチェーンlnオブジェクトを作成しているチャットオープンAIです｡
オープンAI用のLMオブジェクト｡
そして､ 他のものにも似たようなものを作ることができると想像できるだろう｡
これが最初のラインであり､ 最初の抽象化だ｡
2行目のLM｡
2つ目の抽象化｡
メモリ｡
会話バッファメモリと呼ばれるラングチェーン・オブジェクトを作成します｡
これには2つほど必要なものがある｡
重要なのは､ どのように整理するか､
何を整理するか､ 何を使ってメモリやチャット履歴を検索するかということだ｡
だから､ この種のチャット・アプリケーションには､ これらを使用しなければならないことを知っておく必要がある｡
次の行は､ 単純にベクターストアがあり､ そのクロマを作成したと言っている｡
そして､ それをリトリーバーと呼ばれるインターフェース・オブジェクトで包む｡
ラング・チェーンがラグ・ワークフローを実現するために期待しているのは､ このようなオブジェクトなのだ｡
つまり､ LM､ メモリー､ そしてレトリバーという3つの抽象的なものだ｡
それらはすべて作られたものだ｡
そして今､ 最後の一行がそれを会話の連鎖と呼ばれるものにまとめた｡
LMからこのメソッドを呼び出して作成し､
LM､ リトリーバー､ メモリの3つを渡すだけです｡
それはとてもシンプルなことだ｡
この4行目のコードで､ ラグ・パイプラインができた｡
信じないのか？
JupyterLabに行って試してみよう｡