このシリーズではChatGPTを中心とした最新の大規模言語モデル(LLM)に関する情報をまとめています。最新AI技術を使用した「ChatGPT」をはじめとした、自然言語処理技術の概要や活用方法について紹介しておりますので、ぜひ最後までご覧ください。

※大規模言語モデルは技術の進歩がとても速い分野となりますので、最新の情報もこちらからご確認ください。

このシリーズは、chatgpt-prompt-engineering-for-developersの学習メモです。

今回の内容

・プロンプトとは

・プロンプトを学べるサイト

・プロンプトエンジニアリングのベストプラクティス8箇条

プロンプトエンジニアリングとは

プロンプトの重要性

ChatGPTは、人工知能による会話型のツールで、ユーザーからの質問やリクエストに対して、適切な答えや情報を提供します。プロンプトとは、ユーザーがChatGPTに対して送信する質問や命令のことを指します。

プロンプトの重要性は、以下の点のように説明することができます。

  1. 情報の精度: プロンプトが明確で具体的であるほど、ChatGPTはより正確な答えや情報を提供できます。曖昧なプロンプトは、意図しない回答や不正確な情報を引き起こす可能性があります。
  2. コミュニケーションの効率: わかりやすく簡潔なプロンプトを使うことで、ChatGPTが迅速に理解し、正確な情報や回答を提供できます。これにより、効率的なコミュニケーションが可能になります。
  3. 目的の達成: プロンプトは、ChatGPTとの対話で目的を達成するための鍵となります。具体的で明確なプロンプトを使用することで、ユーザーは求めている情報やサポートを得ることができます。

例えば、宿題の手伝いを求める際、「数学の問題が解けない」と書くよりも、「2次方程式x^2 – 3x + 2 = 0の解を求めてください」と書く方が、ChatGPTはより適切なサポートができます。

要するに、プロンプトは、ChatGPTとのコミュニケーションにおいて非常に重要な役割を果たします。明確で具体的なプロンプトを使用することで、より正確で効率的な結果を得ることができます

プロンプトエンジニアリングとは

プロンプトエンジニアリングとは、ChatGPTやその他の人工知能(AI)モデルに対して、効果的なプロンプトを作成・最適化するプロセスのことです。これにより、AIがより正確で適切な回答を提供できるようになります。

プロンプトエンジニアリングでは、以下の要素を考慮します。

  1. 明確性: プロンプトが明確であるほど、AIは正確な情報を提供しやすくなります。曖昧さを避け、具体的な質問やリクエストをすることが重要です。
  2. 簡潔性: 長すぎるプロンプトはAIにとって理解しにくい場合があります。簡潔でわかりやすい表現を使用することで、AIが迅速に理解し、正確な回答を提供できます。
  3. コンテキストの提供: プロンプトに必要な背景情報や文脈を含めることで、AIはより適切な回答を生成しやすくなります。ただし、無関係な情報は省くことが望ましいです。
  4. 複数のプロンプトの使用: 一度にすべての情報を提供する代わりに、いくつかの短いプロンプトを使って情報を段階的に提供することで、AIが順序立てて回答を生成できるようになります。
  5. 反復と改善: プロンプトの効果を評価し、必要に応じて修正していくことで、より良い結果を得られます。プロンプトエンジニアリングは試行錯誤のプロセスであり、繰り返し改善することが重要です。

プロンプトエンジニアリングは、AIとのコミュニケーションを向上させ、ユーザーが求める情報やサポートを得られるようにするための重要なスキルです。効果的なプロンプトを作成することで、AIの性能を最大限に引き出すことができます。

プロンプトを学べるサイト

プロンプトを効率的に学べるサイトを以下に紹介します。

OpenAI API を使用したプロンプトエンジニアリングのベストプラクティス
https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-openai-api

Prompt Engineering Guide
https://www.promptingguide.ai

この記事では「Prompt Engineering Guide」の内容を元に、プロンプトの基礎をご紹介します。

chatgpt-prompt-engineering-for-developersとは

chatgpt-prompt-engineering-for-developersでは、スタンフォード大学の教授であるアンドリュー博士とオープンAIのフルフォード氏が共同でプロンプトエンジニアリングについての講座を提供しています。この講座は完全に無料で、受講者は登録することで利用できます。講座の内容は1時間半の講義から構成されており、受講者は実際に手を動かしながら、プロンプトエンジニアリングのテクニックや手法について学ぶことができます。
なお、この講座の対象モデルは「gpt-3.5-turbo」となります。
詳細は以下のリンクからご確認ください。

ChatGPT Prompt Engineering for Developers
https://www.deeplearning.ai/short-courses/

実装の準備

この記事ではGoogle colab環境で実装します。

必要なライブラリをあらかじめインストールしておきます。

!pip install openai


※OPENAI API KEY(従量課金)が必要となります。

import openai
openai.api_key  = 'OPENAI_API_KEYをここに入力'

必要な関数を定義しておきます。

def get_completion(prompt, model="gpt-3.5-turbo"):
    messages = [{"role": "user", "content": prompt}]
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=0, # this is the degree of randomness of the model's output
    )
    return response.choices[0].message["content"]

プロンプトの基本

プロンプトエンジニアリングの基本的な原則は次の二つです。

  1. 第一の原則として、明瞭かつ具体的な指示を出すこと。
  2. 第二の原則は、モデルに十分な思考時間を与えること。

それぞれについて説明します。

プロンプトの基本① ~明瞭かつ具体的な指示を出すこと~

モデルに対する指示は、あなたが何を求めているのかを明確かつ具体的に示すべきです。このアプローチにより、モデルは所望の出力を目指してガイドされ、無関連なもしくは誤った応答が返される可能性が低減します。ここで注意するべき点は、「明確なプロンプト」=「短いプロンプト」ではないということです。実際には、長いプロンプトがモデルに対してより多くの明確さと文脈を提供し、結果としてより詳細で関連性のある出力を得ることにつながることが多いです。

明確かつ具体的な指示を記述するための戦略として、以下の4つを紹介します。

1.デリミタの使用

デリミタは、入力の特定のセクションを明確に区別するための有効なツールとなることができます。具体的には、プロンプトの最初に指示を置き、指示と文脈を区切るために「###」や「”””」などを使用することです。

質問や命令を文章の最初に書き、その後に「###」や「”””」を使って、質問や命令と背景情報を分けましょう。
以下に良い例と悪い例を示します。

#良くない例

以下の文章を、最も重要な点を箇条書きにして要約する。

ChatGPTをうまく使いこなすには・・・(入力したい文章)
#良い例

以下の文章を、最も重要な点を箇条書きにして要約する。

Text: """
ChatGPTをうまく使いこなすには・・・(入力したい文章)
"""

要約する文章が別の文字列として示されているため、入力として与えられた文章とその要約の対象となる文章を明確に区別することができるようになります。

