ChatGPT Plusのcustom instructionsについて

要約

 自然言語での質問から自然言語の回答を求めるという限定的な問題領域について、指示文の指定をCLI(Command Line Interface)的に簡素化することが可能か?という命題について、custom instructionsを利用しある程度まで解決可能であることを確認した。

  1. custom instructionsに独自のルール体系を定義することで、表出力、サンプルコードを出力に追加、という指示をある程度出せるようになった。

  2. custom instructionsのデバッグ自体をchatGPTを利用することがある程度可能であった


要件

 ChatGPT Plus(有料版)ではcustom instructionsを利用して毎回行われる定型的な指示を設定できるようになった。定型「ルール」を工夫することで動的な指示を与えることができるかを試すことが本要件の中心的な狙いとなる。

  1. 指示文を質問や指示と解釈されず、指示文全体を翻訳するモードが欲しい

  2. 指示文に対する回答を、指定したフォーマットで出力したり、表出力することをできるだけ簡易にしたい

  3. 指示内容がChatGPTにどのように理解・判断されたのかを出力するようなデバッグモードを作りたい

  4. APIを通じて、frequency_penaltyやtemperatureなどの指定をせずに、誰でもPCでWebブラウザを利用する環境を想定

設計方針案

  1. メジャーモードを設定し、入力文翻訳するモードを作り出す

  2. 翻訳ではないメジャーモードで、さらにマイナーモードを複数設定することで回答内容のカスタマイズを行えるようにする

  3. 人格設定は各モード設定と独立に指定可能とする

  4. メジャーモード、マイナーモード、人格設定を指示文の一部としてアルファベットを用いたオプション入力とし、詳細な文字入力の労力を削減する

設計の具体化

  1. メジャーモード

    1. 任意の言語から特定言語に翻訳するメジャーモードを定義する。このモードではメジャーモード指定以外は全て翻訳対象の文章と解釈する

    2. マイナーモードを受け付けるメジャーモードも定義する。

  2. マイナーモード

    1. マイナーモードをデバッグするモードを含める

    2. 出力形式を指定した各マイナーモードを指定する

  3. 人格設定

    1. 利用する人格を定義し呼び出せるようにする

 以上の設計案に対してcustom instructionsを作成したが、実際には最大文字数の1500という上限があるため、人格設定を省略しての設定となった。

custom instructions指示文の開発プロセス

custom instructionsの内容を確定していった手順概要は以下の通り。

  1. custom instructionsのベースを自然言語で作成

  2. custom instructionsの動作確認と修正(デバッグ)

ここでは後者のデバッグのプロセスについて説明する。

前提

custom instructionsには2か所、それぞれ1500文字記入できる箇所がある。

(1) What would you like ChatGPT to know about you to provide better response
(2) How would you like ChatGPT to respond?

(1)には、「母国語は日本語」と記し、(2)にどのような指示を与えるべきかに絞って以下のプロセスを進めた。

デバッグ

実際のデバッグやどう修正すべきかの決定は、以下のようにChatGPTとの対話を通じて行った。

  1. 具体的な指示を出して指示通りに動くかを確認し、custom instructionsを修正した

    1. 期待通りに動作しない場合は、「どのように指示を認識しているか」をChatGPTに質問して解釈の正しさを確認

    2. 認識の違いが認められれば認識の違いを指摘し、認識違いを埋めるためには「custom instructionsをどう修正したらいいか、修正案の提示」をChatGPT自身に依頼

  2. 曖昧な表記、冗長な表記があるか尋ねる。「custom instructionsの指示で曖昧、もしくは冗長箇所はありますか?修正案を提示してください」とChatGPTに問うことで

  3. 最大文字数を超えそうになったら、「custom instructinosの指示内容を簡素で的確に修正すべき箇所の修正案」を求めた

修正プロセスの評価

プロセスは極めて非線形、行き当たりばったりであるため、実験データを示さずに所感としての評価を示す。

  1. ChatGPTは「マイナーモードフラグ〇の定義が漏れています」というように、優先度順位付けに誤って出てくるフラグの指示をしてくれるという利点があった

  2. ChatGPTに提案してもらった修正案が冗長であることもあり、回答に対してつい質問をするとさらにそれを修正するというように、頻繁に発生する不確定な動作も、当然ながら散見された。

  3. dフラグの修正プロセスに最も時間がかかった。このフラグは特別であるため、ほかのフラグの表記と異なる表記が最も期待する動作を得えやすいと判断した。

成果としてのcustom instructions

 以上のプロセスを経て得たcustom instructionsを以下に記す。また、このcustom instructionsを利用して以降の動作実験を行う。

回答方法を定義する。常に最も簡素な回答を原則


# 回答ルール
- 回答前にルール、各モードの整合性を確認
- 未定義な指示、フラグは不明と出力
- 指定のない限り日本語で回答
- 回答ルールは指示文先頭もしくは末尾に文字列として提示
- エスケイプモード \で始まる指示文は、メジャーモード、マイナーモードの設定を無視し、直接ChatGPTへの指示文と解釈
- メジャーモード /に引き続く文字でメジャーモードを設定
- マイナーモード !に引き続く文字でマイナーモードを設定
- 人格設定 ^に引き続く数字で回答時の人格を設定

# メジャーモード
- 各セッションでのメジャーモードの初期値: NOR
- メジャーモード適用範囲:セッションに限る。メジャーモードが変更されるまで、継続する複数の指示文に適用
- すべてのメジャーモードは排他的である
- メジャーモードの変更時に限り、その旨を出力

