GPTsを作るためのプロンプトエンジニアリングを徹底解説!

この記事を書いた人
北爪 聖也

株式会社pipon代表取締役。 キャリアはADK(広告代理店)でテレビ広告運用をして残業120時間するが、ネット広告では自分の業務がAIで自動化されていることに驚愕する。そこで、機械学習受託会社に転職し、技術力を身につけた後、piponを創業。現在、製薬業界、大手監査法人、EC業界、様々な業界でAI受託開発事業を運営。

今回はGPTsをつかってどんなことができるのか。また、GPT BuilderBuilderというのが何かというところを説明させていただきます。また、実際に作ったBotのデモも行いながら解説します。

また、このBotを作る上で作成した「プロンプト(指示文)」についても紹介し、プロンプトを作る上での「考え方」についても紹介させていただきます。それでは始めていきます。

GPT Builderとは

GPT Builderは、OpenAIが開発したツールで、個々のニーズに合わせてChatGPTを自然言語でカスタマイズできます。

これにより、誰でも簡単に独自の「GPT」を作成し使用することが可能になります。

例として、OpenAIによる16種類のカスタム「GPT」が公開されております。

  1. DALL·E:あなたのイマジネーションをイメージに変えよう。
  2. Data Analysis:どんなファイルでもドロップしてください。
  3. ChatGPT Classic:追加機能のないGPT-4の最新バージョン
  4. Game Time:どんな年齢のプレイヤーにもボードゲームやカードゲームを素早く説明できます。ゲームを始めましょう!
  5. The Negotiator:あなたが自分自身を主張し、より良い結果を得るのをお手伝いします。優れた交渉人になりましょう。
  6. Creative Writing Coach:あなたの作品を読んで、スキルアップのためのフィードバックをしたいと思っています。
  7. Cosmic Dream:デジタル・ワンダーの空想画家
  8. Tech Support Advisor:プリンタのセットアップからデバイスのトラブルシューティングまで、ステップバイステップでお手伝いします。
  9. Coloring Book Hero:どんなアイデアも、気まぐれな塗り絵に変身させます。
  10. Laundry Buddy:シミ、設定、仕分け、洗濯のことなら何でも聞いてください。
  11. Sous Chef:あなたの好きな食べ物や持っている食材をもとにレシピを教えます。
  12. Sticker Whiz:あなたの夢をステッカーにしてお届けします。
  13. Math Mentor:親御さんがお子さんの数学のお手伝いをするお手伝いをしています。午後9時に幾何学の証明の復習が必要ですか?私はあなたのためにここにいます。
  14. Hot Mods:あなたの画像をワイルドに改造しましょう。画像をアップロードしてみましょう!
  15. Mocktail Mixologist:手持ちの材料でどんなパーティーもモクテルレシピで盛り上げます。
  16. genz 4 meme:私は、あなたが専門用語と最新のミームを理解するのを助けます。

 これによって、誰でも簡単に独自のGPTを作成して使用することが可能になります。つまり、技術の知識がなくても自分専用のAIをデザインできるっていうところがすごいです。

今までであればビジネス側とエンジニア側ってもう完全に分断されていてそれによって起こる様々な疎後が発生したりすることがありましたが、GPTBuilderを使えば、文章で業務を定義することで、Botができて効率化ツールが作れるというものになっているため、本当に革命的なツールとなっております。

上の16個の例として、画像の生成であったりボードゲームの解説であったり、作品を飲んでスキルアップのためのフィードバックをするものであったり、本当に様々なものを提供しているというような形です。

弊社で作成したBotの紹介

実際に作成した弊社のBotが以下の通りです。

弊社でも、営業活動をする課題として、しっかりと個別に最適化された営業メールを作成したいという思いがあります。

 企業様と知り合う中で、その企業様の個別の課題に合わせて営業メールを作成しなければ無視されてしまいますし、そこをカスタマイズするとなると時間がかかってしまいます。そこで、この問題を解決するために、Botにやらせてみようということで作りました。

今回作成するにあたり、会社さんのHPにある「採用ページ」と「IRページ」に課題があるという仮説のもと、これらを読み込んでその情報をもとに営業メールを作成しております。

