LMにツールを装備するプロジェクトを続けよう｡
関数を記述するために､ このコードを作成しました｡
そして次のステップは､ toolsと呼ばれるものを作成する｡
そして私たちの場合は1つしかない｡
それはファンクションである｡
そして､ その機能がここにある｡
ツールというリストに入っている｡
そして今､ このGPTでLMを与える時が来た｡
多くの人にとって､ このツールを使う力は大きい｡
どうなるんだ？
だから､ ちょっと手こずるんだ......警告しておくけど､ ちょっと手こずることを精神的に覚悟しておいてほしい｡
それは､ あなたにとって非常に見慣れたものから始まる｡
これはいつものチャット機能です｡
よくご存知でしょう｡
あなたが知っているメッセージを履歴に残し､ それを使ってOpenAIに送るメッセージを作成する｡
さて､ ここには小さな微妙な違いがある｡
何かが変わった｡
何かが追加された｡
あなたがそれを見つけるまで､ 少し待ちます｡
一度目につければ一目瞭然だが､ そこにはちょっとした補足がある｡
そして､ もし見たなら､ とても素晴らしかった｡
そうでないなら､ それは非常に明白だ｡
これだ｡
道具の中でパスする｡
APIはまったく同じチャット・ドット補完､ ドット作成だ｡
モデルを与え､ メッセージを与え､ そしてツールも与える｡
つまり､ このオブジェクトをここに置くのだ｡
ChatGPTは､ OpenAIがそれを受け取り､ プロンプトを構築するとき､ LLMに送信されるトークン､
GPT 4 LLMに送信されるトークンを受け取り､ 私たちの機能を説明する一連のトークンに変換します｡
LLMは､ この英語を使って何をするのかを説明し､ LLMが呼び出すことのできる関数であることを知らせる｡
それが機能するのは､ LLMにその能力を与えるために､ トークンをそのように使う例をたくさん使って訓練されているからだ｡
そして､ 次に何が起こるかを見たとき､ マジックの一部は失われようとしている｡
あなたが覚えているLLMから戻ってくるものは､ 応答選択肢ゼロである｡
そして､ 私たちがすることは､ 最終的な理由がこのツールの呼び出しなのかどうかを見極めることだ｡
GPT4位が「まだ答えは出ていない｡
そのかわり､ あなたのツールのひとつを呼び出して､ その出力を教えてほしいから､ もうやめよう｡
そうなれば､ GPT4からメッセージを収集する必要がある｡
つまり､ これはそのレスポンス・チョイスのゼロ・ドット・メッセージを集めたものだ｡
送り返されたものが何であれ､ それは実際､ ツールの実行を要求するものだ｡
そして､ そのメッセージを解きほぐすための作業が少しある｡
それが何をしたいのかを見極め､ それを実行する｡
そして､ 私はそのすべてを別の関数に入れた｡
私はズルをしてきた｡
ここに全部書いてもいいんだけど､ ごちゃごちゃしちゃうからね｡
だからその代わりに､ 私はその部分を切り離した｡
だから､ この時点ではすぐに見ることができる｡
この機能は､ GPT4ゼロからメッセージを解凍し､ 必要であれば､ まあ､ 必要であろう｡
このツールは我々のツールを呼び出し､ その結果を返す｡
GPT4のゼロに戻るレスポンスと､ 呼び出された都市は､ ええと､ 次にすることは､
メッセージのリストにさらに2行追加することだ｡
私たちのメッセージは､ ユーザー・アシスタント､ ユーザー・アシスタントのようなものだ｡
これから新しい行を2つ追加する｡
その行のひとつがこのメッセージで､ これはGPT4ゼロから戻ってきた､ ツールを呼ぶようにというメッセージ以外の何ものでもない｡
そこでまず､ アシスタントにツールの実行を依頼する｡
それをメッセージのリストに入れ､ その次にメッセージのリストに入れるのは､
関数を呼び出した結果だ｡
このメッセージのリストには､ ユーザー・アシスタント､ ユーザー・アシスタント､ ユーザー・アシスタントがツールを実行すると書いてある｡
私たちは､ これがツールの結果だと言っている｡
そして､ それをOpenAIに送り返す｡
お分かりいただけただろうか｡
そうでない場合は､ 実行時にここにprint文を入れるだけで､ 私が言ったとおりのことがわかる｡
そして､ メッセージをすべて印刷すれば､ はっきりとわかると思う｡
そのメッセージには､ そのやりとりの全文が表示される｡
そして最後に､ いつものようにLMから究極の答えを返す｡
ツールを2回実行することは想定していないので､ 2度目は通さないことにしているんだが､
入れておいて損はないだろう｡
もちろん､ 最終的に足りないのは､
この関数を書かなければならないということだ｡
知っておいて損はないよ
GPT4から戻ってきたメッセージがこれだ｡
そして､ 私たちがしなければならないのは､ それを解凍して､ どのツールを呼び出したかったのかを突き止めることだ｡
今､ 私たちの場合､ どのツールを呼び出したいかはわかっている｡
うーん､ でも､ どう動くか見てもらうために､ とりあえずここに置いておくよ｡
そして､ ここで本当にすべきことは､ ツール・コールがチケットの値段とイコールであれば､ チケットの値段を知ることができる､ ということだ｡
しかし､ 我々の場合､ 使えるツールは1つしかない｡
そういうことだ｡
次にできることは､ 呼び出したい引数をロードすることだ｡
つまり､ このツール・コールの中にドット・ファンクションというツールがある｡
どのようなパラメータを選択したかを示すドット引数｡
それがJSONの形で戻ってくる｡
ええと､ ただのひもです｡
だから､ Jsonを使わなければならない｡ Loadstring関数をロードして辞書に変換する｡
そして､ 私たちが実際に持っている唯一の論拠である目的地都市について調べる｡
それを調べて､ 可変都市に入れる｡
というわけで､ 道具と議論を解きほぐした｡
そして､ 残るはこのラインだ｡
そして､ そのセリフは明らかに気の利いたものではない｡
この行は､ 単純にチケット価格の取得関数を呼び出しているだけだ｡
我々は､ それが実行したいツールであることを確認し､ 都市を抜き出して､ その関数を呼び出した｡
そして､ 私たちは対応策を構築する｡
その返答がこれだ｡
これはメッセージの一番下に押し込まれるものだ｡
そうだ｡
そこに押し込まれることになるが､ 彼らの反応はこうだった｡
さて､ これらの行にはそれぞれ役割と内容がある｡
過去には､ ロールはユーザーであったり､ システム・ユーザーであったり､ システム・ユーザー・アシスタントであったり､ ユーザー・アシスタントであったりした｡
まあ､ それ以外にもあるんだけどね｡
それはこの言葉のツールである｡
だから､ この場合はレスポンスツールに入れた｡
そして､ コンテンツには次のような文字列を入れた｡
この辞書は､ JSONダンプ文字列関数を使用して文字列に変換される｡
そこで､ 目的地の都市と料金を入れた｡
また､ このツールコールIDをメッセージに追加する必要がある｡ これは､ このレスポンスをその直前に来たリクエストにリンクする方法である｡
だから､ メッセージを入れているんだ｡ ツールを使用する｡ この2つを見たときに､ それがこのリクエストに関連していることを完全に理解できるようにするためだ｡
それがすべてだ｡
今回はかなりの量だったが｡
そこには受け止めるべきことがたくさんある｡
しかし､ 私が言うように､ それを通してステップを踏み､ いくつかのprintステートメントを置き､ それが機能していることを確認する｡
しかし､ チャットでこの話を持ち出したらどうなるか､ 今から見てみよう｡
こんにちは｡
本日はどのようなご用件でしょうか？
ロンドンに行きたい｡
もちろんだ｡
値段を知りたいですか？
そうだ｡
ロンドンまでの往復チケットは7ドル｡ 99.
だから適正価格だった｡
つまり､ Jupyterラボに戻ると､ 私たちのツールの名前が印刷されているはずです｡
その自信はかなりあると思うが､ ちょっと見てみよう｡
さすがにロンドン行きのチケット代はツール・ゲットと呼ばれるだけある｡
続けよう｡
パリはどう？
899と東京｡
東京までの往復航空券は1400ドル｡
そしてベルリン｡
ベルリンは今､ 追加したところだ｡
それがあるかどうか見てみよう｡
はい､ 499です｡
確かに効きそうだし､ ティンブク2も｡
申し訳ないが､ timbuk2へのチケット料金に関する情報は持っていない｡
ええと､ ここを見てみよう｡
と呼ばれる一連のツールを見ることができる｡
そして､ Timbuk2のために呼ばれたとき､ それが不明と答えたであろうことも知っている｡
その結果､ わからないときはわからないと言うようにシステムプロンプトを与えたので､ わからないということがはっきりした｡
それとともに､ いろいろなことがあった｡
お分かりいただけただろうか｡
これは実際､ 強力な機能の一部だ｡
LMにさらなる力を与えるための強力なテクニックだが､ しかし､ その裏では魔法ではない｡
LLMが何かについてもっと情報が必要だと知らせてくれるようにするためだ｡
それが､ 布団の中での仕事だ｡
そして､ それがあなたにとって意味のあるものであることを願っている｡
そして､ これをあなた自身のプロジェクトに役立ててほしい｡
これを拡張する方法として｡
より多くの種類のツールや､ そのフライトの空席状況などを示すようなツールを追加することも検討できる｡
だから､ より多くの道具を使うことができる｡
あるいは､ 本当に大胆にやりたいなら､ 実際にフライトを予約するツールを追加することもできる｡
これは､ 再び呼び出されたときに､ 何かを印刷したり､ ファイルに何かを書き込んだりするツールだ｡
そうすれば､ LLMは2つ目のツールにコールバックし､ ユーザーがフライトの予約を要求したときに､ 実際にフライトを予約することができる｡
だから､ それはそれで面白いし､ 日付とかについて何度も議論することになる｡
そして､ それが終わるころには､ ツールの書き方や､ ソフトウェアで実行されるアクションを実行するためにLLMを装備する方法について､
非常に習熟していることだろう｡