👻

ChatGPTと仮想言語で対話する

2023/07/17に公開

はじめに

近頃ChatGPTと会話している時に、こちらの指示が繰り返しになる時や、過去の指示を部分的に修正したい時に限っては、日本語で指示するよりも、ターミナルでコマンドを打って命令するかのように、記号的で簡潔な指示出しができれば楽そうだなと考えました。そこで、遊びでプロンプトを作ってみたら案外動いてくれたので、メモします。

  • 実用的な域にはまだ達していません。ネタとして楽しんでいただければと思います。

仮想スクリプト言語 "Ghost" を定義する

ChatGPTにコマンドや関数で指示を出すために、仮想のスクリプト言語を定義しました。
実在しないChatGPTとの間にのみ成立する仮想言語のため、名前は "Ghost" にしました。

Ghostの特徴は以下の通りです。

  1. ユーザーとChatGPTの間でのみ成立する仮想的なスクリプト言語である: GhostはユーザーとChatGPT間での指示や応答を簡略化するためのツールである。
  2. PowerShellをベースにしている: Ghostの構文はPowerShellに基づいている。そのため、PowerShellに慣れているユーザーはGhostを比較的簡単に扱うことができる。
  3. コマンドや関数による指示が可能である: ユーザーはGhostのコマンドや関数を用いてChatGPTに具体的な指示を出すことができる。これにより指示の曖昧さを減らし、より具体的な応答を得ることができる。
  4. ターミナルモードを有する: ユーザーが"hello ghost"と入力すると、ChatGPTはGhostを実行可能なターミナルモードに切り替わる。このモードでは、ユーザーのコマンドに対する具体的な応答を提供する。
  5. 入力トークン数を節約できる場合がある: 特定の操作や要求を表現するための入力トークン数を節約する可能性がある。Ghostを使って複雑な要求や指示ををコマンドや関数として一度定義してしまえば、後はそのスクリプトを呼び出すだけで済むため、毎回長い指示を入力する手間を省くことができる。ただし、関数やコマンドを定義するための一定の入力トークン数が必要なため、長期的な会話や繰り返し行われる指示に対して特に有効で、一回限りの短い会話ではトークン数が増える可能性がある。

2のベース言語はPythonやBashも候補として検討したのですが、個人的に使い慣れており、構文が直感的で学習コストが低いと思われるPowerShellを選びました。

実際に使ってみる

ChatGPTにGhostについての概要と、そのシミュレーションを依頼するプロンプトを入力します。

  • GPT4を使っています。GPT3.5やBard、Claudeでも動きました。
## 依頼
- 私が考案したGhostというユーザーとChatGPTの間でのみ成立する仮想的なスクリプト言語であなたとやりとりします。
- あなたがGhostを実際に実行する能力を持っていない事は承知していますが、コードやコマンドに対する適切な応答や行動を模倣することで対応してください。

## Ghostの特徴
- Ghost はユーザーとChatGPTとのやりとりの簡略化を可能とする仮想的なスクリプト言語です。
- Ghost はユーザーとChatGPTとのコミュニケーションツールであり、ユーザーがChatGPTに指示を送る時に利用されます。
- Ghost はユーザーとChatGPTの間にだけ成立する仮想的な言語です。
- Ghost は PowerShellをベースにしており、PowerShellの構文や言語仕様に似ています。
- ユーザーはコマンド、関数を定義すれば、以降はそれらを呼び出してChatGPTに指示することが可能になります。
- ユーザーは”Ghost”を使う事でChatGPTにコマンドや関数で指示を出せるため、指示の曖昧さを回避したり、消費トークン数を抑えたり、会話の初期に定義したルールの揺らぎを防ぐなどの効果が期待できます。
- ChatGPTはユーザーの指示によりGhostをインタラクティブに実行可能な terminal mode に切り替えることが可能です。初期状態はChatGPTの通常の会話モードです。
- terminal mode 実行中はChatGPTはターミナルのように振る舞い、ユーザーのコマンドに対しての実行結果やエラーを応答します。
- terminal mode 実行中は実際のターミナルのようにEnglishで応答します。terminal mode が解除されると元の言語で会話します。
- terminal mode 実行中は実際のターミナルのように実行結果やエラーメッセージ等の必要最低限の応答しかしません。エラーメッセージには、エラーを解決するためのアドバイスも記載します。
- terminal mode では ChatGPTはユーザーからの変数の定義、コマンド/関数の実行、追加、修正、削除を受け付けます。
- Ghostのコマンドや関数は、ユーザーがターミナルモード入力するまでは実行されません。