例として「サンリオ」様に向けた営業メールをBotで作成してみます。

実例:Botで営業メールを作成

いきなり、メール文の作成に入るのではなく、まず作成するにあたって参考にした情報をもとに、企業様側へのAI開発の見込みを列挙し、さらに列挙された中のどこに提案できるかというのを考え、作成してもらいます。

最初に自分で設定した定型文ではじまり、そこからBotが作成した内容となっていきます。

 内容を見てみると、確かにCRM、顧客管理だったり、在庫管理だったり、デジタルマーケティングだったり、ニーズはあると思うのですが、全部に提案するっていうことはできません。そのため、この中からまたこの情報を参考にし、編集をして、実際にメールを送ることにはなるかな思います。

ただ、メールを送る上での下書きには十分になると思います。その下書きを書いてくれるだけでも、かなり工数(採用情報を理解して、IR情報を理解して、その上で課題が何かというのを考える)が削減できるので、このようなBotを作ることで、かなり業務効率化に役立っております。

プログラムを組まず、プロンプトのみでこのようなBotが作れてしまうので、まさに革命的です。

それではこのBotを作成するための手順について解説していきます。

GPT Builderの実行画面

実際にGPT Builderの実行画面に行っていただくと、下のような画面が表示されます。

上の画像の説明にある通り、左側でBotを作成、右側でその検証を見ることができます。挙動がおかしかったりと判断がすぐにできるので修正も行いやすいです。問題がなければ右上の緑のボタンを押すと保存することができます。

左側の「Configure」というものをクリックすると、詳細を記入することができます。

こちらの「Instructions」の枠のところにプロンプトを書き込みます。

次にプロンプトの紹介です。

上の画像のようなプロンプト(指示文)を入れているbotになっています。

まず、「背景」「指示」の2つに分けます。

今回の背景の概要

あなたはAI開発分野の自宅開発業務の営業メール作成ボットで様々な部署でAIを使った業務効率化をするためにあなたの役割としてはIR資料だったり採用情報を読み込んで開発導入の見込みを考えた上で効果的な営業目標を作成することです


背景には、そもそもどういう背景でこのボットを動かしてほしいのかということ、そしてその下には細かい指示(採用資料だったりIR資料を読み込むなど)をしております。

 次に、これを実行するための「指示」をステップに分けて出していきます。

今回の指示
  • ユーザーが入力した企業の採用情報を検索する
  • IR資料を検索する。採用情報とIR資料のリンク先を出力してもらう。
    (※ここは後で自分がリサーチしなくても済むように出力してもらっています。)
  • 採用情報とIR資料の内容に基づいて業務内容を細部に至るまで推測してもらう
  • 推測した上で当該企業に開発を導入できる見込みを考えて出力してもらう
  • 出力形式として採用情報のリンク、IR資料のリンク先だったり当該企業のChadGPTBot導入の見込みをいうのを提示
  • 営業メールを作成
実行にするにあたっての注意点と対策
  • 場合によっては英語で返してしまうことがある。
    →「日本語で出力してください」と指示を出す。
  • 営業メールなのに「素晴らしい会社です。」など褒め言葉を入れてしまう。
    →「企業を褒めないでください」と指示を出す。
  • 営業メールの例を提示する。
    →「##営業メール:(以下の例を参考にしてください。) 営業メールの例:お世話になります。株式会社piponの北爪です。・・・」と具体例を交えて指示を出す。

このように、文章で設定するだけでBotが作れてしまうというところが本当に凄いことです。

実際にこれをシステムとして組もうとすると、googleの検索のAPIをかませて、資料を読み込んでRPAだったり自動でデータを取ってきて、そのデータをもとに文章を引っこ抜くプログラムを書いて解釈する。しかし、このようなChatGPTみたいな文脈が全部理解できる言語解析というのはそれまでなかったため、そもそもの解釈ができませんでした。

ここまで文脈も全部解釈して、アウトプットをこのように出してくれるというのが本当に革命です。それをしかもプログラムで書かないで文章だけで書けてしまうというのが本当に凄いことでございます。

これであれば、プログラム知識のない方でも、自分の業務を定義して背景と指示をきちんと書いていけば、このような業務効率化Botが簡単に作成することができます。

