You’re in!
ウェビナー
MixtralでRAGアプリを構築する:ステップバイステップガイド
分かりました。皆さん、ようこそ。ええと、私の名前はChrisandで、ここ、ええと、Zillizで働いています。そして本日は、Yujianとのこのセッションのホストを務めます。Yujianは、私たちの、ええと、卓越したdeveloper、ええと、advocatesの一人です。
それでは、Yujian、あとはお願いします。その前に、皆さんにお知らせしておくと、このセッションは録画されていますので、後で聞くことができますし、リンクもお送りします。質問はチャットかq and aに入れてください。あるいは、ええと、皆さんの小さなAI agentsにメモを取らせるなど、お好きなようにしてください。では、お願いします。はい。
紹介ありがとう、Chris。ええと、皆さんこんにちは。ええと、今日はOpen aiなしでRAGを行う方法についてお話しします。特に、VIS mixed role Octo、AI、そしてLang Chainを使ってRAGを行う方法について話します。ええと、これは私について少しです。
私の名前はYujianで、ここZillizのsenior developer advocateです。右側にあるQRコードは、ええと、私のLinkedInページに移動し、私をフォローして、私が投稿するAI関連のすべてを追うことができます。ええと、そして私の経歴について少し。私はしばらくAI MLに携わってきました。2013年からソフトウェアの分野にいます。
ええと、最初のML論文を20 17年、20 18年に発表し、スタートアップやdeveloper advocacyに入る前はAmazonでauto MLに取り組んでいました。私は、ええと、論文を書くことや、ええと、動画を作ること、そして、ええと、このような講演をすることが本当に好きだと気づきました。ええと、それでは今日話す内容に入っていきましょう。まず、今日話すことと構築するものについて簡単に概要を説明します。それから、取り上げるtech stackのさまざまな要素について話します。
まずMilvusについて話します。これはopen source vector databaseです。唯一のopen source distributed vector databaseです。それからmixed rollについて話します。これは、ええと、Mistralのより最近のモデルの一つです。それからOctoAIについて話します。これは、ええと、Mixtralにアクセスするために使用するLLM providerです。それからLangChainについて話します。よほど世間から隔絶していない限り、おそらくLangChainについてご存じでしょう。
それからデモに入ります。最後にコードデモを行います。ええと、なので、準備して、VS codeを用意しておいてください。そして、ええと、コードを少し一緒に見ていくことを知っておいてください。私がやるのと同じようにすべてのコードをやる必要はありませんが、ええと、少なくとも、まあ、何かを開いておくと、ついていくのに役立つでしょう。では、まず概要から始めましょう。
今日取り上げるtech stackは、visを取り上げ、それからOcto ai経由でMix Drawを使い、Lane Chainを使います。つまりVisは、私たちのVector databaseですよね?私たちのVector databaseは、以前は使えなかったunstructured dataを、ええと、操作し、分析し、使用できるようにするdatabaseです。そして本質的に行っているのは、Vector embeddingsを使ってqualitative dataを定量化することです。それから、RAG appのLLM部分についてですが、LLMは、まあ、ええと、Ragの中心的な要素です。Ragの目立つ要素の一つです。
ええと、Mytral aiによって開発されたMixed Drawを使い、それをOkta aiを通じて使用します。そしてOkta AIは実は、私が拠点を置いているSeattleにあります。ええと、皆さんがどこを拠点にしているのかもぜひ知りたいので、よければチャットに出身地を書いてください。ええと、そしてすべてをオーケストレーションするために、Lane Chainを使います。Lane Chainはgenerative AIのためのフレームワークで、Ragを構築するために、たくさんの要素をどのようにオーケストレーションして組み合わせるかに本当に基づいて作られています。
ああ、見えます。sfからの方がいますね。sf、分かりました。West Coast、まさにWest Coastですね。これは、ええと、generative AIはここWest Coastで非常に人気があるものなので、納得です。
おお、Franceにいる方がいますね。やあ。おお、素晴らしい。分かりました。Toronto、Cincinnati。
ああ、わあ、それは驚きですね。インド、ニューヨーク。オーケー、ここには本当にとても、とても多様な参加者がいるのがわかります。ワシントンDC、ええと、さらに、ベイエリアの方ももっと。これは素晴らしいですね。
ええと、サンノゼ。はい。オーケー。コネチカット、メキシコ。わあ。
オーケー。すごくクールですね。なんて多様な参加者でしょう。ええと、さらにパリの人たちも。皆さんはMistralの人たちと話さないといけませんね。
オーケー、パリにいる皆さん、私のためにMistralの人たちと話さないといけませんよ。ええと、オーケー、ではRAGとは何か、ですよね?このアーキテクチャがどのようなものか、見て、見て、見てみましょう。これは非常に、非常に簡略化されたアーキテクチャです。これは明らかに、まあ、構築されるすべてではありませんが、本質的にRAGの背後にある考え方は、データを取り、それを埋め込みにするということです。それで私は、埋め込みの部分を省いてしまっていますが、何らかの埋め込みモデルを介してそれを埋め込みにし、それからそれをVector databaseとしてVISに入れます、そうですよね?つまりデータはvisのようなVector databaseに入り、それから、ええと、VISはそこに存在して、いわばあなたの信頼できる情報源になります。
そしてこの場合Okta AIによって提供されるあなたのLLMは、あなたの、ええと、vector databaseとやり取りします。そして、ええと、質問があるとき、ええと、クエリ時に、その質問をLLMに投げます。するとLLMは、オーケー、こんな質問ですね。では、この答えをどうやって得ればいいのかを知る必要があります、というように言います。それで何をするかというと、何らかのsemantic searchを実行します。そしてsemantic searchを実行する方法は、この場合visであるvector databaseに、検索するために必要なものを渡すというものです。
そしてVISはそれを検索し、上位x、y、Z件の結果、上位5件、上位3件、上位10件などを返します。そしてLLMはそれをコンテキストとして受け取り、その質問に答え、レスポンスを返します。ここにlane chainのロゴがあるのが見えると思います。つまりlane chainは、あなた、あなたのデータ、Vector database、ええと、そしてLLMの間のこのような、いわばやり取り全体を実行またはオーケストレーションするために使うものです。ああ、スロベニアからの方もいるのが見えます。
わあ。とてもクールですね。ええと、では、このtech stackのこれらの要素を見てみましょう。まず最初に見るのはNovusです。怖がらないでください。
これは非常に複雑に見えるアーキテクチャ図だというのはわかっていますが、知っておく必要のあるすべての部分を順番に説明します。何が起こっているのかを理解するために、図全体を知る必要はありません。ええと、まず知っておくべきことは、ここにある要素は何か、ということです。これは何か?表面の下で何が、何が行われているのか、ですよね?そして表面の下で行われていることは、あらゆる種類の検索を行う際に、関心事の分離がこの3つに分かれているということです。そしてこの場合、私たちはvector searchを行っています。ですから、これらの関心事の分離は、querying、つまり基本的に、どうやって自分のデータを見つけるのか?Data、つまり、どうやって自分のデータを取り込むのか?そしてqueryingは、どうやって自分のデータを取り出すのか、と考えることもできます。そしてindexing、つまり、どうやって自分のデータを見つけるための地図を構築するのか、ということです。そしてindexingは、まあ、あらゆる種類のdatabaseにあるものですが、vector searchでは特に重要です。なぜなら、ええと、vector searchは非常に、非常に計算コストが高いからです、そうですよね?では、vector searchがどのようなものかについては、あとで少し扱います。
しかしvector searchの背後にある考え方は、これらの長い数値のリストを比較し、最も近いものを見つけようとするというものです。ええと、Novisではこれらのノードが分離されています。なぜなら、それぞれ別々にスケールする必要があるからです。何百万ものクエリを実行しながら、同時に何百万ものインデックスも構築するような状況になることは決してありません、まあ、決してとは言わないでおきますが、そのような状況になる可能性は非常に低いです。さらに、ええと、これらのそれぞれは、データが入ってくるときに、そのデータのセグメントごとにインデックスが構築されます。では、なぜそうなのでしょうか、ですよね?考えてみると、インデックスとは基本的に、あなたのデータの地図なのです。
そのため、一度に大量のデータを入れて、その上にマップを構築するなら、それは素晴らしいことです。しかし、そのデータを増やす必要がある場合、そのデータを縮小する必要がある場合、あるいはそのデータの一部を置き換え始める必要がある場合はどうなるでしょうか?そうですよね?そこで、novis を使ってインデックスを構築する動的な方法があります。そしてそれが、まあ、これらのセグメントの背後にある考え方のようなものです。また、はるかにスケーラブルでもあります。たとえば数百ギガバイトのデータを考えると、全体を線形に検索するのではなく、いくつかの、ええと、セグメントを並列に検索するほうが、非常に、非常に、ええと、ビッグオーがずっと低くなります。
そして最後に、これについて知っておきたいかもしれない、ちょっと興味深い点としては、基本的にデータの投入方法が pub サブシステムとしてモデル化されているということです。つまりデータが入ってくると、メッセージストア領域が基本的にこのデータを publish し、クエリノードとデータノードがメッセージストアを subscribe して、入ってくるデータを追跡します。そしてデータノードは基本的に、「よし、十分なデータが入ってきた。セグメントがあるので、flush する必要がある。コーディネーターに、インデックスノードを呼び出してセグメントを構築するよう伝えよう」といった動きをします。これが novis の背後にある基本的な考え方です。では次に、何が起きているのかをよりよく理解するために、このデータの一部がどのようなものかを見てみましょう。
では、これが Novus へのエントリ、ええと、の見た目になります。これは、実は Zillow から取ってきたものですが、基本的には、この上の2つのエントリ、ID と embedding が必要です。ID は、あなたのデータ、つまり欲しい正確なデータポイントを見つける方法です。それによって delete や upsert ができます。そして embedding は、データを比較するための方法です。そうですよね?先ほど、Novus のようなベクトルデータベースが行うことは、定性的データのこの種の定量的比較を可能にすることだと言いました。
そして、それが embeddings のためのものであり、そこに見えるのがただの巨大な数値のリストである理由です。この残りの部分は、私たちが metadata と呼ぶものです。metadata は、ID や embedding と一緒に保存したいデータです。そしてこのデータは、あなたが保存したデータの種類を定義するのに役立ちます。おそらくそれは文かもしれませんよね?この場合は paragraph があります。埋め込まれているのは文かもしれませんし、あるいは、埋め込まれているテキストのチャンクかもしれません。
ええと、日付もあります。いつ公開されたのか知りたいかもしれません。ええと、公開者、誰が公開したのかもあります。ええと、つまりこれらは、Mil vs. に保存するベクトルデータの、ええと、要素です。そしてここで最も重要な要素を覚えておいてください。あなたが知っておくべき最も重要な要素は2つあり、それは ID と embedding で、それ以外はすべて metadata です。それらは任意です。
わかりましたか?では、この定性的データを定量化するという考え方について話したところで、それが実際にどのように機能するのかを見てみましょう。これは非常に、これは完全におもちゃの例です、いいですか?ええと、前置きしておくと、2次元ベクトルを使っている人を見ることは決してありませんよね?この場合、これらの2つの数値が単語を表しており、その単語が2次元で表現されていることを意味します。このケースでは、本番環境で2次元データを扱うことは決してありません。ええと、そして、ええと、あなたが主に行うことは、ああ、それから本番環境でマンハッタン距離を使うことも決してありません。これからお見せするのはそれです。ええと、しかし、このスライドから持ち帰ってほしい主なポイントは、vector embeddings によって、単語に対して数学を行ったり、もともと数値ではなかったものに対して数学を行ったりできるようになるということです。
そして数学に入る前に、ここでもう一つ指摘しておかなければならないことがあります。これを理解することは本当に、本当に重要です、いいですか?ですから、queen と woman、そして king と man は、その最初の次元に沿って同じ値を持っていることがわかります。これが私たちに示しているのは、これらの単語がベクトル埋め込みにおけるその次元に沿って同じ関係を持っているということだけです。その次元が何を意味するのかを示しているわけではありません、いいですか?値 0. 3 が、ええと、何らかの gender や sex のような特性に対応しているという意味ではありませんし、値 0.
5 が gender や sex の特性に対応しているという意味でもありません。それは単に、queen と woman が同じことを意味している、その最初の軸に沿って同じ意味を持っている、ということです。いいですか?では、ここで数学を見てみましょう。つまり、ここで示しているのは、queen から woman を引いて man を足すと king に等しい、という考え方です。では queen を取ります。これは 0.
3, common 0. 9 で、woman は 0. 3, common 0. 4 です。そしてそれらを引くと、zero common 0.
5 になります。そして、これが何を意味するのかチャットで推測してみたい方がいれば、後で私が何を意味すると思うかをお伝えします。でも、もしかすると、ええと、zero comm 0. 5 に対応する単語が何だと思うかをチャットで推測してみたい方がいれば、ぜひ知りたいです。そしてそれに man という単語を足すと、これは 0.
5,comm, 0. 2 で、0. 5 comm 0. 7 が得られます。これはたまたま king に対応しますよね?つまり、このスライドの考え方、基本的にこのスライドから持ち帰るべき唯一のことは、ベクトル埋め込みによって、もともとは数値ではなかったものに対して数学を行えるようになる、ということです。つまり vis によって、非構造化データを大規模に比較できるようになるわけです。そうですよね?これは先ほど私が話していたことです。さまざまなノード、検索を行うさまざまな方法、そういったものすべてです。
いいですか?では、この zero common 0. 5 の値が何を意味すると思うかについて、誰も何もコメントしていませんね。なので、私がこれが何を意味すると思うかをお伝えします。これは必ずしも実際にそれであるという意味ではありませんが、ええと、ここではっきりと示されているわけではないので、これはおそらく、あなたの手元で、あなたの頭の中で、queen と woman の違いが何であれ、それに近いものを意味するでしょう。つまり、おそらく royalty のようなものです。いいですか?では mixed draw はどうでしょう?mixed draw とは何でしょう、ああ、いいですね。
誰かがチャットで royal と言いました。素晴らしいです。ええと、では mixed draw はどうでしょう?mixed draw とは何でしょう?mixed draw は大きなモデルです。これは、ええと、mytral の大きな、大きなモデルです。Mytral AI はパリを拠点にしています。ええと、ですからパリ出身の方は、ぜひ挨拶しに行ってください。そして al は、この mixture of experts モデルのようなものです。つまり、単なる一つの LLM ではなく、本質的には、そうですね、複数の lms があると仮定しましょう。この場合は 8 つあり、そのうち同時に有効化されるのは 2 つだけです。そしてこれらの LMS はそれぞれ基本的に Misra seven B モデルです。mixed draw には、この興味深く独自の、ええと、あるいは、当時は独自だったけれど今はもう独自ではない、しかし、ええと、言語とやり取りする興味深い方法があります。それは複数の言語を提供し、英語、フランス語、イタリア語、ドイツ語、スペイン語を理解します。そして考えてみると、ある意味納得できますよね?これらの言語はすべて非常によく似たルーツを持っています。どれも非常によく似た地域から来ています。mo を得るのが簡単だというのは理にかなっています、簡単ではありませんが、モデルがこれらを理解できるというのは理にかなっていると言いましょう。ええと、では Otto ai はどうでしょう?Otto AI は、これから使う serving tool です。
つまり、Okta AIはいくつかの異なるものを提供しており、私の考え方としては、基本的にはAPIエンドポイントとしての生成AIです。おそらく私たちのほとんどは、現時点でAPIがどのように機能するかには馴染みがありますよね?APIは長い間存在しています。ええと、最初の頃、つまり、登場し始めたばかりの頃には、APIゲートウェイとかそういうものがありました。そして、人々は「APIって何?」という感じでした。ブラックボックスですよね?同じように考えることができます。ブラックボックスです。リクエストを送ると、レスポンスが返ってくる。そしてこの場合、それが行うことは、生成AIを使う能力を提供することです。
それで、OK two AIには使えるオプションがいくつかあります。media gen stable diffusion、またはcontrol netを使えます。text genも使えますよね?Mixed roll、ここではGemma Smog Llamaを使います。ええと、さらにbring your own modelでcomputeを行うこともできます。ですので、私たちが実際に見ていくのは、mixed rollによるテキスト生成です。このテキスト生成では調整できるパラメータが3つあります。この3つは、おそらく、つまり、実際には3つ以上のパラメータがありますが、ここで本当に考えたいものは、temperature、top P、max tokensです。
ええと、temperatureは基本的に、そうですね、temperatureとtop Pは、出力をどれだけ創造的にしたいかという点で似たようなことをします。Temperatureは、出力をどれだけ創造的にしたいかに近いものです。Top Pは、出力にどれだけ多様性を持たせたいかですよね?LLMは、統計モデルとして考えることができます。そしてこれらの、この2つのパラメータは、LLMの背後にある統計モデルの統計的な変動を調整します。そしてmax tokensがあります。これは単に、「ねえ、私は200トークンだけにしてほしい、500トークン、1000トークン、何でもいいけど」というものです。先ほど見たように、mixed trialは32,000トークンを扱う能力があります。ここでは32,000トークンは扱いません。一般的に、たくさんのトークンを扱う必要がある場合は、より高価になります。
ですので、必要なトークン数をある程度調整できるわけです。また、これはLLMがどのようにレスポンスを生成すべきかをある程度制限します。いいですか?では、このパズルの最後のピースはlane chainです。ええと、lane chainは最も人気のあるLLMオーケストレーションフレームワークです。そして基本的に、lane chainの背後にある考え方は、多数の関数をつなげていくというものです。
そしてこれらの関数の1つ、またはいくつかの関数はLLMにすることができます。LLMを関数であるかのように扱うことができ、これがLane chainの中核的なアイデアの1つです。そしてLane Chainには、Okta、ai、OpenAI、visなど、考え得るほぼすべての人気ツールとの人気プラグインがあります。そして、この背後にある考え方は、これらすべての結果を連鎖させることに集中するというものです。だからこそ、私たちはlink chainをオーケストレーションフレームワークと呼んでいます。いいですか?では、次の部分はコードデモだけです。
コードデモを立ち上げて、コードを見ていきます。もしよければ、ええと、Eugene、始める前に、Nikolaからの質問を1つ回答しておきたかったんです。Octo aiに対するUnhostedな代替手段はありますか?Octo aiに対するUnhostedな代替手段はありますか?はい、これらのモデルを自分でホストすることができます。ええと、実は、Bento mlを使ってこれを少しいじるようなものに取り組んでいます。ええと、これでできるもう1つのことは、hugging faceに行くことです。あるいは、Torch Hubにあるかどうかはわかりません。
Torch Hubにもいくつかあると思いますが、Hug and Faceに行って、そこでLLMをダウンロードできます。そして、GPUまたはCPUにどれだけ、ええと、どれだけのメモリがあるかによって、GPUまたはCPUから直接LLMをホストできます。ええと、つまり、基本的にはローカルで、ということです。ですので、それが、ええと、Okta aiに対するho、unhostedな代替手段です。ええと、いいですか。ええと、このプレゼンテーションを楽しんでいただけたなら、ぜひスマートフォンでこのQコードをスキャンして、vis GitHubに行き、スターを付けてください。
私たちはそれについてとても嬉しく思います。ええと、ここに他にもいくつか質問があるようですね、あるいはもう1つ質問があるので答えます。それは、ハッカソンにはどうやって参加するのですか?というものです。私の息子は大学でそれをやっていました。ええと、ハッカソンには、私たちのイベントページに行くことで参加できます。そこにハッカソンが掲載されているのが見えるはずです。そして、ただ、ええと、あなたは、あなたはこれらのハッカソンのためにシアトルにいる必要があります。うーん、でもただ行って、join か、または RS two P をクリックすればいいです。いいですね。
では、うーん、私のコードを開きます。あは。素晴らしい。では、ええと、ここで少しだけズームインします、ええと、そしてこれも小さくします、いいですか?うーん、これは、私がちょうど話していたこと、つまり Melva、mixed stroll、Octo、AI、そして Lane Chain の上に何らかの rag アプリを構築する方法のコードサンプルです。それで私はこれを MMO rag と名付けました。MMOL よりも響きがいいからです。
うーん、でも、ご存じのように、もし MMO RPG のようなものを考えるなら、ここで冗談を言おうとしていました。うーん、最初にやる必要があるのは、実際に、ええと、Docker composed を実行することです。私は Docker Compose 上に mils を持っています。そして、うーん、それをどうやって行うかについてのリンクをチャットに用意します。うーん、でも基本的には、Docker post ファイルが手に入ったら、Docker, compose up dash D を実行できるはずで、それによって、うーん、ええと、ええと、ええと、何と呼ぶのでしたっけ?Containers が起動します。そして今、これらは、私はこれらをローカルで実行していて、これで基本的に VIS とやり取りし、うーん、このノートブックの外側に、うーん、外側に、ある種の永続ストレージを持つ方法ができました。
そして最初にやることは、うーん、これはライブ例です。ライブ例はいつも少し緊張しますが、うまくいくことを願いましょう。ええと、ここに、私と一緒に実行してみる場合に必要なすべての pip、ええと、パッケージがあります。うーん、vis が必要になります、ええと、実際には vis は必要ありません、これは vis light 用ですが、vis light はノートブック内で直接実行できますし、それもできます。
ええと、それからもちろん lane train が必要です、ええと、埋め込みを行うために sentence transformers と tick token が必要です。これは chunking 用です、ええと、そこに到達したら chunking について話しますが、chunking というのは基本的に、データを分割して、合理的な方法でアクセスできるようにするやり方です。それから Octo ai の SDK が必要です。Octo ai を使っている場合です。もし私が以前話していたように hugging face か、あるいは Bento に詳しいなら、そのどちらかを使って、うーん、あなたの LLM をローカルで実行できます。では、この最初のセクションでは、lane chain からいくつか import を取得するだけです。なので、うーん、最初にやることは基本的に LLM chain を取得することですよね?これは lane chain の、いわば、ご存じのように、コアの、ええと、ええと、ええと、フレームワークの一部です。
基本的に lane chain がある意味で動いている中核は、LLM と LM の出力を一緒にチェーンすることのようなものです。そして prompt template を取得しますよね?Prompts は LLM と連携するための非常に重要な方法です。うーん、そして基本的には、それは LM に何をすべきかを伝える方法です。それから Octo AI endpoint を取得します。そうすれば Octo ai から mixed draw を使えます。
そしてここで私がしているのは、単に自分の environment variables を読み込んでいるだけです。environment variables は好きな方法で読み込めますが、私はこの方法を好んでいます。そしてこの方法で environment variables を読み込み、ええと、Okta AI API token を取得できます。ええと、それから私たちがやることは、token、ええと、template を作ることです。これは単なる example template です。
これは、基本的に mixed draw が動作していることを確認するために使うものです。つまり、ここで言うのは、下記はタスクを説明する指示です、リクエストを適切に完了する応答を書いてください、instruction、question、response、blah, blah, blah。いいですか?そして、それをプロンプトテンプレートに変換して、lane chain がこれを理解できるようにします。それから、ええと、私たちは LLM を取得します。つまり lane chain Octo AI エンドポイントから取得して、やることは単に「Hey、ここに ping する場所があり、ここに必要ないくつかのモデルの、ええと、キーワードがあります」と言うだけです。今回の場合、mixed draws の、ええと、seven、ええと、つまり mis draws seven eight by seven B を使っています。これは単に彼らの mixed draw モデルです。
そして instruct バージョンを使います。これは、指示を受け取る、つまり指示を受け取るようにファインチューニングされているという意味で、一般的なチャットモデルではありません。そして FP 16 で使います。FP 16 は 16 ビットです。典型的には、もし、ええと、プログラミング言語の、ええと、データ型に詳しければ、おそらく floats や doubles には馴染みがあるでしょう。それらは 64 ビットで、通常、ベクトルや、ええと、モデルが使っているのを目にするものです。
しかし、ご存じの通り、こうしたモデルが巨大なサイズへと成長してきたことで、大きすぎるモデルという問題に直面し、性能をあまり失わずに圧縮する方法を考え出してきました。そしてその圧縮方法の一つが、double、つまり FP 64 から single、つまり FP 32、または half、つまり FP 16 へと落とすことです。それから単に「Hey、128 tokens だけ使おう。そうですね、変なことは何も走らせないようにしよう。非常に高価な、ええと、テスト実行はしない」と言います。
ええと、それから何らかの temperature と、何らかの、そうですね、生成する能力を与えます。そして、それが何であるかを伝える何らかのプロンプトを与えます。You are a helpful assistant. 可能であれば応答は短い 1 段落に限定してください。そして質問を与えるだけです。これはただのテストですよね?ここでは rag は行われていません。
これは単に LLM を使っているだけです。Leonardo da Vinci は誰でしたか、ですよね?そして、ここがあなたのプロンプト、ここが LM です、という感じで言って、それからその、ええと、ええと、LM chain を基本的に invoke します。すると、ああ、しまった、prompt を定義していなかったかな?ええと、ああ、いいですね。Okay。動きます。ええと、上のセルを実行していなかったので、すべてのセルを実行するようにしてください。ええと、これは Leonardo da Vinci が歴史上最も偉大な画家の一人としばしば見なされるイタリアの博学者だった、などなど、などなど、ということを教えてくれます。
ええと、Mona Lisa、blah, blah。つまりこれは要するに、はい、Leonardo da Vinci はそういう人です、ということです。ええと、コードへのリンクを提供してください。ああ、はい、はい、はい。では、それを取得できます。ええと、GitHub、ok、two AIvis、okay。
で、chat はどこですか?ええと、そこです。それがコードへのリンクです。Okay、ではここから rag の部分に取りかかります。rag では embeddings を行う必要があり、vector database が必要になります。そこで Lane chain の Okta AI embedding endpoint と、Lane Chain の vector store として Vis を使います。
そして基本的に、embeddings endpoint のこの部分はかなりシンプルです。embeddings endpoint を渡すだけです。するとこれが作成され、lane chain がそれから embeddings function を作成します。そして次の部分では、少しだけ、ええと、ええと、document manipulation を行います。repo には、ええと、私が送ったものですが、この repo は単に、またはすみません、私が送ったリンクは notebook だけです。
しかし、ノートブックの外に出ると、repo に移動します。そして repo 全体を見ると、data フォルダがあることがわかります。今回はその data フォルダを扱います。ここでやっていることは、character textsplitter をインポートしているだけです。これはデータをチャンクに分割する方法の1つであり、それから document、これは Lang Chain がドキュメントを扱う方法で、そして os、つまりご存じのとおりオペレーティングシステムです。では、ここで最初にやることは、これから扱うデータのすべてのピース、つまりすべてのデータの一覧を取得することです。これを出力して、何を見ているのかがわかるようにします。
失礼しました。はい、というわけで、Chicago、Washington, DC、Cambridge, Massachusetts、Houston、Seattle、Toronto、San Francisco、Boston からのテキストドキュメントがたくさんあります。基本的に、これらがこれから扱う都市です。ええと、これらは Wikipedia からスクレイピングされたもので、Wikipedia からそのまま取ってきたものです。そしてこれからやることは、これらのファイルを取得して、text chunker に入れることです。
それで、この関数を書きました。ええと、Lang Chain でこれをとても簡単に行う方法を見つけたいと思っていたのですが、見つけられませんでした。もし Lang Chain でこれを行うもっと簡単な方法を見つけたら、ぜひ知りたいです。見つけたらぜひ送ってください。基本的にここでやることは、これらすべてのファイルをループ処理することです。
ファイルを開いて、ファイルを読み込みます。これでファイルのテキストが文字列として得られます。そして text splitter を作成します。Lang Chain にはテキストを分割する機能があるので、tick tokens encoder を使う text splitter を作成します。そして、たとえば chunk size を 512、overlap を 64 にするとしましょう。chunk size と chunk overlap は、データを扱うときにぜひ考慮すべきものです。これは、データを扱いやすい妥当な形式にする方法ですよね?この場合、chunk size と overlap が意味するのは、基本的に何文字を扱うかということです。
考えてみると、512文字というのはだいたい100語くらいです。おそらく1段落くらい、あるいは1段落から1段落半くらいでしょう。64 はだいたい1文くらいですよね。つまり、ここで言っているのは、データをこうした段落に分割し、これらの段落の間で、だいたい1文分くらい重なるようにする、ということです。そうすることで、これらのドキュメントを取得したときに、その位置がわかり、チャンクが正確にどのように見えるかを確認できなくても、各チャンクの間に何らかのコンテキストの重なりがあることをプログラム上保証できるわけです。そうですよね?つまりコンテキストは、基本的にデータにとって非常に重要です。さて、この text splitter ができたので、これからやることは、テキストを取り、先ほど読み込んだデータ全体の文字列に対してこの text splitter を実行することです。そしてその後、そのテキストのリストを enumerate していきます。
つまり、そのテキストの位置と、テキスト自体の両方を取得します。そして基本的に、それを document として追加します。これは Lang Chain がこれらのエントリを理解する方法です。そしてそれを document として追加し、ここにデータがあり、ファイルのタイトルがここにある、つまりこのデータがどこから来たのか、ということを指定します。なので、これは実際かなり素朴に行われていて、Washington DC は実際には Washington duh になってしまいますが、それ以外はうまく動きます。これはちょっと面白いですね。
えー、それから、ここにチャンク番号がある、と言います。なので、うまくいけば、これを実行したかな?しました。はい、なのでこれはいくつかの texts、chunks を実行して、教えてくれるはずです、そうですね。はい、いくつかのチャンクは指定より長いですが、それは、えー、tick token の文字エンコーダーに基づいていて、つまり、完全な文が欲しい場合もあるので、指定より長い、えー、長めの、うーん、チャンクが必要になる場合もある、ということです。いいですか?では今やりたいのは、これらのデータのチャンクを vis に入れることなので、これを実行します。というのも、これは通常、少なくとも20秒くらいはかかるからです。
うーん、基本的にここでやっているのは、vis の中にコレクションを作成する、と言っているわけです。collections はテーブルのようなものです。そしてこれをこの document set から作成しますよね?だからこれらは documents と呼ばれています。この document set からこの doc を作成します。そして使用する document set は、この file texts のリストです。それから、この embeddings function を使います。なぜなら vectors、databases、vector stores は embeddings を保存するからです。なので、これに embeddings function を渡す必要があります。そうすることで、この function がこのすべての text、すべての page content を変換できます。
基本的に、ここを見ると、page content と呼ばれるものがあります。すべての page content を embeds にする、それを行う function です。なのでそれは、私たちが使った Okta ai embeddings function で、ちなみに、それは GTE large、えー、それが、えー、使われている models です。それから、いくつか connection arguments が必要です。私は vis を、えー、Docker compose でローカルに実行しているので、host は単に local host です。これは 1 27 0 にすることもできます。
0 0。0 0。1、そして port は自動的に 19,530 を使います。それから collection の名前は cities にします。うーん、はい。
では、これらの file texts の1つがどんな感じか見てみましょう。基本的に document page context equals Chicago, et cetera, et cetera, et cetera です。Chicago が最初に読み込まれるもので、これがその見た目です。えー、誰かが chat に何かを送ってくれたようです、えー、tech splitters についてですね。えー、はい、いいですね。
後で試してみます。ありがとう、max。はい。そして次に必要なのは、この vector store を使えるようにすることです。つまり今、ストレージがあり、これらすべての vectors が保存されている場所があります。
今度はそれらを使える必要があります。なので、これを retriever と呼ばれるものに変換します。そして retriever は基本的に、vector store にクエリする方法を提供しますよね?vector store からデータを retrieve して、それから別の prompt、別の、別の template、そして別の prompt を作成しますよね?今回の template は、次の context のみに基づいて question に answer してください、と言いますよね?そしてこの context は、vector database から取得する context になります。そして question も渡します。そしてそれを prompt template に変換します。いいですか?では、lane chain chain を作成します。
ここが、lane chain が本当に力を発揮する部分です。そして、lane chain から chain を作成しています。ここで得るものは runable pass through で、これは基本的に text を function としてそのまま pass through できるものです。そして string output parser は output を、えー、string として parse します。それから、context を渡す chain を作成します。そして context は、先ほど作成した retriever から来ます。
そして question は基本的に、run を通じて行われます。そのまま pass through します。基本的には直接渡されるだけです。それから、ここに prompt があると言います。prompt は、このすぐ上の prompt だったことを思い出してください。そしてその prompt を LLM に渡しますよね?これは pipe です、えー、CLI と同じですね?そしてそれを string output parser に pipe します。
なので、LLMの出力を文字列として率直に解析できます。そして何か質問してみましょう。では、シアトル市はどのくらい大きいですか?と聞いてみましょう。ええと、「大きい」というのはちょっと、すぐに分かると思いますが。これは興味深いです。「大きい」というのはちょっと奇妙な用語です。なぜなら、それは人口規模を意味することもあれば、都市の面積を意味することもあるからです。
ここで分かるように、そしてご存じの通り、Bostonに対する答えは人口規模でしたが、都市の面積は、ええと、すみません、Bo Bostonに対する答えは都市の面積でしたが、ここでのSeattleに対する答えは人口規模です。もしかすると都市の面積についても答えているかもしれません。ああ、はい。ええと、いや、いや、いや、いや。人口規模だけを示しています。
なので、例えば、シアトル市は何平方マイルですか?とも聞けます。すると、ええと、ああ、まあ、どうやら情報を提供していないようです。つまり、これはとても興味深いですね。Wikipediaにそれがないのか、あるいはあっても、それを、ええと、mix drawに伝えることができなかったのだと思います。さて、他にできることの一つとして、もっとずっと面白いことができます。
実際に、mixed drawの興味深い、あるいはユニークな点の一つ、つまり多言語対応という現実を活用してみましょう。そうですよね?複数の言語で処理できます。そしてMisraはパリを拠点としているので、フランス語でやってもらうことにします。あなたはフランス語で応答し、英語では応答しない役立つアシスタントです。そして次のコンテキストのみに基づいてフランス語で質問に答えてください。基本的に私がやったことは、元の部分をコピー&ペーストして、それからすべての前にFrenchという単語を付けただけです。そうすればフランス語版を取得できます。そしてFrench chainは基本的にFrench promptとFrench LLMを使います。それから、シアトル市はどのくらい大きいですか?と尋ねます。するとFrench LLMがFrench chainを、French LLMを呼び出し、質問をしてフランス語で応答させます。
そして今、フランス語での応答は基本的に英語での応答と同じです。私は実際にはフランス語を読めませんが、おそらくこれは、Seattle市は2022年に75万人の住民を有している、と言っているのだと思います。そしてSeattleの大都市圏は400、ええと、4、すみません、402万人の住民で構成されています。うーん、正直これは何と言っているのか分かりません。何か、何か、成長率が年21.
1%とか、そんな感じです。sentence transformerは埋め込みツールとして使えますか?はい、使えます。実際、ええと、以前インポートしたhugging facesのsentence transformersライブラリは、私のお気に入りの埋め込みツールだと言えます。無料で、ローカルにホストでき、使いやすいからです。ええと、答えははいですし、その上でさまざまなモデルを使うこともできます。ええと、今回はすべてホストされたものを使っているので、ええと、ホスト版にこれを渡そうと思っただけです。ええと、いいですね。
未回答の質問はありません。つまり15番目に大きいということですね。ああ、ありがとう、Damien。はい、15番目に大きい、ああ、はい、つまりUnited Statesで15番目に大きい、ええと、大都市圏ということです。そして成長率について何か言っています。以上です。
これが、OpenAIを使わずに、ええと、ragアプリを構築する方法です。ええと、もしよければ、French chainに他の質問をして、フランス語で他の応答を返してもらうこともできます。なので、ええと、皆さんにいくつか違う質問を出してもらえるように場を開きます。それを使っていくつか違う質問をして、何か面白いものが得られるか見てみましょう。フランス語を英語に翻訳できます。ええと、私はフランス語を英語に翻訳できませんが、ええと、他の人ならできるかもしれません。chacha PTは数か国語に翻訳できることに気づきました。
それは推奨されていますか、それとも特定の翻訳モードがあるのですか?ええと、私、私が言いたいのは、これは、これは良い質問ですが、ええと、あるいはこれは良い指摘のようなものです。実は、実際にこれをもう少し試してみたことがあって、実際に複数の言語で質問して、複数の言語で回答を返してもらうことができます。しかも、宣伝されているフランス語、ドイツ語、イタリア語、スペイン語、英語だけではありません。実際にはハンガリー語、ハンガリー語、ええと、あるいは、ええと、トルコ語やそのような他の言語でも試すことができます。ええと、でも、私、私は思うのですが、本当に、なぜそれができるのかについて、私には本当の洞察はありません。
ええと、これに対して私が本当に言える唯一の答えは、ねえ、LLMは魔法だということです。ほら、ええと、十分に進歩した技術は魔法と区別がつかない、ということです。トークン化が言語ごとに異なる場合、どうやって機能するのでしょうか?ええ、そうですね、私もそれを知りたいです。素晴らしい、素晴らしい質問です。そして、ええと、残念ながら、私にはわかりません。
まあ、Misraの人たちに聞いてみてもいいですね。聞けます、Misraの人たちに聞けます。ええと、Misraには実際に、ええと、あの、ええと、ええと、彼らの専門家の一人、彼らの、彼らの mixture of experts の中に、基本的にこの翻訳のようなものがあることは知っています。翻訳の正確性の評価のようなものはありますか?そういうものはありますか?ありません、ええと、少なくとも広く知られてはいません。ええと、基本的にはフランス語がわかる人を見つけるしかありません。
なので私はこれをriと一緒に作っていて、Riはフランス語を話すので、彼は「はい、これは、わかりますよね、そういうことです」と言っていました。それで私は「クール」と思いました。LMは最新のインデックスをより高い重みで扱いますか?ええと、LMは最新のインデックスをより高い重みで扱いますか?質問の意味がよくわかりません。ええと、より高い重みとは何を意味するのか、あるいはすみません、インデックス、最新のインデックスが何を意味するのか、もう少し詳しく説明してもらえますか。フランス語の出力を取り、それを英語に翻訳するようモデルに依頼してください。
ああ、それは素晴らしいアイデアです。ああ、それは良いアイデアです。素晴らしいですね。では chain invoke を実行して英語に翻訳しましょう。で、私たちは、まあ、これは、ええと、さて、待ってください。
ええと、では待って、戻りましょう。そして、ええと、戻って古いものの一つを復活させましょう。これにしておきましょう。では question now を行います。これを削除して、ただ、English chain prompt equals prompt のように言います。なので prompt は、ええと、上に何と書いてあるか見てみましょう。
どこへ行った?どこへ行った?ああ、それは、ええと、以下はタスクを説明する指示です、完全に、オーケー、ええと、応答を書いてください、では translate、translates the entry into English、Entry entry としましょう。ええと、それからできるのは question、あるいは entry equals、ああ、しまった、これをコピー&ペーストしましょう。ああ、もしかしたら単に、何だ、何だ f、何だ FFR one I、オーケー、ではただ、entry equals FR one にしましょう。すると fr one is not defined。まじですか?単に入力を間違えたのかな?ああ、fr underscore one。ああ、そうです。
オーケー。オーケー。では何と言うか見てみましょう。ええと、エントリを英語に翻訳するかどうか見てみましょう、あるいは私が、ああ、シアトルの人口に関する情報をありがとうございます。要約すると、シアトルの人口はおよそ、でした。
オーケー、なのでそうです、これは、ええと、これは基本的に英語に翻訳しています。そしてはい、2010年から2020年の間に、シアトルは21. 1%という顕著な成長を経験し、国内で最も成長の速い都市の中に位置づけられました。これらの統計は、全国的な状況においてシアトルがますます重要になっていることを浮き彫りにしています。ええ、その通りです。
もし米国に住んでいるなら、ぜひ、シアトルに来て、私のすべてのAIイベントに参加してください。はい。ええと、Vector DBに保存されている埋め込みは、私たちがlmで見ていた応答の価値にどのように寄与しているのでしょうか?サンプルで、基本的にそれがなかった場合に応答がどのように違って見えるかを示してもらえますか?ええと、ええと、先ほど見たように、ベクトル、埋め込みがVector dbにない場合、その質問には答えられません。つまり、それが、ええと、Vector dbを持ち、埋め込みをVector databaseに持つことについてのあなたの質問への答えです。これで質問への答えになっていますか、ええと、Jill?素晴らしいです。
つまり、私たちは覚えておく必要があると思います。ええと、そうですね、これらのモデルは大規模ですが、少なくとも今のところ、すべての答えを持っているわけではありません。私は、ええと、いくつかの例では他の例より示しやすいと思いますが、この場合、ポイントの1つは、これはinstruct modelなので、与えられた指示に従うように特別にトレーニングされ、fine tunedされているということです。つまり、モデルが答えを持っていたとしても、batch databaseからコンテキストが与えられていなければ、それには答えません。ええと、だから理論的には、Misraは知っているはずです。つまり、シアトル市の大きさがどれくらいかは知っているはずです。ええと、でもVector databaseに答えが保存されておらず、これはinstruction tuned modelであり、そのコンテキストを提供していないため、「その情報を持っていないので、あなたの質問には答えられません」と言うのです。もし自分のデータで見つけられない場合、LLMにそれを見つけさせる方法はありますか?これはAnjoの質問へのフォローアップのようなものだと思います。
ええと、そして、私はちょうどこれについて話していたと思います。なので、ええと、答えは、ええ、はい、できます。そしてそれを行う方法は2つあります。1つは、LMSのトレーニングデータに頼るだけです。それは正しいかもしれないし、そうでないかもしれないし、最新かもしれないし、そうでないかもしれません。もう1つは、あなたの代わりにウェブを巡回してスクレイピングするagentを構築することです。都合のいいことに、私は最近agentを構築し、それについてのチュートリアル付きのブログを公開しました。
ええと、それでそのリンクをチャットに貼ることができます。ええと、それから、どのVector DBが金融データに対応できますか?ええと、金融データで重要なのは、セキュリティとプライバシーを非常に重視することだと思います。そしてレイテンシーもおそらく、そして、おそらくレイテンシーもです。ですから、おそらく必要なのは、オンプレミスで自分自身でデプロイするものです。データをどこにも送信したくないはずです。なのでVISを使い、Docker上にデプロイし、自分が行っている他のすべてと同じ、ええと、VPCに入れるべきです。しかし金融データであっても、その下には具体的なユースケースがあり、それについても考える必要がありますよね?はい、はい。
ええと、例えば、住宅ローンの資格があるかどうかを評価するようなものかもしれませんし、株式市場を予測するようなものかもしれません。そしてこれらは、異なる機密性を持つ、やや異なる2つのユースケースです。ええと、しかし、どちらにせよ、オンプレミスで何かをデプロイしたいでしょうし、おそらくそうしたいはずです。そしてNovisはopen source permissibleです。それができます。あるいは異常を見つけようとしているなら、ええと、非常に強い一貫性を確保したいはずですよね?それがより重要になります。
なぜなら、すべてのデータを見ることを確実にしたいからです。はい、はい。そして、ええと、ああ、それはvissの一貫性レベルについて話すのに完璧なつなぎになります。つまりmilsは分散システムであり、つまりinstancesとreplicasがあります。ええと、そしてVissには実行できる4つの一貫性レベルがあります。
そして、金融データでは、おそらく「強い整合性」と呼ばれる最も強いレベルの整合性が必要になります。これは、書き込み後にすべてが読み取られることを保証します。ええと、優先的な取得のために、Vector DB内の一部のチャンクやドキュメントにより高い重みを付けることはできますか?できます。つまり、できることとしては、ええと、これは手動でできます。基本的には、重みを示すメタデータのようなものを与えることができます。たとえば、「ねえ、これが重みだよ」と伝えるようなものです。そして、その重みに基づいて再ランキングできます。
追加情報を取得して重みに基づいて再ランキングすることもできますし、単純にいくつかの重みをフィルタリングして除外することもできます。「これはあまり重要だとは思わないので、この特定の、ええと、クエリでは必要ない」と言うことができます。ええと、つまり、これがその方法の1つです。それは彼が尋ねていた、ドキュメントごとの一部のチャンクのことですか、それとも全体的なチャンクやドキュメントのことですか?チャンク/ドキュメントと書いてあります。だから両方だと思います。あの新しいグループ、ええと、グループ検索もある程度役立つのかなと思っていました。
というのも、それでも何か、ええと、できるかもしれないと思うからです。Group buy、はい。ええと、ええと、group buyで関連するチャンクがいくつあるかを見る機能があるかどうかはわかりませんが、group buyを使うと基本的にはチャンクではなくドキュメントを検索できます。これは一意のドキュメントを返したい場合にはとても便利です。ええと、そしてたぶん、group buyを使って、さらにどれくらいのチャンクが除外されているかを見るような、似たことができるかもしれません。それによって、ドキュメントのどれくらいの部分があなたの質問に関連しているかがわかります。それは翻訳しやすいものですね、try the bat broke along the handleをフランス語に翻訳してから英語に戻してみてください。
ええと、これはオフラインで扱うことにすると思います。まず他の質問に答えさせてください。インターンにCFOデータを見せたくありません。RAGシステムでそれをどう制御すればよいですか?それは本当に良い質問ですね。そして、それは実際に特定の質問であり、この質問は企業にとって特に関連性があります。そして、ええと、Novisにはロールベースアクセス制御というものがあると言わなければなりません。
そして、それがおそらくその方法でしょう。「インターンはCFOデータを見られないが、CFOはインターンのデータを見ることができる」と言うわけです。それはおそらくvisを通じて行いたいことだと思います。クエリで時間を考慮できますか?ええと、できると思います。ええと、完全に質問に答えているか、質問を理解しているかはわかりません。ええと、おそらく、たとえば「特定の時間以降のコンテキストを持つクエリだけを取得したい」と言いたい場合、それは、私がデータを示したのを覚えていますか、出版日を示したようなものです。例えば、この出版日以降のデータだけを表示すると言うことができます。
ハイブリッド検索、ええと、またはメタデータフィルタリングなどを使って、それを行うことができます。ですので、質問を正しく理解しているなら、答えはイエスだと思います。彼、彼、彼は追加で、Martinがもう少し情報をくれています。ああ、はい、もしRAGがあって、より新しいデータをより関連性の高いものにしたい場合。そうですね、基本的には、その、その、新しいデータでフィルタリングできます。
また、データがどれだけ新しいかに基づいて、動的な重みを与えることもできます。たとえば、「知りたいのは、ええと、過去30日以内に公開されたものでなければならない、過去10日以内、過去10時間以内、何でも」と言うことができます。ですので、はい、できます。少しだけ、少しだけ追加のチューニングが必要です。そして、ニュースに関する質問ですが、最新ニュースはより高い関連性で扱えますか?答えは、私が今答えたものとまったく同じです。
はい。少しだけ追加のチューニングが必要です。インクリメンタルインデックスビルドがあります。はい。毎回インデックスを再構築する必要なく、新しい、たとえば日次分のデータを追加するたびに、VUSはインクリメンタルインデックスビルドを行えますか?まさに私が言っていたことです。
ええと、VUS はインデックスを再構築する必要はありません。新しいデータに対してインデックスを構築するだけで、その後検索すれば、新しいデータと古いデータが検索されます。そして、データを削除したり更新したりしたい場合は、ええと、それは古いセグメントから削除され、新しいセグメントに入れることができ、同時に検索できます。ええと、つまり答えは「はい」で、実際それは自動的に行われる方法です。VIS に一括挿入する、または別のインストールから DB をコピーするにはどうすればよいですか?ええと、Viss はごく最近 Parquet を追加したので、データを Parquet ファイルにエクスポートして、Mil vs に挿入できます。
そしてこの方法では、実際にはログ、write ahead log、pop サブシステムをスキップして、データを直接 viss に公開し、ええと、その上にインデックスを作成します。ええと、データを入力する際に。また、VUS backup もありますよね?その方法でもできます。はい。VUS backup を行う方法もあります。効率的なベクトル検索のためにチャンクを構造化して保存する最良の方法は何ですか?うわ、これは本当に良い質問で、答えは誰にもわかりません。
ええと、これはテストしなければならないもので、データがどのような見た目かに基づくことになります。たとえば、ええと、データが時間に敏感な場合は、公開日やどれくらいの期間、あるいは、ええと、どれくらい前に公開されたか、といったものを含めたいでしょう。そして、データが非常に長く、ドキュメント形式である場合は、これらのデータチャンクを、つまり、段落サイズにしたくなるでしょう。データが会話形式である場合は、データを分割し、ええと、ただ、つまり、そこに異なる文を入れたいと思うでしょう、そうですよね?なので、ええと、これを構造化してチャンクを保存する方法はたくさんあり、それは本当に、データがどのようなものか、そしてそれで何をする必要があるかにすべて依存します。チャットにもたくさん質問がありますね。
ああ、VUS には金融データ向けの優れた ACLS もありますが、おそらく暗号化とローカルインストールが必要です。そうですね。ええと、それから precision。ええと、ええと、わかりました。待って、ええと、チャットボットへのリンクについて言及しましたか?ええと、共有してもらえますか?ええと、この repo へのリンクについて言及したと思います。それはチャットにあり、もう一度共有します。
ええと、わかりました。ええと、そしてこれがそれが入っている repo です。ええと、moment がバッチ挿入ベクトル中にサポートする最大バッチサイズはどれくらいですか?それはシステムネットワーク要件に基づいてスケールしますか?はい、それは、システムネットワーク要件に基づくことになり、CPU がどれくらい大きいか、どれくらい速いか、どの CPU を使っているか、ええと、インスタンスがいくつあるか、ええと、こうしたさまざまなことすべてに依存します。ええと、でも私の知る限りでは、そうですね、必要なら一度にギガバイト単位で挿入できます。Mils はどれくらい大きく成長できますか?ええと、mils は基本的に非常に、非常に大きくなることを意図しています。
ええと、本番環境で 10 億以上のベクトルを持つ 50 を超えるプロジェクトがあります。そして、ええと、つまり、基本的には望むだけ大きくできます。つまり、それをサポートするハードウェアと DevOps がある限り、ほぼ無制限です。このコードベースのインターフェースを扱えない人たちが使えるように、これをウェブサイトに載せるにはどうすればよいですか?ええと、実は、ええと、私たちには、実際にチャットボットを構築するための一種のポイントアンドクリック式の方法を作ったユーザー、または会社があります。Mind Studio という名前です。ええと、彼らのものを見てみるとよいと思います。
彼らは、つまり、非開発者がチャットボットを作れるように作っていて、かなり、かなり良い UI を持っています。なので、彼らがどのようにやっているかを確認してみてください。はい。そういうものがあります。ええと、Viss はどれくらい大きく成長できますか?はい。今、ええと、ちょうどこれに答えました。
ええと、MIL は表形式データを保存できますか?つまり BU は基本的に JSON 形式でデータを保存します。ええと、なので、tab tab を入れるなら、表形式データを取るなら、つまり、表形式データは JSON 形式で表現できると思います。なので、あなたへの答えは「はい」です。ただ、それを適切な形式に変換する必要があります。うわ。
たくさんの質問でしたね。Eugene?はい、はい、そうでした。ああ、では、ええと、その前に、ああ、来ました。もう一つ。わかりました。
退出前にもう1つ質問を受けます。リレーショナルDBからVector DBへ、情報をembedding部分とmetadata部分に自動的に分割して変換するにはどうすればよいですか。ええと、そのためには実際にパイプラインを書く必要があります。ええと、ooh、ええと、いえ、Zillowのパイプラインがありますよね?Zillowのパイプラインなら、おそらくこのようなことができます。ええと、Vector dbからデータを取り出しさえすれば、それをZillowのパイプラインに通すだけでよく、それはうまくいきます。それはZillowのクラウドに入ります。ただ、ええと、基本的にはそれを行ってVector dbに入れることができ、ええと、それを自動的にやってくれます。
そして、今それをサポートしているモデルは、たしか6つあります。ええと、なので、はい、たくさんのモデルがあります。そしてまだ無料です。なので無料のうちに試してみてください。いいですね。すべての質問に答えられたと思います。
ええと、もし他に質問がある方は、ええと、DiscordチャンネルでEugenに連絡するか、彼のお気に入りはLinkedInです。彼はいつもそこにいるので、いつでもそこで質問を投げかけられます。LinkedInにはいつもいます。それから、ええ、ぜひミートアップのどれかに参加してください。Seattleにいるなら、Yugenまたは彼のハッカソンのどれかに参加してください。ええ、ぜひ彼に会いに行ってください。
彼はホットピンクのパンツの人としても知られているので、ピンクのスウェットパンツを履いていて、とても簡単に見つけられます。それから、もし他に、ええと、私たちに作ってほしいコンテンツのアイデアがあれば、ただ、ええと、知らせてください。ええと、皆さんが本当にクールなソリューションを作り始められるように、それを構築できれば嬉しいです。素晴らしいです。録画は、ええと、私たちと一緒に通話に参加しているMs. Saatchiが最終編集を終えたら送られ、彼女が全員にリンクを送ります。
それから、ええと、repoへのリンクも必ずお渡しするので、それでいろいろ試してみてください。そして、そのnotebookについて他に、ええと、アイデアがあれば、ただ、ええと、Yugenに知らせてください。いいですね。では皆さん、良い一日を。


