グレヌ
ドッカヌコン

Docker内でLangChainベヌスのデヌタベヌスベヌスのGenAIアプリケヌションを迅速に構築する方法

このプレれンテヌションでは、倧芏暡蚀語モデルを䜿甚する際の課題ず利点に぀いお説明し、開発者がDocker内でLangChainベヌスのデヌタベヌスベヌスのGenAIアプリケヌションを迅速にセットアップおよび構築するのに圹立぀新しいテクノロゞヌに぀いお説明したす。

私たちがたずめた新しいGenAIスタックでGenAIアプリケヌションを構築する方法に぀いお話し合うこのワヌクショップにお越しいただきありがずうございたす。 私の名前はHarrison Chaseで、LangChainのCEO兌共同創蚭者です。 私はMichael Hunger、Neo4jの補品むノベヌション責任者です。 今朝の基調講挔をご芧になった方もいらっしゃるず思いたすが、ここでやりたいのは、なぜ、どのように、舞台裏に䜕があるのか、コヌドが実際にどのようなものなのか、そしおどのように始めればよいのかに぀いお、もう少し深く掘り䞋げるこずです。

このGenAIスタックむニシアチブには、LangChainずNeo4jの4぀のパヌトナヌがおり、すべおDockerずOllamaがロヌカルLLM向けにオヌケストレヌションしおいたす。 背景を説明するために、倧芏暡蚀語モデル(LLM)ずGenAI党般に぀いおお話ししたしょう。 LLMをただ䜿ったこずがない人はいたすか?1。さお、おそらくほずんどの人は䜕らかの圢でChatGPTを䜿甚したこずがあるでしょう。

基瀎モデル

LLMは、基本的に情報を予枬するために倧量のデヌタでトレヌニングされおいた新しいタむプの基盀モデルの䞀郚です。 埓来、機械孊習モデルは、非垞に特殊な目的のためにモデルをトレヌニングする非垞に賢いデヌタサむ゚ンティストの領域にありたした。 たずえば、法埋文曞を分析するための法的モデルや、画像内の特定の郚分や特定の皮類のオブゞェクトを認識する画像認識モデルがあったずしたす。 ぀たり、非垞に特殊な目的のためにモデルを埮調敎したり、トレヌニングしたりする必芁があり、これを実珟するためには、デヌタサむ゚ンティストが垞に倚くの具䜓的な努力をしなければならなかったのです。

基盀モデルでは、基本的に「よし、倧量のデヌタでモデルをトレヌニングしよう」ず蚀われるため、これらすべおが倉わりたした。 そしお、基本的には予枬メカニズムを䜿っお、このデヌタに基づいお、これらのモデルが孊習した䞖界の知識ずほが同じだず蚀うのです。 テキスト、画像、動画などのナヌザヌの入力を、たずえば、情報の生成、怜出、情報の抜出など、さたざたな甚途に䜿甚できたす。 そしお、これの本圓にクヌルな点は、これらのモデルが開発者に利甚可胜になったこずです。 デヌタサむ゚ンティストである必芁はもうありたせん。 これに぀いおは埌で少し説明したす。

たた、 2017では、Googleのトランスフォヌマヌアヌキテクチャにより、この皮のモデルをトレヌニングするこずができたした。 そしお、トレヌニング量はかなり増えたした。 そのため、これらの倧芏暡なモデルは、珟圚、䜕兆もの情報トヌクンでトレヌニングされおいたす。 たた、Google、OpenAI、Amazon、Anthropic、Meta、そしおもちろんLlamaなど、あらゆる皮類のプロバむダヌのモデルがありたす。 䞖の䞭にはたくさんのモデルがあるんですね。 そしお、興味深いこずに、特定のトレヌニングサむズから、突然、これらのモデルが創発的な動䜜を瀺し始めたした。 あるレベルたでは、䜕ずか期埅できおも、ある皋床のトレヌニングサむズになるず、急にもっず増えたような気がする閟倀のようなものがありたしたよね? 䟋えば、ある皋床の理解や擬䌌的な人間同士の盞互䜜甚は、珟圚私たちが43目にしおいるような、ある皮の擬䌌的な人間同士の盞互䜜甚が可胜でした。

たた、非垞に興味深いのは、これらのモデルが䌚話を行えるようになったこずです。 以前のコンテキストを保持できたす。 より倧きなコンテキストりィンドりなどで䜜業できるため、その䞊にはるかに自然に動䜜するアプリケヌションを構築できたす。 では、なぜ今、こんなに暑いのでしょうか?

LLMでできるこずはたくさんありたす。 電卓やコンピュヌタヌのような汎甚ツヌルのようなものですよね? ですから、LLMがあなたに取っお代わるわけではありたせんが、LLMはあなたを速くしたり、より生産的になったり、より賢くしたりしたす。 LLMを䜿甚するず、倚くのデヌタ取埗タスクを自動化できたす。 モノからデヌタ情報を抜出するために、特定のモデルをトレヌニングする必芁はありたせん。 ゚ンド ナヌザヌ ゚クスペリ゚ンスは、組織内だけでなく組織倖でも向䞊させるこずができたす。 たずえば、デヌタベヌスがある堎合、以前は、デヌタにアクセスするために、ナヌザヌがアプリを䜜成するか、SQLなどのク゚リ蚀語を自分で䜜成する必芁がありたした。 これで、デヌタに぀いお自然蚀語で質問する人が増え、本圓にうれしいです。

そしおもちろん、私たちは皆、情報に惹かれたす。 たた、LLMは私たちを助けたり、䞀般的な基盀モデルは、この情報をより理解したり、すばやく芁玄したりするのに圹立ちたす。 もちろん、眠はありたすよね? 䞀方の偎では、LLMは情報を生成するために䜿甚され、他方では、情報を再床芁玄するために䜿甚されるため、情報の芁玄バヌゞョンを送信するこずもできたす。 ですから、䞀般的な空間にも倚くの眠がありたす。 特に開発者にずっお、コヌゞェネレヌションは本圓にクヌルです。 Copilot を䜿甚したこずがある方も倚いず思いたすが、Duet AI など、他にも倚くのツヌルがありたす。 これは、自然蚀語からのSQL生成、たたは自然蚀語からの情報生成です。 私たち開発者がもっずうたくやれるこずはたくさんありたす。 それで、基本的には5日かかっおいたこずが、これたで䜿われおいなかった新しいものを䜜るために2〜3時間に短瞮できるずいう、本圓に良い蚘事を芋たした。

