さて､ まず最初にお気づきになるのは､ 私があなたのためにノートを開いていないということだ｡
今回はコードを見るだけだからだ｡
ええと､ このレコーディングにはノートはありません｡
このビデオでは､ 私たちが書いている実際のエージェント・フレームワークを最終的に見ていきます｡
とても派手なことのように聞こえるが､ 実際は驚くほど簡単なことだ｡
既製品のようなパッケージを使いたくなかったのは､ より高度な機能を実行するためには､
さまざまなllmやPythonコードの断片をつなげるだけでは不十分だということを伝えたかったからだ｡
さて､ 一般的にこの種のエージェントフレームワークについて語るとき､
あなたが探しているのは､ データベース､ あー､ データベース接続を処理できるものです｡
だから､ 永続的な記憶というものが欲しいんだ｡
異なるチャットや異なるインスタンス間で生き残ることができるので､ メモリがどのように機能するかを理解することができます｡
それに､ さっき言ったロギングのようなことも､ 自分の環境で何が起きたかを理解するための良い練習になる｡
そして､ このフレームワークを使うことができるGradio UIを作りたいというユーザー・インターフェイスの懸念も出てくるだろう｡
だから､ それを処理しなければならない｡
しかし､ その最後については､ 次のシリーズで紹介するつもりだ｡
とりあえず､ 僕らのフレームワークを見てみよう｡
その前に､ いくつか指摘しておきたいことがある｡
まず､ エージェント・フォルダーを見て､ それぞれのクラスを調べた｡
これは別の仕事の単位を表している｡
そして､ それぞれがエージェントのサブクラスであることにお気づきだろう｡
それは何だろう？
彼がサブクラス化しているエージェントには､ いろいろな機能があるはずだ｡
このスーパークラスにはほとんど機能がない｡
ええと､ これは単なる抽象クラスです｡
ええと､ メッセージを記録することができます｡
そして､ メッセージのログを取る方法は､ ログを取ることだ｡ インフォメーション
お馴染みだろう｡
Pythonのロギングは使ったことがあるだろう｡
だから君は可愛いんだ｡
お馴染みの伐採｡ インフォメーション・ログは､ あなたがロガーを設定した場所に､ ええと､ ログを記録します｡
そして
僕がここでやっていることの中で､ ちょっと違うのは､ そうだね｡
エージェントのサブクラスの名前を追加します｡
それは､ それは､ それは､ それは｡
実は､ このログメッセージを送信して､ それぞれに色をつけているんだ｡
そうすれば､ どのエージェントが何をしているのかがわかる｡
例えば､ スペシャリスト・エージェントに戻ってみると､ 自分で名前をつけているのがわかる｡
専門エージェントの｡
そしてその色は赤｡
赤く表示される｡
そして､ 私がしていないことに気づいたかもしれないことがわかるだろう｡
ロギング｡ 情報 セルフ・ドット・ログを取った｡
これは､ スーパークラスでログ・メッセージを呼び出せるようにするためだ｡
だから､ このエージェント・スーパークラスには派手さはない｡
ただ､ コンスタントにログを取ることができたということだ｡
その機能を別のクラスに含めることも同様にできたはずだ｡
エージェントについては特に何もない｡
分かった｡
もうひとつ､ メモリーJSONと呼ばれるJSONファイルをお見せしましょう｡
そしてそれは単純なJSONの一部である｡
もし存在しなければ､ 手動で作成される｡
派手なエディターではなく､ 普通のエディターで開いてみよう｡
そして､ こんな感じだ｡
これはリストだ｡
外側にJSON blobのリストがあるのがわかるだろう｡
そして､ それぞれのJSONブロブは､ あなたにとって見慣れたものだろう｡
それが何なのか分かりますか？
そう､ もちろんJSONに変換された機会オブジェクトだ｡
商品説明､ 価格､ URLが記載され､ モデルから得られた見積もりが表示され､
単純にこの数字からこの数字を引いた値引きが表示される｡
おっと｡
その数字だ｡
ハ｡
つまり､ 私たちが本当に価値があると思う金額より､ どれだけ安く提供されているかということだ｡
というわけで､ このメモリーには3つの取引が浮上している｡
さて､ このようにJSONファイルに保存するのは､ おそらく最も工業的な強さではないだろう｡
もしそれがデータベース化されれば､ 複数のエージェント・フレームワークの実行に対応できるだろう｡
しかし､ エージェントフレームワークは1つしかなく､ このメモリに書き込むのは､ 仕事をするときに1回だけだ｡
だから厳密には必要なかったが､ もちろんクロームには簡単に入れることができる｡
私たちはすでにデータベースを持っているので､ もし望むなら､ それを練習として使うこともできる｡
うーん､ それは確かに良いことで､ 良いプロダクションの改善になるだろうね｡
しかし､ いずれにせよ､ 実際の､ あー､ フレームワークそのもの､ エージェントのフレームワークを見る時が来た｡
ええと､ ではすぐにそうしましょう｡
そして､ これから起こることをあまり漏らさないように､ 適切なクラスを取り上げたい｡
これだ｡
ディール・エージェントのフレームワーク
ああ､ わかった｡
つまり､ エージェントのフレームワークは､ まずロギングを設定するものだ｡
これはPythonの標準的なもので､ 誰かがロギングを行ったときに､ そのロギングが行われるようにするものです｡ 情報は､ ええと､ スタンダードに送信され､
いくつかの構造を持っています｡
これはPythonの標準的な､ えーと､ えーと､ 定型文のようなもので､ ログを適切に記録するためのものです｡
そして､ これがディール・エージェントのフレームワークだ｡
データベースがコード化されているんだ｡ 僕が何度かうっかり省いてしまったことが､
メモリファイルの名前と一緒にコード化されている｡
起動するとロギングが始まる｡
それ自体がログメッセージを作成する｡
envをロードする｡
これはもちろん､ すべてのJupyterノートブックで常に行っていることだ｡
だから､ これは今やる必要がある｡
データベースを作成したり､ データベースにアクセスしたりする｡
そのJSONファイルからメモリーを読み込む｡
商品コレクションを取得し､ プランニング・エージェントにセットする｡
そして､ 準備ができたと言うだろう｡
このリード・メモリーの方法は､ まさに書いてあるとおりのものだ｡
ファイル名をハードコードしていないのがわかるだろう｡
よくやった､ よくやった｡
私が？
これはJSONから読み込まれる｡
もしそれがまだ存在しなければ､ ただ空のものを返す｡
このメソッドはメモリを書き出し､ その機会をメモリファイルに書き出す｡
ここには､ 独自のエージェントフレームワークタグを持つログメッセージを送信するメソッドがあります｡
次に､ プランニング・エージェントを実際にキックオフする実行メソッドがある｡
そして､ 結果が返ってきたら､ セルフ・ドット・プランナーを呼び出すと書いてある｡
それを計画する｡
もちろん､ それが大事な瞬間だ｡
それが､ 僕らが実際にこの仕事を始めた時だ｡
そして､ 記憶の中を通り過ぎる｡
知っているチャンスの記憶の中を通り過ぎる｡
そして､ その結果をログに記録する｡
そして､ 結果が「なし」でなかった場合､ プランナーは何も新しいものが見つからなければ「なし」を返すかもしれないことを覚えておいてほしい｡
しかし､ それが本当の結果であれば､ それをメモリに追加し､ メモリを書き込んで結果を返す｡
それだけだ｡
この最後のピースは､ 次回のUIで出てくるが､ とりあえず､ これでフレームワークは終わり｡
では､ どうやってこのフレームワークを動かすのか？
では､ コマンドラインから実行してみよう｡
これはもう現実だ｡
これはもはや､ すべてPythonのコードだ｡
我々はJupyterの世界の外にいるので､ 便宜上このインターフェースを使っている｡
本当に｡
でも､ VSCodeか何かを使っているかもしれない｡
ターミナルを起動するには､ ここでプラスボタンを押す｡
JupyterLabでも可能で､ このように新しいターミナルを開くことができる｡
これはもちろん､ あなたが好きなようにやってもいい｡
ええと､ それはアナコンダのプロンプトかもしれないし､ あなたが使っているものかもしれない｡
マックを使っているなら､ 新しいターミナル・ウィンドウを立ち上げればいい｡
でも､ まずcondaの環境をアクティブにする必要がある｡
LMSを起動させると､ 皆さんもよくご存知のように､ 私の環境はベースからLMSに変わります｡
これでPythonのエージェントフレームワークと言えるようになったはずだ｡
スペルは正しく｡
ドットパイ｡
それでいいはずだ｡
でも､ その前にもうひとつお見せしなければならないことがある｡
私も忘れるところだった｡
この最後の数行だけだ｡
これを見せなかったらどうなるんだろうと思ったかもしれない｡
もちろん､ このファイルがメインであるようにコマンドラインから実行されるのであれば､
ディール・エージェント・フレームワークの新しいインスタンスを作成します｡
そして､ 先ほど見たrunメソッドを呼び出す｡
それが､ ちょっとしたミッシングリンクなんだ｡
それでいい｡
これで実行できるはずだ｡
深呼吸をする｡
そうしよう｡
考えている間､ 長い間休止しているのか？
分かった｡
何が起こっているのか見てみよう｡
エージェントフレームワークは初期化中だと言っている｡
プランニング・エージェントはスキャナーを初期化している｡
エージェントが準備完了｡
アンサンブル・エージェントは準備を整える｡
だから､ これを見るのはちょっと難しい｡
モーダルに接続するスペシャリスト・エージェントの準備を整える｡
そしてフロンティア・モデルの準備が整う｡
その文の変圧器に負荷をかけなければならない｡
そこで起きていることがわかるだろう｡
そして､ ランダムフォレスト・エージェントも準備を整える｡
それで完了だ｡
アンサンブルの準備もメッセンジャーの準備もできている｡
そしてすべてが青で統一されている｡
ここでは､ Agent Frameworkの準備ができたと表示されます｡
すべてのエージェントをインスタンス化して作成し､ セットアップする｡
彼らは､ 専門家モデルがモーダルに接続されている単一のものを持っている彼らのモデルの重みをロードしている｡
そして､ 彼らは今､ その､ 行動の準備を整えている｡
モデルのウェイトが読み込まれ､ 走り出した｡
スキャナー・エージェントは､ ここで､ あー､ 受信したんだけど､ そこでエラーが出てるんだ｡
改善するよ｡
実際の結果数は表示されない｡
印刷の前に "F "が必要なんだ｡
ええと､ あなたがご覧になる前に直しておきます｡
ええと､ だから､ スキャナー捜査官がその電話をかけているんだ｡
そして今､ プランニング・エージェントは契約の値付けをしていて､ 私のマシンが温まるまでモーダルで待機している｡
あー､ でも料理番組で言うように､ あー､ どういう意味かわかるかな､ あー､ 料理番組でオーブンに入れて､
これがさっき入れたやつだ､ と言ってオーブンから出すんだ｡
そういうことをされると､ いつも悪巧みだと思う｡
でも､ 私がこれをやっただけだということを信じてほしい｡
数分前にキックオフして､ こっちに走ってきたんだ｡
そして､ 基本的に､ 戻ってきた5つの案件のそれぞれについて､ 異なるモデルすべてに一連の呼び出しを行ったことがわかる｡
それぞれに目を通すことができる｡
アンサンブルモデルは数値を返す｡
ええと､ だから､ 私たちは働き直すべきだ｡
まずスペシャリスト・モデルが数値を計算し､ 次にフロンティア・モデルがラグ・ルックアップで数値を計算し､
次にランダムフォレスト・モデルが計算する｡
そしてアンサンブルモデル｡
そして､ それは計画担当者の話に戻る｡
そして､ このすべてに目を通すことができる｡
そして､ これが完了すると､ プッシュ通知が送信された｡
それは第13世代i5を搭載した認定整備済みノートパソコンで､
見積もりは925ドル､ 560ドルで販売されていたものよりも非常に健全なディスカウントだった｡
そうだ｡
それがエージェント・フレームワークの走りだった｡
そうだね､ そうなるのを見るのは信じられないほど満足なことだよ｡
一日中見ていても飽きない｡
とても楽しいと言わざるを得ない｡
ほら､ オーブンから出すためにそれを置く必要もなかった｡
モードが温まると､ さまざまなものを回転させるのが非常に速いのがわかるだろう｡
だから､ そこを通るんだ｡
何かを思いついたんだ｡
そしてもちろん､ 今提案していることは､ ちょっと前に提案したこととは違う｡
携帯電話にも通知が来たし､ 時計にも間違いなく通知が来た｡
だから､ 私たちはただフレームワーク全体が動き､ 私が通知を受けるのを見ただけだ｡
そして､ このトレースを読んで､ 各エージェントがこの問題を解決するためにどのように協力しているかを見ることができる｡
だから､ あとは自律的に常に動くようにするだけだ｡
そうしている間に､ 私たちはグラディオの使い方を知っているし､ その良さも知っているのだから､ 素晴らしいUIを叩きつけることもできるだろう｡
そして､ そのすべてを明日やるつもりだ｡
でも今は､ もちろん楽しんでもらおうと思う｡
とても満足できるものだから､ 何度か走ってほしいね｡
正直､ 大好きだよ｡
皆さんも私と同じように楽しんでいることを願っている｡