😴

ChatGPTのプロンプトをLispで書く

2023/03/20に公開

ChatGPTのプロンプトをLispで書けることに気づきました。プロンプトによって処理系としてふるまってもらうという話は聞いたことがありましたが、Lispの場合はそのようなプロンプトがなくても解釈されました。

モデルはGPT-4です。言語としてはClojureをベースにした擬似コードを書いています。

※いくつか例を追加しました。思った以上にプログラミング的なことができるみたいです。

単純な生成と変換の例

子供っぽくする

静かなヤンデレっぽくする


(しっぽりやんでれ?)

対偶を返す

小説を作ってそれを要約する

鶏の唐揚げのレシピのJSONを生成する

Lispについて執事っぽく説明する

クラムチャウダーのレシピを妹として箇条書きにする

お兄ちゃんとツンデレの妹の誕生日ケーキについての会話を生成する

Clojureの関数を使う例

3つの文を元気にする

犬の名前を5個生成してひらがなにする

キリンの可愛さを繰り返し詳細にする

「雪」という単語をランダムな10個の言語に翻訳する

-> を使って簡潔に関数を組み合わせる


これはClojureの標準マクロです。

よりプログラミングらしい例

値を変数に入れる


(にゃんだふるごはん...)

関数を変数に入れる

関数を定義する


色々謎です。

条件によって出力を変える

2つのコードを比較する

特徴

存在しない関数が使える

maptakeiterateなどClojureの標準に含まれる関数もいくつか使っていますが、childizenovelizecatifyのような関数は私が適当にでっち上げた関数です。名前から推測してそれっぽい変換をしてくれます。

他のプログラミング言語との違い

冒頭でも書きましたが、「Lispの処理系として振る舞ってください」のようなプロンプトは必要ありませんでした。試しにS式じゃない擬似コードで指示を出すと下のような反応になりました。

一応結果は出してくれますが、コードの実行はできないということを言われます。Lispの場合はそれがないのも不思議です。

用途

個人的には日本語で書くよりもコードで書くほうが楽な場合もあるので、そういうときに使っていきたいです。例の中で言えば、複数言語への翻訳、名前を生成して変換する、繰り返し詳細にする、とか。

また、自然言語で書くよりもトークンが少なく済むので、その辺を気にする必要があるときに検討すると良いのではないかと思います。

Discussion