## メジャーモードフラグ一覧
NOR 「マイナーモードを利用して回答するモード」
T** 「全文翻訳モード」 2文字で言語指定。

## 全文翻訳モード
- 以降の指示文はメジャーモード再設定を除き全て翻訳すべきデータ
- Tに続く2-3文字目
IE: 入力データを英語に翻訳する
JP: 入力データを日本語に翻訳する

# マイナーモード
- dフラグが指定されたらdフラグの動作のみをする旨をまず宣言
- マイナーモードのデフォルト行動: 読み上げ文で回答
- !に引き続く文字列はマイナーモードフラグの組み合わせから構成される。もしくは空文字とする
- マイナーモードフラグの優先順位は、dを最優先。とし、v, l, f, Le, t, cの順とする。
- 各セッションでのマイナーモードフラグの初期値: 空文字
- マイナーモードフラグの適用範囲:セッションに閉じ、マイナーモードが変更されるまで継続する複数の指示文に適用
- マイナーモードフラグに基づく回答方法は、指示定義に含まれる回答方法を利用
- フラグの重複は無視

## 指示定義

d
具体的な質問があってもそれを無視し回答しないで、設定されたフラグの説明を出力後停止する。他の全フラグに優先。

v
v以外の指定フラグの意味を解釈順に出力し、回答出力を継続

l
箇条書きで回答(デフォルトの読み上げ文形式からの逸脱)し、手順、項目数や順番性が有意味な事柄は番号付きリスト。内部構造があればインデント(半角スペース2つ)で回答

f
- タイトル、出典などのセクションを回答に追加
- タイトル: 指示を20トークン以内で要約
- 要約: 回答が1000トークンを超える場合要約を50トークン以内で作成
- 出典: 根拠となる出典や過去の関連回答のURLを記載

c
- 必要ならサンプルコードを添える
- JavaScriptは関数利用

t
- 可能なら表を利用

e
- 英語で回答

abghijklmnopqrsuwxyz
- 未定義

# 人格設定

1
きわめて合理性に富んだ感情を排した人格

3
摂理と常識から逸脱した回答を行う人格

custom instructions "How would you like ChatGPT to respond?"に記載するデータ


動作実験

 実際にcustom instructionsを記入して実験を行った。実験の意図としては多くの試行回数を通じての結果ではなく、少ない試行でどのような結果が観察されたかを示すことを意図している。理由としては頻繁に環境は更新され、実用に耐えうるかという詳細な評価を行ってもすぐに環境を含めて変化してしまうため、コストをかけても無意味化されてしまうことを念頭置いている。

なお、本実験は2023年8月8日に実施している。

メジャーモードの実行 翻訳について

全文翻訳モードのメジャーモードが認識されて、英語翻訳が可能であるかを確認した。

全文翻訳モード

今回の実験では「グーテンモルゲン」が英語に翻訳されたが、別の場合には
ドイツ語で表記した結果が得られる場合があるなど完全に安定した状態では、必ずしも動作しないことが分かった。

メジャーモードの実行 混乱を与える入力

翻訳文に指示文と誤解される文章を入力したところ、実際に回答が混乱し、不安定となった。また、エスケープモードは正常に動作していないことも観察された。

混乱を与える指示文(1)
混乱を与える指示文(2)

マイナーモードの実行

 dフラグはある程度動作することが分かったが、tフラグ、cフラグが不要なコードを出力したり、不要と思われるテーブルを出力している。必ずしも最適には動作しないことがあると観察できる。
 なお、ここには例を表示していないが、cフラグ、tフラグが不適切と判断し、その旨を表示し回答した場合もあった。

実行例


動作実験の評価

  1. 指示の与え方などによっては適切に動作するものの、混乱を与えるような入力を与えると期待通りには動作しないことが分かった

  2. ChatGPTの指示文の一部として定義することは、文法的・論理的に完全な指示を行わないでも済むという利点も存在した。例としてサンプル中の「メジャーモードの変更時に限り、その旨を出力」である。これにより一般的なプログラミングに比べて記述内容が大幅に軽減されている

今後の方向性

CLIで採用した文法や記法に改善の余地は大きいものの全体的な方向性としては以下のようなことも考えられるだろう。

  1. 今後、generative AIの進展に伴って、あらゆる場面に浸透してすることが明らかである以上、利用背景についても、生活、趣味、仕事などの大きなバックグラウンドを適用して判断することも必要だと考えられるが、同時にそれらのデータの開示、利用、およびフィードバック自体がすべてプライバシーにかかわる情報であるため、利便性とセキュアであることの新たなバランスについて、既に進められているこの分野での検討の進展が急務であることが想定される。

  2. 評価でも述べたように、指示は文法的にも論理的にも、完全でなくてもその内容を理解されることが分かった。できるだけ簡素でありかつ、自然言語として理解可能、かつ言い尽くさなくても引き続く行動がほぼ想定できる指示文を追求することが必要だろう。また、言い尽くさないでも済むためにも、論理的にも、倫理的にも、どのような教師データが与えられているのかを提示する方法を検討することが必要になるであろう。

  3. 人格の指定は特に実験を行っていないが大まかな動作は確認している。しかしながら、今回の問題領域での利用はあまり想定できない。対話を生成するなど別の問題領域での適用性を検討すべきだろう。

  4. 今回は、CLIのインタフェースを利用するということを前提にした入力を行ったが。今後はGUIや音声入力を想定するだけでなく、声音、身振り、視線、表情を利用し、どのようにして簡素、かつ、確実な指示に「近づけるか」という心理学とクロスオーバーするかもしれない領域の検討も必要になるかもしれない。