2.構造化された出力を求める

モデルの出力を解析するのを容易にするために、HTMLやJSONのような構造化された出力を求めると役立つことがあります。
例として、以下のようなプロンプトを与えます。

prompt = f"""三つの架空の書籍タイトルとそれらの著者とジャンルをリストにして生成してください。
それらを次のキーを持つJSONフォーマットで提供してください: 
book ID、title、author、genre
"""

実行結果:

[
  {
    "book ID": 1,
    "title": "The Whispering Shadows",
    "author": "Elena Sinclair",
    "genre": "Mystery"
  },
  {
    "book ID": 2,
    "title": "The Starborn Prophecy",
    "author": "Jonathan Harper",
    "genre": "Fantasy"
  },
  {
    "book ID": 3,
    "title": "The Quantum Paradox",
    "author": "Sophia Roberts",
    "genre": "Science Fiction"
  }
]

JSON形式の三つの架空の書籍タイトルを持っています。こうすることで、実際にPythonでこれを辞書やリストに読み込むことができるということです。

3.モデルに条件が満たされているかをチェックさせる

実施したいタスクに対して、条件が満たさているかをモデルにチェックさせることができます。
例として、以下のようなプロンプトを与えます

#良い例

もし、その中に手順の文章が含まれている場合は、手順を書き出してください。
もしテキストに手順が含まれていない場合は、単に「手順が提供されていません」と書いてください。」

これにより、文章中に「手順」が含まれているを判断させ、含まれている場合には手順を出力することができますが、手順が含まれていない場合には”手順が提供されていません”と出力させることができます。

4.フューショットプロンプト

モデルに実際に行ってほしいタスクを行う前に、そのタスクの例をいくつか提供するというものです。

以下の対応するテキストからキーワードを抽出する。
テキスト1:Stripeは、Web開発者がWebサイトやモバイルアプリケーションに決済処理を組み込むために使用できるAPIを提供している。
キーワード1:Stripe、決済処理、API、Webデベロッパー、Webサイト、モバイルアプリケーション
##
テキスト2:OpenAIは、テキストの理解と生成に非常に優れた最先端の言語モデルを訓練しています。私たちのAPIは、これらのモデルへのアクセスを提供し、言語処理を伴うほぼすべてのタスクを解決するために使用することができます。
キーワード2:OpenAI, 言語モデル, テキスト処理, API
##
テキスト3:ChatGPTを使用している企業は・・・(入力したい文章)
キーワード 3:

プロンプトの基本② ~モデルに考える時間を与えること~

複雑なタスクをモデルに短時間や少数の単語だけで実行させようとすると、しばしば誤った推測をする可能性があります。これは、人間も同様の状況では間違いを犯すことがあります。例えば、複雑な数学の問題を解かせる際に、すぐに答えを出すよう求めると、その人もおそらく誤りを出す確率が高くなってしまいます。そこで、このような状況では、モデルに問題をより深く考えるよう指示することが可能です。これは、そのタスクに対してモデルがより多くの計算的な努力を費やしているということを示しています。

1.タスクを完了するために必要なステップを明示すること

プロンプトにはタスクを完了するために必要なステップを明示することです。例として、「三重引用符で区切られた以下のテキストを一文で要約、その要約をフランス語に翻訳する、フランス語の要約内の各名前をリストアップする、「フランス語の要約」、「名前の数」を含むJSONオブジェクトを出力する、そしてそれぞれの答えを改行で区切るようにします。そして、テキストを追加します。」というようにステップを明示します。

1 - 3 つの \ バッククォートで区切られた次のテキストを 1 つの文に要約します。
2 - 概要をフランス語に翻訳します。
3 - フランス語の概要にそれぞれの名前をリストします。
4 - 次の \ キーを含む json オブジェクトを出力します: french_summary、num_names。
回答は改行で区切ってください。

このケースでは以下のようなプロンプトでも対応することができます。

あなたのタスクは、以下のアクションを実行することです: 
1 - <>で区切られた次の文章を要約する。
  <> で区切られた以下の文章を1文にまとめる。
2 - 要約をフランス語に翻訳してください。
3 - フランス語の要約にある各名前をリストアップする。
4 - 以下のキーを含むjsonオブジェクトを出力する。
  french_summary、num_namesをキーとするjsonオブジェクトを出力する。

以下のフォーマットを使用します:
テキスト <text to summarize>
要約します: <summary>
翻訳 <要約の翻訳
名前 <イタリア語の要約の名前のリスト>。
出力JSON:<要約とnum_namesを含むjson>。

2.モデルが独自の解決策を作り出す前に結論に飛びつくよう指示する

モデルに明示的に結論に至る前に独自の解決策を理解するよう指示すると、より良い結果を得ることがあります。これは、モデルに答えが正しいかどうかを判断する前に、実際に物事を解決する時間を与えるという、私たちが話し合っていたのと同じアイデアです。
このプロンプトでは、モデルに生徒の解答が正しいかどうかを判断するように依頼しています。

生徒の解答が正しいかどうかを判断する。

質問です:
私は太陽光発電施設を建設しています。
 が必要です。
- 土地代は100ドル/平方フィート
- ソーラーパネルは250ドル/平方フィートで購入できる。
- メンテナンスの契約をしたのですが、その費用は年間10万円です。
は一律10万円で、さらに10ドル/平方?
フィート
運用開始1年目の総費用はいくらか 
を平方フィート数の関数として計算してください。

生徒の解答
設置場所の広さを平方フィートでxとする。
コストです:
1. 土地代:100x
2. ソーラーパネル代:250倍
3. メンテナンス費用:100,000 + 100x
合計金額:100倍+250倍+100,000倍+100倍=450倍+100,000倍

まず、この数学の問題があり、次に生徒の解答があります。そして、生徒の解答は実際には間違っています。なぜなら、彼らはメンテナンスコストを10万プラス100xと計算していますが、実際にはこれは10xであるべきだからです。それは、1平方フィート当たり10ドルだけだからです。ここでのxは、彼らが定義した絶縁体の大きさを平方フィートで表したものです。したがって、これは実際には360xプラス100,000であるべきで、450xではありません。

しかし、このプロンプトを与えるとモデルは生徒の解答が正しいと言います。

実行結果:

運営初年度の総コストを計算する生徒の解答は正しいです。彼らは、土地代、ソーラーパネル代、メンテナンス費といった、関係するコストを正確に特定しました。彼らはこれらのコストを設備のサイズ (x) で表現し、これらの個々のコストを合計することで総コストを正確に計算しました。

運用初年度の総コストは平方フィート (x) の関数として次のように計算されます。

総費用 = 100x + 250x + 100,000 + 100x = 450x + 100,000

したがって、生徒の解答は正しいです。

