この動画では、OpenAIのAssistance APIを使用してPythonでボットを作成する方法について詳細に説明しています。具体的には、Assistance APIを利用してAirbnbのWhatsAppボットを作るプロジェクトを例に、APIの基本的な使用方法、データ取得、ボットとの対話設定などが紹介されています。また、カスタムロジックを使用してアプリケーションの各部分を組み合わせる方法や、GitHub上で公開されているプロジェクトコードを利用する方法も説明されています。ただし、Assistance APIがまだベータ版であり、完全な制御が難しい可能性や不具合のリスクがあるため、開発者は注意が必要です。
公開日:2023年11月24日
※動画を再生してから読むのがオススメです。
このチュートリアルが終わるころには、アシスタントAPIと連携し、あなた自身のボットを作り始めるためのPythonコードを含む完全なボイラープレートができていることでしょう。
もしあなたが開発者で、OpenAIのモデルを扱うことに興味があるのであれば、ぜひこのチュートリアルにお付き合いください。
アシスタントAPIについて知っておく必要があることをすべてお見せするだけでなく、アシスタントAPIを使ったアプリケーションやボットを作るために使えるフレームワーク、Pythonのボイラープレートも提供します。
ではまず、実際に何を作るのか、ハイレベルなところから始めましょう。
アシスタントAPIのドキュメントをご案内しますが、実際にはこちらの指示に従ってすべてを進めると、かなりわかりやすいですが、それをアプリケーションに実装し、各部分を連携させる際には、カスタムロジックが必要になるのです。
ですので、私たちのためにいくつかの関数を作成しました。これらを使って、フレームワークを作成し、再利用するのに本当に役立つことができます。
ですので、私はこのプロジェクトを詳しく説明します。GitHubを通じて利用可能にします(リンクは説明に記載されます)。これは私が取り組んでいる大規模なプロジェクトの一部であり、主にAirbnbのWhatsAppボットを構築して、ホストがよく寄せられる質問に答えることができるようにすることです。こちらにあります(後ほど詳しく説明します)。しかし、この部分では、AIとデータの検索に焦点を当てるだけですので、アシスタントAPIの一般的な使用例です。
さて、このプロジェクトの残りの部分、ボット全体の構築については、今後のYouTubeビデオで取り上げる予定です。
ですので、興味がある場合は、チャンネル登録しておいてください。
このプロジェクトについて行きたい方は、Pythonのアクティブな環境とOpenAIのAPIキーがあることを確認してください。
リポジトリをクローンしてもいいし、ゼロから自分で作ってもいい。
ここに必要なものがあります。
このチュートリアルでは、OpenAI Library だけが必要です。
Flaskはこのチュートリアルには必要ありません。
そして、本題に入ります。
まずは簡単なロードから始めます。
さっそく実行してみましょう。
単純なロードで、open aaiクライアントをロードして対話します。
これは本当に基本で、通常OpenAIクライアントとOpenAI APIを使ってこれらのモデルを操作するのと同じです。
それでは、アシスタンスを作成してみましょう。
UIから行うことができるので、このプロセスに従って、作成をクリックします。
しかし、私たちは明らかにコードからこれを行うつもりです。
しかし、まず、これらのアシスタントが通常のopeningiとはどのように異なるのかについて、プレイグラウンドに行ってみて、通常のチャットとの違いをお見せしましょう。
これはすべてUIから、プレイグラウンドからですが、APIを使用しているときは裏側で同じように動作します。
まず、作成しようとしているWhatsApp Bの例から始めましょう。ここでは少し早送りしますが、通常のC GPT turboに「チェックインの時間は何時ですか」と尋ねると、こちらに回答が表示されます。
チェック時間は通常3:から4:の間です。つまり、これはOpenAIのモデルの中で利用可能な知識に基づいてランダムに計算されているのです。
では、これから作成するAirbnbボットに切り替えて、チェックイン時間を聞いてみましょう。
すると、こちらで何が起こっているかがわかります。
様々なリクエストをして、考えて、最終的にAirbnbのRBのチェックイン時間は午後300時というメッセージを表示します。
そして、このチェックイン時間は午後3時以降です。
これが、通常のAPI GPT-3ターボとGPT-2ターボを使う場合と、新しいGPT-4ターボモデルを使う場合の根本的な違いです。
あなたはオープンaiのモデルと、何の文脈も与えずに直接やりとりしているのです。
ですから、基本的にAPIから得られる答えは、例えばChatGPTを使って得られるものと同じです。
しかし今、私たちは支援によって、関数、コード・インタープリター、検索といったツールを提供することができます。
そして、このチュートリアルでは、検索の部分に焦点を当て、私たちのボット、私たちのアシスタントにこのデータをどのように提供できるかを見ていきます。
この場合はPDF文書です。
それは非常に重要な概念ですので、理解することが重要です。
API側から見てみると、先ほど私がプレイグラウンドでやっていたように、例えばジェットGPTやGPT-3.5ターボで単純な補完を行う場合、同じレスポンスのチェックイン時間を見ることができます。
アシスタンスAPIが登場する前は、これがOpenAIのモデルとやりとりする唯一の方法でした。
そして、もしこれらのモデルに追加データや追加コンテキストを提供したいのであれば、そのための独自のソリューションを構築する必要があります。
ベクターデータベースをセットアップし、例えばOpenAISのエンベッディングを使い、LangChainを使って構築できる検索拡張生成プロセスなどを使わなければならない。
それはただのカスタムコードと開発であり、独自のデータを使用してこれらのモデルと連携するために必要なものでした。
アシスタンスAPIを使うことのメリットとデメリットを完全に理解するためには、まず以前の仕組みを理解する必要があるからです。
それでは、最初のアシスタントの作成を続けましょう。
こちらにそのコードが表示されます。
クライアント・ベータ・アシスタンス・クリエイトを使い、名前、インストラクション、ツール、モデルなど様々なパラメータを設定します。
重要なこととして、ここにファイルを入れることもできます。
ここでは、名前、その他、動作の指示を与えているのがわかるだろう。
これは単純なプロンプトですが、このエージェントに対して検索を有効にしたいと指定しています。
そして、検索を有効にするのであれば、いくつかのデータも提供する必要があります。
これが検索の仕組みです。
それぞれの質問に対して、自分のデータを検索すべきかどうかを判断します。
また、APIには独自のデータをアップロードする機能もあります。以下の方法で行うことができます。
クライアントファイルを作成します。
そして、ファイルを開くためにファイルを選択します。
また、それに目的を与えます。
プロジェクトを見て、dataフォルダに行くと、この中にAirbnb fhq PDFドキュメントがあります。
これがまさに私がリンクしているものです。
それを保存しましょう。
そして、ここでファイルをアップロードします。
データパスを入力します。
しかし、ここにいます。
ファイルを保存しましょう。
ファイルをアップロードして、それを保存します。
さて、舞台裏では OpenAI にデータをアップロードしています。
IDを持つファイルができました。
このファイルをアシスタントの作成に使うことができます。
コンテキストとしては、これは例えばUIを使って行うことです。
ここに来て、ファイルをアップロードします。
ここにファイルに移動して、これをアップロードしたのが見えるかと思います。
これをクリックすると、ここにファイルが表示されます。
それがデータ管理と、UIとAPIを介してそれを行う方法です。
さて、ここまでできたら、次は作成アシスタントです。
ここで何が起こっているのか見てみましょう。
デモンストレーションのために、既にこれを作成しているので、2番を作成します。
今度はアシスタントを作成し、先ほど作成したファイルをここに入れる必要があります。
これはまだメモリ内にあるはずです。
それでは、ファイルをメモリに保存して、アシスタントを作成しましょう。
コード内では、この処理は1回限りなので、ここではフレキシブルにやっています。
そのため、ここでは柔軟性を持たせているのです。
これはノートブックに書くか、別のファイルに書くかのどちらかだ。
では、これをすべて実行して、何が起きているのか見てみましょう。
これでアシスタントが作成され、WhatsApp Airbnb buアシスタントができました。
これが最初のステップで、アシスタントを作成し、データを提供します。
もしあなたがAIやデータプロジェクトに慣れていないなら、あるいはAIアプリケーションをもっと理解したい開発者なら、Project Proをチェックするとよいでしょう。
Project Proは、エンド・ツー・エンドのプロジェクトのキュレーション・ライブラリで、ここには250以上の完成したプロジェクトがあり、すべてデータと人工知能に関連している。
機械学習、データサイエンス、ディープラーニング、NLPプロジェクトがあり、例えば、大規模な言語モデルを構築し、微調整するNLPプロジェクトがあります。
こちらは言語生成に関するプロジェクトです。
これらのプロジェクトでは、業界のエキスパートによって書かれた完全なコードを入手できるだけでなく、ビデオによるウォークスルーやドキュメント、さらにはアーキテクチャ図も入手できます。
ですので、データサイエンスと人工知能のより良い理解を得たい場合には、これが最高のリソースの一つです。
YouTubeのチュートリアルでは、ここまでしか理解できません。
本当に深く知りたいなら、これらの完全なエンド・ツー・エンドのプロジェクトに従いましょう。
それから、Project Proを必ずチェックしてください。
リンクは説明文にあります。
さて、アシスタントを作成しました。
しかし、どうやってアシスタントを操作するのでしょうか?
それによって次の概念に移りますが、それはスレッドとメッセージです。
スレッドとメッセージです。
もっと深く知りたい場合は、ドキュメントをチェックしてください。
OpenAIが行ったことは、開発者がさまざまな会話とその中のメッセージをとても簡単に追跡できるようにしたことです。
スレッドは基本的にメッセージの履歴全体です。
これを説明する最も簡単な方法は、ChatGPTにアクセスすると、自分のアカウントがあり、そのアカウントでさまざまな会話をすることです。
それぞれの会話は異なるスレッドで、異なるメッセージです。
一意のIDを使ってスレッドを分けることで、開発者は、同じユーザーとの異なる会話間だけでなく、もちろん、アプリケーションを利用している異なるユーザー間でも、非常に簡単に追跡することができます。
例えば、WhatsAppボットの場合、自分の番号を使ってボットにメッセージを送信する場合、もちろん、あなたがボットに送信しているメッセージとは別に管理したい。
では、その方法を見ていきましょう。
これからレスポンスの生成という関数に取り組みますが、かなりシンプルなものから作っていきます。
最初は、新しいユーザーごとにスレッドを作成しなければならないので、これでレスポンスを生成することはできません。
そして、メッセージを追加するだけなので、非常に簡単です。
まずはクライアントのベータ版脅威の作成から始める。
これが作成されたので、それを見てみることができます。
作成されたIDがあり、いくつかのメタデータがあります。
IDを呼び出すことで、スレッドIDを取得することもできる。
これにより、この脅威IDだけを持つ変数が作成されます。
これにより、メッセージを送信するために使用できる単一の会話が作成されます。
そして次に、その脅威にメッセージを追加する。
これはβ脅威メッセージの作成を使います。
まずはユーザー・ロールから。
誰かがボットにメッセージを送ると、これがユーザーロールとして追加されます。
そしてメッセージを入れます。
そうすれば、メッセージの本文を取り込むことができます。
では、実際にそれを保存して、もう一度取り込んでみましょう。
チェックイン時間の例を見てみましょう。
それはどこですか?
ここです。
本文があるので、これを実行します。
これでメッセージ・オブジェクトができあがりました。
これは脅迫メッセージです。
また、アイデアもありますが、ここではまだアシスタントも回答もありません。
というのも、これはAIモデルに送る前にメッセージを準備するためのものだからです。
では、実際にこのアシスタントを実行したいのであれば、次のステップに進みましょう。
実行と実行のステップに入ります。
フォローアップ機能があります。
これはrun assistantと呼ばれています。
おそらくここが一番複雑な部分なので、何が起こっているのか理解できるように、本当に一歩一歩見ていきましょう。
なぜなら、ここが一番複雑な部分だからです。
脅威IDを持つ脅威も作成したことを思い出してほしい。
これは会話とメッセージを追跡するためのものです。
また、メッセージもあります。「チェックインの時間は何時ですか?」
というメッセージがあり、これをデータのコンテキストを持つアシスタントに送らなければなりません。
つまり、PDFドキュメントにアクセスする。
そして、それに基づいて返信するのです。
では、何をすればいいのか見てみましょう。
まず、アシスタントを再度取得する必要があります。
そしてretrieve関数を使い、IDをこの中に呼び出します。
それで、それを読み込むことができます。
そしてアシスタントのIDを取得します。
では、IDはどうやって取得するのでしょうか?
それでは、前のステップで作成したアシスタント変数から取得するか、アシスタントに移動してIDを確認することができます。
つまり、情報を取得するには2つの方法があります。
これが最初のステップです。
それから、脅威を取得します。これにはここに入力したIDが必要です。
IDはどうやって取得するのですか?
これも前のステップから。
アシスタントを得て、脅威を得る。
このIDが正しく保存されていることを確認するために、アシスタントのIDと脅威のIDを確認します。
そして、ここですべてをまとめることができます。
それでは、これを実行し、脅威IDとアシスタンスIDを入力しましょう。
そして、この一意の脅威IDにメッセージを追加して、これを実行するたびに、すべてが一つにまとまり、AIモデルとの相互作用が行われるようになります。
これはかなり複雑ですね。
実は、これらすべてをまとめるために、舞台裏ではさまざまなことが行われている。
ですから、ここでステップ・バイ・ステップで実例を挙げて説明したいと思います。
というのも、これを実行しただけでは、何も起こらないことがわかるからです。
何の反応もない。
IDが表示されているだけです。
アシスタンスIDがキャンセルされています。
で作成されたすべての情報を持っています。
そしてそれは、このラン・オブジェクトをどのように扱っているかということです。
そして、これが実際にどのように機能するのかに戻ると、ここで何が起こっているのかが説明されている。
ここでも、理解を深めるために一読していただきたいのですが、この部分は非常に重要です。
走行日のステータスを維持するためには、定期的にRunオブジェクトを取得する必要があります。
ですから、このオブジェクトをチェックしなければなりません。
もう一度これを取得せずに、ステータスを確認すると、まだ「cute」と表示されています。これは実行を開始するときの状態です。
しかし、ここでこのロジックの一部が登場します。これはRunオブジェクトのステータスをチェックするための小さなwhileループです。
これはすでに数秒間実行されています。
この行をスキップして、この部分だけを実行します。
つまり、whileループの中ではない。
それは後で確認しよう。
しかし、もう一度これを取得し、実行を視覚化すると、Runオブジェクトがここまで進んでいるのがわかります。
これでステータスが完了しました。
run.statusを呼び出すと、このステータスにアクセスできる。
completedと表示されます。
というわけで、これはAPIがまだベータ版だからなのですが、ちょっと変な感じです。
また、近い将来ストリーミングのサポートを追加して、よりシンプルにする予定だとも書いてある。
だから、今は文字通り、何らかのメカニズムを組み込む必要がある。
僕は今、time.sleepを入れて、このwhileループを使って半秒ごとに実行が完了したかどうかをチェックしている。
つまり、実行ステータスが完了していない間は、実行ステータスをチェックし続けるのだ。
ですので、これは現在の回避策ですが、他のチュートリアルではまだ見たことがありません。
では、何ができたか見てみましょう。
実行が完了し、whileループから抜け出すことができました。
これでメッセージを受け取ることができる。
さて、どのように動作するのでしょうか?
さて、β脅威メッセージ・リストがあるので、同じスレッドIDをもう一度入れる。
スレッドにはすべてのメッセージが保存されている。
スレッドにすべてのメッセージが保存されていることを思い出してください。
メッセージ・オブジェクトがあり、ここにすべての情報が格納されています。
メッセージです。
最新の値を取得するには、このようにパースする必要があります。
ですので、これはすべてJSONデータです。最初にデータの要素、次にコンテキストを取得し、新しいメッセージを表示すると、同じ回答が得られることがわかります。
Airbnbのチェック時間は午後300時以降です。
こっちの時間を基準にすると、うまくいく。
アシスタントを作成し、ツールやデータを与え、そしてユーザーの反応を得るまでの完全なループでした。
では、もう一歩進めて、アプリケーションフレームワークでこのすべてをどのようにまとめられるか見てみましょう。
では、これからは少し早く進めます。カバーする内容がたくさんありますので、コード自体を確認し、コメントに従って進めれば、すべてがわかりやすいはずです。
ここでは、別々の関数のピースがあります。
まず、脅威の管理、レスポンスの生成、そしてアシスタンスの実行だ。
そして、次のことを可能にするために、これを実行したい。
では、WhatsApp Bの例から再度考えてみましょう。ジョンとサラがいるとします。彼らはそれぞれユニークなWhatsAppの電話番号を持っており、それが彼らのユニークな識別子です。
この場合、サラは1 2 3 4 5 6で、2人は異なる質問を持っている。
脅威が正しく処理されていることを確認したいが、脅威を作成する際に一意に生成されたIDを使用するため、そのままでは不可能である。
というのも、脅威を作成する際には、一意に生成されたIDが使用されるからである。そのIDを後で参照し、例えばこの脅威はジョンのものだと言いたい場合には、それを追跡するための何らかのデータベース機構を作らなければならない。
そうすれば、次にジョンがWhatsApp番号を使ってメッセージを送信したときに、データベースからどの一意の脅威IDを取り出せばいいかがわかる。
これが、私たちが今注目していることであり、これからお見せすることです。
それが追加された機能ですが、それがクイックスタートからデモだけでなく、実用的なものに変えるものです。
データベースのソリューションとしては、shelfという非常にシンプルなPythonライブラリを使います。
これは永続的な辞書のようなオブジェクトで、後で使う辞書を保存するとても簡単な方法です。
このライブラリがどのようなものかお見せしますが、どのようなデータ・ストレージでも同じように使うことができます。
これから格納する関数は2つあります。
つまり、脅威が存在するかどうかをチェックする機能と、脅威を保存する機能です。
今回はWhatsApp IDをベースにします。
ジョンがメッセージを送信するたびに、このWhatsApp ID、つまりWhatsApp番号がデータベースに存在するかどうかを確認します。
もしそうでなければ、ユニークな脅威を作成します。
それがこちらで処理されることです。
つまり、脅威が存在しなければ、それを作成して保存します。
それをチェックします。
脅威IDが存在しない場合、まずこの関数を呼び出し、脅威IDが存在するかどうかをチェックします。
存在しない場合は、脅威IDを作成して保存します。
ここで、脅威を保存している方法とその実行方法がわかります。
threats_DBを開き、これを実行するとプロジェクトに表示されます。
では、ここで何が起こっているのか見てみましょう。
早速、これをすべて保存しましょう。
私たちがジョンで、ジョンはAirbnbを予約したばかりの新人で、チェックイン時間を知りたがっているとします。
そこで、名前を表示するためにprintステートメントをいくつか用意しました。
では、これを実行して何が起こっているのか見てみましょう。
ここでは、WhatsApp ID 123でJohnの新しい脅威が作成されています。
データベースが存在しないことが正しく認識されています。
threats_DBが作成され、メッセージが生成されました。
これがそのメッセージだ。
そして最後に、ジョンに対して「rbbのチェック時間は午後3時以降です。
そして、ソースにもリンクされているので、それはかなり素晴らしいです。
サラがメッセージを送ったらどうなるか見てみよう。
それを実行してみましょう。そして、再び「Sarah」に対して新しい脅威を作成すると正しく表示されます。
そしてまたレスポンスが返ってきて、これがサラに送信される。
しかし、ここでクールなのは、別のメッセージを受け取って、ジョンが「おい、前の質問は何だったんだ?
という質問に対して、Johnは「今、Johnの既存の脅威を検索しています。
そしてジョンに、あなたの前の質問はチェックインの時間について尋ねていました。
オーケー、素晴らしい。
でも、今度はサラが同じ質問をしたら?
そしてサラに、あなたの前の質問は、ロックボックスの暗証番号についてでした。
ということは、これはかなり病んでいますよね?
開発経験のある方なら、舞台裏で何が起こっているのか、そしてそれを適切にセットアップするためにどれだけの労力が必要なのか、カバー会話のすべてのメッセージを追跡するためのユーザー管理、そしてすべてのAIモデルをデータと統合するためにどれだけの労力が必要なのか、おそらくご存知でしょう。
そして今、私たちは約100行のコードでそれを実現しました。
これは、アシスタントと対話するために使用できる完全なOpenAIサーフェスです。
これは他のチュートリアルではまだ見たことがないものです。
ほとんどの人は、APIの簡単なステップをカバーするだけですが、これは基礎に過ぎず、すべてをまとめるにはこのような機能が本当に必要なのです。
しかし今、開発者としてのあなたにとって重要な疑問があります。このアシスタンスAPIに全力を注ぎ、AIアプリケーションを構築するためにこれを使うべきなのでしょうか?
その答えは、私にはわからない。
私は今、クライアントのために作っている既存の、そして現在進行中のアプリケーションを、この新しいフレームワークやAPIに変換することに少し躊躇している。
私の現在の方法は、皆さんにお見せしたような機能のほとんどをカスタムで構築することです。
長さの連鎖したベクトル・データベースを使い、類似性検索と埋め込みを実行する。
ですから、より多くの作業が必要ですが、そのためのコードとフレームワークはすでに用意してあります。
ですから、一度それを稼働させれば、複製するのはとても簡単です。
さらに、何が起こっているかをよりコントロールしやすくなるという利点もある。
このアプローチでは、データをOpenAIにアップロードし、ここから検索に使用します。
ですから、ほとんどの企業、ほとんどのクライアントにとって、この方法はお勧めできません。
また、データ管理の観点からも、これは間違いなく理想的ではありません。
それに加えて、これはまだベータ版ですし、テスト中にいくつかのシナリオで奇妙な動作をすることがありました。例えば、「それについては答えられません」とか、「それについての情報はありません」とか、PDFドキュメントに明記されているにもかかわらず、そう言ってしまうことがありました。
これは、例えば私のPineconeのセットアップでは起きたことのないことです。
そして、どうやら四分位因子のデータベースを使用していることが、いくつかのログから判明しました。
つまり、舞台裏では、あなたが完全にコントロールできないことが起こっているのだ。
もちろん、カスタム・ソフトウェアを作るとき、カスタム・アプリケーションを作るとき、それは望むことのひとつだ。
完全なコントロールが欲しいのです。
今のところ、これは開発者にとってより簡単なものにするための正しい方向への一歩だと感じています。
でも、今はまだ、そこまでには至っていないと感じている。
とはいえ、このAPIを注視し、少なくともどのように機能するのかを理解し、関数やenCode Interpreter、検索、そして潜在的に他のツールによる支援を見つけることが重要だと思います。
このAPIに統合されているコンセプトは、間違いなく私たちの目指す方向です。
脅威やメッセージを効果的に管理するためには、これらの概念を理解する必要があります。
ですから、このAPIに飛び込んで、実際に遊んでみることをお勧めします。
しかし、本格的なアプリケーションの場合は、先ほども言ったように、私はまだためらいがあり、例えばLangChainを調べたり、独自のファクターデータベースを選択したりして、そのように構築することに戻ると思います。
さて、これでアシスタンスAPIがどのように機能するかは理解できただろう。
このAPIについてもっと知りたい、データを扱うことについてもっと学びたいという方は、私の無料グループ「Data Alchemy」をぜひチェックしてください。
リンクは説明文にあります。
ここには4.5千人のメンバーがいます。
コミュニティはとても活発です。
私たちはAIに関するあらゆることを議論していますが、アルケミーのコーデックスを教える教室もあります。これは、データとPythonを扱う私のユニークな方法であり、特に初心者に適していますが、データサイエンスや人工知能に転向したベテラン開発者にも適しています。
ぜひチェックしてみてください。
完全に無料です、前にも言った通りです。
説明文にリンクがあります。
それでは、このビデオはこれで終わります。
ご視聴ありがとうございました。
いつものように、この動画が気に入っていただけたら本当に嬉しいですし、チャンネル登録もお願いします。これからのアップデートを見逃さないようにしてください。
例えば、WhatsApp Botの完全版ビデオを準備中です。
長い間YouTubeから離れていたため、私をフォローしてくださっている方々にはお詫び申し上げます。
旅行したり、引っ越したり、実はガールフレンドが同居することになったり、そして今私が取り組んでいるData Luminaのクライアント・プロジェクトが重なったりと、いろいろなことが重なり、YouTubeにアップする時間がなくなってしまいました。
だから、いろいろなことが起こっていて、残念ながらYouTubeのビデオをアップする十分な時間がなかった。
でも、また時間ができたので、また再開します。AIの世界では本当にたくさんのことが起こっていて、とてもエキサイティングなので、またコンスタントにアップロードできるようになるといいですね。
というのも、AIの世界では本当にたくさんのことが起こっていて、本当にエキサイティングなんだ。それに、ある週は特定のライブラリやツールを学んだのに、次の週には新しいアップデートで全部使えなくなっちゃったりして、ついていくのが大変なこともある。
しかし、それはAI革命の最前線にいることのトレードオフです。
そして、私が言ったように、本当にエキサイティングだ。
また、ご視聴いただきありがとうございます。次回もお楽しみに。