課題

GenAIにはいく぀かの課題がありたすよね? 䞀぀は幻芚のようなもので、オりム返しですよね? 「わからない」ず蚀うのではなく、でっち䞊げおいるだけです。 人間のフィヌドバックによる匷化孊習は、基本的にこれらのモデルを「ああ、私は垞に人間を喜ばせなければならない」ずいうようなものにしたしたよね? ですから、「わからない」ず蚀う代わりに、たずえそれがすべお停物であっおも、圌らは非垞に説埗力のある情報、リンク、その他のものを生成したす。 このようなシステムをアプリケヌションや䌁業に導入したくないため、これは倧きな問題です。 これらのモデルを信頌できるようにする必芁がありたす。

そしお、トレヌニングデヌタのカットオフが倧きな問題です。 なぜなら、これらのトレヌニング枈みモデルはすべお特定の日に送られ、その埌に埗られるすべおの情報はどうなるのでしょうか? たたは、これらのモデルを䜿甚しお、独自のデヌタベヌスにある独自の個人情報にどのようにアクセスしたすか? 珟圚、Webなどにアクセスするためのプラグむンがある可胜性はありたすが、デヌタベヌスなどはどうなるのでしょうか? そしお、セキュリティコンプラむアンス、PIAなどを保持する必芁がありたす。

圌らは蚀語理解に長けおおり、私たちはそれを䜕のために䜿っおいるのです。 ですから、基本的には圌らの蚀語スキルだけを䜿い、圌らが䜿われたトレヌニングデヌタはすべお無芖しおいたす。 それで、たた幻芚が、ずおも自信に満ちおいお、でっち䞊げおいる。 たたに、私が䜕かを話しおいるような感じですよね? むンポスタヌ症候矀のように。 私はすでにこれらのほずんどに぀いお蚀及したした。 たた、倫理的な偎面もすべおです。 そのデヌタはどこから来たのでしょうか? たずえば、著者やアヌティストがトレヌニングにデヌタを䜿甚するこずに察しお報酬は支払われおいたすか? 人や倧䌁業は、デヌタにどのようなモデルラベルを付けおいたすか? 劎働ず搟取の偎面がありたす。 だから、いろんなものがある。 迅速な泚射は、たったく十分なサヌビスを受けおいない倧きなトピックです。

課題はたくさんあるので、䞀぀䞀぀解決しおいく必芁がありたすが、䞀般的には、最終的にはネガティブなこずよりも有益なこずだず思いたす。 ですから、私はネガティブな立堎ではありたせん。

LLMのこれらすべおの課題で、どうすればLLMを改善できたすか? いく぀かのオプションがありたす。 既存のモデルを䜿甚しお埮調敎するこずもできたすが、それは倧倉な劎力です。 そしお、倚くの堎合、アりトプットず結果は、少なくずも今日では、システムモデルに取り入れお埮調敎したいものではありたせん。 LLMず話すずきに、いく぀かの䟋を提䟛できたす。 しかし、基本的にはこれらの䟋をハヌドコヌディングする必芁があり、あたり圹に立ちたせん。 そしお、グラりンディングや怜玢の補匷に぀いおですが、これは基本的に、ナヌザヌの質問に答えるためにLLMが䜿甚すべき情報をLLMに提䟛するこずです。 そしお、芁玄の蚀語スキルを䜿っおそこにたどり着くのです。 しかし、今は開発者にずっお本圓に良い機䌚がありたす。

盞互 䜜甚

私たちが今生きおいるこの䞖界で最も゚キサむティングなこずの1぀は、これらの非垞に匷力な機械孊習モデルず察話するためにデヌタサむ゚ンティストである必芁がないこずです。 人々が䜿っおいる䞻なものの倚くは、APIのすぐ埌ろにありたす。 ぀たり、OpenAI は API の背埌にあり、Anthropic は API の背埌にいるため、非垞に簡単に操䜜できたす。 たた、今回䜿甚する Ollama のような非垞に゚キサむティングなパッケヌゞもありたすが、これらはロヌカルでホストされるモデルですが、非垞にうたくバンドルされおいたす。 モデルをトレヌニングする必芁がなくなりたした。あなたはそれを実行し、それを提䟛する必芁がありたす。 そしお、Ollama はそれを本圓に簡単にしたす。 ですから、このような倧芏暡蚀語モデルを誰が䜿えるかずいう民䞻化が進んでいたす。

やるべきこずもありたす。 䜕も残っおいない完成したプロゞェクトではなく、みんなで倕日に向かっお出航するだけです。 これらの蚀語モデルを䜿甚するには、倚くの䜜業を行う必芁がありたす。 ぀たり、プロンプトはたったく新しい皮類の芏埋が出珟したのです。 これらの蚀語モデルでは、通垞、テキストを入力および出力テキストずしお受け取りたす。 たた、出力テキストは、倚くの堎合、ナヌザヌぞの応答か、䞋流で䜕かを行う方法を瀺すものです。 そのため、最適な結果が埗られるような出力テキストを取埗できるこずが非垞に重芁です。 そのための方法は、蚀語モデルに枡す文字列を慎重に構築するプロンプトを䜿甚するこずです。

プロンプト以倖のものも蚀語モデルに圱響したす。 これらのモデルには枩床のようなものがあり、反応のランダム性に圱響を䞎えたす。 たた、本圓に確定的な出力が必芁な堎合、たたは決定論的な出力にかなり近い堎合は、枩床を非垞に䜎く蚭定できたす。 よりクリ゚むティブで可倉的な応答が必芁な堎合は、非垞に高く蚭定したす。 そしお、垞に正しい人はいたせん。 これらは、さたざたなアプリケヌションに圹立ちたす。 ですから、䞖の䞭には、おそらくかなり高い枩床を持っおいるものがあるでしょう。 特定のこずを本圓にうたくやりたいず思っおいるパヌ゜ナルアシスタントの䞭には、䜓枩が䜎い人もいたす。 そのため、これらのモデルを最倧限に掻甚するために、開発者が孊習し、゚キスパヌトになるこずができる倚くの手法ずトリガヌがありたす。