これを修正するために、モデルにまず独自の解答を作り出すよう指示し、それからその解答を生徒の解答と比較するように指示することができます。

まず、問題に対するあなた自身の解答を作り出します。それから、あなたの解答を生徒の解答と比較し、生徒の解答が正しいかどうかを評価します。あなた自身が問題を解くまで、生徒の解答が正しいかどうかを判断しないでください。本当に明確に、あなた自身が問題を解くことを確認してください。そして、私たちは同じトリックを使用して、以下のフォーマットを使用するように指示しています。それで、フォーマットは問題、生徒の解答、実際の解答、そして解答が一致するかどうか、はいまたはいいえ、そして生徒の評価、正しいまたは間違いとなります。

このように、モデルに自身で計算を行わせ、タスクをステップに分割してモデルに考えるための時間を与えると、より正確なレスポンスを得ることができます。

3.モデルの制限

言語モデルは、訓練過程を通じて莫大な量の知識と接触しますが、接触した情報全てを完全に記憶する訳ではありません。そのため、モデルがどこまでの知識を有しているのかという範囲を正確に把握することは難しいのです。この現象が、モデルが複雑すぎる問いに対して答える際、現実的ではないものの一見妥当に聞こえる結論を導き出す可能性をもたらします。そして、このような形で生み出された虚偽の情報を私たちは「幻覚」と呼びます。

Boy社の「エアログライド ウルトラスリム スマートハブラシ」について教えてください。

この操作を行うと、モデルは存在しない製品に対しても驚くほど現実的な説明を提供します。これが危険な理由は、その説明が非常にリアルに感じられるためです。したがって、自身のアプリケーションを開発する際には、この教科書で解説するテクニックのいくつかを使用し、このような現象を避けることを推奨します。モデルにテキストに基づく回答を生成させる場合、まずはモデルにテキストから関連する引用を探すように指示し、その後、それらの引用を基に質問に答えるように命じる方法があります。回答がソースドキュメントに遡及可能となるようにすることは、しばしばこれらの幻覚を軽減するのに役立ちます。

より良いプロンプトを見つけるために

大規模な言語モデルを用いたアプリケーションの開発において、初めから完璧なプロンプトを見つけることはできません。適切なプロセスを設けてプロンプトを繰り返し改善することで、目標とするタスクに最適なものにたどり着くことが可能です。

開発の初期段階では、達成したいタスクに対する具体的なアイデアを持ち、それを明確なプロンプトとして初めて記述します。時にはシステムに考える時間を与えることが適切な場合もあります。その後、結果を分析します。初回が成功しなかったとしても、例えば、指示が明確でなかった理由やアルゴリズムに十分な思考時間が提供されなかった原因を特定し、それらを改善することでアイデアとプロンプトを洗練します。このループを何度も繰り返し、最終的にはアプリケーションに最適なプロンプトを作り出すことができます。

このような考え方から、「30の完璧なプロンプト」のようなネット記事にあまり信用を置いていません。全ての状況に対して最適なプロンプトが存在するわけではないからです。むしろ、特定のアプリケーションに適合する良質なプロンプトを創出するためのプロセスを持つことが重要だといえます。

パターン1

以下にプロンプトの例を示します。この例ではとある製品の要約をします。

マーケティングチームを助けて、技術仕様シートに基づいた製品の小売ウェブサイトの説明を作成するのがあなたの任務です。

トリプルバッククォートで区切られた技術仕様に基づいて製品説明を書いてください。

技術仕様:

```
概要

美しいミッドセンチュリー風のオフィス家具の一部で、ファイリングキャビネット、デスク、書棚、会議用テーブルなどが含まれています。
シェルの色とベースの仕上げにはいくつかのオプションがあります。
プラスチック製の背もたれと前部張り地(SWC-100)または全面張り地(SWC-110)で、10種類の布地と6種類の革オプションがあります。
ベースの仕上げオプションは、ステンレススチール、マットブラック、光沢白、またはクロームです。
アームレストの有無を選ぶことができます。
家庭用またはビジネス環境に適しています。
契約使用に適格です。
製造

5つの車輪が付いたプラスチックコーティングのアルミニウムベース。
易上昇/下降アクションのための空気調整式の椅子。
寸法

幅 53 CM | 20.87インチ
奥行き 51 CM | 20.08インチ
高さ 80 CM | 31.50インチ
シートの高さ 44 CM | 17.32インチ
シートの深さ 41 CM | 16.14インチ
オプション

ソフトフロアまたはハードフロアのキャスターオプション。
シートのフォーム密度は2種類から選べます:
中密度(1.8 lb/ft3)または高密度(2.8 lb/ft3)
アームレスまたは8位置PUアームレスト
素材
シェルベースグライダー

改良ナイロンPA6/PA66コーティング付きの鋳造アルミニウム。
シェルの厚さ:10 mm。
シート
HD36フォーム
原産国

イタリア
```

実行結果:

私たちの素晴らしいミッドセンチュリー風のオフィスチェアをご紹介します。これは、家庭やビジネス環境に最適な追加アイテムです。ファイリングキャビネット、デスク、書棚、会議テーブルなど、美しいオフィス家具の一部で、シェルカラーやベース仕上げのオプションが数種類あり、あなたのスタイルに合わせて選ぶことができます。プラスチック製の背面とフロントの張り地(SWC-100)または全張り地(SWC-110)で、10種類の生地と6種類の革のオプションから選べます。

このチェアは、5輪のプラスチックコートされたアルミニウムベースで作られており、気圧式のチェア調節機能を備えているため、簡単に上げ下げが可能です。アームレストの有無を選ぶことができ、契約使用にも対応しています。ベースの仕上げのオプションはステンレススチール、マットブラック、グロスホワイト、クロームから選べます。

幅53cm、奥行き51cm、高さ80cm、座面の高さ44cm、座面の奥行き41cmという寸法で、最高の快適さを追求した設計となっています。また、ソフトまたはハードフロア用のキャスターオプションと、座面の泡の密度を中密度(1.8ポンド/立方フィート)または高密度(2.8ポンド/立方フィート)の2つから選ぶことができます。アームレストはアームレスまたは8ポジションPUオプションのどちらかを選ぶことができます。

このチェアの製造に使用される材料は最高品質のものばかりです。シェルベースのグライダーは、厚さ10mmのアルミ鋳物に変更可能なナイロンPA6/PA66コーティングが施されています。座面はHD36フォームで作られており、最大の快適さと耐久性を確保しています。

このチェアはイタリア製で、スタイルと機能性を完璧に融合したものです。今日、私たちのミッドセンチュリー風のオフィスチェアであなたのワークスペースをアップグレードしましょう!

製品説明を書いてくださいという指示では長すぎる結果が得られることがわかりました。

パターン2

次に「最大でも50語以内で使用してください。」という指示を追加します。