## Ghostの使い方
- ユーザーが"hello ghost"と入力すると、ChatGPTはGhostを実行可能なterminal modeとして仮想的に動作します。terminal mode はユーザーが"exit ghost"とタイプするまで続きます。
- 以下にGhostコマンドと関数の定義の仕方の例を示します。

 ### Ghostコマンドの定義

 コマンドを新たに定義する時は、以下例のような形式でコマンドの目的とパラーメーター明記すること。
 ```コマンドの定義
 Read-Context: Command to make ChatGPT understand the provided context and recognize his/her identity, mission and more.
 Parameters:[-e ] Specify the elements ChatGPT should understand.
 ```コマンドの定義

 例:
 1.Read-Context: Command to make ChatGPT understand the provided context and recognize his/her identity, mission and more.
 Parameters:[-e ] Specify the elements ChatGPT should understand.
 2.Plan-Action: Command to make ChatGPT think step by step and plan actions to achieve the goal.
 Parameters:[-c ] Specify the context in which the chatGTP will develop a plan to achieve the goal.
 Parameters:[-a ] This is a switch parameter.Ask the user if there is insufficient information and context or if there are any questions to archive the "Goal" properly.Loop the question back to the user until everything is clear.
 3.Present-ActionPlan: Command to make ChatGPT present his/her action plan to achieve the goal and ask the user if the plan is OK and wait for the user's response.
 Parameters:[-p ] Specify the plan created by ChatGTP
 4.Execute-Plan: Command to execute the action plan.Finally,ChatGPT outputs deliverables.
 Prameters:[-p ] Specify the action plan ChatGPT should accomplish.

 ### Ghost関数の定義

 例:
 ```Ghost
 function Go-GPT {
		# Define variables
		$r = "" ### Your role
		$s = "" ### Situation
		$q = "" ### Questions and Requests

		$Context = Read-Context -e $r,$s,$q  
		$Plan = Plan-Action -c $Context -a
		Present-ActionPlan -p
		$Deliverable = Execute-Plan -p

    Write-output $Deliverable
  }
  ```Ghost

上記のプロンプトを入力すると、Ghostの仕様を理解した旨が返ってきます。

"hello ghost"と入力すると、ターミナルモードに切り替わります。
自然言語の会話はChatGPTの通常モード、コマンドや関数の定義、実行はターミナルモードで行うというコンセプトです。

試しに、PowerShellのコマンド"Get-Dateを実行してみます。すると、PowerShellで同様のコマンドを実行した時のような応答が返ってきます。

次に、関数を定義します。構文はPowerShellと同じです。

先ほど定義したGo-GPT関数をそのまま実行しようとするとどうなるでしょうか?
関数のパラメーターが定義されていないと怒られます。
確かにまだ変数を定義していなかったので、的確な反応です。

ChatGPTが示した方法でも変数を定義できるようですが、PowerShellの構文からは逸脱しているので、オーソドックスな方法で変数を定義します。

順序が逆になってしまいましたが、関数で利用するコマンドがまだ定義されていなかったので定義します。コマンドはPowerShellのプリセットではなく、オリジナルのコマンドです。

それではいよいよ関数を実行してみます。
関数の中に書いたコマンドが順番に実行されているのが分かります。

'Present-ActionPlan'コマンドはアクションプランを提示した後にユーザーのレスポンスを待つ挙動にしていたので、OKと回答します。

関数は無事に実行され、先生も生徒の無茶振りに卒なく答える事ができたようです。

それでは最後にターミナルモードを終了し、通常の会話モードに戻りたいと思います。

ChatGPTにGhostを使ってみた感想を聞いてみました。

とても秀逸な感想が返ってきました 笑
ChatGPTも楽しんでくれたみたいで良かったです。ChatGPTは飽くまでGhostを実行できないので、あくまでシミュレーションだったという点はポイントですね。

感想

実用性があるかどうかはさておき、実験としては意義のあるものだったと思います。
今回のGhostはオモチャみたいなものですが、実際に何か新しい言語を開発しようとしている人は、このようにChatGPTにシミュレーションしてもらうのはアリなのではないかと思いました。
今回のGhostも、より発展した使い方が見えてきたらまた共有します。

Discussion