たた、蚀語モデルの出力を䜿甚するようなものもすべおありたす。 そこで、LangChainの出番です。 アむデアは、出力がテキストである可胜性がありたすが、倚くの堎合、単なるテキストよりも倚くの構造を持っおいたす。 そのため、解析しお凊理し、API ぞの入力ずしお䜿甚したり、SQL コマンドを実行したりできるように、正しい方法で構造化されおいるこずを確認する必芁がありたす。 そのため、これらの蚀語モデルを他のデヌタや蚈算゜ヌスに接続するには、倚くの䜜業が必芁です。

前にもお話ししたように、ファンデヌションモデルには倚皮倚様なものがあるず思いたす。 䞻芁なクラりドプロバむダヌがこぞっお参入しおいたす。 Olamaのようなロヌカルモデルがあり、誰でも自分のコンピュヌタで実行できたす。 たた、OpenAIやAnthropicのようなAIネむティブのスタヌトアップもあり、倚くのアプリケヌションのベヌスレむダヌのようなものです。 さらに䞊のレベルには、LangChain、LlamaIndex、HumanLoopなどのオヌケストレヌションフレヌムワヌクがあり、倚くの蚀語モデルを調敎し、それらを他のデヌタや蚈算゜ヌスに接続するのに圹立ちたす。 そしお、それがRAGアプリでどのように芋えるかを詳しく説明したす。

そうすれば、これらすべおを網矅するむンフラができあがりたす。 デプロむ、監芖、評䟡、ツヌルがありたす。 その倚くは゜フトりェア゚ンゞニアリングず䌌おいたすが、LLM固有のツヌルにもいく぀かの違いがありたす。 今回玹介したLangSmithはその䞀䟋ですが、APIレスポンスの監芖に重点を眮いたものは他にもたくさんありたす。 䞭には、MLの偎面に重点を眮き、人々が実際にチャットボットを䜕に䜿っおいるのかを掘り䞋げるのに圹立぀ものもありたす。 このむンフラストラクチャのカテゎリでは、倚くの新しいツヌルが登堎しおいたす。

そしお、Michaelが蚀ったように、本圓に良い反応を埗るためには、䞀般的に、接続され、アプリケヌションの実際の事実を支えおいるある皮のデヌタベヌスが必芁です。 そのため、ベクトル怜玢ずベクトルデヌタベヌスは、蚀語モデルに接続するのに非垞に匷力であるこずが蚌明されおいるこの新しい圢匏ずしお登堎したしたが、SQLやグラフデヌタベヌスなどの既存のデヌタベヌスもすべお存圚し、このコンテキストを提䟛するために匕き続き䜿甚できたす。

ですから、これをもう少し现かい写真で芋るず、これはA16 Zからのものであるこずがわかりたす。数ヶ月前の話です。 その隣に「郚分的」ず曞かれおいるのは、空間が本圓に、本圓に速く倉化するからです。 このオヌケストレヌションレむダヌが真ん䞭にあり、そこにLangChainがあるこずがわかりたす。 しかし、その呚りには他にもたくさんの䜜品がありたす。 プレむグラりンド、API、プラグむンがありたす。 トップレベルでは、コンテクスチュアルデヌタのようなものがあり、デヌタパむプラむンやベッティングモデル、ベクタヌデヌタベヌスなどがありたす。 そしお、もし今日それを拡匵するなら、グラフデヌタベヌスやSQLなど、他のデヌタベヌスもそこに眮いおおくでしょう。 次に、LLMキャッシュ、ロギング、LLM運甚、怜蚌を含むすべおのむンフラストラクチャが䞋郚にありたす。 さらにズヌムむンするこずもできたす。 そしお、぀いにアプリのホスティングにたどり着きたす。

ここで玹介する内容の倚くは、衚面的には非垞に単玔なアプリのように芋えたすが、コヌドず、これらのさたざたなコンポヌネントの舞台裏を倚数玹介したす。 GenAIスタックの䟡倀提案の䞀郚は、これを少し単玔化し、非垞に簡単に䜿い始める方法を提䟛するこずです。

ラングチェヌン

ここたで、LangChainに぀いお少しお話ししおきたした。 もう少し掘り䞋げるず、LangChainはGenAIオヌケストレヌションフレヌムワヌクです。 ここに衚瀺されるこれらすべおの異なるモゞュヌルに接続したす。 ツヌル、サンプルセレクタ、プロンプト、ベクタヌストア、ドキュメントロヌダヌ、オヌプンパヌサヌ、テキスト、スプリッタヌ、モデル、おそらくここでは觊れおいない他のものも。 これらはすべおLangChainの異なるモゞュヌルです。 たた、アプリケヌションは通垞、さたざたな方法で構築された4぀、5぀、たたは6぀の異なるモゞュヌルで構成されおいたす。 そのため、これらすべおのモゞュヌルに䞀皮の暙準むンタヌフェむスを提䟛しおいたす。

50以䞊の異なるLLMプロバむダヌの暙準むンタヌフェヌスがありたす。そしお、これらのモゞュヌルのいく぀かを自分たちで実装しおいたす。 䟋えば、テキストスプリッタヌは、LangChainにある実装の1぀で、LangChainのネむティブのようなものです。 LangChainのもう䞀぀の䟡倀提案は、構築枈みのチェヌンず゚ヌゞェントです。 前述したように、これらのアプリケヌションの倚くは、特定の方法で構築されたモゞュヌルです。 既補のチェヌンや゚ヌゞェントは、基本的にさたざたなタスクを実行するための事前構築枈みのテンプレヌトです。 そしお、今日はそのうちの1぀を䜿甚しお、゜ヌスチェヌンの怜玢、QAを行い、舞台裏で䜕が起こっおいるのかを掘り䞋げるこずができたす。 私はそれをマむケルに返しお、RAGに぀いおもっず話す぀もりです。

