You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

511 lines
17 KiB

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
そして、 楽しんでやってほしい。