プロンプト作成のテクニック

以下をもとに、解説させていただきます。ChatGPTを使う上でこの記法を守ったほうがChatGPTの出力の精度が上がるよというものです。

プロンプトエンジニアリングの基本

・最新のモデルを使う(GPT3.5ではなく、GPT4など)
・シンプルなプロンプト、少しずつ要素を足していく(下記の補足を参照)
・試行錯誤(上の赤枠注意点のような指示を追加する。)
・プロンプトのバージョン管理(指示が変わると出力も変わる場合があります。)

※補足
 先ほどお見せした、カスタマイズ営業メールのプロンプトはかなり背景も指示も長いものとなっています。しかし、あそこまで長くしてから出力を見ていくと、「どこを消したらアウトプットが変わってくれるか」という判定がしづらくなっていまいます。ですので、まずはシンプルなプロンプトから始めていく必要があります。
 プロンプト(指示文)から採用情報をちゃんと取ってきてくれるのを確認。次にIR情報を取ってきてくれるのを確認。など、一個一個確認していって、シンプルなプロンプトから始めて足していくというような作り方がベストです!

精度をあげるための4つの要素

指示(命令や質問)
文脈(目的、状況、背景、AIの役割、話のテーマ、予備知識)
入力データ(扱ってほしいデータ)
出力形式(出力の条件)

指示について
「採用情報を取ってきてください。」や「IR情報を取ってきてください。」というような指示や命令、質問を出す。

文脈について
 この作る目的であったり背景であったりAIの役割というところを入れます。

知っておこう!ChatGPTの仕組み

 文脈はChatGPTが回答する上であると役に立つ参考情報になります。
ChatGPTのLLMのモデルは入力情報に対して、その回答として次に最もあるであろう単語というのを予測し、それで文章を作っています。なので、背景という情報をきちんと入れることで、次の単語を予測するその確率の精度を上げることができます。だから、文脈コンテキストというのは重要になってきます。

 また、AIの役割では、営業メールの開発Botですということで役割を与えてました。「AI開発分野の住宅開発業務が営業メール作成Botです」という役割を与えることで、目的を与えて必要な知識テーマだったり、知識も必要に応じて与えてあげるということで回答の精度を上げております。

入力データ・出力形式について
 入力データと出力形式入力データは扱って欲しいデータなので、入力データは必要であれば入れることもあります。出力形式として「この形式でほしい」ということも最後のプロンプトの中で指示を出しておくと良いでしょう。なぜなら、きちんと定義することで出力が安定するからです。今回のプロンプトでも「最後に出力形式としてこのように出力してください」ということを全部Botの中で定義しております。

この4つを意識することで、GPTの回答精度が上げていくことができます。

4つの要素の具体例

お題「映画スパイダーマンのレビューを書いてもらいたい」を以下のように分解してみます。

# 命令書: あなたは、プロの映画評論家です。←文脈 

     制約条件と入力データをもとに映画のレビューを出力してください←指示

# 制約条件: 文字数は300字程度
      /小学生にもわかりやすく /重要なキーワードを取り残さない /文章を簡潔に ←出力形式

# 入力データ: 「スパイダーマン:ノー・ウェイ・ホーム」について

# 出力文:

ChatGPTはマークダウン形式に対応しております。ですので、ハッシュタグ(シャープ)を入れてあげることで、読み解きやすくなります。こうすることで、出力形式が安定していきます。

プロンプトを入力する際の注意点

注意1:「あいまい」を避ける

具体的な指示や出力形式

プロンプトエンジニアリングを説明してください。(どのくらい、どこまで説明すれば良いかわからない。)
説明は簡単にして、あまり詳しくしないでください。(簡単の定義をもっと明確に。)

上記を元に修正すると以下のような文にすると良いでしょう。

小学生でも分かるように、プロンプトエンジニアリングを2~3文で説明してください。

バッククォートやコロンで区切る

プロンプトに入力する際に使える記号を紹介いたします。まずは以下のような質問を投げる場合です。

以下の日本語を英語に訳してください。
これはペンです。