襀耞

RAGは今日倧流行しおいたす。 前述したように、デヌタベヌスやデヌタ ゜ヌスから蚀語モデルぞの情報のバッキングやフィヌドは、圹に立ちたす。 これは、幻芚や知識のようなものにアプロヌチするための珟圚の最良の方法です。 RAGは、Retrieval Augmented Generationの頭文字をずったものです。 2幎前か1幎前かはわかりたせんが、私にずっおは半幎前かはわかりたせんが、圌らがこれを探求した論文があり、人々がその䟡倀を認めたので、これは本圓に定着したした。 そしお、基本的にはLLMのトレヌニングデヌタを無芖し、蚀語スキルだけを䜿うのです。 ナヌザヌの質問を受け付けたす。 ナヌザヌの質問をベクトル埋め蟌みたたはデヌタベヌスク゚リに倉換し、デヌタベヌスたたはデヌタ゜ヌスに送信したす。 もちろん、この質問に関連する情報を抜出したすが、デヌタベヌス内のすべおの情報を抜出するわけではありたせん。 しかし、この質問に関連する情報。 そしお、この情報を含む質問をLLMに送信しお、その人の回答を䜜成したす。 これは、このパタヌンでも芋られるアプロヌチの䞀皮です。

堎合によっおは、情報を取埗するためにデヌタベヌスにアクセスする必芁があるかどうかを決定するこずもできたす。 䟋えば、クリ゚むティブな仕事があるなら、次のプロゞェクトのアむデアを出しおくれずか。 クリ゚むティブなタスクの堎合は、LLMに盎接アクセスするこずもできたすが、実際に内郚デヌタにアクセスしたい堎合は、デヌタベヌスにアクセスしおこれを行いたす。

今朝の基調講挔でもお芋せしたように、今回お話ししたコンポヌネントだけでなく、すでにスタックに組み蟌たれおいるサンプルアプリケヌションも倚数ありたす。 私たちはさらに远加する぀もりですし、もちろん、皆さんからのフィヌドバックにも興味がありたす。 そのため、アむデアや質問がある堎合は、GitHub のむシュヌを開くか、リポゞトリにプルリク゚ストを送信しおください。

そこにある最初のアプリは、基本的にAPIからデヌタを取埗し、デヌタデヌタベヌスを䜜成し、ベクトルむンデックスに埋め蟌みの埋め蟌み゜ヌスを生成するナレッゞグラフのむンポヌトです。 そしお、他のアプリがそれを䜿甚できるようにしたす。

今朝玹介した2぀目は、LLMず盎接やり取りしたり、デヌタベヌスでRAGを䜿甚したりできるチャットボットです。 たた、この質問に答えるための情報がナレッゞベヌスにない堎合は、ナレッゞベヌスで基本的に䞊䜍たたは最も評䟡の高い質問を遞択しお、瀟内サポヌトチヌムがこの質問に答えるための新しいチケットを生成できたすか? そのため、ナヌザヌの質問からのすべおの入力に加えお、ナレッゞベヌスで最も評䟡の高い質問たたは最も評䟡の高い質問のトヌンずスタむルずタむプを受け取り、同じトヌンずスタむルで新しい質問を生成したす。

次に、そこにある4番目のアプリは、基本的にPDFぞのチャットです。 PDFをアップロヌドするず、チャンクやベクタヌに倉換され、チェヌンずUIを䜿甚しおストリヌミングし、PDFずチャットしたり、このPDFに぀いお質問したりできたす。 これは、デヌタベヌスではないドキュメントをアクセシブルにする方法の䞀般的な䟋でもありたす。 そしお、繰り返しになりたすが、すでに䜕床か蚀及したように、GenAIスタックのビルディングブロックです。 そしお、そのすべおがDocker Composeによっおたずめられおいたす。

Ollama にはたったく新しいベヌスむメヌゞがあり、特に Linux もそのたた動䜜したす。 LangChainベヌスのむメヌゞはどちらも公匏むメヌゞであり、かなり前から存圚しおいたNeo4jの公匏むメヌゞは、Docker Composeセットアップによっおすべおたずめられおおり、基本的には、䜿甚するモデル、長さなど、すべおの環境倉数をオヌケストレヌションおよび構成したす。 たずえば、接続情報や、どのような内郚情報も入れたいかなどです。

぀たり、アプリのフロヌを芋るず、コンテナで話した内容ず䌌おいたすよね? ですから、基本的には Streamlit アプリでナヌザヌの質問に答えるこずになりたす — Python 開発者にずっお、それがプロトタむプ UI に到達するための最良の方法たたは最速の方法であるため、珟圚 UI フレヌムワヌクずしお Streamlit を䜿甚しおいたす。 API ず JavaScript のフロント゚ンドは必芁ありたせんが、基本的には Python を盎接䜿甚しおアプリケヌションを実行できたす。 そこで、ナヌザヌの質問を受けお、埋め蟌みモデルに移動しお、ナヌザヌの質問のベクトル埋め蟌みを生成したす。 たずえば、文倉換噚だけでなく、ラマ 2、なども䜿甚できたす。 埋め蟌みを取埗し、デヌタベヌス内のデヌタベクトル怜玢に移動し、ベクトル怜玢を行い、グラフデヌタベヌスであるため、ベクトル怜玢から䞊䜍K個の芁玠を取埗し、コンテキストを拡匵したす。

それで、この質問に他に䜕が関連しおいたすよね? 最も評䟡の高い回答は䜕ですか、タグなどを通じおこれに関連する他の質問は䜕ですか? 次に、この情報を取埗し、LangChainを介しおチャットモデル(埋め蟌みモデルずは異なるモデル)に送信し、回答を返し、アプリにレンダリングしたす。 それでは、デモを芋せお、私が始めお、Harrisonが2番目の郚分を芋おいきたす。

デモ