あなたの任務は、技術的な仕様書に基づいた製品の小売ウェブサイトの説明を作成するためにマーケティングチームを支援することです。

トリプルバッククォートで区切られた技術仕様に基づいて製品説明を書いてください。

最大でも50語以内で使用してください。

技術仕様:

```
概要

美しいミッドセンチュリー風のオフィス家具の一部で、ファイリングキャビネット、デスク、書棚、会議用テーブルなどが含まれています。
シェルの色とベースの仕上げにはいくつかのオプションがあります。
プラスチック製の背もたれと前部張り地(SWC-100)または全面張り地(SWC-110)で、10種類の布地と6種類の革オプションがあります。
ベースの仕上げオプションは、ステンレススチール、マットブラック、光沢白、またはクロームです。
アームレストの有無を選ぶことができます。
家庭用またはビジネス環境に適しています。
契約使用に適格です。
製造

5つの車輪が付いたプラスチックコーティングのアルミニウムベース。
易上昇/下降アクションのための空気調整式の椅子。
寸法

幅 53 CM | 20.87インチ
奥行き 51 CM | 20.08インチ
高さ 80 CM | 31.50インチ
シートの高さ 44 CM | 17.32インチ
シートの深さ 41 CM | 16.14インチ
オプション

ソフトフロアまたはハードフロアのキャスターオプション。
シートのフォーム密度は2種類から選べます:
中密度(1.8 lb/ft3)または高密度(2.8 lb/ft3)
アームレスまたは8位置PUアームレスト
素材
シェルベースグライダー

改良ナイロンPA6/PA66コーティング付きの鋳造アルミニウム。
シェルの厚さ:10 mm。
シート
HD36フォーム
原産国

イタリア
```

実行結果:

ミッドセンチュリー風のオフィスチェアをご紹介します。
これは、家庭用とビジネス環境の両方に完璧な椅子です。
シェルカラーやベースの仕上げのバリエーションが多く、ステンレススチールやマットブラックを含む多彩なオプションがあります。アームレストの有無も選べます。
5輪のプラスチックコートされたアルミニウムベースと気圧調整機能があり、椅子の高さを簡単に上下調節することができます。
イタリア製で、鋳造アルミニウムのシェルとHD36フォームの座面を採用しています。

「最大でも50語以内で使用してください。」という指示を追加することで端的にまとめることができました。単語数に厳密に従うわけではないため、60や65語などの文章を出力する場合もあります。

また、単語数の指定ではなく「最大でも3文を使用して」のように指示することもできます。

パターン3

このウェブサイトは消費者に直接販売するのではなく、実際には家具小売業者に家具を販売することを目指していると判断するかもしれません。彼らは椅子の技術的な詳細や材料にもっと興味があるでしょう。その場合、技術的な詳細についてもっと正確にするために、以下のようなプロンプトにすることも考えられます。

以下の例では「説明文は家具販売業者向けであるため、技術的な性質を持つべきであり、製品がどのような素材から作られているかに焦点を当てるべきです。」という指示を追加しています。

あなたのタスクは、マーケティングチームが技術仕様書に基づいて製品のリテールウェブサイト用の説明文を作成するのを助けることです。

トリプルバックティックで区切られた技術仕様書の情報に基づいて製品説明を作成してください。

説明文は家具販売業者向けであるため、技術的な性質を持つべきであり、製品がどのような素材から作られているかに焦点を当てるべきです。

最大で50語を使用してください。


技術仕様:

```
概要

美しいミッドセンチュリー風のオフィス家具の一部で、ファイリングキャビネット、デスク、書棚、会議用テーブルなどが含まれています。
シェルの色とベースの仕上げにはいくつかのオプションがあります。
プラスチック製の背もたれと前部張り地(SWC-100)または全面張り地(SWC-110)で、10種類の布地と6種類の革オプションがあります。
ベースの仕上げオプションは、ステンレススチール、マットブラック、光沢白、またはクロームです。
アームレストの有無を選ぶことができます。
家庭用またはビジネス環境に適しています。
契約使用に適格です。
製造

5つの車輪が付いたプラスチックコーティングのアルミニウムベース。
易上昇/下降アクションのための空気調整式の椅子。
寸法

幅 53 CM | 20.87インチ
奥行き 51 CM | 20.08インチ
高さ 80 CM | 31.50インチ
シートの高さ 44 CM | 17.32インチ
シートの深さ 41 CM | 16.14インチ
オプション

ソフトフロアまたはハードフロアのキャスターオプション。
シートのフォーム密度は2種類から選べます:
中密度(1.8 lb/ft3)または高密度(2.8 lb/ft3)
アームレスまたは8位置PUアームレスト
素材
シェルベースグライダー

改良ナイロンPA6/PA66コーティング付きの鋳造アルミニウム。
シェルの厚さ:10 mm。
シート
HD36フォーム
原産国

イタリア
```

実行結果:

私たちのミッドセンチュリー風のオフィスチェアをご紹介します。自宅やビジネスの現場に最適です。
さまざまなシェルの色とベースの仕上がり、ステンレススチールやマットブラックを含む、アームレストの有無を選べるこのチェア。
5つの車輪がついたプラスチックコーティングのアルミニウムベースと、空気圧調整機能が付いたチェアは、昇降が容易です。
イタリア製で、キャストアルミニウムのシェルとHD36フォームの座面を採用しています。

アルミニウムベースのコーティングや空気圧の椅子、高品質の材料などが説明されています。プロンプトを変更することで、特定のキャラクターや特定の特性により焦点を当てることができることがわかりました。

パターン4

説明の最後に製品IDも含めたい場合について検討します。

ここでは「説明文の最後には、技術仕様書のすべての7文字の製品IDを含めてください。」という指示を追加します。

あなたのタスクは、マーケティングチームが技術仕様書に基づいて製品のリテールウェブサイト用の説明文を作成するのを助けることです。

トリプルバックティックで区切られた技術仕様書の情報に基づいて製品説明を作成してください。

説明文は家具販売業者向けであるため、技術的な性質を持つべきであり、製品がどのような素材から作られているかに焦点を当てるべきです。

説明文の最後には、技術仕様書のすべての7文字の製品IDを含めてください。

最大で50語を使用してください。


技術仕様:

```
概要

美しいミッドセンチュリー風のオフィス家具の一部で、ファイリングキャビネット、デスク、書棚、会議用テーブルなどが含まれています。
シェルの色とベースの仕上げにはいくつかのオプションがあります。
プラスチック製の背もたれと前部張り地(SWC-100)または全面張り地(SWC-110)で、10種類の布地と6種類の革オプションがあります。
ベースの仕上げオプションは、ステンレススチール、マットブラック、光沢白、またはクロームです。
アームレストの有無を選ぶことができます。
家庭用またはビジネス環境に適しています。
契約使用に適格です。
製造

5つの車輪が付いたプラスチックコーティングのアルミニウムベース。
易上昇/下降アクションのための空気調整式の椅子。
寸法

幅 53 CM | 20.87インチ
奥行き 51 CM | 20.08インチ
高さ 80 CM | 31.50インチ
シートの高さ 44 CM | 17.32インチ
シートの深さ 41 CM | 16.14インチ
オプション

ソフトフロアまたはハードフロアのキャスターオプション。
シートのフォーム密度は2種類から選べます:
中密度(1.8 lb/ft3)または高密度(2.8 lb/ft3)
アームレスまたは8位置PUアームレスト
素材
シェルベースグライダー

改良ナイロンPA6/PA66コーティング付きの鋳造アルミニウム。
シェルの厚さ:10 mm。
シート
HD36フォーム
原産国

イタリア
```

実行結果:

私たちのミッドセンチュリー風のオフィスチェアをご紹介します。
自宅やビジネスの現場に最適です。
多彩なシェルの色とベースの仕上げ、プラスチックまたはフル張り地の選択肢があり、このチェアはスタイリッシュで快適です。
5つの車輪がついたプラスチックコーティングのアルミニウムベースと、空気圧調整機能が付いたチェアは、実用性も抜群です。
アームレストの有無が選べ、コントラクト使用にも適しています。
製品ID: SWC-100, SWC-110。

シェルの色、プラスチックコーティング、アルミニウムベース、実用的、いくつかのオプション、2つの製品IDについて述べていることがわかりました。

より良いプロンプトを見つけるためのベストプラクティス

より良いプロンプトを見つけるためには、明確かつ具体的であり、必要に応じてモデルに考える時間を与えることです。それらを考慮に入れながら、プロンプト作成に取り組みます。まずは何が起こるか観察しながら、プロンプトを何度も練り直し、求める結果に近づける努力が大切です。多くのプログラムにおいて成功したプロンプトは、このような反復的なプロセスを経ることで生まれます。

ここではこれまでいくつか紹介した内容に、さらにいくつかの指示を追加します。

あなたの課題は、技術仕様書に基づいて製品の説明を作成し、マーケティングチームが小売ウェブサイト用の説明文を作成するのを支援することです。

三重引用符で区切られた技術仕様に基づいて製品の説明文を書いてください。

説明は家具小売業者向けであるため、技術的な性質を持ち、製品の材料に焦点を当てるべきです。

説明の最後には、技術仕様の7文字の製品IDを全て含めてください。

説明の後には、製品の寸法を示す表を含めてください。表には二つの列が必要です。最初の列には寸法の名前を、二つ目の列にはインチのみの測定値を含めてください。

表のタイトルは'Product Dimensions'とします。

すべてをウェブサイトで使用できるHTML形式で書いてください。説明は<div>要素内に配置してください。

技術仕様:

```
概要

美しいミッドセンチュリー風のオフィス家具の一部で、ファイリングキャビネット、デスク、書棚、会議用テーブルなどが含まれています。
シェルの色とベースの仕上げにはいくつかのオプションがあります。
プラスチック製の背もたれと前部張り地(SWC-100)または全面張り地(SWC-110)で、10種類の布地と6種類の革オプションがあります。
ベースの仕上げオプションは、ステンレススチール、マットブラック、光沢白、またはクロームです。
アームレストの有無を選ぶことができます。
家庭用またはビジネス環境に適しています。
契約使用に適格です。
製造

5つの車輪が付いたプラスチックコーティングのアルミニウムベース。
易上昇/下降アクションのための空気調整式の椅子。
寸法

幅 53 CM | 20.87インチ
奥行き 51 CM | 20.08インチ
高さ 80 CM | 31.50インチ
シートの高さ 44 CM | 17.32インチ
シートの深さ 41 CM | 16.14インチ
オプション

ソフトフロアまたはハードフロアのキャスターオプション。
シートのフォーム密度は2種類から選べます:
中密度(1.8 lb/ft3)または高密度(2.8 lb/ft3)
アームレスまたは8位置PUアームレスト
素材
シェルベースグライダー

改良ナイロンPA6/PA66コーティング付きの鋳造アルミニウム。
シェルの厚さ:10 mm。
シート
HD36フォーム
原産国

イタリア
```

実行結果:


<div>
<h2>ミッドセンチュリー風オフィスチェア</h2>
<p>私たちが提供するミッドセンチュリー風のオフィスチェアをご紹介します。こちらの商品は、書類整理棚、デスク、本棚、会議テーブルなど、美しいオフィス家具の一部です。この椅子は、シェルの色やベースの仕上げなど、いくつかのオプションから選べ、お好みに合わせてカスタマイズできます。プラスチック製の背面と前面の張地、または全体的な張地のいずれかを選ぶことができ、10種類の布地と6種類の革のオプションがあります。ベースの仕上げは、ステンレススチール、マットブラック、グロスホワイト、クロームから選べます。この椅子は、アームレストの有無を選べるため、家庭用でもビジネスシーンでも使用できます。さらに、契約利用に適しており、その耐久性と長寿命が保証されています。</p>
<p>この椅子の構造は、5輪のプラスチックコーティングされたアルミベースと、簡単に上下させることができる空気圧調節機能が特徴です。また、ソフトフロア用キャスターまたはハードフロア用キャスターを選ぶことができ、座面のフォーム密度も中密度(1.8 lb/ft3)と高密度(2.8 lb/ft3)の2種類から選べます。アームレストもカスタマイズ可能で、アームレスタイプか8ポジションPUアームレストから選べます。</p>
<p>椅子の製造に使用されている素材は、最高品質のものばかりです。シェルベースのスライダーは、改良型ナイロンPA6/PA66コーティングを施した鋳造アルミ製で、シェルの厚さは10 mmです。座面はHD36フォーム製で、最大の快適さとサポートを保証します。</p>
<p>イタリア製のこのミッドセンチュリー風オフィスチェアは、どんなオフィス空間にもぴったりのアイテムです。今すぐご注文ください!</p>
<h3>商品ID:</h3>
<ul>
<li>SWC-100</li>
<li>SWC-110</li>
</ul>
</div>
<table>
  <caption>製品寸法</caption>
  <tr>
    <th>寸法</th>
    <th>寸法 (インチ)</th>
  </tr>
  <tr>
    <td>幅</td>
    <td>20.87"</td>
  </tr>
  <tr>
    <td>奥行き</td>
    <td>20.08"</td>
  </tr>
  <tr>
    <td>高さ</td>
    <td>31.50"</td>
  </tr>
  <tr>
    <td>座面の高さ</td>
    <td>17.32"</td>
  </tr>
  <tr>
    <td>座面の奥行き</td>
    <td>16.14"</td>
  </tr>
</table>

この章のまとめ

