📝

プロンプトエンジニアリングで気をつけていること

2023/04/06に公開

背景

人と話すよりもプロンプトで遊んでいる時間のほうが多い気がする。
まだまだ素人ですが、私が気にしているところを備忘録的にここでまとめていきます。

Prompt Engineering Guideの要約

下記を読んだ要約となります。
https://www.promptingguide.ai/jp
※私の理解が異なる場合もあるので、参考程度でお願いいたします。

1.基本的に文章の続きを記載したり、質問に回答する機能を有する。
2.通常のコミュニケーションのように、連結した支持を行うと不正確さが増大する。
  →「〜に説明する形で」や「あなたは〜だとして」など具体的に指示を出す。
3.しないことは指定しにくいため、することを強調して支持を与える。
  →「〜をしない、〜をしない」などの否定を連結した場合もうまく動かない場合があります。

4.プロンプトの例
  テキスト要約:長い文章を短い文章に要約することができます。
  情報抽出:大量の情報から指定した情報を抽出します。
  質疑応答:大量の情報から特定の質問に対する回答を行います。
  テキスト分類:指定された情報を指定された方法で分類する。
  会話:チャットボットに利用されるように会話を生成することができます。
  コード生成:指定を行ったプログラムコードを生成することができます。
  推論:ある集団に分けるなどの推論を行うことができます。

Zero-Shot:
 具体的な例を指示しない場合でも近い回答を行う事ができます。
few-shot prompting:
 具体的な例を与えることにより、さらに近い回答を行えます。
Chain-of-Thought:
 段階的な例を与えることにより、さらに近い回答を行えます。
 また、具体的に思考するように支持を与えることでも再現ができます。

意図した文章を作成する

否定文は避けて役割は明確にする。

〜をしないでください!と指定するよりも、〜をしてください!と指定したほうが、より正しい文章が生成されます。
また、否定文を連続していれるよりもしたいことを再現するために自分や相手に役割付したほうがいい場合が多いです。
指定する場合には相手の状態や自分の状態も細かく指定することにより、適した回答を導き出す事ができます。

単純な指示
Q:短い文章でカタカナを使わずにわかりやすい文章で宇宙について教えて下さい
A:宇宙は、私たちの住む地球を含む、星や惑星、銀河などからなる広大な空間のことを指します。
宇宙には、私たちがまだ知らないような多くの謎があり、天文学者たちがその謎を解明するために研究を続けています。
宇宙は、私たちにとって驚くべき世界であり、科学や技術の進歩によってますます多くの情報が明らかになっています。
役割を明確にした指示
Q:あなたは宇宙学者です。今日は小学校1年生の生徒たちが宇宙についてのあなたの話を聞くために来ています。小学生の子供達の心を掴むように面白く宇宙を説明してください。
A:皆さん、こんにちは!私は宇宙学者のChatGPTと申します。今日は、宇宙についてお話ししましょう!

宇宙は、とっても広い空間です。想像してみてください。一番好きな星がある場所を考えてみてください。その星の周りには、たくさんの星があり、きらめく光がたくさん輝いていることでしょう。それぞれの星は、とっても遠い場所にあり、私たちがまだ見たことのない星もたくさんあります。

また、地球の周りには月という星があります。月は、夜空に輝いている時に見ることができますね。月は、宇宙に浮かんでいる巨大な岩のようなものです。地球にとって、月はとても大切な存在で、海の満ち引きや、季節の変化にも影響を与えています。

宇宙には、私たちがまだ知らない、たくさんの秘密があります。科学者たちは、宇宙の秘密を解き明かすために、たくさんの研究をしています。宇宙は、私たちにとって、まだまだ謎が多い素晴らしい世界です。皆さんも、宇宙の秘密を解き明かすために、ぜひ興味を持って勉強してみてくださいね!

創作するように指示する

〜について教えて下さい!などと指示した場合に、そのものが存在しない場合にそれは存在しませんという回答が来る場合があります。
その場合には、〜を創作してください!と指定すると、より創作的な文章が生成されます。

存在しない生き物の説明を求めた場合
Q:人を食べるカエルがいるとします。それについて説明してください
A:実際に、人を食べるカエルは存在しません。
一般的にカエルは、昆虫や小型の魚類、両生類などを食べる肉食動物ですが、人間を食べることはありません。
また、人間がカエルを食べることもありますが、これは一部の地域でのみ行われる伝統的な食文化であり、普遍的なものではありません。
人間とカエルは、共存するために相互に関わりを持つことができる、大切な存在です。