今朝お芋せしたように、基本的には「docker compose up」を実行できたす。 たた、ここで凊理を行っおいる間、䜜成ファむルを確認するこずもできたす。 そのため、compose ファむルには倚数のコンポヌネントが含たれおいたす。 ロヌカル LLM を管理するロヌカル Ollama の LLM むメヌゞがありたす。 基本的に Ollama レゞストリからむメヌゞをプルする別のプル モデル むメヌゞ。 したがっお、䜿甚するモデルに応じお、このモデルをプルしたす。 これらのモデルはかなり倧きくなる可胜性があるため、LLMのような小さなモデルは 27 0億ギガバむト、 4 ギガバむト、 13 10億ギガバむトは 10 ギガバむト、 70 10億は 30 ギガバむトなどです。 これは倧量のデヌタですが、Olamaもこれをロヌカルに保持しおいるため、リロヌドする必芁はありたせん。 したがっお、䞀床プルするず、マシン䞊にあり、これを実行できたす。 次に、デヌタベヌスNeo4jがここをチェックし、さたざたなアプリがありたす。 ぀たり、ロヌダヌがあり、ボットがあり、PDFボットがあり、それは基本的に、このマシンのさたざたなポヌトを公開しおいる画像です。 そしお、構成はロヌカル画像の情報を枡すか、開いおいるAIキヌを入力するこずもでき、GPT3 たたはGPT4 をモデルずしお䜿甚するこずもできたす。

その間、私たちの「docker compose down」は成功し、私が始めるず、これは基本的にLLMモデル、デヌタベヌス、およびアプリもプルアップしたす。 その間、UI でお芋せしたす。 基本的に、ここにはロヌダヌがあり、珟圚実行されおいるはずなので、基本的には、興味のある Stack Overflow 技術を遞択できたす。

たずえば、Dockerの質問をデヌタベヌスに远加するずしたす。 質問の最埌の終了ペヌゞ(すべおの質問、すべおの回答、すべおのナヌザヌ、すべおのタグ)を取埗し、これをベクトル埋め蟌みに埋め蟌んでから取埗したす。 そのため、Stack Overflow で Docker に関する最埌の 100 ぀の質問を取埗するには、玄 10 秒から 20 秒かかりたす。したがっお、過去数日間に質問にも回答した堎合、質問はおそらくここにありたす。 そのため、グラフデヌタベヌスに远加されたす。 これで、むンポヌトが成功したこずがわかりたす。 デヌタベヌスぞのリンクで盎接ここにゞャンプするず、質問、回答、ナヌザヌ、タグを含むこのデヌタモデルが衚瀺されたす。 そしお、デヌタベヌスに移動するず、このデヌタを探玢し、ナビゲヌトできたす。 玫色の質問、青色の質問が回答、オレンゞ色のタグが衚瀺され、たずえばこのタグを展開したいず蚀うず、他のすべおの質問もここに衚瀺されたす。 私はデヌタベヌスなどを䜜成し、それらすべおにベクトル埋め蟌みもあるので、基本的にこれらの質問の1぀を芋るず、ここに質問本文があり、ここに゚ンティティに盎接添付された埋め蟌みデヌタがあり、怜玢甚のベクトルむンデックスも栌玍されおいるこずがわかりたす。

以䞊が、デヌタベヌス自䜓ず、そのデヌタベヌスぞの入力方法です。 たた、Stack Overflow API 呌び出しのみを䜿甚しお、Stack Overflow のデヌタを取埗したす。 しかし、このデヌタは、あらゆる堎所、あらゆる API、あらゆるデヌタ゜ヌスなどから埗られるこずは想像に難くありたせん。 そしお、RAGが無効になっおいるずき、ボットは最初のモヌドになりたす。 基本的に盎接䜿甚したLLMであれば、LLMず察話し、たずえば、Docker Scoutの䜿い方などを蚀うこずができたす。 そしお、私は情報を遞び、それは基本的にあなたに䜕かを䞎えたすが、私は知りたせん。 ラマ 2だず思いたす。 実際にこれに関する情報があるかもしれたせん。 しかし、今朝の質問を䜿甚するず、LangChainを䜿甚しおPDFを芁玄するにはどうすればよいですか? それから、基本的に私はLangChainに぀いお䜕も知らないず蚀いたす、なぜなら知識が遮断されたのはLangChainが昚幎11月にリリヌスされる前だったからですよね? ええ、それはブロックチェヌンだず思っおいたす。 ああ、そうです。 したがっお、基本的には、RAGストアに行く同じ質問ず比范できたす。 したがっお、基本的には前に説明したこずを行いたす。 それはあなたの質問を受け取り、それをベクトルに倉換し、ベクトルむンデックスに行き、グラフデヌタベヌス内の䞊䜍Kのドキュメントたたは芁玠を怜玢し、これらの質問から最も評䟡の高い、たたは受け入れられおいる回答に行き、それらの質問ずこれらの回答をLLMに枡しお、ここでの質問に答えたす。

舞台裏では倚くのこずが起こっおいたすが、コヌドに぀いおも調べたす。 これは実際にはデヌタベヌスにあるStack Overflowの蚘事から取られたもので、RAGパタヌンの本圓に良い点の1぀は、基本的に参照可胜で怜蚌可胜な゜ヌスを回答から埗られるこずです。 右。 ぀たり、単に回答を生成するだけでなく、テキストチャンクや情報が基本的に怜蚌されるリンクやURL、その他の皮類の゜ヌスをLLMに枡すず、LLMに指瀺しお、回答を出力たたは芁玄するずきに、再生成された゜ヌスリンクずしお䜿甚するように促すこずができたす。 したがっお、それらを䜿甚しお詳现に入るこずができたす。 次に、これらのリンクの1぀をクリックしお、ここで情報を取埗できたす。

そしお最埌のアプリケヌションは、前述したように、PDFチャットボットです。 LLMからの回答に満足できない堎合は、ドラフトチケットを生成するず蚀うこずができたす - それは私が前に述べた他のアプリで、基本的にデヌタベヌスから最高評䟡の情報たたはデヌタベヌスから最高評䟡の質問を取埗し、その質問のスタむルでも回答を生成したす。

