Join the Webinar
Loading...
セッションについて
Rubyコミュニティは、Rubyスタックに適したツールや方法論を構築することで、絶えず進化するAI/MLのニーズに適応し続けています。
Source LabsのAndrei Bondarev氏によるこのライブセッションにぜひご参加ください。同氏は、LLMを活用したアプリケーションを構築するための「オリジナルのLangchain」に着想を得たオープンソースライブラリであるLanchain.rbの作者です。セマンティック検索、チャットボット、Q&A、プロンプト管理、実験的エージェントなどのユースケースをサポートしています。Milvus向けRuby SDKと組み合わせることで、RubyだけでGenAIアプリをエンドツーエンドに構築できます。その方法を学びに来てください!
学べること:
- ベクトル検索とは何か
- Milvusが解決に役立つユースケース
- RubyによるAI駆動型アプリケーションの構築
- Milvus向けRuby APIクライアント
- LLMを活用したアプリケーションを構築するためのオーケストレーションツール、Langchain.rb
本日は、RubyでGen AIアプリをエンドツーエンドで構築する本日のセッションと、ゲストスピーカーのAndre Bondをご紹介できることを嬉しく思います。Andreは、ほかにも多くの経験を含め、約13年にわたりソフトウェアエンジニアリングのプロフェッショナルとして活動してきました。Spree Commerce、WeddingWire、fiscal note、national Public Radio、u s A todayで影響を与える機会に恵まれてきました。現在はソフトウェア開発会社を運営し、クライアントプロジェクトでアーキテクト、エンジニアリングマネージャー、フラクショナルC T oを務めています。自由時間には、ポッドキャストを聴きながらテニスをしたり長距離ランニングをしたりすることを楽しんでいます。
えー、Andreには、Cylisの開発者アドボケイトである私の同僚Yuin Tangも参加しています。Andre、そしてYugen、ようこそ。ThankYou for that one. ようこそ、Emily。えー、それでは皆さんこんにちは。
本日はご参加いただきありがとうございます。生成AIとRubyについてお話しします。それでは、えー、まずAndreに自己紹介をしてもらいます。やあ、元気ですか?Andreです。えー、Rubyは、えー、10年以上にわたって私の選択してきたツールです。えー、そして私はこの分野で増え続けるニーズに対応するため、えー、AIソリューションを持つべきだと、えー、積極的に考えてきました。
えー、そして今日はそれについて、えー、お話しするために来ました。ありがとうございます。はい。ありがとうAndre。それから、その小さなQRコードですが、スマホをお持ちなら取り出してください。
ここでQRコードをスキャンするために約30秒お時間を取ります。そのQRコードからAndreのLinkedInに移動できますので、そこで彼とつながり、Rubyについて、えー、質問することができます。Okay. ああ、それでは私の名前はJunです。えー、Zillowsの開発者アドボケイトです。えー、I B MやAmazonのような企業で働いてきました。auto ML関連の仕事をしてきました。
研究論文も発表しており、機械学習関連のことに深く関わっています。ですので、私は生成AIや、チャットG B T、つまり、えー、チャットG B Tのようなl l mとベクトルデータベース、プロンプトコードを使った新しいC B Pスタックを用いてl l mアプリをどのように構築できるかに多く取り組んでいます。えー、そしてAndreと同じように、画面右側にQRコードがありますので、それをスキャンしていただくと、LinkedInで私を見つけることができます。Okay、それでは本日のセッションを始めましょう。えー、ああ、待って、もう1枚スライドがあります。
Okay、Zillowについて話すときのスライドがもう1枚あります。えー、Zillowはベクトルデータベースです。えー、zillsは非構造化データプラットフォームです。Vissは私たちのオープンソースの、えー、ベクトルデータベースで、LinkedInとTwitter、さらにViss Slackに参加したりviss GitHubを確認したりできる場所もご覧いただけます。えー、はい、Milsはオープンソースのファクターデータベースです。
Zillowはクラウド管理版で、えー、無料枠も用意していますので、ぜひ確認してみてください。Okay、それでは本日の、えー、アジェンダを取り上げます。本日は生成AIの紹介から始めます。ですので、私は、えー、ニューラルネットワーク、ベクトル、エンベディング、ベクトル検索、そして、えー、現在生成AIで物事がどのような状況にあるのかについて少しお話しします。次にRubyによる生成AIに入ります。そこではAndreに引き継いでもらい、彼が、えー、Rubyと生成AI、そしてなぜこの2つが、つまり、なぜ、なぜ重要なのかについて話します。
えー、その後、RubyでのVissについて話します。Andreはvisの、えー、Ruby s d Kを作成しました。そして、えー、Milsアーキテクチャについて少し取り上げます。私がMilsアーキテクチャについて少し説明し、その後Andreが、えー、Viss、S D Kについて話してくれます。そして、えー、lane chain RB、つまりRuby向けのLang chainはAndreの、えー、別のプロジェクトで、Lang Chain、えー、ただしRuby向けです。彼がそれについてお話しし、とてもクールな、えー、デモをいくつかお見せします。Okay、それでは、えー、生成AIの紹介から始めましょう。
さて、まずは世の中に存在するデータ量について考えるところから始めましょう。基本的に、あらゆる企業はデータで動いており、誰もがデータで動いていて、そのデータの大半は非構造化データです。つまり、I d c は、世界全体で 175 ゼタバイトのデータが存在するようになり、その 80% が非構造化データで、その非構造化データの 90% は一度も触れられないままだと推定しています。そして非構造化データには、テキスト、画像、動画、PDF、CSV など、さまざまな形式があります。これらはすべて非構造化データとして数えられます。その理由は、非構造化データとは基本的に、事前に定義されたデータモデルに当てはまらないあらゆるデータのことだからです。
では、非構造化データをどのように扱うのでしょうか?ベクトル埋め込みを使う必要があります。非構造化データと実際にやり取りし、扱えるようにする方法は、ドキュメントを取り出し、ええと、それを埋め込みモデルに入れることです。つまり、その仕組みは、対応する適切なディープラーニングモデルを選ぶということです。画像を扱っているなら、おそらく resin at 50 が必要でしょう。文を扱っているなら、ええと、おそらく sentence transformers が必要でしょう。
そして最後の層を切り落とします。モデルの最後の層を切り落として、ベクトル埋め込みを取得できるようにします。ベクトル埋め込みは最後から 2 番目の層からの出力ですよね?なぜなら最後の層は通常、何らかの分類や予測、あるいはそのようなものだからです。そしてその出力がベクトルを与えてくれます。そのベクトルを Novus や、ええと、Zillow のようなベクトルデータベースに入れます。そうすると、それがベクトルデータベースに入った時点で、非構造化データをクエリしたり操作したりできるようになります。ええと、では、これらのベクトル埋め込みとは何なのか、少し見てみましょう。今、非構造化データをどう扱うのか、つまりそれらをベクトル埋め込みにする、と言いましたが、実際のベクトル埋め込みとは何なのでしょうか?ええと、ここではベクトル埋め込みのおもちゃの例をお見せします。
これは、ええと、2 次元ベクトルの 4 つの例です。実際の生活で 2 次元ベクトルを扱うことは決してありませんが、これは説明用の例です。では queen から見ていきましょう。ええと、ここで queen は 0. 3、カンマ 0. 9 で表され、king は 0. 5、カンマ 0.
7 で表されます。そして woman は 0. 3、カンマ 0. 4 で表され、man は 0. 5 カンマ 0.
2 で表されます。ここで注目してほしいのは、woman と queen が同じ、ええと、いわば X の値で始まっていて、king と man も同じ X の値で始まっているということです。これが示しているのは、この軸に沿って、X 軸に沿って、これらの単語同士が似ており、これらの単語同士が似ているということです。ええと、また、y 軸に沿った woman と man の差が 0. 2 であり、king、queen と king の間でも同じであることもわかります。
つまり、ベクトル埋め込みによって、私たちはこうした単語に対して数学を行えるようになります。では、ええと、ここにある例から始めましょう。queen、つまり 0. 3 カンマ、0. 9 から始めて、woman を引くと、ここにはゼロが残ります。
そして、ええと、カンマ 0. 5 です。ですからゼロ カンマ 0. 5 に man を足すと、0. 5 カンマ points になり、それが king という単語です。
このスライド全体の考え方は、ベクトル埋め込みを使って単語に対して数学ができるという考えを示すことにあります。つまり、先ほど言ったように、物事は生成され、最後から 2 番目の層から生成されます。これはニューラルネットワークがだいたいどのように見えるかを示したものです。ええと、だいたいですね。何らかのデータを入力すると、それが多くの隠れ層を通過し、膨大な計算が行われます。そして通常は出力層があり、出力層は何らかの分類や予測、回帰、またはそのようなものです。
そして、ええと、ベクトル埋め込みとは、その入力が何を出力すべきかを分類するために使われるすべての情報のことですよね? つまり、それによって、この入力の背後にあるこのセマンティックな、ええと、意味がわかるわけです。なぜなら、それは出力によって解釈され、何らかの分類を与えることになるからです。ええと、これは Zillow からのスクリーンショットで、ええと、ベクトル埋め込みが何であり、どのような見た目なのかのイメージを持ってもらうためのものです。重要なのは、ここにあるこのタイトルベクトルを見ることですよね?これらのベクトルが全部、なんというか、これらの float 値のようになっていて、しかもたくさんあって、負の値にもなり得るし、ええと、正の値にもなり得るのがわかりますよね。ええと、なので、ベクトル埋め込みは基本的に、この長い、長い数字の文字列です。ええと、ではベクトルデータベースはどこで役立つのか、いくつかのユースケース、実生活でのユースケースのようなものが、ええと、ここに挙げられています。ええと、基本的に、まあ、類似検索こそが、ええと、これらすべて、画像、動画、音声、テキスト、d n a、何かが場違いかどうか、といったものすべてにまたがる抽象化です。異常検知は、実際には視点が違うだけの類似検索なのです。
ええと、そうですね、これらはベクトルデータベース、spec データベースが役立つもののいくつかです。そして類似検索の仕組みは、本質的には、非構造化データを取り、それを何らかのベクトルに変換するというものです。そして、それをベクトルに変換したら、そのベクトル埋め込みを vis のようなベクトルデータベースに保存します。そして、必要になったときに、ええと、クエリを実行します。以前に持っていたその非構造化データを取り、それをベクトル埋め込みに、ええと、同じベクトル埋め込みモデルに入れます。ええと、通常は同じベクトル埋め込みモデルです。実際には別のものを使うこともできますが、その場合はセマンティックな意味が少し異なります。
ええと、そして、ええと、ひとつ、もし別のものを使いたい場合、私はおすすめしませんが、もし別のものを使いたいのであれば、同じ次元数であることを確認する必要があります。新しいベクトル埋め込みができたら、それを使ってベクトルデータベースに対してクエリを行い、近似最近傍探索を実行し、いくつかの結果を得ます。そしてそれが、ある意味で、自分の、ええと、入力に最も類似したベクトルは何かを見つける方法です。自分の入力に最も類似したデータは何か?ベクトルデータベースと LLM、そして、まあ、ええと、この新しい C V P スタックを使った生成AIのユースケースの例として、ええと、ここで見る例は、たとえば、ねえ、あなたが、ええと、会社である、あるいは会社で働いていて、何十万、もしかすると何百万ページものドキュメントがあり、それを、ええと、ユーザーや、顧客、スタッフ、ええと、まあ、ソフトウェアエンジニアが使う必要がある、そういう種類の、ええと、データ、つまりそのドキュメントを持っているとしましょう。ええと、人々に検索させることもできますが、それにはとても、とても長い時間がかかります。ええと、これは間違いなく Amazon での私の経験そのものでした。あるいは、C B P スタックを使って社内チャットボットを作ることもできますよね? Chat、G B T、L l m A ベクトルデータベースと何らかのプロンプトを使って、ええと、自分たちのデータとそのように会話できます。
つまり、それは生成AIとベクトルデータベースの非常に良いユースケースです。そして今から Ruby を使った生成AIについて話します。それで、Andre に渡して、ええと、画面を共有してもらいます。ありがとうございます。ああ、わかりました。では Ruby を使った生成AIについて話しましょう。
ええと、私は Source Labs という小さなソフトウェア開発会社を運営しています。ええと、私たちは、ええと、クライアントが素晴らしいソフトウェア製品を市場に投入するのを支援しています。ええと、そして当然ながら、今は多くの、ええと、AI の仕事をしています。では、なぜ Ruby なのか? ええと、当然 Python はこの分野のリーダーのような存在です。ええと、なぜなら、学術環境や研究環境で非常に人気があるからです。ええと、Ruby は非常によく似ています。
それはまた、ええと、seedで組み込まれていて、かなり似たような問題がたくさんあります。ええと、並行処理に関する同じ問題や、非常に似た構文です。ええと、それに、ええと、RubyとRailsはいまだに非常に人気があります。今でも、ええと、Rubyで、ええと、Ruby on Rails上で作られた、まったく新しいプロダクトや既存のプロダクトがたくさんあります。ええと、そして、ええと、主観的には、Railsは、ええと、Webサービスを構築するための最良の方法の一つだと思います。ええと、ツールを構築することに関して、このコミュニティには健全な量の実用主義があると感じています。
ええと、彼らは車輪の再発明をしない傾向があります。ええと、そしてそれはまた、モノリス型アプリケーション構造、構造アーキテクチャにも非常に適しています。ええと、このような、ええと、誰に尋ねるかによって経済停滞とも収縮とも言える環境の中で、ええと、企業は自社の支出を見直し、コスト削減を図っています。ええと、多くのさまざまな領域で。そしてアプリケーションアーキテクチャを単純化することもその一つです。ええと、ですから、ええと、マイクロサービス群を稼働させるのとは対照的に、それは、ええと、コストを押し上げますし、ええと、はるかに複雑です。ええと、例えば単一のモノリスを稼働させることと比べて、です。ですので、この、ええと、下の図も、ええと、The Rise of, ええと, of an AI engineerという非常に良いブログ記事から借りたものですが、右側にいる従来のフルスタックエンジニアの多くが、このa p i境界に少し近づいているのがわかります。
そして今、彼らは、ええと、チェーン、エージェント、そして関連するツール群やインフラストラクチャといったML ai、L l mの概念に、ずっと精通している必要があります。ええと、ですので、ええと、ただしここでの言語は、PythonであろうとRubyであろうと、実際にはあまり関係ありません。ええと、ですので、ええと、ECエンジニアが、ええと、これらの、ええと、APIを使えるように、Rubyで一連の、ええと、ツールを構築しようとしています。そして、ええと、RubyでのVISについて話しましょう。ええと、ではEgenが、VISSが実際に何なのかを説明してくれます。
はい。ええと、AIエンジニア関連の話、そしてなぜ人々がL LM Ops entreeで何が起きているのかを理解する必要があるのかについて、素晴らしい説明でした。ええと、Viss and Rubyは、Rubyで使えるツールの一つで、これらのl l mマップを構築するのに役立ちます。ええと、VUSのアーキテクチャはクラウドネイティブで、分散システムネイティブなので、かなり複雑です。ええと、ですが高いレベルで説明してみます。もし、ええと、さらに質問があれば、どうぞ、ええと、遠慮なくチャットに投稿してください。できる限りお答えします。
ええと、Vissでは、まず、ええと、Ruby s d Kのような何らかのS D Kを叩くところから始めます。そこから、クエリを、ええと、ワーカーノードへルーティングするような形になります。ですので、これは本当に、ええと、ここで指摘したい重要なことがいくつかあります。その一つは、ワーカーノードの下にこれら3種類のノードが見えることです。一つはクエリノード、一つはデータノード、そして一つはインデックスノードです。なぜこれら3つの異なるノードがあるのかというと、実際には、ベクトルデータベース、あるいは本当にどんなデータベースであっても、それを扱う際には、クエリ、データ取り込み、インデックス作成が3つの異なる関心の分離だからです。
ええと、つまり、これによってできるようになるのは、必要な、その、ええと、あなたが持っているワークロードの種類、必要なワークロードの種類に応じて動的にスケールできるということです。ええと、そしてもう一つ本当に、本当にクールなことがあって、これは、私が、私が、私が、これを初めて説明されたとき、本当に衝撃を受けました。ええと、VISS は、VEC が 512 メガバイトのチャンク、またはセグメント、あ、すみません、私たちはそれをセグメントと呼んでいます、に対してベクトルインデックスを作成します。ええと、そしてクエリ時には、これらすべてのセグメントを並列にクエリして、その並列クエリに基づいてレスポンスを返すことができます。ですから、データサイズが大きくなるにつれてどうなるか想像できると思います。たとえば 100 ギガバイトの場合、その 100 ギガバイトすべてを、ええと、順番に検索していくなら、はるかに多くのクエリ処理、つまり、はるかに多くの計算を行うことになります。それに対して、512 メガバイトのセグメントを並列に検索して、最後に、ええと、まとめる、あるいはすべてを集約する方法があります。
ええと、これが一つです。これは、novis についての本当にクールな点が二つある、ということで、非常にスケーラブルにし、ええと、とてもユニークにしているものです。ええと、では、Andre、ええと、ご存じの通り、Ruby s d K の Ruby の側面について話してもらうために、あなたに渡します。ありがとうございます。もし vus を試してみようと決めたなら、ええと、私たちは試すべきだと思っていますが、ええと、Ruby a p i クライアントがあります。ええと、それは、ええと、そこのリンクで見つけられます。
ええと、それは、ええと、ベクトル検索を構築するための人気のある選択肢の一つです。ええと、VUSs の上にある便利なラッパーで、Ruby で使えます。ええと、これは length chain or B スタックの一部で、ええと、vus、ええと、データベースの管理をサポートしています。つまり、コレクションやインデックスを作成したり、ええと、データを追加または削除したり、検索クエリや、ええと、パーティションの管理を行ったりできます。ええと、では、link chain RB が何かに入っていきましょう。
ええと、これは元の、ええと、Python slash TypeScript 実装に触発されています。ええと、繰り返しになりますが、Ruby の世界にも、ええと、解決策があるべきだと感じました。そして、そして、そして、私はある意味飛び込んで、この、ええと、link chain interview プロジェクトを作り始めました。つまり、これは l l m ベースのアプリケーションを構築するためのオーケストレーション層です。ええと、複数の、ええと、種類のシステムをつなぎ合わせるためのものです。つまり、ベクトル検索データベース、ええと、LLMs、ええと、さまざまなデータストア、ええと、そしてそれを取り巻く補助的なサービスのようなものです。
ええと、私たちが対象としているユースケースのいくつかは、セマンティック検索、ベクトル検索、ええと、ドキュメントに対するQA、チャットボット、そして、ええ、実験的なエージェントです。ええと、そしてこれはまた、ええと、開発者にベストプラクティスを提示します。ええと、これは、ええと、LLMs を使ってアプリケーションを構築するための最善のアプローチのようなものをカプセル化します。いくつかの、ええと、見栄えのする指標としては、ええと、まだ約、ええと、3か月しか経っていません。ええと、約、ええと、480 stars、30 contributors があり、増え続けています。そして Discord server もあります。
ええと、link chain rrb の中にある機能のいくつかとしては、prompt management があります。つまり、ええと、prompt templates の作成、読み込み、保存ができること、context length validation です。つまり、すべての L o M には、それぞれ独自の、ええと、context length、ええと、window limit があります。ええと、data chunking。ええと、つまり、データを vector search database にインデックスするたびに、ええと、チャンクが意味をなしていることを確認する必要があります。ええと、セマンティックに、ええと、conversation memory があります。つまり、L L M との継続中の、ええと、会話をメモリに永続化し、それから後でそれを再開して見直すようなものです。
えーと、つまり、link N または B を使えば、どんな種類のベクトル検索データベースでも、えーと、任意の、えー、対応する、えー、L l M と一緒に使えることがわかります。たとえば、Novus を使って、埋め込みには philanthropic を使ったり、埋め込みには GooglePalm を使ったり、もちろん open ai を使ったりできます。えー、このアプローチの利点のいくつかは、えー、共通の、えー、ドメイン固有言語、または共通の API セットを提供することです。そのため、相互運用性があります。つまり、open AI から、えー、えー、Google Palm や Anthropic の Claw two、あるいは、えー、ほら、その他の新興の、えー、lms、えー、またはオープンソースの l l m、たとえば LAMA two を使うものに切り替えたい場合、それができます。
えー、そのため、ベンダーロックインが軽減されます。えー、そのおかげで選択肢があります。えー、そして繰り返しになりますが、私たちは、えー、B ベストプラクティスを徹底しようとしており、link Gen B では少し意見を持たせるようにしています。そうすることで、えー、途中のあらゆる分岐点で、そうした、えー、小さな、小さな決定を毎回しなくて済むようになります。えー、ではコードを見ていきましょう。では、たとえば VUS を Azure Vector Search データベースとして、Google Palm を、えー、基盤モデルとして使って、ベクトル検索を実行するにはどうすればよいでしょうか? えー、ここで l o M をインスタンス化し、えー、単に a p i キーを渡します。えー、vis、えー、vis、えー、Ruby Gem を使ってクライアントを作成し、えー、それに、あなたの、えー、VU インスタンスが実行されている U R L を渡し、インデックス名を指定し、えー、l l m の、えー、インスタンスを渡します。
えー、これで、えー、データのインデックス作成を始める準備ができました。つまり、add、text を呼び出して、異なるテキストと対応する ID の配列を渡すこともできますし、えー、ファイルを送ることもできます。link chain RB が実際にそれを読み込み、解析し、えー、vis にインデックスします。えー、もし active record に馴染みがあるなら、これは、えー、Rails の世界における O R M ですが、えー、同じことを、はるかに少ないコード行数で実現できます。つまり、あなたの active record モデル内でです。
たとえば、これは product と呼ばれていて、えー、products テーブルというデータベーステーブルの上にあります。えー、そこで vector search を宣言し、えー、繰り返しになりますが、この場合はここで VIS を使っています。えー、そしてフックを設定して、データベース内のそのレコードが操作されるたびに、えー、たとえば MySQL や Postgres で、えー、私たちも埋め込みを生成し、えー、viss 内のそのレコードを更新するようにします。つまり、私たちが vector search に upsert することがわかります。えー、この場合は viss です。えー、そしてそれが終わると、あなたの、その VISS データベースにいくらかデータが入ると、えー、えー、類似検索の実行を開始できます。えー、つまり、シンプルな、えー、client dot similarity search を実行してクエリを渡すこともできますし、渡された質問に基づいて QA スタイルのクエリを行うこともできます。
ではデモを見てみましょう。私が vis クライアントをインスタンス化しているのがわかります。デフォルトスキーマを作成し、デフォルトインデックスを作成しています。えー、そのデフォルトスキーマをメモリに読み込んでいます。えー、そして、このビデオでは、えー、別のタブでローカルに、えー、Docker 内で vis を実行していることに触れておくべきでしょう。
えー、つまり実際には、えー、福利厚生パンフレット、たとえばあなたの会社、あなたの会社の福利厚生パンフレットをインポートするようにそれを指しています。そしてそれを、そのまま Novus に追加していきます。えー、そして少し先にスクロールします。さて、そのデータのインデックス作成が完了し、えー、その、えー、福利厚生パンフレットの P D F が、えー、Novus に読み込まれ、解析され、インデックスされたので、これで自社データの上で q and a スタイルの、えー、質問応答ができます。たとえば、休暇ポリシーは何ですか? どれくらい休みを取れますか? と私が尋ねているのがわかります。会社の休暇ポリシーでは、従業員が妥当な範囲の任意の日数を有給で休暇取得できるようになっています。
ええと、提供されている福利厚生にはどのようなものがありますか? 提供されている福利厚生には、有給休暇、病気休暇、有給の祝日休暇、などがあります。会社の 4 0 1 K の福利厚生について教えてください。ええと、Roth、ええと、または標準の 4 0 1 K などの選択肢があります、はい、従来型と Roth 4 0 1 K、公式に、ええと、定められている祝日が何であれ、それについて回答が返ってきます。では、ええと、見てみましょう。今そのデモで行っていたのは、検索拡張生成、つまり retrieval augmented generation で、ええと、それは何かというと、基盤モデルの外部からデータを取得し、取得したデータをコンテキストに追加してプロンプトを拡張することです。
つまり、ええと、ユーザーから質問が来るたびに、ええと、そのユーザーの質問から埋め込みベクトルを生成します。ええと、ベクトル検索 db 内のデータに対して類似度検索を実行します。ええと、繰り返しになりますが、vus を使っていました。ええと、それからそれらの一致結果を取り出し、コンテキストとしてプロンプトに入れ、そのうえで l l m にプロンプトを与えて、ええと、一貫した回答を生成させます。そしてこれは、ええと、これが実際に私たちが使っていたこのプロンプトです。
ええと、ではエージェントについて話しましょう。エージェントは自律的な、ええと、汎用の L l M 搭載プログラムです。ええと、chain of thought、tree of thought、ええと、ええと、reasoning plus Act、react など、非常に多くの新しい研究があります。ええと、それらはワークフローの自動化や複数ステップの、ええと、タスクの実行に使用できます。強力な lm と組み合わせると、よりうまく機能します。
例えば、Claude OpenAI、ええと、Google Bard、ええと、ATU では実際にはまだ試していません。ええと、そして通常は慎重に設計されたプロンプトによって構築されます。ええと、そこには、ええと、ええと、レジリエンシーのために慎重なエラーハンドリングと制約が必要になります。ええと、また、基本的には、ええと、ええと、a p i ラッパーであるツールを使用することもできます。それらは open AI plugins に少し似ています。
利用可能なツールの一部として、そして新しいものを拡張して追加するのは本当に簡単なのですが、calculator、Wikipedia a p i、Google search a p i、web a p i があります。ええと、自分自身のデータベースと連携することもできます。ええと、ではもう一つ、ええと、簡単なデモをお見せします。ここでも、ローカルの、ええと、ripple セッションで Han RB を使っています。では weather tool をインスタンス化します。ええと、そしてこの外部サービスを使っています。Ruby Code interpreter tool を使っています。
ええと、Google search tool を使っていて、繰り返しになりますが、それを行うために外部サービスを使っています。ええと、calculator tool も使います。この場合は open AI L l M を使います。そして、ええと、React agent をインスタンス化します。ええと、そこに l l m、ええと、この場合は open AI とツールのリストを渡しています。つまり、weather tool、Google search tool、Ruby Code interpreter tool、calculator tool があります。最初に尋ねることとして、タスクを与えて、Boston,Massachusetts と Washington DC の現在の天気を調べて平均を出しなさい、と言います。
ええと、するとそれは元のプロンプトを OpenAI に送信します。OpenAI は、わかりました、では今 Boston, Massachusetts の現在の天気を調べる必要があります、と言います。そこで、ええと、私たちはそれを認識して、weather、ええと、a p i を実行し、Boston,Massachusetts の現在の天気を取得しました。それを L l M に送り返すと、ええと、l l M は、わかりました、では次に Washington dc の天気を知る必要があります、と言います。そこでそれを繰り返します。
私たちは、ええと、weather API と呼ばれる API に送信して、Washington DC の現在の天気を取得します。そして最後に、LLM が「わかりました。では今度は calculator ツールを使う必要があります」と言います。ええと、これらの入力、Boston の現在の天気、Washington, DC の現在の天気を使って、ええと、2 で割ります。すると、最終的な答えが返ってくるのがわかります。それは現在の、ええと、平均の現在の天気、すみません、ええと、Boston, Massachusetts と Washington DC の現在の平均気温は華氏 84 度です。次に尋ねる質問は、現在の、ええと、Rubal USD の為替レートは何か、というものです。覚えておいてほしいのですが、私たちは、ええと、OpenAI を使っていて、ええと、OpenAI は、ええと、私の記憶では 2021 年半ばまでのデータでしか学習されていません。ですので、現在の、ええと、為替レートが何であるかはまったくわかりません。したがって、この質問に対応する、ええと、または答えるためには、Google 検索を行う必要があり、ええと、現在の為替レートが何であるかを見つける必要があります。
そこで、この質問を LLM に送ると、「わかりました。これについては Google 検索を行う必要があります」と言います。ええと、私たちはその API 呼び出しを LLM に代わって実行し、結果を LLM に送り返します。すると、LLM は答えを統合し、答えを生成できます。ええと、そして最後に、Fibonacci sequence の 1 から 1000 までの Fibonacci の合計を出力する Ruby プログラムを使うように依頼します。そして、Ruby メソッドを定義しないように指示しました。すると、このコードが返ってきます。ええと、これは range です。ええと、そして Ruby Code interpreter ツールを使って Ruby code を実行し、その答えを送り返します。すると、自然言語で表現できます。
ええと、次にお見せしたい agent は SQL Query agent です。ええと、この場合は、ローカルで実行されている database を使います。これは、ええと、Postgres instance です。ええと、そしてこれはシンプルな database で、e-learning platform です。つまり、students がいて、ええと、それは user's table にあります。ええと、courses があり、それは courses table にあります。
また、students が、ええと、courses を完了すると、certificates を受け取り、それは certificates database table にあります。ええと、そこで、私たちは database tool をインスタンス化します。今回も、この場合は open ai LLM を使っており、agent、ええと、SQL Query agent をインスタンス化しています。ええと、LLM instance と database tool を渡し、ええと、最初に尋ねる質問、ええと、agent に課す最初の task、ええと、または agent に尋ねることとして、ユーザーは何人いるかを尋ねます。そして LLM は、ええと、この質問、自然言語の質問を対応する SQL query に変換します。つまり、この質問に答えるための適切な query は select count star from users だと言います。
ええと、それから database tool を使って query を実行し、その答えを、ええと、LLM に送り返します。ええと、そして最終的に、そして、そして LLM が最終的な答えを生成します。それは、ええと、2,589 人の users がいる、というもので、これは正しいです。次に私たちが尋ねる質問は、4 つすべての courses を完了した users は何人いるか、というものです。ええと、そして LLM はその質問を見て、「この database schema を前提にこれに答えるには、ええと、実行する必要がある query はこれです」と言います。つまり、select Count Star from users, inner joiner certificates where certificates complete equals true です。
私たちは query を受け取り、LLM に代わって実行し、答えを送り返します。ええと、そして LLM は、160 人の users が 4 つすべての courses を完了した、と返してきます。ええと、これで length chain RV の部分は終了です。ええと、では、ええと、こちらが私たちの discord です。ええと、私たちはどんな種類のフィードバック、feedback に対しても非常にオープンです。ええと、ツールを改善するための新しいアイデアもどんなものでも歓迎します。ええと、そしてこの分野で他の皆さんが、ええと、何をしているのかをぜひ聞きたいです。ええと、特に Ruby を使っている場合は。
ええと、ですので、もし機会があれば、ぜひ、ぜひ参加してください。ええと、これで、ええ、ええ、私たちのセッションは終了です。Lang Chain と Ruby、そして Lang chain Ruby クライアントで既に何ができるのかについて、こんなに、素晴らしい、ええと、概要をありがとうございました。ええと、他の方に質問してもらおうと思いますが、もし現時点で、ええ、未解決の質問がないようであれば、ええと、私が見たところ、ええ、Schenker さんが、Ruby と同様に Vis に接続するために Spring Boot j p a を使えますか、と質問していました。ええと、使えると思います。Java クライアントがありますので、その Java クライアントをそこに貼っておきました。ええと、それが役に立つなら、ぜひ、ええと、教えてください。
ええと、それが探しているものではない場合は、ええと、遠慮なく、遠慮なく質問してください。ええと、でも私は、私は、あなたの、あなたの Lang Chain Ruby のデモは、私の実際の Python Lang Chain での体験、体験よりもずっとスムーズだと既に感じています。ええと、だから私は、ちょっと知りたいのですが、つまり、ええ、Lang Chain Ruby がどのように進化してほしいと考えているのか、ええ、進化について、あなたの見解はどんなものですか?ええと、それはとても良い質問です。ええと、そうですね、私たちは、私たちは、ええ、ツールのためのツールを作ることを避けようとしていて、ええと、すべてが現実世界のユースケースに根ざすようにしたいと考えています。ええと、ですので、ええ、私たちは常にここでフィードバックを求めようとしています。
ええと、そうですね、Hacker News や Reddit、Twitter、その他の場所で、ええと、いくつかの逸話的なデータを読むことができます。ええと、人々は苦労しています。ええと、Python の世界では、人々はこうしたフレームワークのいくつかに苦労していて、ええと、概念を理解すること、理解することにも苦労しています。ええと、私は、私は、先ほど述べたように、Ruby には、ええ、ある種の実用主義駆動開発、ええ、もちろん、はい。以前にも、ええと、そしてコミュニティにはここで、そうした、ええ、そうした価値観を AI 開発にも持ち込む本当のチャンスがあると思います。ええと、そして、車輪の再発明を避ける、避けることです。もちろんです。
ええと、私は、私たちは、私たちはまた、Rails との、ええと、もっと、もっと緊密な統合を構築しようとしています。はい。つまり、それは、プラグアンドプレイと言いたくはありませんが、可能な限りそれに近いものにするということです。はい。なぜなら、ええと、なぜなら私は、ええと、今年は間違いなく、ええと、この AI の波によって、ええと、すべてのプロダクトマネージャーがエンジニアリングリードや、そして、ええ、エンジニアリングリーダー層のところに来て、そして、言っていると思うからです。よし、こうした機能が存在することは分かっています。
私たちはこれらの機能を追加したいです。ええ、既存の製品に対して、どうやって実現すればよいのでしょうか?どうやって正しく実現すればよいのでしょうか?はい。そして費用はいくらかかるのでしょうか?どのくらい時間がかかるのでしょうか?そうですよね?そしてトレードオフは何でしょうか?ですので、ええと、私たちは、ええ、Ruby on Rails の開発現場にとって、ええ、これがある種の、その、その、デフォルトのソリューションになることを望んでいます。いいですね。ええと、Santiago さんから質問です。ええ、Lang Chain RB の考え方は、Python JSS 実装がまるで標準実装であるかのように、Python JSS 実装に従うというものですか、ええ、API や提供される機能の点で、あるいは、ええと、現在の Lang Chain 実装から既に分岐しているのでしょうか、ええ、それとも今後そうなるのでしょうか?ですので、ええと、Lang Chain に触発されたものだと言えると思います。
明らかに似た名前を持っていますが、ええと、しかし、それは、それは、少し分岐しています。そして、そしてこれは、そしてこれは主に、はい、そしてこれは、これは主に、ただエコシステムと、言語における違い、そして、Python と実際の、いや、Ruby でアプリケーションを開発する方法の違いによるものです。いいですね。ええと、私も、ええ、実は Emily さんが質問しているのですが、私は、あなたが今言ったことに対するフォローアップ質問を先にします。ええと、それは、Link Chain RB が、あなたの LLM と連携する、あなたのデータと連携する、というようなエコシステムの中にどのように収まると見ていますか?ええと、なぜなら、少なくとも Python における Link Chain で私がよく見ることの一つは、ええと、それが、あなたの LLM とやり取りするさまざまな方法をつなぎ合わせるためのこの方法として位置づけられ、枠組み化されていて、データを扱うためのリソースはそれほど多く提供していないということです。ええと、ですので、それについてのあなたの考えと、それが、ええ、Link Chain RB にとってどれほど重要かを聞きたいと思いました。
ええ、つまり、私たちは、私たちは、私たちは、ええと、かなり少ない、えー、ユースケースに集中しようとしています。なので私は、私はエージェントを示しました、ええと、でも、どのスライドでも実験的だと言いました。なぜなら、それらを本当に、本当にうまく動かすのは、とても難しいからです。ええ。そうですよね?なので、えー、私が提示したユースケースは、ベクトル検索、自分のデータに対するQAチャットボットで、そして、それが私たちのフォーカスの順番でもありますよね?つまり、私たちは、Ruby Stack内でベクトル検索を構築しているなら、それが、ええと、エンドツーエンドの体験になるようにしたいんです、そうですよね?つまり、ファイルやデータが置かれているディレクトリやデータソースを指定するだけで、それが構造化データであれ非構造化データであれ、残りは私たちが面倒を見ます、そうですよね?あなたが決める必要があるのは、ええと、自分のお金をOpenAIに払うのか、それとも、ええと、Google PaLMに払うのか、そして、ええと、VISやZillowや誰か他のところに払うのか、払うのか、ということだけです、そうですよね?ええ、ええ、ええ。ええと、だから、自分の、自分の、自分のLLMを選んで、自分のベクトル検索データベースを選べば、ええと、残りは私たちが面倒を見ます、そうですよね?それは、それは、それはプラグアンドプレイです。
なるほど。ええ。それは素晴らしいですね。とてもクールです。つまり、データだけではなく、つまり、allsだけではなく、データにも対応できるようにしようとしている、という感じですね。そしてエージェントの取り組みは、まだ標準化されているものではないし、私たちが多くを知っているものでもないので、どちらかというと実験的なもの、ということですね。
えー、そうですね、それは、えー、そうですね、私は、どれくらいの、実際にどれくらいの企業が、ええと、エージェント、AIエージェントを本番環境で動かしているのかは分かりません。ええ、基本的に、その、その研究は常に進化しています。つまり、数日おきに新しい論文が出ます。なので私は、最終的にはそこに到達すると思っています、ええと、AIエージェントがもっとずっと信頼できるようになるところに。えー、でもそれは、ほら、それは私たちが現在、ええと、賭けているものではありません。
ええ、確かに。えー、ではEmilyが、LLMを最大限に活用するためにRubyで他にどんなツールを作る必要がありますか、と尋ねています。ええと、それは良い質問です。えー、Pythonには、ええと、素晴らしい基盤ライブラリがたくさんあります。えー、私は、ほら、私は、私たちが、私たちが、それらをRubyでただ再作成すべきだと言いたいわけではありません。えー、繰り返しになりますが、Link Chain or Bでさえ、私たちは、私たちは、Link Chainプロジェクトに、Rubyらしいひねりを、ええと、ええと、加えていますよね?それは、それはRuby風味の、ええと、link chainRubyFlavoredです。
なるほど。ええ。でも私は、でも私は、私たちは、私たちは、私たちは最終的には、ええと、それらの基盤ライブラリのいくつかは、ええと、存在する必要があると気づくことになると思います。えー、そうですね、それはとても理にかなっていると思います。ええと、Diegoが尋ねています、Link chain. comチームに連絡して、実装を同期したり、あるいはそのプロジェクトを公式システム、公式エコシステムの一部にしたりしましたか?ええと、私たちには、Link Chain Discord上にlink chain or vの、ええと、チャンネルがあります。
えー、私はHarrisonと何度か会話しましたが、ええと、私たちは、私たちは、私たちは、私たちはそれ以上のことは、ええと、何も、何も、何も話し合っていません。では、ええと、なぜ、あるいはなぜそうしないのか、えー、ほら、他のLang chainプロジェクトと統合することについて話したいですか?あるいは、これをある種の、これはある種の、ほら、あなたがこれは風味のあるlane chainのようなものだと言ったのは分かっていますが、実際には、ほら、誰かが、あなたが、ええと、彼らが、ええと、ほら、Lang Chain、Python、Lang Chain jssを作ったやり方から、ある意味スピンオフしたのか、そして、えー、これが、成長していく中で、Lang Chainとすら呼ばれない可能性のあるものなのか、と尋ねました。ええ。ええと、私は、えー、私は、だから私は、私は、私は、それがゼロサムゲームだとは思いません。必ずしも私たちが、えー、もし、もしあなたが日常的にPythonを使っていて、Pythonが大好きなら、そしてええ、LAMA indexか、あるいは、その、そのlink chain Python実装のどちらかを使うべきだと思います。
えー、ただし、私は、ええと、ええと、しかしながら、長年のRuby開発者がPythonを試してみると、どうもしっくりこない、という話を聞きます。それは、それは近いのですが、でも、それは、求めているところに届かないんです。えー、なのでその場合、link chain Bは、は、は、素晴らしい選択肢だと思います。えー、いいですね。ええ。
思いますか、というかこれは、これは、ええと、わからないんですが、うーん、これは技術的な質問というより、単に、好奇心からの質問なんですけど、Lane Chain RB の採用は、うーん、主に Ruby、Ruby Shops とか趣味でやっている人たちによって行われると思いますか?うーん、Ruby Shops がこのツールを採用しない理由は何もないと思います。なので、私は、その、拡大について、あなたがどう考えているのか気になっています。うーん、まあ、希望としては間違いなく大きな Ruby Shops にも、うーん、支援、とは言いたくないですが、うーん、大きな Ruby shops がこのツールを採用してくれることを期待していますよね? ええ。ええ。うーん、もちろん、それは、それは、それは良いツールでなければならなくて、それはまた、ええと、フィードバックループ全体の話に戻ってきます。
ええと、私たちは、ええと、架空の、ええと、作り上げたユースケースのために link chain or b を作りたくはありませんよね? そうですね。それは、うーん、小さなショップ、大きなショップ、そして Ruby を使っているエンタープライズにも対応する必要があります。ええ。ええ、それはすごく納得できます。つまり、link chain Python は趣味の人たちを通じて採用されたので、あなたがそれについてどう考えているのかちょっと気になったんです。
私は、私は思います、ええ、今言おうとしていたのは、つまり、それは間違いなく始まりとしては、どんな大きなプロジェクトでも A P O C から始まりますよね。ええ。うーん、そしてもし私たちが、ええと、それをできるだけシームレスにできれば、それは良い、ええと、良い入り口になると思います。ええ。うーん、Landon が、何がきっかけで、うーん、PI call を使うのではなく link chain の実装を作ろうと思ったのか、そして PI call のアプローチには限界があるのか、と質問しています。それと、あなたがやっている素晴らしい仕事の大ファンです。
またファンが増えましたね、Andre?ありがとうございます。そしてありがとうございます。ええと、では Halen、参加してくれてありがとうございます。うーん、実は彼は素晴らしい、ええと、素晴らしい Rails con のトークをしています。おお、いいですね。
ええと、それは、ええと、Ruby と a AI と Ruby、うーん、彼はそれを、ええと、去年の Rails conference で発表したと思います。なので、YouTube にあります。ぜひ見てください。素晴らしいトークです。うーん、それで私は、うーん、Pi call をざっと試してみました。うーん、ほら、まだ、私は、私は、うーん、うーん、私はそういう、私は、ある言語が、ええと、別の言語に変換されるようなアイデアのファンではありません。
なので、たとえば、ええと、rails の世界では、Ruby を、ええと、クライアント向けの JavaScript コードにコンパイルできるようなプロジェクトがありましたが、それは、素晴らしいアイデアのように聞こえます。だって、ほら、誰だって、私たちはみんな Ruby を書くのが大好きですし、ええと、JavaScript となるとそれほどでもないですからね、うーん、でも実際にはあまりうまく機能しませんでした。うーん、なのでそれが、そういうタイプのプロジェクトに対する私の、私のある種の、うーん、意見というか見方です。うーん、そして繰り返しになりますが、既存の Ruby プロジェクトがあって、ええと、その既存プロジェクトに l l m 機能を追加したい場合、基本的には link chain, RB のようなものを試して、同じ言語の中に留まるかどうかを決めようとしているわけです。そうですよね? つまり、私は、私は、私はモノリスのアプローチを強調し続けています。うーん、なので jam を入れて、まだ Ruby 環境の中にいるか、あるいは別のサービスを立ち上げるか、それは Python コンテナです。そうですよね? そして今度は、うーん、エンジニアリングリーダーとして、うーん、別の言語をその中に追加できる能力があるかどうかを判断する必要がありますよね? つまり、それは別の、別のコンテナです。
うーん、あなたは、うーん、Python を知っていて、それを運用してスケールさせる方法などを知っているスタッフがいることを確認する必要があります。うーん、あと、わかりました、では私には、私は、私は好奇心からもう一つ質問があります。今のところ未解決の質問はないと思います。はい、いいですね。うーん、それで Ruby Lang chain を使っていたとき、ええと、計算はサービス側で行われているんですか、それともクライアント側ですか? ええと、どんな計算ですか? ええと、つまり、埋め込みを生成するようなことですか? では、たとえば a p I を呼び出すとして、エージェントを呼び出して、SQL クエリを組み立てて、それから sql、つまり、クエリを実行したいとします。
ええと、これは全部、なんというか、えー、これは完了しているんですか?クライアント側、サーバー側?つまり、呼び出しているんですか?それで、わかりました、私は、私はたぶん、Ruby のモノリスがどう動くのかを理解していないだけかもしれませんが、私が頭の中で思い描いているのは、そうですね、通常はフロントエンド、つまり、クライアント側と、バックエンド、つまりサーバー側の違いがあるものだと思っています。そして通常、すべてがサーバー側で実装されていて、クライアント側がこうした a p I 呼び出しを行う、というふうに見ていますよね?うんうん。ええと、それで、Lane Chain RB がそれをどうやっているのか、あるいは、もし、もし、もし Ruby on Rails が実際にサーバー側なのであれば、それなら、それなら、それはもちろんすごく納得がいくのですが、私は Ruby についてあまり包括的な、えー、理解がありません。はい。ええと、まあ、Rails は、Rails は Web 開発フレームワークですよね?なので、必要なら Rails で UI を作ることもできます。
ええと、ご存じのように、多くの人は、React のフロントエンドを作ることを選びますよね?そして Rails は単に、あなたの React プロジェクトがやり取りする a p i になります。なので、ええと、LinkedIn、RB には現在 UI レイヤーはありませんよね?つまり、プレゼンテーションレイヤーはありません。なので、私が行ったデモはすべて、えー、コンソール上でのものでした。えー、つまりバックエンドで動きます。わかりました、いいですね。
サーバー上で動きます。はい。わかりました。はい、私はただそれがどう動いているのか気になっていました。というのも、説明を聞いている間、私は、ああ、これは本当に面白いなと思っていたので。
どうやって動くんだろう?ええと、未解決の質問はないようです。これは、そうですね、1分ほどそのままにしておいて、それから、それから、Emily に戻して、まとめてもらう形にできると思います。ええと、はい。その間に、一言言いたいのですが、私は、えー、つまり、あなたがこれを作るという取り組みは本当にものすごく素晴らしいと思います。そして、えー、とても感銘を受けていますし、あなたがやっていることが好きですし、これがどのように進展していくのかを、引き続き追っていくのをとても楽しみにしています。
ありがとうございます。ありがとうございます。ええと、はい、とても、とても、とても楽しかったです。ええと、ご存じのように、ベクトル検索は少し複雑になりがちです。なので、あなたがこれらの概念をもう一度説明しているのを見たり聞いたりするだけでも、私は、よし、基礎に戻ろう、という気持ちになります。
基礎に戻ろう。ええと、そして、そしてもちろん、えー、本日お時間を割いて参加し、視聴してくださったすべての参加者の皆さんに感謝します。えー、ぜひご連絡ください、えー、私でも、Jen でも Emily でも、どんな理由でも結構です、えー、えー、私には Twitter や LinkedIn 経由で、または、えー、または link chain rb の、ええと、repo に直接 issue を作成してください。ありがとうございます、Andre。Eugene、この素晴らしいセッションを本当にありがとうございました。
今日はここまでにしたいと思います。ええと、ありがとうございました。今後の Zillow のウェビナーでまたお会いできることを願っています。また、本日の通話で Andre が言及した、参加するためのリンクをいくつか、ウェビナーの要約メールでお送りします。お二人とも、この素晴らしいセッションにお時間をいただきありがとうございました。それでは皆さん、また次回お会いしましょう。ありがとうございました。
Meet the Speaker
Join the session for live Q&A with the speaker

Andrei Bondarev
Owner, Source Labs
Andrei has been a software engineering professional for almost 13 years. Among many others he’s been fortunate to make his impact at Spree Commerce (Acquired by First Data), WeddingWire (merged with The Knot), FiscalNote (IPO), National Public Radio, and USA Today. He currently runs a software dev firm, and serves as a Architect/Engineering Manager/Fractional CTO on the client projects. In his free time he enjoys playing tennis and going on long runs while listening to podcasts.