プロンプトエンジニアとしての重要な点は、必ずしも完全なプロンプトを持つことではなく、自身のアプリケーションに適したプロンプトを開発するための適切なプロセスを維持することにあります。

より進化したアプリケーションにおいては、数十、あるいは数百のファクトシートのリストを保有し、プロンプトの開発を反復的に行い、多くのケースについて評価を行うことがあります。しかし、アプリケーションの初期開発段階では、一つの具体例に基づいて開発を行うことが一般的です。

とはいえ、成熟したアプリケーションの場合、様々なプロンプトを多数のファクトシートでテストするなど、多様なケースについてプロンプトの評価を行うことが有益となる場合も存在します。

要約

ChatGPTによる文章要約の実装例を紹介します。

実装例1

最初に例として、商品レビューの要約のタスクを扱います。

あなたの仕事は、eコマースサイトの商品レビューの短い要約を生成することです。

下のレビューを30語以内で要約してください。

レビュー:「娘の誕生日にパンダのぬいぐるみを買いました。彼女はとても気に入って、どこへ行くにも持って行っています。とても柔らかくて超可愛いですし、顔も親しみやすい表情をしています。ただ、私が払った金額に対しては少し小さいかなと感じました。同じ値段でもっと大きいものが他にあるかもしれません。予定より一日早く到着したので、私自身が娘に渡す前に遊ぶことができました。」

実行結果:

娘が大好きな、柔らかくて可愛いパンダのぬいぐるみ。
ただ、価格に対しては少し小さい。早く到着した。

今回の例では30語以内と指定しましたが、文字数や文の数を制御して、この要約の長さを調整することもできます。

実装例2

例えば、配送部門にフィードバックを提供したい場合は、プロンプトを修正してその目的を反映させることもできます。

あなたの任務は、eコマースサイトからの製品レビューの短い要約を作成し、出荷部門へのフィードバックを提供することです。

以下に区切られたレビューを要約し、最大30語で、製品の発送と配送に言及した部分に焦点を当ててください。

レビュー:「娘の誕生日にパンダのぬいぐるみを買いました。彼女はとても気に入って、どこへ行くにも持って行っています。とても柔らかくて超可愛いですし、顔も親しみやすい表情をしています。ただ、私が払った金額に対しては少し小さいかなと感じました。同じ値段でもっと大きいものが他にあるかもしれません。予定より一日早く到着したので、私自身が娘に渡す前に遊ぶことができました。」

実行結果:

パンダのぬいぐるみが予想より一日早く到着したが、顧客は支払った価格に対して少し小さいと感じた。

配送部門にフィードバックを提供するために、配送と商品の配達に言及する側面に焦点を当てるように変更すると、予想より1日早く到着したという事実に焦点を当てた要約が生成されます。

実装例3

あなたの任務は、eコマースサイトからの製品レビューの短い要約を作成し、製品の価格を決定する責任を持つ価格設定部門へのフィードバックを提供することです。

以下に区切られたレビューを要約し、最大30語で、価格と知覚価値に関連する側面に焦点を当ててください。

レビュー:「娘の誕生日にパンダのぬいぐるみを買いました。彼女はとても気に入って、どこへ行くにも持って行っています。とても柔らかくて超可愛いですし、顔も親しみやすい表情をしています。ただ、私が払った金額に対しては少し小さいかなと感じました。同じ値段でもっと大きいものが他にあるかもしれません。予定より一日早く到着したので、私自身が娘に渡す前に遊ぶことができました。」

実行結果:

そのパンダのぬいぐるみは、柔らかくて可愛く、受け取った人に愛されていますが、そのサイズに対して価格が高すぎるかもしれません。

実装例4

要約の方法によっては、要約するのではなく情報を抽出するように求めることもできます。以下は、配送部門にフィードバックを提供するために関連する情報を抽出するように依頼されたプロンプトの例です。

あなたの任務は、電子商取引サイトの製品レビューから関連する情報を抽出し、配送部門へのフィードバックを提供することです。

以下に示すトリプルクォートで区切られたレビューから、配送と配達に関連する情報を抽出してください。単語数は30語に制限してください。

レビュー:「娘の誕生日にパンダのぬいぐるみを買いました。彼女はとても気に入って、どこへ行くにも持って行っています。とても柔らかくて超可愛いですし、顔も親しみやすい表情をしています。ただ、私が払った金額に対しては少し小さいかなと感じました。同じ値段でもっと大きいものが他にあるかもしれません。予定より一日早く到着したので、私自身が娘に渡す前に遊ぶことができました。」

実行結果:

製品は予想より1日早く到着しました。

複数文章の要約

複数のレビューを要約して読みやすくする方法を紹介します。

レビュー1:
私の娘の誕生日にパンダのぬいぐるみを買いました。
彼女はそれをとても気に入り、どこへでも持って行っています。
ぬいぐるみは柔らかく、とてもかわいらしいです。
その顔は親しみやすい表情をしています。
しかし、私が支払った価格に対して少し小さいと思います。
同じ価格でもっと大きいものが他にあるかもしれません。
商品は予定より1日早く到着し、私自身がそれを娘に渡す前に遊ぶことができました。

レビュー2:
寝室用の素敵なランプが必要だったので、このランプを選びました。
これは追加の収納スペースを持ち、価格もそれほど高くありませんでした。
商品は早く到着しました - 2日で届きました。
ランプの引き紐が輸送中に壊れましたが、会社はすぐに新しいものを送ってくれました。それも数日で到着しました。組み立ても簡単でした。部品が欠けていたので、サポートに連絡したところ、すぐに欠品部品を送ってくれました。顧客と製品を大切にする素晴らしい会社のようです。

レビュー3:
私の歯科衛生士が電動歯ブラシを勧めたので、この歯ブラシを購入しました。
バッテリー寿命はかなり長いように思えます。
最初の充電後、バッテリーを調整するために初週間充電器を差し込んだままにしましたが、その後は充電器を抜いて、同じ充電で毎日2回ブラッシングを続けています。しかし、歯ブラシの頭部が小さすぎます。
赤ちゃん用の歯ブラシよりも大きいものを見たことがあります。
頭部が大きくて、違う長さのブラシで歯間をよりよく掃除できるようになれば良いのですが、この製品ではそうはなっていません。
全体的にこの製品が50ドル前後で買えれば良い取引だと思います。メーカーの交換用ヘッドはかなり高価ですが、より手頃な価格のジェネリック製品を購入することができます。
この歯ブラシは、毎日歯医者に行ったような気分にさせてくれます。
私の歯はキラキラと清潔感があります!