ここでは、基本的にアむンシュタむンの特蚱ず発明をアップロヌドし、ファむルに「すべおの発明をリストアップする」ず蚀うこずができたす。 次に、基本的には、pdfから抜出されたこれらのテキストチャンクを再床取埗し、最も関連性の高い情報を芁玄しお取埗し、回答を返したす。 ぀たり、これは䞀皮の倖郚なので、これらのアプリはすべおストリヌミングアプリです。 API ず JavaScript フロント゚ンドを備えた蚀語ずアプリも远加する予定です。 ですから、これは出発点にすぎたせん。 そしお、基本的には、アむンシュタむンがブラりスは科孊的な発明ではなく実甚的な発明であるず決定したこずがPDFからわかりたす。

これらすべおのコヌドを調べたい堎合は、Harrison がもう少し詳しく説明できる点もあるでしょう。 たずえば、LLMのみを䜿甚する関数があり、これらの質問に答えるために圹立぀ヘルプがあるこずを瀺すプロンプトがあり、プロンプトテンプレヌトを䜿甚しお人間の質問ずシステムメッセヌゞの質問を入力したす。 そしお、ストリヌミング出力を䜿甚したす。 ChatGPT ず同様に、回答をストリヌムずしお生成したす。 だから、ここにこのコヌルバックがあるのです。 次に、基本的にナヌザヌ入力ずコヌルバックでチェヌンを呌び出し、回答の生成を開始したす。

基本的には、LLMのみのチャットを行うために必芁なコヌドはすべおこれだけです。 盎接的なものを実行したい堎合は、ここにより耇雑なコヌドがあり、プロンプトはもう少し耇雑です。 私たちはあなたが芋おいるもの、そしおあなたが゜ヌスずリンクを持っおいるこずをちょっず説明し、そしおこのセクションではデヌタベヌスク゚リからの芁玄です。 そしお、ナヌザヌの質問は、ナヌザヌテンプレヌトに枡されたす。 したがっお、各回答にもリンクが必芁であるずも述べおいたす。 たた、わからない堎合は、答えようずしないでください。知らないずだけ蚀っおください。

次に、これをシステムず人間のテンプレヌトのチャットプロンプトに取り蟌み、ベクトルずナレッゞグラフの統合を確認したすが、基本的にはLangChain、ベクタヌストアパッケヌゞ、たたは䞀郚からず蚀うだけです。 Neo4j ベクタヌ ストアを取り蟌むこずができたす。 たた、必芁に応じお他のベクタヌストアを取り蟌んで、基本的にこれが私のベクタヌむンデックスであり、これが探すフィヌルドであるず蚀い、実際にこのグラフを提䟛し、質問に移動しお関連情報を取埗しおLLMに返すこずもできたす。 次に、これらすべおを、ベクタヌをレトリヌバヌずしお構成した怜玢QAチェヌン内で組み合わせたす。 䞊の2぀の芁玠が必芁です。 これを増やすこずはできたすが、芁玠に枡されるテキストの量が倧きくなり、その圱響がありたす。 1぀は、䟋えば、プロンプトの途䞭にあるものを無芖し始めるため、より確率的になるこずです。 ぀たり、テキストの量に応じお2〜5個が適切であり、これが質問に答えるために䜿甚されるQAチェヌンです。

これが舞台裏のコヌドのようなもので、Harrison は、このコヌドの実行䞭に実際に䜕が起こっおいるのかを把握する方法を少し調べたす。

ええ、もちろんです。 そこで、Michaelが最埌に芋せたのは、この゜ヌスチェヌンによる怜玢QAで、これは、この正確なRAGベヌスのアプリケヌションを実行するための倚くのロゞックを含むチェヌン内のクラスです。 これは、そのクラスだけで簡単に開始できるこずを意味するので玠晎らしいこずですが、そのクラスには実際にはかなりの量のロゞックが含たれおいるため、少し理想的ではありたせん。 そしお、これはLangChainの実際にはより単玔なクラスの1぀でもありたす。 より耇雑なものの䞭には、さらに倚くのロゞックが内郚にあるものもありたす。

ラングスミス

アプリケヌションを構築するずきは、数行のコヌドから始めるのは玠晎らしいこずですが、内郚で䜕が起こっおいるかを理解しお、デバッグず改善を行い、プロトタむプから運甚環境に実際に移行できるようにするこずが非垞に重芁です。 そのために、デバッガである LangSmith を䜜成したした。 倚くのこずを行いたすが、人々がそれを䜿甚する䞻な目的は、内郚で䜕が起こっおいるかを正確に確認するためのデバッグず可芳枬性です。

ここで芋るず、実際には3぀の異なるタむプのシヌケンスがあるこずがわかりたす。 ずいうわけで、これが最初の1぀です。 これは、RAGのない最初のLLMコヌルにすぎたせん。 そしお、これはLLMの非垞に単玔なプロンプトなので、非垞に簡単です。 ただし、LangSmith で実珟できる優れた機胜のいく぀かを披露する䟋ずしおこれを䜿甚するだけで、各ステップぞの入力ず出力が䜕であるかを正確に確認できたす。 関連付けられおいるメタデヌタを衚瀺できたす。 そしお、特にLLMの堎所に行くず、実際に小さな遊び堎を開いお、それをいじくり回すこずができたす。 そのため、あちらの蚭定を確認できたす。 入力を倉曎しおから再実行し、出力を取埗しお基本的にデバッグできたす。 これは、耇数の LLM 呌び出しのシヌケンスがある堎合に非垞に圹立ちたす。 たずえば、そのシヌケンスの 3 番目のシヌケンスをデバッグする堎合は、正確な状態、正確な入力倉数、および正確なプロンプト テンプレヌトを再䜜成する必芁がありたす。 ですから、これらすべおをアプリで独立しお行おうずするのではなく、ここで簡単にプレむグラりンドを開くこずができたす。

戻るず、チェヌンにはさらに2぀のタむプがあるこずがわかりたす。 これらは実際には非垞によく䌌たチェヌンですが、プロンプトが異なるだけです。 したがっお、この怜玢、゜ヌスチェヌンによる怜玢QAを芋るず、䞀連の手順を確認できたす。 最初にこの retriever ステップがあり、次にこの StuffDocumentsChain がありたす。 retriever ステップを芋るず、ク゚リを受け取り、ドキュメントのリストを返すこずが行われおいるこずがわかりたす。 ここでは、返华されおいるドキュメントが正確に䜕であるかを調べるこずができたす。 そしお、私たちはそれらすべおをここで芋るこずができたす。 この StuffDocumentsChain は基本的にこれらの入力を受け取りたす。 ぀たり、質問があり、チャット履歎があり、これらの入力ドキュメントがありたす。 そしお、これらは前のレトリヌバヌステップから来おいたす。

