【ChatGPT】良いプロンプトに必要なものは？

# はじめに
最近はChatGPTの普及もかなり進み、どのようにすれば動いてくれるかといったノウハウもだいぶ増えてきました。特に「プロンプトエンジニアリング」というものについては様々な手法が出ています。

多くの手法が出ていますが、それらの目指すところは共通していて、「目的を明確化する」という点にあると思います。今回はプロンプトを少しずつ明確にしながら出力がどう変化していくかを実験しました。

# タスク
ブログの記事で解説するため、以下の文章を要約してもいます。ちなみにこの文章は[前回の記事](https://qiita.com/Sugiyama_Shingo/items/53690f2a63c69cc97acd)で翻訳したDollyV2についての解説でした。

> dolly-v2-12bは。Databricks上で訓練された命令追従型(instruction-following)大規模言語モデルです。
Dollyはpythia12-bを基に、InststructGPTの論文にあるタスク（ブレインストーミング、分類、オープン/クローズQ&A、生成、情報抽出、要約）から、Databricksの社員が生成した15000個のコーパスによってfine-tuningして訓練されています。
dolly-v2-12bは最先端のモデルではありません。そして、より最新、あるいは大規模なコーパスによるモデルと競合するような設計ではありません（定量的なベンチマークは現在実施中です）。しかし、ベースとなったモデルの特徴とは異なる、驚くほど質の高い対話を行うことができます。
>
>dollyモデルファミリーは現在も活発に開発が進んでおり、欠点が網羅されている訳ではありませんが、知見の記録と共有のため、既知の制限や誤動作についてここに記載します。
>
>dollyが特に苦手としているのは、
>- 構文が複雑なプロンプト
>- プログラミング(コード作成)
>- 計算・日付と時刻
>- 事実誤認・幻覚
>- 自由回答
>- 特定の長さのリストの列挙
>- 文体の模倣
>- ユーモアのセンス
>
>また、オリジナルのモデル（pythia）と比べて、書式の整った手紙などを作成する機能がないことも分かっています。
>
>すべての言語モデルの例にもれず、dollyはコーパスの特徴と制限がモデルに影響しています。
>- The Pile: GPT-J（EleutherAI）の事前学習コーパスはWeb上から取得されており、多くのWebベースのデータセットと同様不快なコンテンツを含んでいます。
>そのため、明示的に生成するよう求められた際には当然のこと、明示していない場合にも暗黙に偏見、あるいは有害なコンテンツが含まれる場合があります。
>- dollyをチューニングするための訓練データは2023年3月から４月にかけてDatabricksの社員が作成した自然言語の会話であり、QAや要約などで参照する文章にWikipediaのものが含まれています。
>我々の知る限りではわいせつ物や知的財産、個人情報などは含まれていませんが、誤字脱字や事実誤認、ウィキペディアンに見られるバイアスが含まれている可能性があります。
>最後に、このデータセットはDatabricks社員の興味や恣意的な選択を含んでいる可能性があり、全世界の人口を代表するものではありません。
>
>Databricksは、すべての個人と組織の可能性を最大限に引き出せる、有用かつ正直で無害なAI技術を開発するため、継続的な研究活動に取り組んでいます。

# step1 普通に質問する

入力：
>あなたは技術ブログの執筆を支援するアシスタントです。以下の文章を要約してください。

出力：
> dolly-v2-12bは、Databricks上で訓練された命令追従型の大規模言語モデルで、InststructGPTの論文にあるタスクを用いて、Databricks社員が生成したコーパスによってfine-tuningが行われています。最先端のモデルではないものの、質の高い対話が可能です。一方で、構文が複雑なプロンプトやプログラミング、計算・日付と時刻など、苦手な点もあります。Dollyはコーパスの特徴と制限が影響しており、偏見や有害なコンテンツが含まれることもあります。誤字脱字や事実誤認、バイアスを含むデータも存在するため注意が必要です。Databricksは、有用で正直・無害なAI技術開発に向けて継続的な研究を行っています。

確かに原文からは短くなっていますが、若干長く何を伝えたいのかが少し分かりづらいという印象を受けました。

# step2 何を書いてほしいか伝える
どういったプロンプトを利用するかに関わらず、**利用する目的を伝えること**が最も重要です。何のためにタスクを行っているかを明示することで回答も明瞭なものになります。

入力：
>あなたは技術ブログの執筆を支援するアシスタントです。以下の文章を要約し、**dollyを利用する上で意識すべき点を明確にしてください。**

出力：
> dolly-v2-12bはDatabricksで開発された大規模言語モデルで、高品質な対話が可能ですが、最先端のモデルではありません。苦手な点には、複雑な構文、プログラミング、計算・日付と時刻などがあります。また、モデルはコーパスの制限に影響されるため、偏見や有害なコンテンツが含まれることがあります。誤字脱字、事実誤認、バイアスも存在する可能性があり、注意が必要です。Databricksは、有用で正直・無害なAI技術開発に取り組んでいます。

step1よりもまとまった文章になり、さらに書くべきことを伝えたのでその点を中心にした表現にしてもらえました。

# step3 フォーマットを指定する
先のものは文章としてはまとまっているものの、執筆の資料という観点で見るとやや散らかっている印象を受けました。そこでポイントをより明確にするため、長所や短所をそれぞれ列挙してもらえるようにフォーマットを指定します。

ちなみに、フォーマットの指定方法にはfew-shotで例示をいくつか行うなどがありますが、GPT4の場合はsystemの情報を最優先すると分かってきているので、今のところ**例示よりもフォーマットを書いてあげる方が有効**であると筆者は考えています。

https://qiita.com/yu8ikmnbgt6y/items/2ea717d266b98d9b7f9d

入力：
> あなたは技術ブログの執筆を支援するアシスタントです。以下のDatabricksという会社が独自に開発したdolly-v2-12b(dolly)という名前の大規模言語モデルについて説明した文章を要約し、**以下のフォーマットに従って出力してください。**
>
> <フォーマット>
【dollyの概要】
【dollyの長所】
【dollyの短所】
【利用する際に意識する事】
>
> <本文>
> ～

出力：
>  【dollyの概要】
> dolly-v2-12bは、Databricksが開発したInststructGPTをベースにした大規模言語モデルです。多様なタスクに対応可能で、15000個のコーパスでfine-tuningされています。
>
> 【dollyの長所】
> 最先端のモデルではないものの、驚くほど質の高い対話が可能であり、活発に開発が進行中です。
>
>【dollyの短所】
> 構文が複雑なプロンプトやプログラミング、計算・日付と時刻などが苦手です。また、事実誤認や文体の模倣、ユーモアのセンスにも課題があります。
>
>【利用する際に意識する事】
> dollyはコーパスの特徴と制限に影響を受けているため、偏見や有害なコンテンツが生成されることがある点に注意が必要です。また、Databricks社員が作成したデータセットを元にしているため、誤字脱字や事実誤認、バイアスが含>まれている可能性があります。

各項目に相当する部分を分かりやすくまとめてくれました。

記事執筆の際に目次をあらかじめ決めている場合など、かなり有用に感じました。

# おわりに
プロンプトエンジニアリングの手法は大量に出回っており、それゆえ正解は無いように思えます。具体的な手法を参考にするよりも、**知りたいこととやってほしいことの明確化**という目的を意識しながら、少しずつプロンプトを改善するというやり方でも目的は十分に達成できるのでないかと思います。