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.
 
 

625 lines
21 KiB

WEBVTT
00:00.950 --> 00:04.760
さて、 まず最初にお気づきになるのは、 私があなたのためにノートを開いていないということだ。
00:04.760 --> 00:08.090
今回はコードを見るだけだからだ。
00:08.090 --> 00:11.150
ええと、 このレコーディングにはノートはありません。
00:11.150 --> 00:22.880
このビデオでは、 私たちが書いている実際のエージェント・フレームワークを最終的に見ていきます。
00:22.880 --> 00:27.530
とても派手なことのように聞こえるが、 実際は驚くほど簡単なことだ。
00:27.530 --> 00:32.240
既製品のようなパッケージを使いたくなかったのは、 より高度な機能を実行するためには、
00:32.240 --> 00:40.340
さまざまなllmやPythonコードの断片をつなげるだけでは不十分だということを伝えたかったからだ。
00:40.640 --> 00:45.440
さて、 一般的にこの種のエージェントフレームワークについて語るとき、
00:45.440 --> 00:53.990
あなたが探しているのは、 データベース、 あー、 データベース接続を処理できるものです。
00:54.080 --> 00:57.590
だから、 永続的な記憶というものが欲しいんだ。
00:57.770 --> 01:05.040
異なるチャットや異なるインスタンス間で生き残ることができるので、 メモリがどのように機能するかを理解することができます。
01:05.700 --> 01:13.620
それに、 さっき言ったロギングのようなことも、 自分の環境で何が起きたかを理解するための良い練習になる。
01:13.620 --> 01:20.250
そして、 このフレームワークを使うことができるGradio UIを作りたいというユーザー・インターフェイスの懸念も出てくるだろう。
01:20.250 --> 01:21.960
だから、 それを処理しなければならない。
01:21.960 --> 01:26.850
しかし、 その最後については、 次のシリーズで紹介するつもりだ。
01:27.030 --> 01:31.500
とりあえず、 僕らのフレームワークを見てみよう。
01:31.500 --> 01:34.080
その前に、 いくつか指摘しておきたいことがある。
01:34.080 --> 01:38.580
まず、 エージェント・フォルダーを見て、 それぞれのクラスを調べた。
01:38.580 --> 01:40.920
これは別の仕事の単位を表している。
01:40.920 --> 01:45.450
そして、 それぞれがエージェントのサブクラスであることにお気づきだろう。
01:45.570 --> 01:47.100
それは何だろう?
01:47.130 --> 01:52.260
彼がサブクラス化しているエージェントには、 いろいろな機能があるはずだ。
01:52.260 --> 01:55.920
このスーパークラスにはほとんど機能がない。
01:55.920 --> 02:00.210
ええと、 これは単なる抽象クラスです。
02:00.270 --> 02:03.820
ええと、 メッセージを記録することができます。
02:03.910 --> 02:07.090
そして、 メッセージのログを取る方法は、 ログを取ることだ。 インフォメーション
02:07.120 --> 02:08.530
お馴染みだろう。
02:08.560 --> 02:10.360
Pythonのロギングは使ったことがあるだろう。
02:10.360 --> 02:11.200
だから君は可愛いんだ。
02:11.230 --> 02:17.590
お馴染みの伐採。 インフォメーション・ログは、 あなたがロガーを設定した場所に、 ええと、 ログを記録します。
02:17.620 --> 02:18.550
そして
02:18.700 --> 02:23.560
僕がここでやっていることの中で、 ちょっと違うのは、 そうだね。
02:23.590 --> 02:27.190
エージェントのサブクラスの名前を追加します。
02:27.190 --> 02:28.840
それは、 それは、 それは、 それは。
02:28.870 --> 02:34.120
実は、 このログメッセージを送信して、 それぞれに色をつけているんだ。
02:34.210 --> 02:39.400
そうすれば、 どのエージェントが何をしているのかがわかる。
02:39.400 --> 02:46.300
例えば、 スペシャリスト・エージェントに戻ってみると、 自分で名前をつけているのがわかる。
02:46.330 --> 02:47.560
専門エージェントの。
02:47.560 --> 02:51.310
そしてその色は赤。
02:51.340 --> 02:52.270
赤く表示される。
02:52.270 --> 02:54.610
そして、 私がしていないことに気づいたかもしれないことがわかるだろう。
02:54.640 --> 02:56.980
ロギング。 情報 セルフ・ドット・ログを取った。
02:56.980 --> 03:00.070
これは、 スーパークラスでログ・メッセージを呼び出せるようにするためだ。
03:00.070 --> 03:04.820
だから、 このエージェント・スーパークラスには派手さはない。
03:04.820 --> 03:06.920
ただ、 コンスタントにログを取ることができたということだ。
03:06.920 --> 03:11.090
その機能を別のクラスに含めることも同様にできたはずだ。
03:11.090 --> 03:14.480
エージェントについては特に何もない。
03:14.930 --> 03:15.860
分かった。
03:15.860 --> 03:22.250
もうひとつ、 メモリーJSONと呼ばれるJSONファイルをお見せしましょう。
03:22.250 --> 03:24.710
そしてそれは単純なJSONの一部である。
03:24.710 --> 03:29.150
もし存在しなければ、 手動で作成される。
03:29.150 --> 03:32.870
派手なエディターではなく、 普通のエディターで開いてみよう。
03:32.870 --> 03:34.700
そして、 こんな感じだ。
03:34.700 --> 03:36.440
これはリストだ。
03:36.680 --> 03:43.250
外側にJSON blobのリストがあるのがわかるだろう。
03:43.250 --> 03:48.320
そして、 それぞれのJSONブロブは、 あなたにとって見慣れたものだろう。
03:48.350 --> 03:49.700
それが何なのか分かりますか?
03:50.120 --> 03:55.070
そう、 もちろんJSONに変換された機会オブジェクトだ。
03:55.460 --> 04:02.240
商品説明、 価格、 URLが記載され、 モデルから得られた見積もりが表示され、
04:02.240 --> 04:08.370
単純にこの数字からこの数字を引いた値引きが表示される。
04:08.400 --> 04:08.880
おっと。
04:08.910 --> 04:09.630
その数字だ。
04:09.660 --> 04:10.020
ハ。
04:10.380 --> 04:15.300
つまり、 私たちが本当に価値があると思う金額より、 どれだけ安く提供されているかということだ。
04:15.300 --> 04:20.790
というわけで、 このメモリーには3つの取引が浮上している。
04:21.060 --> 04:26.730
さて、 このようにJSONファイルに保存するのは、 おそらく最も工業的な強さではないだろう。
04:26.730 --> 04:32.160
もしそれがデータベース化されれば、 複数のエージェント・フレームワークの実行に対応できるだろう。
04:32.160 --> 04:38.220
しかし、 エージェントフレームワークは1つしかなく、 このメモリに書き込むのは、 仕事をするときに1回だけだ。
04:38.220 --> 04:42.150
だから厳密には必要なかったが、 もちろんクロームには簡単に入れることができる。
04:42.150 --> 04:47.550
私たちはすでにデータベースを持っているので、 もし望むなら、 それを練習として使うこともできる。
04:47.880 --> 04:52.620
うーん、 それは確かに良いことで、 良いプロダクションの改善になるだろうね。
04:53.250 --> 05:01.620
しかし、 いずれにせよ、 実際の、 あー、 フレームワークそのもの、 エージェントのフレームワークを見る時が来た。
05:01.710 --> 05:04.620
ええと、 ではすぐにそうしましょう。
05:06.220 --> 05:12.460
そして、 これから起こることをあまり漏らさないように、 適切なクラスを取り上げたい。
05:12.460 --> 05:12.970
これだ。
05:12.970 --> 05:14.770
ディール・エージェントのフレームワーク
05:15.130 --> 05:16.540
ああ、 わかった。
05:16.540 --> 05:24.790
つまり、 エージェントのフレームワークは、 まずロギングを設定するものだ。
05:24.790 --> 05:31.870
これはPythonの標準的なもので、 誰かがロギングを行ったときに、 そのロギングが行われるようにするものです。 情報は、 ええと、 スタンダードに送信され、
05:32.020 --> 05:36.790
いくつかの構造を持っています。
05:36.790 --> 05:43.300
これはPythonの標準的な、 えーと、 えーと、 定型文のようなもので、 ログを適切に記録するためのものです。
05:43.300 --> 05:46.330
そして、 これがディール・エージェントのフレームワークだ。
05:46.330 --> 05:51.640
データベースがコード化されているんだ。 僕が何度かうっかり省いてしまったことが、
05:51.640 --> 05:55.480
メモリファイルの名前と一緒にコード化されている。
05:55.600 --> 05:58.750
起動するとロギングが始まる。
05:58.780 --> 06:00.730
それ自体がログメッセージを作成する。
06:00.730 --> 06:02.170
envをロードする。
06:02.200 --> 06:05.770
これはもちろん、 すべてのJupyterノートブックで常に行っていることだ。
06:05.770 --> 06:07.520
だから、 これは今やる必要がある。
06:07.760 --> 06:12.800
データベースを作成したり、 データベースにアクセスしたりする。
06:13.250 --> 06:17.090
そのJSONファイルからメモリーを読み込む。
06:17.390 --> 06:28.070
商品コレクションを取得し、 プランニング・エージェントにセットする。
06:28.100 --> 06:30.110
そして、 準備ができたと言うだろう。
06:30.620 --> 06:35.930
このリード・メモリーの方法は、 まさに書いてあるとおりのものだ。
06:35.930 --> 06:39.140
ファイル名をハードコードしていないのがわかるだろう。
06:39.140 --> 06:40.160
よくやった、 よくやった。
06:40.190 --> 06:40.700
私が?
06:40.820 --> 06:43.880
これはJSONから読み込まれる。
06:43.880 --> 06:52.130
もしそれがまだ存在しなければ、 ただ空のものを返す。
06:52.160 --> 07:00.890
このメソッドはメモリを書き出し、 その機会をメモリファイルに書き出す。
07:01.940 --> 07:08.710
ここには、 独自のエージェントフレームワークタグを持つログメッセージを送信するメソッドがあります。
07:09.490 --> 07:14.590
次に、 プランニング・エージェントを実際にキックオフする実行メソッドがある。
07:14.800 --> 07:20.860
そして、 結果が返ってきたら、 セルフ・ドット・プランナーを呼び出すと書いてある。
07:21.070 --> 07:22.120
それを計画する。
07:22.120 --> 07:23.500
もちろん、 それが大事な瞬間だ。
07:23.500 --> 07:26.200
それが、 僕らが実際にこの仕事を始めた時だ。
07:26.200 --> 07:28.750
そして、 記憶の中を通り過ぎる。
07:28.780 --> 07:32.350
知っているチャンスの記憶の中を通り過ぎる。
07:32.350 --> 07:38.050
そして、 その結果をログに記録する。
07:38.050 --> 07:43.990
そして、 結果が「なし」でなかった場合、 プランナーは何も新しいものが見つからなければ「なし」を返すかもしれないことを覚えておいてほしい。
07:43.990 --> 07:50.020
しかし、 それが本当の結果であれば、 それをメモリに追加し、 メモリを書き込んで結果を返す。
07:50.020 --> 07:51.220
それだけだ。
07:51.220 --> 07:57.970
この最後のピースは、 次回のUIで出てくるが、 とりあえず、 これでフレームワークは終わり。
07:58.420 --> 07:59.980
では、 どうやってこのフレームワークを動かすのか?
07:59.980 --> 08:01.690
では、 コマンドラインから実行してみよう。
08:01.690 --> 08:03.100
これはもう現実だ。
08:03.100 --> 08:05.500
これはもはや、 すべてPythonのコードだ。
08:05.500 --> 08:09.080
我々はJupyterの世界の外にいるので、 便宜上このインターフェースを使っている。
08:09.080 --> 08:09.710
本当に。
08:09.980 --> 08:12.440
でも、 VSCodeか何かを使っているかもしれない。
08:12.470 --> 08:16.310
ターミナルを起動するには、 ここでプラスボタンを押す。
08:16.310 --> 08:20.330
JupyterLabでも可能で、 このように新しいターミナルを開くことができる。
08:20.330 --> 08:25.010
これはもちろん、 あなたが好きなようにやってもいい。
08:25.130 --> 08:29.540
ええと、 それはアナコンダのプロンプトかもしれないし、 あなたが使っているものかもしれない。
08:29.540 --> 08:32.240
マックを使っているなら、 新しいターミナル・ウィンドウを立ち上げればいい。
08:32.330 --> 08:36.380
でも、 まずcondaの環境をアクティブにする必要がある。
08:36.560 --> 08:54.350
LMSを起動させると、 皆さんもよくご存知のように、 私の環境はベースからLMSに変わります。
08:54.350 --> 09:01.730
これでPythonのエージェントフレームワークと言えるようになったはずだ。
09:02.510 --> 09:04.010
スペルは正しく。
09:06.410 --> 09:07.490
ドットパイ。
09:07.640 --> 09:08.990
それでいいはずだ。
09:09.000 --> 09:11.670
でも、 その前にもうひとつお見せしなければならないことがある。
09:11.820 --> 09:14.190
私も忘れるところだった。
09:14.190 --> 09:16.320
この最後の数行だけだ。
09:16.320 --> 09:20.070
これを見せなかったらどうなるんだろうと思ったかもしれない。
09:20.460 --> 09:26.700
もちろん、 このファイルがメインであるようにコマンドラインから実行されるのであれば、
09:26.700 --> 09:32.550
ディール・エージェント・フレームワークの新しいインスタンスを作成します。
09:32.550 --> 09:35.760
そして、 先ほど見たrunメソッドを呼び出す。
09:35.790 --> 09:39.780
それが、 ちょっとしたミッシングリンクなんだ。
09:39.810 --> 09:40.320
それでいい。
09:40.320 --> 09:41.640
これで実行できるはずだ。
09:41.670 --> 09:42.540
深呼吸をする。
09:42.540 --> 09:43.410
そうしよう。
09:46.950 --> 09:49.020
考えている間、 長い間休止しているのか?
09:51.060 --> 09:51.930
分かった。
09:51.930 --> 09:53.310
何が起こっているのか見てみよう。
09:53.310 --> 09:55.800
エージェントフレームワークは初期化中だと言っている。
09:55.800 --> 09:58.350
プランニング・エージェントはスキャナーを初期化している。
09:58.380 --> 09:59.850
エージェントが準備完了。
09:59.850 --> 10:02.550
アンサンブル・エージェントは準備を整える。
10:02.550 --> 10:04.170
だから、 これを見るのはちょっと難しい。
10:04.170 --> 10:09.600
モーダルに接続するスペシャリスト・エージェントの準備を整える。
10:10.300 --> 10:12.910
そしてフロンティア・モデルの準備が整う。
10:12.940 --> 10:14.920
その文の変圧器に負荷をかけなければならない。
10:14.920 --> 10:16.360
そこで起きていることがわかるだろう。
10:16.360 --> 10:19.810
そして、 ランダムフォレスト・エージェントも準備を整える。
10:19.810 --> 10:21.340
それで完了だ。
10:21.430 --> 10:24.340
アンサンブルの準備もメッセンジャーの準備もできている。
10:24.340 --> 10:25.810
そしてすべてが青で統一されている。
10:25.840 --> 10:28.360
ここでは、 Agent Frameworkの準備ができたと表示されます。
10:28.360 --> 10:33.130
すべてのエージェントをインスタンス化して作成し、 セットアップする。
10:33.130 --> 10:39.970
彼らは、 専門家モデルがモーダルに接続されている単一のものを持っている彼らのモデルの重みをロードしている。
10:40.390 --> 10:46.180
そして、 彼らは今、 その、 行動の準備を整えている。
10:46.210 --> 10:51.010
モデルのウェイトが読み込まれ、 走り出した。
10:51.040 --> 10:56.110
スキャナー・エージェントは、 ここで、 あー、 受信したんだけど、 そこでエラーが出てるんだ。
10:56.110 --> 10:57.160
改善するよ。
10:57.160 --> 10:59.020
実際の結果数は表示されない。
10:59.020 --> 11:02.290
印刷の前に "F "が必要なんだ。
11:02.620 --> 11:05.080
ええと、 あなたがご覧になる前に直しておきます。
11:05.170 --> 11:07.660
ええと、 だから、 スキャナー捜査官がその電話をかけているんだ。
11:07.780 --> 11:17.960
そして今、 プランニング・エージェントは契約の値付けをしていて、 私のマシンが温まるまでモーダルで待機している。
11:18.050 --> 11:26.420
あー、 でも料理番組で言うように、 あー、 どういう意味かわかるかな、 あー、 料理番組でオーブンに入れて、
11:26.420 --> 11:33.980
これがさっき入れたやつだ、 と言ってオーブンから出すんだ。
11:33.980 --> 11:37.100
そういうことをされると、 いつも悪巧みだと思う。
11:37.190 --> 11:39.800
でも、 私がこれをやっただけだということを信じてほしい。
11:39.800 --> 11:46.070
数分前にキックオフして、 こっちに走ってきたんだ。
11:46.070 --> 11:54.140
そして、 基本的に、 戻ってきた5つの案件のそれぞれについて、 異なるモデルすべてに一連の呼び出しを行ったことがわかる。
11:54.140 --> 11:55.670
それぞれに目を通すことができる。
11:55.700 --> 11:58.490
アンサンブルモデルは数値を返す。
11:58.700 --> 12:01.160
ええと、 だから、 私たちは働き直すべきだ。
12:01.190 --> 12:06.350
まずスペシャリスト・モデルが数値を計算し、 次にフロンティア・モデルがラグ・ルックアップで数値を計算し、
12:06.350 --> 12:08.990
次にランダムフォレスト・モデルが計算する。
12:08.990 --> 12:10.430
そしてアンサンブルモデル。
12:10.430 --> 12:12.870
そして、 それは計画担当者の話に戻る。
12:13.200 --> 12:15.300
そして、 このすべてに目を通すことができる。
12:15.300 --> 12:20.100
そして、 これが完了すると、 プッシュ通知が送信された。
12:20.340 --> 12:29.700
それは第13世代i5を搭載した認定整備済みノートパソコンで、
12:29.700 --> 12:45.030
見積もりは925ドル、 560ドルで販売されていたものよりも非常に健全なディスカウントだった。
12:45.030 --> 12:46.950
そうだ。
12:46.950 --> 12:50.970
それがエージェント・フレームワークの走りだった。
12:51.210 --> 12:55.980
そうだね、 そうなるのを見るのは信じられないほど満足なことだよ。
12:55.980 --> 13:00.870
一日中見ていても飽きない。
13:00.870 --> 13:04.200
とても楽しいと言わざるを得ない。
13:04.230 --> 13:09.780
ほら、 オーブンから出すためにそれを置く必要もなかった。
13:09.780 --> 13:14.960
モードが温まると、 さまざまなものを回転させるのが非常に速いのがわかるだろう。
13:15.170 --> 13:16.910
だから、 そこを通るんだ。
13:16.910 --> 13:18.020
何かを思いついたんだ。
13:18.020 --> 13:22.790
そしてもちろん、 今提案していることは、 ちょっと前に提案したこととは違う。
13:23.000 --> 13:26.870
携帯電話にも通知が来たし、 時計にも間違いなく通知が来た。
13:27.350 --> 13:34.880
だから、 私たちはただフレームワーク全体が動き、 私が通知を受けるのを見ただけだ。
13:34.880 --> 13:42.980
そして、 このトレースを読んで、 各エージェントがこの問題を解決するためにどのように協力しているかを見ることができる。
13:43.280 --> 13:51.470
だから、 あとは自律的に常に動くようにするだけだ。
13:51.470 --> 13:57.680
そうしている間に、 私たちはグラディオの使い方を知っているし、 その良さも知っているのだから、 素晴らしいUIを叩きつけることもできるだろう。
13:57.710 --> 14:01.190
そして、 そのすべてを明日やるつもりだ。
14:01.250 --> 14:04.460
でも今は、 もちろん楽しんでもらおうと思う。
14:04.460 --> 14:07.670
とても満足できるものだから、 何度か走ってほしいね。
14:07.700 --> 14:08.900
正直、 大好きだよ。
14:08.930 --> 14:14.540
皆さんも私と同じように楽しんでいることを願っている。