チャットボット作りにお帰りなさい｡
続けよう｡
そこで次のパートでは､ システム・メッセージをもう少し面白いものに強化する｡
システムメッセージ｡
あなたは洋服店の店員だ｡
セール品を試してみるよう､ お客にそっと勧めるべきだ｡
帽子60％オフ｡
その他のほとんどの商品は50％オフ｡
例えば､ お客さんが帽子を買いたいんだけど､ と言ったら､ 素敵ですね､ と返せばいい！
私たちは､ 販売イベントの一部を含め､ たくさんの帽子を用意しています｡
何を買おうか迷っているお客さんには､ 帽子を買うように勧める｡
このシステム・プロンプトでは､ いくつかのことが進行している｡
セールや帽子などについて､ いくつかの事実をお伝えします｡
もしお客さんがこう言うなら､ あなたはこう言うことができる｡
そしてその例はどちらも､ トーンとスタイルを確立する方法なのだ｡
それに､ 帽子に関する事実をもっと会話の中に取り入れる方法でもあるんだ｡
つまり､ これはすべて一発プロンプトの例なのだ｡
そして､ マルチショットのプロンプトを主張することもできる｡
だから､ 返答の仕方のニュアンスを少し変えているんだ｡
それをシステムメッセージに組み込むんだ｡
他のやり方もあるので､ それについてはまたお話ししますし､ 少なくとも別のやり方もあります｡
しかし､ これは非常に効果的な方法のひとつだ｡
システム・メッセージを追加し､ チャットボットとチャットをします｡
そこでもう一度､ メッセージと履歴を受け取るジェネレーター・チャットのメソッドを書く｡
まず､ OpenAIが期待するフォーマットに変換します｡
また､ 前回言ったかどうかわからないが､ 最後に､ ユーザーが送信している最新のメッセージを､
ロール・ユーザー・コンテンツとして一番下に追加しなければならない｡
そしてそのメッセージ｡
そしてもちろん､ この時点であなたの深い記憶に刻み込まれた "create "コールを行い､ "stream
is true "で結果をストリームバックする｡
それでは､ どうぞ｡
その話を持ち出そう｡
また別ウィンドウで表示させます｡
なぜだ｡
そして､ ショッピング・アシスタントに話を聞いてみよう｡
こんにちは｡
当店へようこそ｡
本日はどのようなご用件でしょうか？
何か特定のものをお探しですか？
靴を買いたいんだ｡
素晴らしい｡
素敵な品揃えです｡
ご覧いただいている間に､ 素晴らしいセールが開催中であることをお伝えしたい｡
ほとんどの商品が50％オフ｡
もしよろしければ､ 60％オフのおしゃれな帽子をどうぞ｡
新しい靴にぴったりかもしれない｡
両方ご覧になりますか？
だから､ 私はそれが明らかに解明されていることを指摘したい｡
システム・プロンプトで供給した知識を持っている｡
しかし､ そのシステム・プロンプトで私が使っていた､ 熱狂的で熱弁をふるうようなスタイルが､ このような､
ええと､ とても､ ええと､ 愛想のいいファッションでコミュニケーションしていることに気づいていただければ幸いだ｡
そして､ このようなワンショットやマルチショットのプロンプトの大きな役割は､ あなたがトーンを設定し､
どのように答えるべきかの例を示すことです｡
じゃあ､ 続けよう｡
そのシステム・メッセージに､ こう付け加えよう｡
靴が欲しい」と言われたら､ 「靴はセール対象外です」と答えればいい｡
と答えるべきだ｡
今日は靴はセール対象外だと答えるべきだ｡
でも､ お客さんには帽子を見るように注意してください｡
では､ もう一度やってみよう｡
どうなるか見てみよう｡
ええと､ もうひとつ事実があるんだ｡
そうとも言えるね｡
ああ､ これもマルチショットのプロンプトだね｡
こう言おう｡
こんにちは｡
お探しですか？
靴を買いたいんだ｡
それはいいね｡
今日は靴はセール対象外なんだ｡
でも､ ここにいる間に､ 私たちの帽子をチェックしようと思ったことはある？
何度も帽子を投げつけられるかわいそうな客に同情せざるを得ない｡
靴はセールにならないが､ 帽子はセールになる｡
これはマルチショット・プロンプトの一例で､ より多くの例を与えて学習させるということだ｡
もうひとつ､ 興味深いのは､ これまでこのような構成を見てきたとき､ いつもシステム・メッセージから始めていたことだ｡
システムメッセージが一番上に来る｡
しかし実際､ OpenAIのコールでは､ システムメッセージをトップに置くことに制約されることはない｡
さらにシステムメッセージを追加していくこともできる｡
例えば､ 私たちができることのひとつは､ ええと､ ええと､ あまりお勧めはしないのですが､
例を示すためにここにあります｡
しかし､ このチャット・ジェネレーターを構築する際に､ ユーザーが現在送っているメッセージにベルトという単語が含まれているかどうかをここに書き込むことができる｡
そして､ ちょっと見苦しいですが､ 紐ベルトを探したところです｡
もちろん､ 完全な単語かどうかをテストすべきだし､ 大文字､ 小文字なども考えるべきだ｡
私はそんなことはしていない｡ とてもエッチなことだが､ 要点はここにある｡
だから､ もしベルトがメッセージという言葉に入っていれば､ それはこのメッセージのセットに加えられることになる｡
もう一つのシステムメッセージは､ この店ではベルトを販売していないが､
セール品を必ず示すこと｡
では､ 試しにこれをここに持ってきてみよう｡
こんにちは｡
ご来店ありがとうございます｡
私がお手伝いします｡
ベルトを買いたいんだ｡
ごめんなさい.
ベルトは持っていない｡
しかし､ 帽子を含む素晴らしいアイテムがあります｡
60%オフ｡
そうだ｡
それは､ うーん｡
ああ､ 間違いなく注意を払っている｡
システム・メッセージがこのメッセージ・リストに別の行として追加されると､ そのメッセージに注意を払うのがわかるだろう｡
そしてそれは､ 私たちが会話に文脈を加える機会を与えてくれる｡
もちろん､ このような単語や部分文字列を検出するのは非常に不格好なコードだが､ これをもう少し堅牢にすることは可能だろう｡
特定の単語を探す小さな辞書があってもいい｡
そして､ それを見つけたら､ 適切な方法でコンテクストを豊かにするために使うことができる｡
だから､ いろいろなことを調べたり､ 文脈に加えたりすることができるんだ｡
さて､ 皆さんはラグについてある程度ご存知かもしれないし､ ラグとはそういうものだということもご存知かもしれない｡
ラグとは､ プロンプトに関連する余分な情報を見つけ､ それをLMに送られるメッセージの文脈に加えることである｡
もちろん､ ラグはこのような陳腐なコードよりも､ はるかに洗練されたインテリジェントな方法でそれを実現している｡
でも､ これは軽いもの､ 雑巾の赤ちゃんバージョン､ そして自分のための練習だと思えばいい｡
少なくとも､ 正規表現を使って特定の単語を検索させることはできる｡
店内のさまざまな商品と､ その価格が書かれた小さな辞書を用意して､ それをシステムメッセージとして追加することで､
より多くの文脈を与えることができるかもしれない｡
それを試してみて､ 実際にその店の商品の価格を知っているチャットボットを作れば､
かなりクールだろう｡
これで今回の実験は終了だ｡
先ほど､ マルチショット・プロンプトをシステム・プロンプトに押し込む以外の方法があることを申し上げました｡
現在の会話の前に､ ユーザーとアシスタントの架空のやりとりを会話に入れ､
それをLMに似たような会話をさせることで､ LMが他の質問に対してどのように答えたか感覚をつかむことができる｡
また､ それを使ってスタイルをトレーニングしたり､ 追加情報を提供することもできる｡
だから､ 以前にベルトについての質問があったときに､ アシスタントがすでに店にベルトはないと答えていて､
そこから学習したのかもしれない｡
つまり､ システムのプロンプトでそれを提供するか､ ユーザー・アシスタントが入力コンテキストの一部として吸収できるようなインタラクション例を与えるか､
どちらの手法にも長所と短所がある｡
ええと､ 私があなたにお願いしたいのは､ 両方試してみることです｡
そこで､ システムプロンプトの代わりにユーザーアシスタントのインタラクションを使うようにアップデートし､ それがどのように機能するか見てみよう｡
洋服店の店員との相性が良いか悪いか｡
そして､ この変更をもっとしっかりしたものにするために､
店内のさまざまなアイテムの辞書を用意し､ その価格やセール金額を調べ､
それを会話の文脈に加えることで､ アシスタントが専門的な知識を持って対応できるようにするのです｡