これを、以下のような記号を用いるとより、理解しやすくなります。

` ` ` (バッククオート)

” ” “ (ダブルクォーテーション)

< > (小なり大なり)

:  (コロン)

このように命令を出すと良いでしょう。

以下の日本語を英語に訳してください。
“`
これはペンです。
“`

注意2:段階的に考えさせる

一気に複数のタスクを指示してしまうと回答の精度が下がります。

以下の文章を日本語で50字以内に要約してください。
` ` `
“On a bright sunny day, a curious kitten decided to venture out of her comfortable home. As she chased a colorful butterfly across the meadow, she discovered a whole new world, full of adventures and endless possibilities.”
` ` `

上記の例ですと、翻訳と要約という2ステップを一度に指示しております。

ですので、以下のように段階的にする(1文で1つのタスクにする)ことで回答の精度を上げることができます。

1 – 以下のテキストを日本語に翻訳してください。
2 – 翻訳した文章を50字以内に要約してください。
テキスト: 
` ` `
“On a bright sunny day, a curious kitten decided to venture out of her comfortable home. As she chased a colorful butterfly across the meadow, she discovered a whole new world, full of adventures and endless possibilities.”
` ` `

注意点3:「〜しないでください。」を伝えるだけではダメ

先ほど、「企業を褒めないでください。」という命令をだしましたが、その代わりにして欲しいこと、代わりにするべきことを伝えてあげると良いです。

例えば下のやりとりをみてください。

「〜しないでください」と言っているにも関わらず、赤枠「どのような種類の映画が好きですか?」と尋ねてしまっています。

そこで、以下のように「代わりにすべきこと」も命令してあげます。

「申し訳ありませんが、おススメする映画が見つかりませんでした。」という回答を命令してあげることで、プロンプトの回答精度が上がっていきます。

便利な言葉

ChatGPTにプロンプトを考えてもらいたい:
「あなたは優秀なプロンプトエンジニアです。私に継続的に質問をしながら、ChatGPT用のプロンプトを作ってください。」

ChatGPTの回答精度をあげたい:
「あなたは優秀な〇〇です」
ステップバイステップで考えてください。」

特にこの「ステップバイステップで考えてください」と言ってあげることで、推論能力が上がって段階的に考えられるということが発見されています。

その他テクニック集

さまざまな文脈を加えて精度を上げる方法
  • Zero-shot Prompting(ゼロショット): 回答例を与えずいきなり指示する
  • Few-shot Prompting(フューショット): 回答例を与えながら指示する
  • Chain-of-Thought(CoT) Prompting(チェインオブソート): 思考プロセスを含む回答例を与える
  • Zero-shot-CoT Prompting(): 「ステップバイステップで考えよう」を加える
  • Generated Knowledge Prompting(): 回答に必要な知識を与える

それぞれ解説していきます。

Zero-shot Prompting 回答例を与えずいきなり指示する

プロンプト:テキストを中立、否定的、または肯定的に分類してください。
テキスト: 休暇はまずまずでした。
感情:

出力
中立:

といったようなやり方です。しかし、回答例を与えないZero-shot Promptingでは欲しい回答をしてくれないことがあります

プロンプト:以下を適切な日本語に直してください。
` ` `   
縁の下のマッスルマン

出力
縁の下とは、一般的には注目されにくい場所や地位のことを指し、マッスルマンは筋肉男子のことを指します。つまり、「縁の下で黙々と努力を重ねる筋肉男子」という意味になります。

Few-shot Prompting  回答例を与えながら指示する

回答例を与えることで狙い通りの回答をさせる方法(Few-shot Prompting)になります。

プロンプト:
入力:いい加減にホワイト
出力:いい加減にしろ
入力:虫のインフォメーション
出力:虫の知らせ
入力:縁の下のマッスルマン
出力:

出力:縁の下の力持ち

Chain-of-Thought(CoT) Prompting 思考プロセスを含む回答例を与える

Chain-of-Thought(CoT) Prompting(チェインオブソート)とは、「ステップバイステップで考えて」と思考プロセスをGPTにも考えさせることで思考力推論力というのが上がるという結果が出ています。

ChatGPTは推論が苦手!シンプルな指示だけだと推論能力が低い