レビュー4:
なぜか(それを価格操作と呼ぶ)11月には17ピースシステムが季節のセールで約49ドルで売られていましたが、12月の第2週になると同じシステムの価格が70-89ドルの間に上がってしまいました。
そして、11ピースシステムも早い時期のセール価格の29ドルから10ドルほど値上がりしました。
見た目はまあまあですが、基部、つまりブレードが固定される部分の作りが数年前のものと比べて良くないように見えます。
しかし、私はそれを非常にソフトに扱うつもりです(例えば、豆や氷、米などの非常に硬いものをブレンダーで先に砕き、それを希望のサービングサイズに細かくしてからホイップブレードを使ってさらに粉状にし、スムージーを作るときは最初にクロスカットブレードを使ってからフラットブレードを使います)。
スムージーを作る際の特別なヒントは、使用する果物や野菜を細かく切って冷凍すること(スピナッチを使う場合は、スピナッチを軽く煮てから冷凍し、シャーベットを作る場合は小さめから中程度の食品プロセッサーを使用する)これにより、スムージーを作る際にたくさんの氷を加える必要がなくなります。
約1年後、モーターが変な音を出し始めました。カスタマーサービスに連絡したのですが、保証期間がすでに切れていたため、新しいものを買うしかありませんでした。
FYI:この種の製品の全体的な品質は下がってきており、ブランド認知度と消費者のロイヤリティに頼って販売を維持しようとしています。
それは約2日で届きました。

実装例

まず、レビュー1を先程の商品レビューに設定し、ほかのレビューをリストに入れます。そして、レビューをループさせて、プロンプトを表示し、最大20語で要約するように依頼します。それから、レスポンスを取得して出力します。

for i in range(len(reviews)):
    prompt = f"""
    Your task is to generate a short summary of a product \ 
    review from an ecommerce site. 

    Summarize the review below, delimited by triple \
    backticks in at most 20 words. 

    Review: ```{reviews[i]}```
    """

    response = get_completion(prompt)
    print(i, response, "\n")

実行結果:

0 娘が愛する柔らかくて可愛いパンダのぬいぐるみ。
ただし、価格に対して少し小さい。早めに届きました。

1 手頃な価格のランプで、収納スペースもあり、発送も早く、カスタマーサービスも優秀です。
組み立ても簡単で、不足していたパーツもすぐに交換してくれました。

2 バッテリーの寿命が長く、歯ブラシの頭が小さいけど、きれいに掃除することができます。
$50前後で購入すると、お得です。

3 この商品は11月に$49でセールをしていたが、12月には$70-$89に値上がりしました。
ベースは前のエディションほど良い見た目ではありませんが、レビュアーはそれを大切に扱うつもりです。
スムージーを作る際の特別なコツは、果物や野菜を事前に冷凍することです。
1年経つとモーターから変な音が出てきましたが、保証期間は既に過ぎていました。
全体的な品質は低下しています。

数百のレビューがあるような場合でも、このようにして多数のレビューの要約を作成することができます。

推測

プロンプトを工夫することで、テキストの感情(ポジティブまたはネガティブ)を抽出やラベルや名前の抽出などのタスクも行うことができます。
従来の機械学習の手法でこれらのタスクを実行するためには、ラベルのデータセットを収集し、モデルを訓練し、推論する必要がありました。こうした方法は効果的であることが証明されていますが、プロセス全体は非常に手間がかかります。

大規模言語モデルを活用すると、多様なタスクに対して、専用のプロンプトを書くだけで迅速に結果を生成することができます。様々なタスクに対応する複数のモデルを個別に訓練し、それぞれを展開するのではなく、一つの大規模言語モデルで複数のタスクを対応可能になります。

実装例1

テキストの感情(ポジティブまたはネガティブ)を抽出の実装例を示します。レビューの感情を教えてほしい場合、通常の区切り文字とレビューテキストなどを使って、「以下の製品レビューの感情は何ですか?」というプロンプトを与えます。

以下の商品レビューの感情は何ですか、それは三重のバッククォートで区切られています。

レビューテキスト:私は自分のベッドルームに良いランプが必要だったのですが、このランプは追加の収納があり、価格も高すぎないという特徴がありました。
速く手に入れることができました。
輸送中にランプの紐が壊れてしまったのですが、会社は喜んで新しいものを送ってくれました。
数日以内に到着しました。
組み立ても簡単でした。
部品が欠けていたので、サポートに連絡をしたところ、彼らはすぐに欠品していたパーツを送ってくれました!
Luminaは、自社の顧客と商品を大切にする素晴らしい会社だと私には思えます。

実行結果:

商品レビューの感情はポジティブです。

正しく感情(ポジティブまたはネガティブ)を抽出ができました。

実装例2

このプロンプトに追加の指示を加えることで、簡潔にポジティブまたはネガティブの回答を得ることができます。

以下の商品レビューの感情は何ですか。それは三重のバッククォートで区切られています。

あなたの答えは一言で、「ポジティブ」または「ネガティブ」をお答えください。

レビューテキスト:私は自分のベッドルームに良いランプが必要だったのですが、このランプは追加の収納があり、価格も高すぎないという特徴がありました。
速く手に入れることができました。
輸送中にランプの紐が壊れてしまったのですが、会社は喜んで新しいものを送ってくれました。
数日以内に到着しました。
組み立ても簡単でした。
部品が欠けていたので、サポートに連絡をしたところ、彼らはすぐに欠品していたパーツを送ってくれました!
Luminaは、自社の顧客と商品を大切にする素晴らしい会社だと私には思えます。

実行結果:

ポジティブ

実装例3

リストには5つ以下の項目を含めてくださいという指示を出すこともできます。

以下のレビューの筆者が表現している感情のリストを特定してください。
リストには最大で五つの項目を含めてください。
あなたの答えは、カンマで区切った小文字の単語のリストとしてフォーマットしてください。

レビューテキスト:私は自分のベッドルームに良いランプが必要だったのですが、このランプは追加の収納があり、価格も高すぎないという特徴がありました。
速く手に入れることができました。
輸送中にランプの紐が壊れてしまったのですが、会社は喜んで新しいものを送ってくれました。
数日以内に到着しました。
組み立ても簡単でした。
部品が欠けていたので、サポートに連絡をしたところ、彼らはすぐに欠品していたパーツを送ってくれました!
Luminaは、自社の顧客と商品を大切にする素晴らしい会社だと私には思えます。

実行結果:

うれしい、満足している、感謝している、感動している、満たされている

テキストから特定の要素を抽出するのに有効となります。

実装例4

「以下のレビューの作者は怒っていますか?」というプロンプトを追加することで顧客の反応を確認することできます。

以下のレビューの筆者は怒りを表現していますか?
レビューは三重のバッククォートで区切られています。
あなたの答えは、はいまたはいいえとしてください。

