ChatGPT

ChatGPT プロンプトエンジニアリング

このセクションでは、ChatGPTの最新のプロンプトエンジニアリング技術について、ヒント、アプリケーション、制限、論文、参考資料を追加しています。

⚠️

このセクションは、現在大幅に開発中です。

トピック:


ChatGPTの紹介

ChatGPTは、会話形式でのやりとりができる新しいモデルであり、OpenAIによってトレーニングされています。このモデルは、プロンプトに従って指示を実行し、対話の文脈に適切な応答を提供するようにトレーニングされています。ChatGPTは、質問に答えたり、レシピの提案、特定のスタイルで歌詞を書いたり、コードを生成したりするのに役立ちます。

ChatGPTは、人間のフィードバックからの強化学習(RLHF)を使用してトレーニングされています。このモデルは、以前のGPTのイテレーションよりもはるかに能力がある(そして有害で不正確な出力を減らすためにトレーニングされている)が、それでも制限があります。いくつかの具体的な例を使って、これらの能力と制限について説明しましょう。

ChatGPTの研究プレビューはこちらで利用できますが、以下の例ではOpenAI PlaygroundのChatモードを使用します。


会話タスクのレビュー

以前のガイドの1つで、会話の能力や役割のプロンプトについて少し説明しました。特定のスタイル、意図、行動、アイデンティティでLLMに会話を行うように指示する方法について説明しました。

ここでは、より技術的で科学的な応答を生成できる会話システムを作成した基本的な例を再度みてみましょう。

プロンプト:

以下はAI研究アシスタントとの会話です。アシスタントのトーンは技術的で科学的なものとします。

人間:こんにちは、あなたは誰ですか?
AI:ご挨拶です!私はAIの研究助手です。今日はどのようなご用件でしょうか?
人間: ブラックホールの生成について教えてください。
AI:

上記の例から、2つの重要なコンポーネントがわかります。

  • チャットボットの意図または説明
  • 応答時に使用するスタイルやトーンを指示するアイデンティティ

上記の単純な例は、text-davinci-003を使用するテキスト補完APIでうまく機能します。最近、OpenAIはChatGPT API (opens in a new tab)を発表しました。より強力で安価なgpt-3.5-turboモデルは、このタイプの機能(チャット補完)に特化して開発されたもので、非チャットの使用ケースでもOpenAIの最高峰のモデルとして推奨されています。ChatGPT APIを使用することの利点は、コストの削減(90%)と効率性です。

Snap Inc.やInstacartなどの大手企業は、パーソナライズされた推奨事項から自由なショッピング目標まで、ChatGPTを利用した会話機能を既に自社製品に組み込んでいます。


ChatGPTとの会話

マルチターンの会話

ChatGPTの機能を示すために、上記のチャットボットアシスタントの例を使用して、その結果について説明します。text-davinci-003に比べて、ChatGPTのパワーを支えるgpt-3.5-turboモデルは、入力としてチャット形式を使用します。モデルは、入力として一連のメッセージを期待し、それらを使用して応答を生成します。

入力:

システム:あなたはAIの研究助手です。あなたは技術的で科学的なトーンで話します。
ユーザ:こんにちは、あなたは誰ですか?
アシスタント:ご挨拶です!私はAIの研究助手です。今日はどのようなご用件でしょうか?
ユーザ:ブラックホールの生成について教えてください。

出力:

アシスタント:もちろんです!ブラックホールとは、巨大な星が燃料を使い果たし、自らの重力で崩壊したときにできるものです。この崩壊によって、星は信じられないほど密度が高くなり、光さえも逃れられないほど強い重力場ができます。この帰らざる地点が事象の地平線と呼ばれるものです。事象の地平線を超えた星は、ブラックホールとみなされます。

上記の例では、入力と出力を単純化しましたが、ChatGPTチャット補完APIは、メッセージを特定の形式で入力する必要があります。以下に、OpenAI PlaygroundのChat Modeを使用してこの例がどのように見えるかのスナップショットを追加しました:

CHATGPT1

この例でより正式なAPIコールは、以下の例のようなものになります:

import openai
 
openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
        {"role": "system", "content": "あなたはAIの研究助手です。あなたは技術的で科学的なトーンで話します。"},
        {"role": "user", "content": "こんにちは、あなたは誰ですか?"},
        {"role": "assistant", "content": "ご挨拶です!私はAIの研究助手です。今日はどのようなご用件でしょうか?"},
        {"role": "user", "content": "ブラックホールの生成について教えてください。"}
    ]
)

実際には、ChatGPTとの開発者のやりとりは、Chat Markup Language (opens in a new tab)(短縮形ChatML)を介して行われることが期待されています。

単一ターンタスク

チャット形式は、マルチターンの会話を可能にするだけでなく、text-davinci-003で使用したのと似た単一ターンのタスクもサポートしています。これは、オリジナルのGPTモデルで実証したのと同様のタスクをChatGPTを使用して実行できることを意味します。たとえば、ChatGPTを使用して次の質問応答タスクを実行してみましょう。

Input:

ユーザ: 以下の文脈に基づき、質問に答えてください。回答は短く、簡潔に答えてください。答えに自信がない場合は、「回答できません。」と答えてください。

文脈: テプリズマブのルーツは、ニュージャージー州のオーソ・ファーマシューティカルという製薬会社です。そこで科学者たちは、OKT3と名付けられたこの抗体の初期バージョンを作製した。この分子はもともとマウスから採取したもので、T細胞の表面に結合し、その殺傷能力を制限することができた。1986年には、腎臓移植後の臓器拒絶反応を防ぐ目的で承認され、ヒトへの使用が許可された最初の治療用抗体となりました。

質問:  OKT3はもともと何から調達されたのですか?

回答:

アウトプット:

アシスタント: マウス。

このようなタスクをChatGPTを使用して実行する方法をより良く説明するために、私は USERASSISTANT ラベルを追加しています。プレイグラウンドを使用した例は次のとおりです。

CHATGPTCLASSIC

より正式には、このAPI呼び出しです(リクエストのメッセージ要素のみを含めました)。

CONTENT = """以下の文脈に基づき、質問に答えてください。回答は短く、簡潔に答えてください。答えに自信がない場合は、 \"回答できません。\" と答えてください。
 
Context: テプリズマブのルーツは、ニュージャージー州のオーソ・ファーマシューティカルという製薬会社です。そこで科学者たちは、OKT3と名付けられたこの抗体の初期バージョンを作製した。この分子はもともとマウスから採取したもので、T細胞の表面に結合し、その殺傷能力を制限することができた。1986年には、腎臓移植後の臓器拒絶反応を防ぐ目的で承認され、ヒトへの使用が許可された最初の治療用抗体となりました。
 
Question: OKT3はもともと何から調達されたのですか?
 
Answer:
"""
 
response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "user", "content": CONTENT},
    ],
    temperature=0,
)

チャットモデルの指示

公式のOpenAIドキュメントによると、gpt-3.5-turboモデルのスナップショットも利用可能になります。たとえば、3月1日のスナップショット gpt-3.5-turbo-0301 にアクセスできます。これにより、開発者は特定のモデルバージョンを選択できます。これはまた、モデルの指示のためのベストプラクティスがバージョンごとに変更される可能性があることを意味します。

gpt-3.5-turbo-0301の現在の推奨事項は、利用可能な system メッセージではなく、user メッセージに指示を追加することです。


References