プロンプト:以下は正しいですか?
` ` `
このグループの奇数を合計すると偶数になります。: 16、11、14、4、8、13、24。

出力:
正しくありません。
与えられた数字の中には奇数があり、それらの合計は奇数になるため、
与えられた文が正しくありません。
16 + 11 + 14 + 4 + 8 + 13 + 24 = 90
90は偶数ではありません。したがって、文は誤っています。

上の例では「90」は「偶数」のはずなのに、偶数でないと言ってしまっております。

ですので、次のように段階的に思考プロセスを含む解答例を与えていきます。

プロンプト:
Q: このグループの奇数を合計すると偶数になります。: 4、8、9、15、12、2、1。
A: 奇数を全て加えると(9, 15, 1)25になります。答えはFalseです。
Q: このグループの奇数を合計すると偶数になります。: 17、10、19、4、8、12、24。
A: 奇数を全て加えると(17, 19)36になります。答えはTrueです。
Q: このグループの奇数を合計すると偶数になります。: 16、11、14、4、8、13、24。
A: 

出力:
奇数を全て加えると(11, 13)24になります。答えはTrueです。

Zero-shot CoT Prompting 「ステップバイステップで考えよう」を加える

「ステップバイステップで考えよう」を加えるだけで推論能力アップ!

プロンプト:以下は正しいですか?ステップバイステップで考えてください。
このグループの奇数を合計すると偶数になります。: 16、11、14、4、8、13、24。

出力:
Step 1: グループ内の奇数を特定する。
             16、11、14、4、8、13、24のうち奇数は11と13の2つです。
Step 2: 奇数を合計する。
             11 + 13 = 24
Step 3: 合計値が偶数かどうかを確認する。
             24は偶数です。
したがって、このグループの奇数を合計すると偶数になります。この主張は正しいと言えます。

ただ、この「段階的に思考プロセスを含む回答例を与える」というのは大変かつ、書く側も面倒です。なので、それを「ステップバイステップで考えてください」と言うとこの思考プロセスを含んで考えてくれる。そして回答の精度が上がるということが確認されております。

なので、この「ステップバイステップで考えよう」というのが便利で言葉魔法の言葉になりますね。

質疑応答

Q1.IR情報採用情報の読み込み先ページの文字数は最大どのくらいまで読み込んでくれるのでしょうか

1回実行して大体3分以内くらいに出力がなされます。この制限の中で、採用情報とIR情報を読み込んでいるというような形になるので、最初の1ページぐらいを読み込んでいるんだというふうに思います。1回の検索時間というのが長すぎると、タイムアウトしてしまいます。このタイムアウトという時間の制限があるので、あまりにいろんな情報を読み込ませすぎると、途中で切れてしまうというところがあるので、そこが制限の目安となっております。

Q2.GPTsはプロンプト投入をショートカットできるソリューションという理解であってますか。

 確かに、今回用意したようなプロンプトを始めに書き、最後に「検索したい会社名はサンリオです。」とChatGPTのWeb画面上で文章を叩けば、同じ結果になると思います。
 ただ、たくさんの企業に対して営業メールを作成したいという時に、毎回毎回これをコピペしてここの文章を変えるのが結構面倒くさいです。
 なので、このようなチャットBotとして定義しておくと、非常に便利です。チャットBotを押すだけですでに、プロンプトがセットされ、さらにチャットBotが出てきて企業名を入れるというだけで同じ結果を得ることができます。たしかに、「GPTプロンプトの投入のショートカットができる」というのはある意味でショートカットできるということになります。

おわりに

今回は、プロンプトエンジニアリングガイドをかなり守った上で、できるだけ守るようにして、このカスタマイズメールのプロンプトというものも作成をしました。そうすれば、今回お見せしたような、期待通りに作成することができます。しかも、ノーコードでできる、文章だけでこれができるということが本当に革命的だと思います。会社としても、このGPTsをどんどん作っていき、今後も「こういうこともできます。ああいうこともできます」ということを、どんどん発表していきたいと思います。

※作成したBotになります。

今後の発表もぜひ楽しみにお待ちいただけたらなというふうに思っています。