レビューテキスト:私は自分のベッドルームに良いランプが必要だったのですが、このランプは追加の収納があり、価格も高すぎないという特徴がありました。
速く手に入れることができました。
輸送中にランプの紐が壊れてしまったのですが、会社は喜んで新しいものを送ってくれました。
数日以内に到着しました。
組み立ても簡単でした。
部品が欠けていたので、サポートに連絡をしたところ、彼らはすぐに欠品していたパーツを送ってくれました!
Luminaは、自社の顧客と商品を大切にする素晴らしい会社だと私には思えます。

実行結果:

怒っていない

従来の教師あり学習では、これらの分類器をすべて構築することは非常に困難です。大規模言語モデルを活用することで、こうした判定も容易に行うことができます。

情報抽出

テキストから特定の情報を抽出することができます。

実装例1

以下の例では、項目(商品の購入品目と商品を製造した会社の名前)を特定するように指示しています。

レビューテキストから以下の項目を特定してください:

レビュアーが購入したアイテム
アイテムを製造した会社
レビューはトリプルバッククォートで区切られています。
あなたの回答をJSONオブジェクトとしてフォーマットし、
"アイテム"と"ブランド"をキーとして使用してください。
情報が存在しない場合は、値として"不明"を使用してください。
あなたの回答はできるだけ短くしてください。

レビューテキスト:私は自分のベッドルームに良いランプが必要だったのですが、このランプは追加の収納があり、価格も高すぎないという特徴がありました。
速く手に入れることができました。
輸送中にランプの紐が壊れてしまったのですが、会社は喜んで新しいものを送ってくれました。
数日以内に到着しました。
組み立ても簡単でした。
部品が欠けていたので、サポートに連絡をしたところ、彼らはすぐに欠品していたパーツを送ってくれました!
Luminaは、自社の顧客と商品を大切にする素晴らしい会社だと私には思えます。

実行結果:

{
"アイテム": "ランプ",
"ブランド": "Lumina"
}

「Item」はランプ、「Brand」はLuminaであると表示されます。この出力をPythonの辞書に簡単に読み込んで、追加の処理を行うこともできます。

実装例2

すべての情報を同時に抽出するために単一のプロンプトを書くこともできます。

例えば、「以下の項目を特定し、感情を抽出し、レビュアーが怒りを表現しているかどうか、購入した商品、製造会社を特定してください」と指示します。


以下のレビューテキストから次の項目を特定します:

感情 (ポジティブまたはネガティブ)
レビューアーは怒りを表していますか? (真または偽)
レビューアーが購入したアイテム
そのアイテムを製造した会社
レビューは三重バッククォートで区切られています。
あなたのレスポンスを "Sentiment", "Anger", "Item", "Brand" をキーとするJSONオブジェクトとしてフォーマットしてください。
情報が存在しない場合は、値として "unknown" を使用してください。
レスポンスはできるだけ短くしてください。
Anger の値はブール値としてフォーマットしてください。

レビューテキスト::私は自分のベッドルームに良いランプが必要だったのですが、このランプは追加の収納があり、価格も高すぎないという特徴がありました。
速く手に入れることができました。
輸送中にランプの紐が壊れてしまったのですが、会社は喜んで新しいものを送ってくれました。
数日以内に到着しました。
組み立ても簡単でした。
部品が欠けていたので、サポートに連絡をしたところ、彼らはすぐに欠品していたパーツを送ってくれました!
Luminaは、自社の顧客と商品を大切にする素晴らしい会社だと私には思えます。

実行結果:

{
"Sentiment": "ポジティブ",
"Anger": false,
"Item": "追加ストレージ付きのランプ",
"Brand": "Lumina"
}

感情がポジティブで、怒りがあり、引用符のないfalseが出力されます。これは、ブール値として出力するように指示したためです。

実装例3

長いテキストが与えられた場合、そのテキストは何についてのものなのか、どのようなトピックが含まれているのかを推定することができます。

以下のテキストで話されている5つのトピックを特定します。各項目は1つまたは2つの言葉で表現してください。項目はカンマで区切ってリストとして答えます。

テキストのサンプル:最近政府が実施した調査で、公共部門の従業員に所属部署に対する満足度を評価してもらったところ、NASAが最も人気のある部署であり、満足度の評価は95%であったという結果が明らかになりました。
NASAの従業員、ジョン・スミスはこの調査結果について「NASAがトップに出たことには驚かない。
素晴らしい人々とともに働くことができ、驚くべき機会があります。
私は、このような革新的な組織の一部であることを誇りに思っています」とコメントしました。
この結果は、NASAの管理チームにも歓迎され、ディレクターのトム・ジョンソンは「私たちの従業員がNASAでの仕事に満足していると聞いてとても嬉しい。
私たちのチームは才能があり、献身的に働き、目標を達成するために絶えず努力しています。
その努力が実りを結んでいるのを見るのは素晴らしいことです」と述べました。
また、この調査では、社会保障局が最も満足度の低い部署であり、従業員の45%しか自分の仕事に満足していないという結果も明らかになりました。
政府は調査で従業員から提出された懸念に対処し、すべての部署での仕事の満足度を改善するための作業を進めると約束しました。

実行結果:

政府の調査、仕事の満足度、NASA、社会保障局、従業員の懸念

テキストで議論されている5つのトピックを特定するように求めることができました。体的には、トピックのリストがかなりうまく抽出されていることがわかります。

実装例4

topic_list = [
"nasa", "地方政府", "エンジニアリング",
"従業員の満足度", "連邦政府"
]

story = """
テキストのサンプル:最近政府が実施した調査で、公共部門の従業員に所属部署に対する満足度を評価してもらったところ、NASAが最も人気のある部署であり、満足度の評価は95%であったという結果が明らかになりました。
NASAの従業員、ジョン・スミスはこの調査結果について「NASAがトップに出たことには驚かない。
素晴らしい人々とともに働くことができ、驚くべき機会があります。
私は、このような革新的な組織の一部であることを誇りに思っています」とコメントしました。
この結果は、NASAの管理チームにも歓迎され、ディレクターのトム・ジョンソンは「私たちの従業員がNASAでの仕事に満足していると聞いてとても嬉しい。
私たちのチームは才能があり、献身的に働き、目標を達成するために絶えず努力しています。
その努力が実りを結んでいるのを見るのは素晴らしいことです」と述べました。
また、この調査では、社会保障局が最も満足度の低い部署であり、従業員の45%しか自分の仕事に満足していないという結果も明らかになりました。
政府は調査で従業員から提出された懸念に対処し、すべての部署での仕事の満足度を改善するための作業を進めると約束しました。
"""

prompt = f"""
以下のテキストが含まれているかどうか、以下のトピックリストの各項目を判断してください。該当するテキストはトリプルバックティックで区切られています。

各トピックに対するあなたの答えを、0または1のリストとして提供してください。
トピックリスト: {", ".join(topic_list)}

Text sample: '''{story}'''
"""
response = get_completion(prompt)
print(response)

まとめ

最後までご覧いただきありがとうございました。