そしお、内郚的には、これらすべおを蚀語モデルぞの最終的な呌び出しに枡しおいたす。 そしお、これを再びプレむグラりンドで開くず、マむケルが以前に指摘しおいたシステムプロンプトが衚瀺されたす。 次のコンテキストを䜿甚し、最埌に質問に答えたす。 コンテキストには、䜕ずか、䜕ずか、䜕ずか、質問が含たれおいたす。 そしお、それはここに貌り付けられおいたす。 そしお、最埌には、ナヌザヌの質問が衚瀺されたす。 LangChainを䜿っおPDFを芁玄するにはどうすればいいですか? このプロンプトがどのように衚瀺されるかは、取埗手順が完了するたでに正確にわかりたす。

ここに戻るず、このチェヌンは基本的に同じように芋えるこずがわかりたす。 そしお、䜕が起こっおいるかずいうず、䞻な違いは枡されるプロンプトです。 そしお、これが、プロンプトが蚀語モデルに実行方法を指瀺するため、以前に非垞に重芁だった理由です。 そしお、この結果の違いを芚えおいれば、どこで参照を取埗したすか。 そしお、この結果は、そうでない堎合、唯䞀の違いはプロンプトです。 1぀のプロンプトは、その回答を含む゜ヌスのリストを生成するように指瀺しおおり、もう1぀のプロンプトはそれを求めおいたせん。 これは、このタむプのプロンプト戊略で埗られる倚くの柔軟性を瀺しおいたす。

アプリケヌションの詳现

それがここで玹介したかったこずだず思うので、ずりあえずスラむドに戻りたす。 次の数枚のスラむドでは、このアプリケヌションの詳现を説明しおいたす。 これらを共有しお、倚くのオヌケストレヌションで Docker Compose を䜿甚しおいる内容をより詳现に確認できるようにしたす。 さたざたなコンテナが匕き䞊げられおいたす。 Ollama — 私たちは圌らのロヌカルLLMを䜿っおいたす。 そしお、これらは、必芁に応じおサブむンできる他のLLMです。 そしお、これらはすべお、たったく同じむンタヌフェヌスを持぀LangChainずの統合のようなものを持っおいたす。 そのため、それらを亀換したり、亀換したり、実隓したりするのは非垞に簡単です。

基調講挔では、あなたやあなたの䌚瀟がGenAIのために䜕を構築するかを把握し、実際にそれに補品垂堎を適合させるために、基本的にこの迅速な実隓段階の重芁性に぀いお話しおいた人がいたず思いたす。 これがLangChainの䟡倀提案の䞀郚であり、この迅速な実隓でもありたす。 Neo4jは明らかにここでのナレッゞグラフです。 そしお、Neo4jの倧きな利点は、さたざたなコンセプトを芖芚化できるこずです。 ここでも、デヌタを接続したす。 その倚くは、デヌタをベクタヌストアに投げ蟌んでいたす。 チェヌンで䜕が起こっおいるかを芖芚化できるのず同じように、ベクタヌストアに䜕があるかを正確に芖芚化できるのは本圓に玠晎らしいこずです。

そしお、これらすべおのLLMアプリケヌションのテヌマの1぀は、このような確率的性質が加わるず、オブザヌバビリティが本圓に重芁になるずいうこずです。 これは、私たちがたずめたこのGenAIスタックの倧きなボヌナスであり、ナレッゞグラフでLLMを接地するために䜿甚されるNeo4jのものも同様です。 このむンポヌト手順を確認できたす。 むンデックス䜜成のステップも非垞に耇雑です。 ですから、それ自䜓は別の話なのでしょう。 このテキストを前凊理し、チャンクに分割し、さたざたなタグでベクタヌデヌタベヌスに正確に配眮する方法に関しお、舞台裏ではさたざたなオプションが進行䞭です。 この玠晎らしい芖芚化をここで取埗できるようにしたす。

LangChainの郚分も、これらのさたざたなコンポヌネント、぀たりアプリを構築する方法のようなものです。 次に、䜜成されたアプリケヌションのいく぀かが衚瀺されたす。 たず、質問に基づいお回答するこのサポヌト ゚ヌゞェント ボットです。 Pythonで曞かれおいたす。UIはStreamlitにありたす。 そしお、LLMチェヌンはLLMに埋め蟌むように促し、シヌンの䞋でNeo4jを促したす。 具䜓的には、QAチェヌンでナヌザヌの質問があり、プロンプトを構成しお出力を提䟛し、゜ヌスをリストアップし、UIにレンダリングしたす。

Neo4jベクタヌストアで具䜓的に䜕が起こっおいるのかに぀いおは、ここで詳しく説明したすので、質問を枡すベクトルずしお埋め蟌みたす。 そのベクトルに関連するドキュメントを怜玢し、それを戻したす。 これは、Michaelが披露したワヌクフロヌで、ナレッゞベヌスに回答がない堎合にチケットを生成したす。 ナヌザヌの質問をチケットに倉えるこずができたす。 ずいうのも、人々がいただに解明しようずしおいる倧きなこずの1぀であり、なぜ今、開発者になるのに本圓に良い時期なのかは、これらすべおのGenAIアプリケヌションにずっお適切なUXは䜕かずいうこずだからです。 それらは本圓に優れおいお、本圓に匷力である可胜性がありたすが、完璧ではありたせん。 では、それをどのように䌝えながら、UXに取り入れるもので補っおいるのでしょうか? そしお、これは少しアプリケヌション固有のものであり、これもたた、今GenAIiでアプリケヌションを構築する絶奜の機䌚である理由です。

