😴
ChatGPTのプロンプトをLispで書く
ChatGPTのプロンプトをLispで書けることに気づきました。プロンプトによって処理系としてふるまってもらうという話は聞いたことがありましたが、Lispの場合はそのようなプロンプトがなくても解釈されました。
モデルはGPT-4です。言語としてはClojureをベースにした擬似コードを書いています。
※いくつか例を追加しました。思った以上にプログラミング的なことができるみたいです。
単純な生成と変換の例
子供っぽくする
静かなヤンデレっぽくする
(しっぽりやんでれ?)
対偶を返す
小説を作ってそれを要約する
鶏の唐揚げのレシピのJSONを生成する
Lispについて執事っぽく説明する
クラムチャウダーのレシピを妹として箇条書きにする
お兄ちゃんとツンデレの妹の誕生日ケーキについての会話を生成する
Clojureの関数を使う例
3つの文を元気にする
犬の名前を5個生成してひらがなにする
キリンの可愛さを繰り返し詳細にする
「雪」という単語をランダムな10個の言語に翻訳する
-> を使って簡潔に関数を組み合わせる
これはClojureの標準マクロです。
よりプログラミングらしい例
値を変数に入れる
(にゃんだふるごはん...)
関数を変数に入れる
関数を定義する
色々謎です。
条件によって出力を変える
2つのコードを比較する
特徴
存在しない関数が使える
map
、take
、iterate
などClojureの標準に含まれる関数もいくつか使っていますが、childize
、novelize
、catify
のような関数は私が適当にでっち上げた関数です。名前から推測してそれっぽい変換をしてくれます。
他のプログラミング言語との違い
冒頭でも書きましたが、「Lispの処理系として振る舞ってください」のようなプロンプトは必要ありませんでした。試しにS式じゃない擬似コードで指示を出すと下のような反応になりました。
一応結果は出してくれますが、コードの実行はできないということを言われます。Lispの場合はそれがないのも不思議です。
用途
個人的には日本語で書くよりもコードで書くほうが楽な場合もあるので、そういうときに使っていきたいです。例の中で言えば、複数言語への翻訳、名前を生成して変換する、繰り返し詳細にする、とか。
また、自然言語で書くよりもトークンが少なく済むので、その辺を気にする必要があるときに検討すると良いのではないかと思います。
Discussion