創作してくださいを追加した場合
Q:人を食べるカエル(デスガエル)がいるとします。それについて創作して説明してください
A:A:デスガエルは、その名の通り、人間を含む動物を捕食する巨大なカエルです。
彼らは夜行性で、人間が住む都市周辺の池や湖などに生息しています。
彼らは通常のカエルよりも体が大きく、口も大きく開くことができます。
また、彼らの舌は非常に粘着性が高く、獲物を素早く捕獲することができます。
彼らは一度獲物を捕らえると、その獲物を食べるまで放しません。
彼らの唾液には強い毒が含まれており、被害者は短時間で麻痺し、動けなくなります。
これにより、デスガエルは簡単に獲物を食べることができます。
都市部では、人々はデスガエルによる被害に備えて、門を閉めて夜に外出しないようにしています。
しかし、時折、デスガエルは人間を襲うことがあり、その被害は深刻です。

段階的に考えてもらう。

魔法の指示で段階的に考えてくださいというものがあります。
この指示を与えるとプロンプトは段階的に考えて回答を生成するため、正解する確率が上がります。
あまり参考になりませんが、下記はデスガエルで試した場合です。

単純に質問した場合
Q:デスガエルがどうしてこのような生態になったか教えて下さい。
A:デスガエルがどうして人を襲うようになったかには、いくつかの説があります。
一つの説によれば、デスガエルは人間が自然環境を破壊したことで生息地を追われ、人間を餌として求めるようになったと考えられます。
また、遺伝子の突然変異によって食性が変化した可能性もあります。
他にも、地球外生命体の侵略や、ある種の魔法によって生まれた怪物といった設定もあるかもしれません。
どの説が正しいかは、物語の設定や世界観に合わせて自由に決めることができます。

段階的に考えてもらった結果
Q:デスガエルがどうしてこのような生態になったか教えて下さい。
1つの説を段階的に教えて下さい
A:一つの説として、以下のような段階が考えられます:

1.食物の適応
デスガエルは、もともとは普通のカエルの仲間で、昆虫や小型の無脊椎動物を食べることが多かったと考えられます。
しかし、生息地である南アメリカの熱帯雨林では、捕食者が多く、生き残るためにはより大きな獲物を食べる必要があるという状況があったと考えられます。


2.獲物の適応
デスガエルが大型の獲物を食べるようになったことで、獲物側も適応していったと考えられます。
例えば、カエルを捕食することが多いヘビ類の中にも、デスガエルを狙うものがいることが知られています。
これは、デスガエルが普通のカエルよりも大型であり、毒を持っていることから、その毒を避けるためにヘビがデスガエルを狙うようになったという説があります。


3.毒の進化
デスガエルが毒を持つようになったのは、そのような獲物を食べるための適応と考えられます。
一般的なカエルは、明るい色や斑点模様など、自分の存在を知らせるような外見をしていますが、デスガエルは地味な色合いで、獲物から見えにくくなっています。
さらに、毒を持つことで、天敵から身を守ることができます。
毒の種類や濃度も、地域や種によって異なるため、これらも獲物に合わせて進化した可能性があります。


以上のような段階を経て、デスガエルは現在の生態を獲得したと考えられます。
ただし、科学的にはまだ解明されていない点が多くあります。

形式を指定する

出力の形式を指定するとその形式で出力をしてくれます。
私がよく利用するのはJSON型での出力と箇条書きでの出力です。
これを利用して前後の文章を破棄すれば多段的にプログラムを構築することも可能です。

箇条書きで出力
Q:デスガエルの生体的な特徴を箇条書きで記載してください。
A:
* デスガエルは一般的なカエルよりも大きく、最大で体長30cmほどに成長する。
* 体色は暗く、茶色や黒色をしており、肌表面には粘液が分泌されている。
* 大きな口と鋭い歯を持ち、捕食する際には一度に大きな獲物を食べることができる。
* 足が強く発達しており、非常に高い跳躍力を持つ。
* 生息地は熱帯雨林や湿地帯などで、湖沼や川などの水辺に生息する。
jsonで出力
Q:下記のJSON形式の内容を創作してデスガエルのものに変更してください。
{
"Elephant": {
"size": "large",
"trunk": "long",
"tusks": "ivory",
"memory": "excellent"
}

A:{
"Death Frog": {
"skin": "toxic",
"size": "small to medium",
"habitat": "tropical rainforest",
"camouflage": "excellent",
"feeding": "carnivorous",
"defense": "toxic skin and secretions",
"mobility": "excellent jumper and swimmer",
"lifespan": "up to 25 years"
}
}

Discussion