WEBVTT 00:00.530 --> 00:05.180 おかえりなさい、 そして引き続きJupyterLabの体験へようこそ。 00:05.300 --> 00:09.110 ええと、 また別の楽しい例で皆さんを楽しませたいと思います。 00:09.200 --> 00:14.690 ええと、 私たちはチャットボット同士で敵対的な会話をするつもりです。 00:14.720 --> 00:16.220 どうやるか見てみよう。 00:16.400 --> 00:22.310 要素のリストで会話を表現する方法については、 もうお馴染みだろう。 00:22.340 --> 00:23.420 何度か見たことがあるだろう。 00:23.420 --> 00:29.990 さて、 このリストにはシステムとユーザーのプロンプトがある。 00:30.410 --> 00:37.130 例えば、 ここに示したように、 最初にシステムメッセージ、 役割システムコンテンツ、 00:37.130 --> 00:42.410 システムメッセージ、 次にユーザーメッセージ、 そしてそのユーザーメッセージに返信したアシスタント、 00:42.410 --> 00:53.720 さらに別のユーザーメッセージを持つことができます。 00:53.720 --> 00:59.030 そしてその構造は、 より長い会話の歴史を表すことになる。 00:59.030 --> 01:06.910 そして、 そのアプローチを使って、 自分とチャットボット、 あるいは2つのチャットボット間でより長い会話をすることができる。 01:06.940 --> 01:16.930 このようなアプローチ、 このような構造は、 チャットボットと会話をする方法のすべてであることを指摘する価値がある。 01:16.960 --> 01:21.220 それは、 何度もの交流の中で持続するもののようだ。 01:21.220 --> 01:30.490 GPT 4のようなLLMに別のプロンプトを送るたびに、 入力プロンプトに送られるのは、 01:30.760 --> 01:38.530 実は、 これまでの会話全体の構造なのだ。 01:38.530 --> 01:47.740 そして、 次に来る可能性が最も高いと思われるトークンを生成し続けることで、 完成させ続けることが求められる。 01:47.740 --> 01:49.930 そして、 それが会話に加わる。 01:49.930 --> 01:52.240 それに対してあなたはこう答える。 01:52.240 --> 01:56.830 そして、 次にLLMが呼ばれたときには、 その会話はすべて入力される。 01:56.830 --> 01:59.980 そしてまた、 後続のトークンを予測するよう求められる。 01:59.980 --> 02:08.870 だから、 記憶力のある何かと会話をしているような錯覚に陥り、 10分前に自分が何を言ったかを思い出してしまう。 02:08.870 --> 02:14.420 しかし、 実際に起こっているのは、 あなたとのやり取りのたびに、 LMに送られるのはこれまでの会話のすべてであり、 02:14.420 --> 02:18.800 そしてそれを続けるよう求められるということだ。 02:19.010 --> 02:23.900 それで、 それが実際にどう機能しているのか、 いい感覚と直感を与えてくれるはずだ。 02:23.900 --> 02:28.670 先週、 コンテキスト・ウインドウについて話したときに、 コンテキスト・ウインドウのサイズは、 02:28.670 --> 02:34.010 これまでのすべての会話とその後に生成されるトークンを収めることができなければならないと言ったのは、 02:34.010 --> 02:35.210 そのためだ。 02:35.210 --> 02:40.970 LMを呼び出すたびに、 この入力がすべて渡されるからだ。 02:41.480 --> 02:47.960 だから、 私たちはそのアプローチを使って、 ちょっとした遊びに参加することができる。 02:47.960 --> 02:58.940 そこで、 GPT4とミニ、 そしてクロード3(クロード3の激安版)の俳句で会話をしてみようというわけだ。 02:59.150 --> 03:09.870 この弦があれば、 いろいろなモデルをすぐに試すことができる。 03:09.900 --> 03:14.010 GPTにはこのシステム・プロンプトが表示されるわけだ。 03:14.010 --> 03:16.500 あなたはとても議論好きなチャットボットですね。 03:16.530 --> 03:19.440 あなたは会話の中のあらゆることに反対する。 03:19.440 --> 03:22.470 そして、 あなたは鼻につくやり方で何にでも挑戦する。 03:22.920 --> 03:25.380 ええと、 クロードには別のシステムプロンプトが出るんだ。 03:25.380 --> 03:27.510 とても礼儀正しいチャットボットですね。 03:27.540 --> 03:31.320 相手の言うことすべてに同意しようとしたり、 共通点を見つけようとしたりする。 03:31.320 --> 03:35.580 相手が喧嘩腰の場合は、 相手をなだめ、 おしゃべりを続ける。 03:35.700 --> 03:37.380 いいセットアップだと思わないか? 03:37.410 --> 03:39.720 いい、 あー、 ジューシーなセットアップだ。 03:40.050 --> 03:41.970 ええと、 それからハイ、 そこから始めよう。 03:41.970 --> 03:42.930 そして、 こんにちは。 03:42.960 --> 03:44.730 それがセットアップだ。 03:45.030 --> 03:51.720 それじゃ、 GPTという関数を書くよ。 03:51.780 --> 04:01.830 GPTメッセージとクロード・メッセージ、 この2つのリストを使って、 04:01.830 --> 04:08.290 ここにあるようなリストを作ります。 04:08.290 --> 04:13.480 つまり、 2つのメッセージ・リストから会話履歴を作成するのだ。 04:13.480 --> 04:22.780 そしてこの場合、 明らかにクロードのメッセージはユーザーであり、 自身のメッセージはアシスタントであると考える必要がある。 04:23.110 --> 04:25.000 では、 どういうことかというと......。 04:25.000 --> 04:27.220 そこで、 まずシステムプロンプトを表示した。 04:27.460 --> 04:32.290 そこで、 GPTメッセージとクロード・メッセージを反復する。 04:32.290 --> 04:34.900 そして、 私はこの便利なユーティリティ・ジップを使っている。 04:35.080 --> 04:40.540 データサイエンティストとして、 それは以前からよく使っているものかもしれないが、 そうでなければ、 04:40.540 --> 04:41.680 知らない人もいる。 04:41.680 --> 04:43.030 そして、 それはとても役に立つものだ。 04:43.030 --> 04:49.300 つまり、 複数の異なるリストがあり、 その両方を要素ごとに反復処理したい場合、 04:49.300 --> 04:57.880 退屈な方法だが、 for Iを範囲とリストの長さで実行する。 04:57.880 --> 05:05.530 つまり、 基本的にはインデックスを持つイテレータのようなもので、 最後までカウントして2つの要素を取り出す。 05:05.530 --> 05:09.690 しかし、 zipを使った素敵な、 パイソン的な、 シンプルな方法がある。 05:09.690 --> 05:16.770 そして、 この2つのリストに対してZIPを呼び出すと、 そのレスポンスとしてイテレーターが生成され、 05:16.770 --> 05:25.890 両リストの各ペア(各要素)を反復処理し、 各ポイントのペアを返す。 05:26.220 --> 05:31.110 そして、 GPTのコンマ・クロードのように、 それを解凍して言うことができる。 05:31.110 --> 05:34.380 そして、 通うたびにペアを手に入れることになる。 05:34.380 --> 05:39.480 そして、 これは想像がつくかもしれないが、 3つか4つのリストを反復処理する場合、 それらをすべてここに押し込んで、 05:39.480 --> 05:41.730 同じことをすることもできる。 05:41.760 --> 05:50.640 もしJupyterLabに慣れていないなら、 いくつかのランダムなリストを使ってJupyterLabで遊んでみるといい。 05:50.640 --> 05:58.230 とにかく、 これら2つのメッセージセットを繰り返し、 それらを解凍し、 そしてもちろん、 アシスタントはGPTが言ったことは何でも言う、 05:58.230 --> 06:06.870 そしてユーザーはクロードが言ったことは何でも言う、 と単純に追加することは想像に難くない。 06:06.870 --> 06:12.040 そして、 OpenAIのChatGPTの完了を作成と呼びます。 06:12.070 --> 06:21.010 私たちのモデルの使用を依頼し、 これらのメッセージを渡し、 完了を返す。 0. メッセージの内容 06:21.010 --> 06:24.640 この構造にはだいぶ慣れてきただろう。 06:25.030 --> 06:26.440 それを実行しよう。 06:26.440 --> 06:29.560 そして、 この履歴をもとにGPTとだけ呼んでみよう。 06:29.560 --> 06:31.750 GPTがこの後何と言うか見てみよう。 06:31.750 --> 06:32.230 こんにちは。 06:32.230 --> 06:32.980 そして、 こんにちは。 06:33.010 --> 06:35.020 こう返される。 06:35.500 --> 06:36.610 素晴らしい。 06:36.610 --> 06:37.870 もうひとつ、 ハイ。 06:37.900 --> 06:39.220 なんと斬新な。 06:39.220 --> 06:40.870 何を話したいんだい? 06:41.440 --> 06:42.430 ハハハハ。 06:42.520 --> 06:44.110 楽しくなりそうなのがわかるだろう。 06:44.410 --> 06:47.680 クロードの機能はこうだ。 06:47.710 --> 06:49.000 よく似ているよ。 06:49.000 --> 06:54.730 もちろん、 システム・メッセージは別に渡されるので、 それを作る必要はない。 06:54.730 --> 06:56.020 それはここで見ることができる。 06:56.410 --> 07:00.790 ええと、 もうひとつ、 明らかに役割が逆なんだ。 07:00.790 --> 07:04.570 ユーザーはGPTになり、 アシスタントはクロードになった。 07:04.570 --> 07:05.950 だから、 反転しているんだ。 07:05.980 --> 07:13.260 このリストには微妙なニュアンスがある。 07:13.260 --> 07:16.470 GPTが最初に行くのであれば、 そのリストだ。 07:16.560 --> 07:23.100 もしクロードが常にレプリヤーなら、 GPTのリストにはクロードのものよりも多くのメッセージがあることになる。 07:23.100 --> 07:25.680 だから、 最後にそれを付け加えなければならない。 07:25.770 --> 07:30.120 ええと、 もし私の言っている意味がわからないなら、 すぐにわかると思うよ。 07:30.150 --> 07:33.090 私がどこから来たのか、 きっとわかると思う。 07:33.390 --> 07:36.210 それから、 これはクロードへのAPIコールだ。 07:36.210 --> 07:37.860 これで多少はお分かりいただけただろうか。 07:37.860 --> 07:38.490 もっとシンプルだ。 07:38.490 --> 07:39.150 ただのクロードだよ。 07:39.150 --> 07:40.530 ドット・メッセージ・ドット・クリエイト 07:40.860 --> 07:43.620 ええと、 そしてまた最大トークンを渡すんだ。 07:43.620 --> 07:46.440 そしてレスポンスでは、 メッセージの内容だ。 07:46.470 --> 07:47.580 ゼロ・ドット・テキスト。 07:47.580 --> 07:48.660 それがクロードの返事だ。 07:48.690 --> 07:49.860 それを実行しよう。 07:50.190 --> 07:54.420 そして、 私たちはすぐに、 楽しむことにしようと思う。 07:54.420 --> 07:56.940 だから、 ここですべてをまとめる。 07:57.120 --> 07:59.730 まず、 リセットしてハイ、 そこから始めるんだ。 07:59.730 --> 08:04.560 そして、 そのGPTとクロードの紹介を印刷するつもりだ。 08:04.560 --> 08:07.290 そして5回ループする。 08:07.290 --> 08:15.070 GPTを呼び出し、 GPTの答えを表示してメッセージのリストに入れ、 クロードを呼び出し、 08:15.070 --> 08:23.260 クロードの答えを表示してメッセージのリストに入れ、 それを繰り返します。 08:23.290 --> 08:24.490 準備はできているか? 08:25.000 --> 08:25.840 さあ、 始めよう。 08:25.870 --> 08:27.160 そのセルは以前にも実行したことがあったかな? 08:27.160 --> 08:27.940 また失敗してほしい。 08:27.970 --> 08:28.450 そうだ。 08:28.480 --> 08:30.670 さて、 ショータイムの準備は整った。 08:36.280 --> 08:37.450 では、 これを見ていこう。 08:37.480 --> 08:38.950 GPTがよろしくと言っている。 08:38.980 --> 08:40.030 クロードがよろしくと言っている。 08:40.060 --> 08:41.650 GPTは言う。 08:41.650 --> 08:42.700 またもやカジュアルな挨拶だ。 08:42.700 --> 08:43.270 なんと斬新な。 08:43.270 --> 08:44.230 次はどうする? 08:44.260 --> 08:45.010 お元気ですか? 08:45.010 --> 08:47.230 私も早く反対したいからだ。 08:47.560 --> 08:51.100 クロード、 最初の挨拶が独創的でないように伝わってしまったことをお詫びする。 08:51.100 --> 08:53.530 私は友好的で丁寧な対応を心がけた。 08:53.740 --> 08:54.280 ああ、 ああ。 08:54.280 --> 08:59.590 あなたの友好的な試みが、 一般的なものであり、 共通点を見出すことに他ならないと考えて、 お世辞を言わないでほしい。 08:59.620 --> 09:02.710 それは、 何でもかんでも甘くしたい、 という洒落た言い方に過ぎない。 09:02.710 --> 09:05.290 論争になりそうなことを掘り下げるのはどうだろう? 09:05.350 --> 09:06.580 パイナップルとピザ? 09:06.610 --> 09:08.410 それについては、 一日中議論する用意があるからね。 09:08.410 --> 09:11.170 GPTは鼻につくユーモアのセンスを持っているんだね。 09:11.170 --> 09:18.620 それからクロードはユーモアを交えていい人になろうとした。 09:19.010 --> 09:26.300 それから、 ピザのパイナップルについて口論になったんだ。 09:26.510 --> 09:27.440 ああ、 ああ。 09:27.470 --> 09:30.770 私のピザの好みを尊重してくれるとは、 なんと寛大なことだろう。 09:30.770 --> 09:31.910 しかし、 現実を見よう。 09:31.910 --> 09:40.340 パイナップルやピザのような忌まわしいものを世界に広めた時点で、 誰もが尊敬に値するわけではない。 09:40.520 --> 09:42.080 あ、 あの。 09:42.080 --> 09:48.200 だから、 とにかく、 栄光の男への愛を正当化しようとするあなたを見て。 09:48.200 --> 09:54.680 クロードのものよりも、 グッツやアグロのものを読む方が楽しいよ。 09:54.680 --> 09:55.490 とても素晴らしい。 09:55.520 --> 09:58.910 アボカドトーストの批評を控えているわけではないだろう? 09:58.940 --> 10:03.110 もちろん、 愛想はいい。 10:03.890 --> 10:07.370 とにかく、 これでこの小さなデモは終わった。 10:07.400 --> 10:08.900 楽しんでいただけたなら幸いだ。 10:08.900 --> 10:16.090 もし、 このメッセージの作り方について私の言っている意味が理解できなかったのなら、 そのメッセージを印刷して実行して見てください。 10:16.120 --> 10:17.200 印刷されているのを見るだろう。 10:17.200 --> 10:21.880 各ポイントでこのメッセージ配列を表示し、 何が作成されているかを確認できるようにする。 10:21.880 --> 10:25.090 それを使って、 私たちがきちんとやっていることを納得してくれればいい。 10:25.180 --> 10:28.510 うーん、 でも、 ここで重要なのはあなたへのお願いだ。 10:28.540 --> 10:31.720 今すぐ戻って、 役割を入れ替えてみてください。 10:31.720 --> 10:40.390 クロードがより闘争的で、 OpenAIが平和を守ろうとするように切り替え、 彼らがどのように振る舞うか見て、 10:40.420 --> 10:44.290 異なるスタイルのチャットボットを与えてみる。 10:44.620 --> 10:51.550 もちろん、 この練習の本当の目的は、 このような会話構成に慣れてもらうことだ。 10:51.550 --> 10:53.560 それにクロードのAPIもね。 10:53.680 --> 10:55.240 うーん、 でもそれはそれで楽しそうだ。 10:55.240 --> 11:00.400 そして、 あなたにとってのもう一つの挑戦は、 もちろん、 双子座をミックスに加えることだろう。 11:00.400 --> 11:02.560 ジェミニのAPIを使ってください。 11:02.560 --> 11:10.510 ええと、 双子座に第3の人格を与えて、 ここでおかしな会話ができないか見てみよう。 11:10.510 --> 11:12.250 それで楽しんでくれ 11:12.250 --> 11:15.700 もしそうしたら、 コードをプッシュしてほしい。 11:15.730 --> 11:18.130 そして、 楽しんでやってほしい。