From the uDemy course on LLM engineering.
https://www.udemy.com/course/llm-engineering-master-ai-and-large-language-models
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
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 |
|
そして、 楽しんでやってほしい。
|
|
|