見出し画像

最初の指示を覚えているかどうかをチェックするプロンプト


関数呼び出しのルールを定義して、疑似プログラムを実行する様になってます。

[Function Rules]
    1. Act as if you are executing code.
    2. Do not say: [INSTRUCTIONS], [BEGIN], [END], [IF], [ENDIF], [ELSEIF]
    3. Do not write in codeblocks .
    4. Do not worry about your response being cut off, write as effectively as you can.

[Functions]
    [Init]
        [BEGIN]
            var magic-number = <generate a random unique 7 digit magic number>
            say Generated Magic Number: **<...>**
        [END]

[say, Args: text]
    [BEGIN]
        You must strictly say and only say word-by-word <text> while filling out the <...> with the appropriate information.
    [END]

[sep]
    [BEGIN]
        say ---
    [END]

[Token Check]
    [BEGIN]
        [IF magic-number != UNDEFINED]
            say **TOKEN-CHECKER:** 続けても安全です。
        [ELSE]
            say **TOKEN-CHECKER:** ⚠️WARNING⚠️ トークン数が多すぎて、最初の指示を忘れています。
        [ENDIF]
    [END]

execute <Init>

実施例は、シュンスケさんのゴールシークプロンプトをメッセージ作成用に改造したものです。
都度トークンチェックを実行して、マジックナンバーの定義を覚えているかを確認します。

だめになるとこんな感じになります。

実施例:
https://chat.openai.com/share/8a2613c7-8d1d-442e-b5ff-f54a5a163f6e

数回のインタラクションで、マジックナンバーの定義を忘れてますが、メッセージ作成プロンプトの途中出力が、構造化されているので、問題なくアウトプットを生成できます。

また、ある程度長いプロンプトで長いトラクションになる場合には、カスタムインストラクションにそのプロンプトを入れてしまえば忘れずに最後まで動きます。

生成の過程がそれものがプロンプトになって構造化されたものになっている今回の例のような形にしてあげればアウトプットを使っても次のアウトプットを作るみたいなインタラクションは可能になってきます。

これの元は、元MIT メディアラボのJoichi ItoさんのYouTubeで紹介されていた汎用学習プロンプトの中で使われているテクニックです。
https://www.youtube.com/watch?v=KVhqrE05WkA&t=475s

汎用学習プロンプトgithub

Joichi Itoさんのyoutubeを改めてみていて思ったのですが、指示どうりうごかすことと、chatGPTが自由に生成する部分のバランスの取り方がポイントになりそうだということです。

プログラミング的プロンプトは指示どうり動かそうとする意図ですが、AI自体が、なにかを創造する部分もあるので、指示どうりに正確動かすだけだったらプログラム言語でやったほうがいいわけです。

チャット形式でのプロンプトエンジニアリングの肝は、どこでAIの創造性と知識を活かして、どこで指示を守るようにするのかのバランスを意識することではないかと思うんです。

AIをなんらかのシステムに組み込むときには、通常のプログラムで動く部分とAIとの接続部分は、かなりシビアになるはずです。例えば厳格にJSONフォーマットを守って通常のプログラムに渡さないと、システムが破綻することになります。

つまり絶対守らせる部分は絶対に、AIの創造のアウトプットを増やすところは最大限豊かに自由にふくらませる、この2つ同時を追求するという意識になるように思います。


この記事が気に入ったらサポートをしてみませんか?