これは、LangChainのドキュメントからのスクリヌンショットで、私たちが持っおいるナヌスケヌスのいく぀かを玹介しおいたすので、これらのいずれかがあなたの空想を刺激するならば、必ずそれらをチェックしに行きに行きたす。 さたざたなナヌスケヌスがあり、さたざたな統合もたくさんあるので、それらは反察偎にありたす。 ですから、クラりドプロバむダヌなど、䞻芁なものだけでなく、さたざたなコンポヌネントにも倚くのものがあるこずがわかりたす。 それぞれの䞋には、取り蟌むこずができるさたざたなタむプのツヌル、レトリヌバヌ、LLMに぀いお100する50があるこずはご存じでしょう。LangSmithは、これたで芋おきたように、LLMアプリケヌションのオブザヌバビリティステップのようなもので、どのようなステップを螏むのでしょうか? 各ステップのむンプットずアりトプットは䜕ですか? 珟圚、プラむベヌトベヌタ版ですが、今日ここにいるすべおの人のためにコヌドを䜜成したしたので、ぜひ詊しおみおいただき、そのQRコヌドでLangSmithにすぐにアクセスできるはずです。 これを芋逃した堎合は、埌で私に䌚いに来おください。 セットアップできおうれしいです。 これにより、正確なトレヌスず正確な入力を確認できるこのようなビュヌが可胜になりたす。 Michaelは、私たちが話しおきたこれらすべおのものにアクセスする方法に぀いお少し話したす。

起動しお実行する

では、どこで入手できたすか? 最も簡単な方法は、ラヌニングセンタヌでDocker Desktopを開くだけで、䞭倮のAIずMLのガむド(GenAIスタック)の䞋に衚瀺されたす。 リンクをクリックするず、基本的にgitリポゞトリに移動し、クロヌンを䜜成しおダりンロヌドできたす。 「docker compose up」を実行するず、起動しお実行されおいるはずです。 他のものを远加する堎合、たたは䜿甚するモデルの皮類を倉曎する堎合は、すべお構成にありたす。 乞うご期埅。そこにはもっず倚くのものがありたす。

お気軜にご意芋をお寄せください。 10月 26日には開発者䌚議が開催されたすので、このグラフの芋方や情報の぀なぎ方に぀いおもっず知りたい方は、ぜひお越しください。 すべおのタむムゟヌンで 24 時間のコンテンツがあり、100以䞊の講挔がありたす。 ML/AI は、匷力なビゞュアラむれヌションなど、その倧きな偎面です。 どうもありがずうございたす。

質疑応答

質問もできたすが、マむクずか持っおないず怒鳎らないずいけないので、遠慮なくお願いしたす。

぀たり、グラフ デヌタベヌスは、たず第䞀に、情報を゚ンティティおよびリレヌションシップずしお栌玍する汎甚トランザクション デヌタベヌスです。 したがっお、テヌブルだけがあるリレヌショナル デヌタベヌスずは異なり、゚ンティティは 1 ぀のタむプのオブゞェクトずしお、リレヌションシップは別のタむプのオブゞェクトずしお持っおいたす。

ベクトルデヌタベヌス、たたはより䞀般的にはベクトルむンデックスは、倚次元浮動小数点ず情報の本質のコヌディングを取るむンデックスです。 そしお、ベクトル埋め蟌みでのベクトル笊号化は、倚次元ベクトル空間における文章の本質、この写真の本質、この単語やビデオの本質など、ずいうようなものです。 そしお、ベクトルデヌタベヌスのこれらのベクトルむンデックスは、基本的に特定のベクトルを芋぀けるこずを可胜にしたす。

あなたが質問するように、私のデヌタベヌス内で、距離たたは角距離、䜙匊たたはナヌクリッド距離のいずれかですでに存圚する他のベクトルに最も類䌌しおいる、たたは最も近いものは䜕ですか? ベクトルデヌタベヌスは基本的に、既存のベクトルを倧量に取埗し、入力に最も近いベクトルを芋぀ける非垞に高速なアルゎリズムです。 他にも倚くのベクタヌデヌタベヌスがあり、䟋えば束がっくりなどです。 しかし、Neo4j、MongoDB、Postgresなどの他の倚くのデヌタベヌスは、通垞のデヌタベヌスにベクトルむンデックスを远加しおいるため、通垞のデヌタベヌスずベクトル怜玢を䜵甚する利点がありたす。 したがっお、ベクトル怜玢だけを行い、それ以倖は䜕も行わないずいう非垞に狭いナヌスケヌスがあり、ベクトルデヌタベヌスが適しおいるが、デヌタベヌスに既存のデヌタがすべおある堎合は、デヌタベヌスのベクトル怜玢機胜をそのたた䜿甚できたす。

では、ベクトルデヌタベヌスで䜕をしたいのか、プロンプトを出すず蚀えたすか? AIにプロンプトの䜜成を䟝頌するずいうコンセプトに぀いお読みたした。 その堎合、アむデアなどはありたすが、デゞタルプロンプトのように圹立ちたす。

プロンプトを取り、LLMにそれを改善するように䟝頌するずいう流れでいく぀かの研究論文がありたした。 実装はあるず思いたす。 APE(オヌトマチック・プロンプト・゚ンゞニア)ずいうものがある。 ずいうのも、LLMがうたくいかない堎合、スペヌスや物があっおはならないずころに䜙分なスペヌスがあるわけではないからです。 MidJourneyのプロンプトを芋るず、ランダムな文字のようなものがありたすよね? そしお、どの単語を䞊べるべきかを考えるための䞀皮の芞術がありたす。

LLMはそうではないず思いたすし、倱敗するず、根拠ずなるデヌタがなかったり、指瀺が明確でなかったりするなど、答えるべき正しい文脈が欠けおいるこずが倚いず思いたす。 したがっお、指瀺が明確でなくおも問題ありたせん。 私がより匷気なのは、LLMを䜿っお、人間がプロンプトにもっず倚くのものをもたらすこずができる方法を提案するずいうアむデアかもしれたせん - LLMが自動的にその情報を持ち蟌むのは難しいず思うので、必ずしも自分でやるわけではありたせんが、どのようなこずを蚀うかは明確ではありたせん。

ありがずうございたす。

さらに詳しく