WEBVTT 00:00.830 --> 00:04.250 ラボのラジオ・デイへようこそ。 00:04.250 --> 00:05.180 もっとやることがある。 00:05.210 --> 00:06.620 続けよう。 00:06.620 --> 00:16.610 LLMを呼び出し、 とてもいいジョークを言うシンプルなユーザー・インターフェースを作ったところだった。 00:16.850 --> 00:20.060 ええと、 このまま続けましょう。 00:20.060 --> 00:32.540 次にやることは、 より見栄えのするユーザー・インターフェースを得る方法として、 マークダウンで応答するようアシスタントに求めることだ。 00:32.960 --> 00:40.940 マークダウンで書かれた優れた書式で、 グラディオの結果を表示できたらいいと思わない? 00:40.940 --> 00:51.560 テキストボックスの代わりにマークダウンという言葉に置き換えるだけで、 完璧にフォーマットされたマークダウンが出力される。 00:51.560 --> 00:53.180 それは素晴らしいことだろう? 00:53.210 --> 00:54.380 いいことだと思わない? 00:55.190 --> 00:56.900 このあたりはお分かりだろう。 00:57.770 --> 00:59.030 物事は本当にそうなんだ。 00:59.030 --> 00:59.840 これはいい。 01:00.020 --> 01:02.510 では、 あなたのメッセージを言いましょう。 01:02.510 --> 01:03.740 そうだな。 01:03.890 --> 01:14.240 あの、 タイムズ・スクエアからグランド・セントラルまでどうやって行けばいいんですか? 01:14.960 --> 01:17.120 ニューヨーク・ナビゲーションに質問がある。 01:17.120 --> 01:18.710 どうなるか見てみよう。 01:19.640 --> 01:21.440 それを考えているんだ。 01:22.400 --> 01:23.360 さあ、 行こう。 01:23.360 --> 01:24.440 これが返答だ。 01:24.440 --> 01:29.660 ニューヨークのタイムズ・スクエアからグランド・セントラル・ターミナルに行くには、 私が話していたことを理解する必要がある。 01:29.870 --> 01:34.040 これらの手順を踏めば、 良い見出しであることがわかるだろう。 01:34.310 --> 01:43.820 そして、 GPT4から戻ってきたマークダウンに記されているように、 素敵なサブの弾丸や数字、 その他もろもろを備えている。 01:43.850 --> 01:47.000 とても簡単だ。 01:47.390 --> 01:50.360 他に何ができるか見てみよう。 01:51.500 --> 01:53.420 ええと、 ストリーミング。 01:53.420 --> 01:55.700 ストリーミングは前回で慣れた。 01:55.700 --> 02:03.820 そこで、 Jupyterの出力セルに戻ってきたときと同じように、 結果をGradioのユーザー・インターフェースにストリームバックすることができる。 02:03.820 --> 02:04.960 それでは、 どうぞ。 02:04.990 --> 02:07.300 私たちは機能を変える。 02:07.330 --> 02:10.840 以前はGPTというメッセージだった。 02:10.870 --> 02:12.400 今はGPTストリームにしている。 02:12.430 --> 02:13.420 機能が違う。 02:13.420 --> 02:15.610 そして重要なのは、 これは実際には機能ではないということだ。 02:15.610 --> 02:20.320 結果を出して終わるという点ではジェネレーターだ。 02:20.320 --> 02:26.170 そしてグラディオは、 私たちが関数ではなくジェネレーターを与えていることを検知する。 02:26.170 --> 02:35.980 そのため、 グラディオは自動的に反復性を持ち、 このジェネレーターから戻ってくるデータを少しずつ埋めていくことになる。 02:36.100 --> 02:38.020 だからいつもの話だ。 02:38.020 --> 02:46.120 メッセージを作成し、 同じAPIコールであることを思い出してほしい。 02:46.150 --> 02:47.770 クロードのやり方を覚えているか? 02:47.860 --> 02:48.790 そうなるといいね。 02:48.820 --> 02:54.220 クロードの場合は、 アトリビュートを持たず、 ドット・クリエイトの代わりにドット・ストリームを呼び出す。 02:54.220 --> 02:56.290 でも、 それ以外はよく似ている。 02:56.350 --> 02:58.810 ここでひとつ注目すべきことがある。 02:58.840 --> 03:01.110 ただ、 グラディオの場合はほんの少し微妙だ。 03:01.140 --> 03:08.820 結果をGradioにストリームバックする場合、 結果のチャンクごとにストリームバックすることはない。 03:08.820 --> 03:16.410 これまでの累積結果をすべてストリームバックし、 さらに長い累積結果をストリームバックしなければならない。 03:16.410 --> 03:20.520 つまり、 私がやっているのは、 空の文字列から始めるということだ。 03:20.520 --> 03:28.110 そして、 各チャンクごとにそれを足し算して、 これまでの累積結果を出す。 03:28.260 --> 03:37.140 そうしないと、 個々の塊が出力セルに現れては消え、 別のものに置き換わってしまう。 03:37.140 --> 03:38.910 だから、 こうしなければならない。 03:38.910 --> 03:42.900 意味がわからない場合は、 yield resultの代わりにyield chunkを試してみてほしい。 03:43.050 --> 03:43.290 申し訳ない。 03:43.320 --> 03:46.200 収量塊. 0. デルタ・ドット・コンテンツ 03:46.320 --> 03:46.590 ええと。 03:46.590 --> 03:49.350 そうすれば、 私が言っている意味がよくわかるだろう。 03:49.350 --> 03:50.910 見栄えは良くないだろう。 03:51.150 --> 03:59.640 とにかく、 これが我々のストリームGPTだ。 メッセージGPTであった関数をストリームGPTに置き換えるだけで、 03:59.760 --> 04:06.390 あとはGradioがやってくれるとしたら、 それは素晴らしいことではないだろうか。 04:06.390 --> 04:09.300 これは関数ではなくジェネレーターなんだ。 04:09.300 --> 04:11.610 そのため、 彼らは結果をストリーミングで返したいと思っているはずだ。 04:11.610 --> 04:15.360 だから、 タイプライター・アニメーション風のエフェクトが必要なんだ。 04:15.390 --> 04:18.660 本当にそんな単純なことができるのか、 見てみよう。 04:18.660 --> 04:20.190 そんな単純なことでいいのだろうか? 04:20.520 --> 04:21.660 さあ、 始めよう。 04:21.690 --> 04:29.940 タイムズ・スクエアからグランド・セントラルへはどうやって行くの? 04:32.310 --> 04:33.360 さあ、 行こう。 04:33.510 --> 04:34.470 もちろん、 それは簡単なことだ。 04:34.500 --> 04:35.460 もちろんそうだ。 04:35.490 --> 04:36.930 結果をストリームする。 04:36.930 --> 04:37.920 見た目も素晴らしい。 04:37.920 --> 04:40.380 マークダウンは素晴らしい。 04:40.890 --> 04:47.280 ええと、 だから、 もちろん、 クロードと一緒ならどんなに簡単かお見せしなければ、 私の仕事ではありません。 04:47.280 --> 04:51.540 前にも書いたが、 クロードのAPIコールがあるのがわかるだろう。 04:51.540 --> 04:52.800 とてもよく似ている。 04:52.800 --> 04:55.650 ドットストリームを呼び出し、 パラメータは渡さない。 04:55.650 --> 05:00.470 トークンの最大数を指定する必要があり、 システム・メッセージは別に入力されることを覚えておいてほしい。 05:00.500 --> 05:02.240 それ以外は非常によく似ている。 05:02.270 --> 05:05.510 ストリーミングバックは、 ストリームとしての結果のためだけのものだ。 05:05.690 --> 05:08.030 つまり、 結果をストリームとしてコンテキスト・マネージャーとする。 05:08.030 --> 05:13.070 そして、 以前と同じように全回答を返す。 05:13.550 --> 05:16.670 そしてこの時点では、 退屈なほどシンプルなものになるだろう。 05:16.670 --> 05:17.780 冗談はわかるだろう。 05:17.810 --> 05:21.050 代わりにその関数を渡すだけだ。 05:21.050 --> 05:24.110 そして今、 私たちは代わりにクロードと話している。 05:24.110 --> 05:25.640 同じ質問をしよう。 05:25.670 --> 05:31.910 タイムズ・スクエアからグランド・セントラルへの行き方は? 05:33.290 --> 05:40.250 そして、 クロードの回答が来た。 少し短く、 2つの選択肢だけだが、 うまく構成されている。 05:40.250 --> 05:41.720 うまくフォーマットされている。 05:41.720 --> 05:43.820 実に素晴らしい。 05:44.120 --> 05:53.750 GPTとクロードのどちらかを選択できるようにすることで、 一歩前進させることができます。 05:53.750 --> 05:56.840 でも、 それは次のセッションで話そうと思っている。 05:56.840 --> 05:57.980 だから、 そこで頑張るんだ。