「エンベッドチェーンの実践」

「エンベッドチェーンの実践」- 美容・ファッション分野の専門家による魅力的で生き生きとした記事

Midjourneyで作成された画像

はじめに

おそらく、人気のあるベクトルデータベースを利用したデータ、ドキュメント、リンクを処理するインテリジェントチャットボットの作成についての記事を何度も目にしたことでしょう。その中で、LangchainとLlamaIndexが知識の抽出においてよく好まれるソリューションとして浮かび上がってきます。

私はこの分野において豊富な知識を持っているため、製品のためのLangchainとベクトルデータベースに関するコースに貢献してきました。この記事では、これらのフレームワークとツールを使用する際に直面する最も困難な側面に取り組んだときの洞察を共有する予定です。

最も一般的な問題のいくつかは次のようなものでした:

データをどのように分割すべきか?有意義な分割サイズは何か?各分割に対してどのようにエンベッディングを作成すべきか?どのエンベッディングモデルを使用すべきか?分割データをどのようにベクトルデータベースに格納すべきか?どのベクトルデータベースを使用すべきか?エンベッディングと一緒にメタデータを格納すべきか?クエリに対して類似するドキュメントをどのように見つけるべきか?どのランキングモデルを使用すべきか?

数か月前、私はEmbedchainに出会いました。その機能をテストする興奮が明白であり、今では私の個人プロジェクトにおいて不可欠なツールとなっています。

それでは、Embedchainを使ってアプリやチャットボットを作成する際の画期的な要素は何でしょうか?

Embedchainの方法論について詳しく見てみましょう。

ボット作成の設計図

データ検出と読み込み: Embedchainはさまざまなデータ形式の取り扱いにおいて柔軟性を持っています。YouTubeのクリップ、PDF形式のデジタルブック、洞察に富んだブログ投稿、ウェブリンク、またはローカルに保存されたデータであっても、簡単に認識して処理します。これにより、データローダーを管理したり適切な形式を選択する手間が省けます。データをチャットボットやクエリアプリに統合するには、シンプルな.addコマンドだけで十分です。

データの分割: 読み込まれたデータは意味のあるセグメントに分割されます。この分割戦略によって、より知能的でレスポンシブなチャットボットの作成プロセスにおける潜在能力が高まります。

このステージはしばしば頭痛の種であり、試行錯誤に明け暮れることがありました。重要な情報を保持し、管理可能な分割サイズを作成するという微妙なバランスは、一般的な問題でした。適切な分割を行うことによる情報の損失を避けるため、何時間も没頭することは言うまでもありません。

エンベッディングの作成: 各セグメント化された部分は変換されます。チャンクはエンベッディングに変換され、生データを機械にとって扱いやすいベクトルに変換して保管・検索のために準備されます。

モデルと手法の選択は結果に大きく影響することがあります。個人的には、オーガイによって上書きされたOpenAIモデルを利用して、さらにベクトルデータベースを活用した拡張検索に頼ってきました。Embedchainは様々なオプションを提供しており、タスクや予算に合わせたベクトルのインデックス作成、格納、検索が容易にできます。

作者による画像

予算に制約のある方や試行錯誤している方には、無料で利用できるセンテンストランスフォーマーやHuggingfaceを通じて利用可能なカスタムモデルを活用することも可能です。適切な設定と選択肢があれば、費用をかけることなくチャットボットアプリケーション全体を効果的に実行することができます。

ストレージ: 最後に、元のデータの本質を抱えたこれらの機械可読なベクトルは、将来のクエリの際にアクションを起こすためにベクトルデータベースに収容されます。私の経験において素晴らしい選択肢となったのは、Embedchainが頼りにしているクローマベクトルデータベースです。さらに、ボーナスとして、これは無料で利用できます。

機能: Embedchainは直感的な相互作用を目指した機能を提供しています。Query Interfaceでは、質問応答ボットとして機能します。 .query() 関数を使用することで、過去の会話のコンテキストを保持せずに直接的な回答を提供します。

Chat Interfaceでは、より多くのつながりを持った体験を提供します。 .chat 関数を通じて、以前の会話を記憶し、コンテキストに応じた応答を提供します。

Dry Runオプションは、LLMに送信せずにプロンプトをテストするためのものです。そして、リアルタイムな応答には、Stream Responseの機能が便利です。

アプリケーションの例

これを例で説明するのが最も効果的な方法です。私はドキュメントをクエリするためのクイックなアプリケーションを作成しました。そのドキュメントには多くの表、ベンチマーク、新しいコンセプト、アルゴリズムが含まれています。私はその会社についてほとんど知らなかったので、彼らのウェブサイトといくつかの追加情報からできる限りの情報を集めました。

ワークフロー: データソースを収集し、読み込みます。それらは自動的にチャンク化され、埋め込まれ、データベースに格納されるため、素早くクエリできます。次のコードは、これを実現するために私がどのように作業したかを詳しく説明しています:

最初に、pipを使用してOpenAIとEmbedchainをインストールしたと仮定して、OpenAI APIキーをインポートします。このキーを別のファイルに保存して、公開されないようにしてください:

ボットに任意の名前を付け、その名前を App() 関数に割り当てることができます。次に、データの取り込みプロセスを開始します。私の場合、ウェブサイトで利用可能な情報が必要でした。Embedchainはウェブサイト全体を取り込む方法を提供していますが、私は調査のために特定のページのみが必要でした:

ご覧の通り、.addコマンドを使用してボットにリンクを追加することは簡単です。セルを実行すると、データがベクトル化されて貯蔵されたことを確認するために、以下のような出力を受け取るはずです:

'80cd3a55397a9406be28c5d752c0f41b'

次に、ベンチマークに関する洞察を得るためのYouTubeのデータを求めました:

このアプローチの背後には、トランスクリプトを処理するモデルと、リンクを取得しボットに組み込む ‘yt_loader’ があります。ボットはスポンジのようなものであり、投げ込む情報が多ければ多いほど、より魅力的になります。そこで私はBenchmarkingに関するArXivの論文を追加しました。

このコードスニペットでは、Notion、Google Docs、GitHubからデータを引っ張り込んでいます。なぜなら、ボットの世間の知識を制限する必要はないからです。

ボットから回答を得るためには、気軽な会話を始めるだけです。ボットはデータベースを検索し、関連する情報を見つけ出して洗練された回答を返します:

出力:

DataPerfプラットフォームへのベンチマークの提出については、参加者はDynabenchと呼ばれるオンラインプラットフォームを使用することができます。彼らは、プラットフォームで提供されるガイドラインに従って、評価のためのソリューションを提出することができます。Dynabenchプラットフォームは、DataPerfのベンチマーク、評価ツール、ランキング、およびドキュメントをホストしています。参加者は、DataPerfスイートで定義されたすべてのデータ志向のベンチマークに対して、自分のソリューションを提出、評価、比較することができます。このプラットフォームでは、トレーニングサブセット、優先値/順序、購入戦略など、さまざまな提出アーティファクトもサポートしています。ベンチマークの提出方法についてのより具体的な指示が必要な場合は、Dynabenchプラットフォームで提供されるドキュメントやガイドラインを参照することをお勧めします。

私は気軽にボットとチャットするだけで、そのキュレーションされた知識から生成された回答を提供してくれる、まるでカフェインを摂取した司書のようなデータベースにアクセスできます 🙂

実験No2

ここに付加価値があります: Discordボットを使った短い実験を含めています。驚くべきことに、Discordボットの開発経験がなかった状態でこれに挑戦しました。Embedchainを使用すると、新しい領域を探索するのがどれだけ簡単かが示されています。

ドキュメント

正直なところ、Embedchainのドキュメンテーションは明快なマスタークラスです。テクノロジーのドキュメンテーションの迷宮では、最初に見つけた目標を見失うことが簡単です。Embedchainでは、それは問題ではありません。ドキュメントを案内する自動化されたボットが実装されており、回答だけでなく、コードスニペットやリソースの提案も提供しています。これは、新しいモジュールやフレームワークではめったに見られない助けのレベルです。私はテクノロジードキュメントの新しい標準にするため、全面的に賛成です。

5分でできるDiscordボット

ボットを設定するには、まず別々の.envファイルにOpenAI APIキーを入力してください。次に、Discordの開発者サイトにアクセスし、新しいボットアプリケーションを作成します。

そこでは、ドキュメントに従ってボットの詳細を入力し、いくつかの設定を調整します。「特権ゲートウェイ意図」の下のすべてのオプションをオンにするように設定して保存することを忘れないでください。

その後は、後で使用するためのDiscordトークンの値をリセットしてコピーする必要があります。これを行ったら、ボットの設定に戻り、OAuth2セクションを見つけ、さらにいくつかの設定を更新します。主にメッセージの送信に関するボットの機能についてです。

その後、ボットをDiscordサーバーに追加するためのURLを生成します。そのURLをコピーし、ウェブブラウザに貼り付け、ボットを追加したいサーバーを選択して承認してください。

ほんのひとつのプロのヒント:

Discordボットをほぼ常にオンラインの状態に保ち、動作中に新しいデータを取得するために埋め込み連鎖機能を使用することができます。私が説明した設定で、ボットを迅速に機能させ、リンクを供給するだけで更新していくことができます。ですので、情報が即座に必要な状況に陥ったとしても、ボットはすぐに対応できます。データの取得に追い詰められることはもうありません。ボットがカバーしてくれるのです。

要件をインストールしてください:

discord==2.3.1embedchain==0.0.58python-dotenv==1.0.0

また、EmbedchainのリポジトリをGitHubから自由にクローンすることもできます。それには機能的な例が付属しています。ここでは、少しのコード調整でボットを自身の興味に合わせたスタイルに調整する方法をお見せすることが目的です。

例えば、私はミームに影響を受けたボットを作りました。このボットは私が必要な情報を独特のチャットスタイルで提供してくれます。遊び心のある動きとして、私は ‘dogsplain’ という小さなコードの調整を行いました。これにより、ボットを通じて情報を取得できるようにしました。

コードをいじってみると、ボットのスタイルを好みに合わせてデザインするための様々な方法を見つけることができるでしょう。さらに、この経験は学習の場としても役立ちます。

caption by author

ボットにデータソースを追加するには、スラッシュコマンドを使用してください:

/add <データタイプ> <URLまたはテキスト>/query <質問>/chat <質問>
caption by author

それでは!起動コードを実行し、ボットが瞬時にオンラインに表示されるようになります。

結論

上記の例で示されるように、テキスト、YouTubeビデオ、PDF、Webページ、サイトマップ、Docx、Googleドキュメント、Notion、CSV、MDX、またはQ&Aペアなど、さまざまな形式の情報を即座に取得できる、完全に機能するボットを作成することは非常に簡単です。

コミュニティのショーケースセクションにあるさまざまな例をぜひチェックしてみてください。おそらくそれらに触発され、見たものから新たなアイデアが生まれるかもしれません 😎

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more