アイキャッチ
AIチャットエージェントをつくるというのがテーマなので、
「the collaboration between a black and white tuxedo cat and an AI agent in a watercolor style.」
というプロンプトでDALL-Eにお願いし、Canvaで文字を入れました。
Amazonにおける本の紹介
生成AIへの指示を理論的アプローチで解説。プロンプトエンジニアリングの基礎からChatGPTパラメータ、Azure OpenAI活用まで詳解。多様な応用への命令方法の工夫も。
amazon.co.jp
感想
ChatGPTや画像生成AIを使っているけれど、狙った通りの出力が返ってこない…
プロンプトの書き方を一度勉強したいなと思って読んでみました。
まだプロンプトエンジニアリングについての書籍は少ないので、本書は貴重です。
タイトルに「プログラミング知識ゼロでもわかる」とあり、実際にプログラミングは必要ないのですが、ある程度のIT知識があったほうが読みやすいと思います。
便利テクニック集というよりは、「ある程度自分でも使っているが、もっと出力をコントロールしたい」という人が、プロンプト技術を身につけるのに適している本です。逆に、「ChatGPTとか触ってみたいんだけど、なにからやったらいいかわからないから使い方を知りたい」という人にはもっと他に合っている本があると思います。
タイトルにはないのですが、最終目標が「Azure OpenAIでチャットエージェントを作る」なので、「プロンプトを使ってチャットアプリを作りたい」という人にはとてもマッチすると思います。
わたしの場合は、普段のChatGPTとのやりとりはもちろんなのですが、GPTs(OpenAIのChatGPTを使った簡易チャットボットを作れるサービス)を作っていて、思った通りの出力にならないことが多く、改善したいなと思っていたので、この本の内容はすごく得るものが多かったです。
最新のプロンプトエンジニアリングの技術の紹介もありますし、安全なチャットボット作成のために押さえているべきポイントやテキストによる画像生成AIの追加指示プロンプトなど、内容が盛りだくさんでした。
指示の出し方のバリエーションが広がったので、読んでよかったです!
Azure OpenAIはまだ使ったことがなかったのですが、この本を参考にわたしもチャットアプリを作ってみようと思います。
勉強メモ
1章 生成AIのチャット機能とプレイグラウンド
1-1 開発者向けプレイグラウンド
OpenAIの開発者プレイグラウンドは、生成AIを利用する開発者のために提供されるサービスであり、使用するAIモデルやパラメーターを細かく設定し、AIとのやり取りを試すことができます。プロンプトエンジニアリングを行う際には、このプレイグラウンドが非常に役立ちます。プロンプトエンジニアリングとは、AIに送る質問文(プロンプト)を作成する作業であり、どのように質問するかによって、AIからの返答が大きく変わるため重要です。OpenAIプレイグラウンドを利用することで、プロンプトエンジニアリングの実践的な学習が可能となり、AIの応答をより精密にコントロールできるようになります。また、プレイグラウンドはOpenAI APIの一部として提供されており、APIを通じてアプリケーション開発でAIを使うことも可能です。アカウント登録は無料で行え、初期の利用には無料枠が設定されています。
1-2 プレイグラウンドを利用する
生成AIのプレイグラウンドは、開発者がAIと対話し、プロンプトの効果を試すための環境を提供します。ここでは、プロンプトを送信し、AIモデルからの応答を得ることができます。プレイグラウンドには主に「Chat」、「Complete」、「Edit」の3つのモードがあります。
Chatモードではユーザー(USER)とAIアシスタント(ASSISTANT)の間でやり取りが行われ、特別な指示を与えるSYSTEMロールが存在します。SYSTEMロールを使用することで、AIに特定の振る舞いを指示できます。
Azure OpenAIとGoogle Vertexは、OpenAIの基盤モデルを利用した別のプラットフォームで、プロンプトの試行やアプリケーション生成に使用できます。どのプラットフォームを利用するかは、使用する基盤モデルによって異なる応答や挙動が得られるため、選択は重要です。
大規模言語モデル(LLM)の「基盤モデル」は、膨大なデータセットから学習されたAIモデルで、プロンプトに基づいてテキスト生成やその他のタスクを実行する能力を持っています。GPT-3.5とGPT-4はOpenAI/Azure系の主要な基盤モデルで広範な応用があり、GoogleのPaLM 2と開発中のGeminiモデルはVertex AIで利用され、AmazonのTitanはAmazon Bedrockで使えるモデルで、Llama 2はMetaが提供するオープンソースの基盤モデルです。
プロンプトエンジニアリングは「正解がない」分野であり、実践と経験を通じて学ぶ心構えが求められます。
2章 プロンプトデザインの基本
2-1 プロンプトの基本
プロンプトはAIに送るメッセージであり、AIはこれに基づいてテキストの続きを生成します。OpenAI APIのプレイグラウンドで「Complete」モードや「Chat」モードを使用し、質問を入力してSubmitすることで、AIからの応答を得られます。
プロンプトを記述する際は、内容を明確にし、改行を入れて送信することが推奨され、これはAIが文の区切りを認識するのに役立ちます。
「プロンプトデザイン」とは、どのように書けば望む結果を得られるかを考え、文章を工夫していくプロセスを指します。
また、プロンプトの基本は、AIに対して何かを「お願いする」ような文章をかくことです。これにより期待する応答を引き出すことができます。
2-2 AIに指示を出そう
AIに対して命令形式のプロンプトを出す方法は、「〇〇しなさい」と明確な指示を与えることです。この方法では、AIに具体的な作業を行わせることができます。例えば、「『今日の打ち合わせについて至急ご連絡ください』を英訳してください」という命令は、AIに特定のテキストを英語に翻訳するよう求めるものです。命令には「指示」と「対象」が必要で、「〇〇に対して、XXをしなさい」という形式で、AIに対して何をどうするかを明確に伝えます。この形式を用いることで、AIは送られたプロンプトに対してやるべき具体的な処理を実行します。命令は、AIに特定の動作をさせる際に有効で、対象となるテキストやデータに対して、翻訳や要約などの具体的な操作を指示する際に使います。
2-3 さまざまな指示を考えよう
チャットAIへの指示の与え方には、プレフィックスチューニングとサフィックスチューニングという二つの手法があります。
プレフィックスチューニングでは、AIモデルに対する指示を入力テキストの先頭に配置することで、AIの振る舞いを調整します。これにより、AIは指定されたタスクに適した振る舞いを行うようになります。
Chatにおける「SYSTEM」ロールは、最初に実行される指示を標準機能として提供し、あらかじめ定義されたプロンプトによってチャットの振る舞いをカスタマイズするためのものです。
一方で、サフィックスチューニングでは、入力テキストの末尾に指示を追加します。これにより、AIは一般的な文章を生成した後、サフィックスで指定されたタスクに関連する情報や指示に従って出力を調整します。
これらの手法を利用することで、AIによる文章生成、問題作成、コード生成など、さまざまなタスクを効果的に実行させることが可能になります。
また、複雑なプロンプト作成技術は、カスタマイズしたAIチャットアプリの開発において重要で、技術を身につけることで特定の用途に特化したアプリケーションを作成することが可能になります。
3章 効果的に応答を得るには?
3-1 サンプルで学習させよう
プロンプトエンジニアリングでは、AIに特定のフォーマットや応答スタイルを学習させるためにサンプル(例)を提供する方法が有効です。
たとえば、特定の人物についての説明をフォーマットに沿って出力させたい場合、具体的なサンプルを示すことで、AIはそのフォーマットを学習し、同様のスタイルで応答を生成するようになります。これをワンショット学習と呼び、単一の例示だけでAIが望ましい形式で応答するようになります。
さらに、複数の例を用意することで、AIの応答の正確性を高めることができ、これは複数ショット学習と呼ばれます。これにより、AIには「このように応答すること」が期待される形式がより明確に伝わり、特定の応答形式や内容に沿った結果を得ることが可能になります。
3-2 的確な応答を得るためのプロンプト
的確な応答を得るためのプロンプトの書き方では、情報の整理や指示の明確化が重要です。
長いコンテンツから必要な情報を抽出する場合、プレフィックスやサフィックスチューニングを適切に使用し、質問とコンテンツを分けて整理することで、AIによる情報の抽出精度を向上させることができます。
また、特定の情報や回答形式を求める場合は、具体的なサンプルを示すことでAIに学習させ、望む応答を得やすくすることが効果的です。
さらに、質問文からのみ情報を取り出すように指示することで、不必要な情報の追加を防ぎ、より的確な回答を導き出すことができます。
CoT(Chain of Thought)は、AIが複雑な問題を解く際に、推論の過程をステップバイステップで展開する技術です。この方法では、AIが問題を解析し、その解決に至るまでの論理的な思考過程を明示的に示します。
Zero-shot CoTは、特定の事前学習を行わずに、CoTアプローチを使用して問題を解決する手法で、AIが以前に見たことのない問題に対しても、即座に推論の連鎖を生成できる能力を持ちます。これにより、AIは複雑な計算問題や論理的推論を要する問いに対しても、具体的なステップを通じて解答を導き出すことが可能になります。
3-3 AIアシスタントを設定しよう
AIアシスタントの設定をする際には、その性格や役割を具体的に定義することが重要です。例えば、アシスタントに特定の専門分野の知識があるとしたり、特定の言語で応答する能力を持たせることができます。これにより、AIアシスタントは与えられた役割や性格に基づいてより適切な応答を提供することができるようになります。
さらに、AIアシスタントには「英訳アシスタント」や「歴史家アシスタント」といった特定のキャラクタを設定することも可能です。このようなキャラクタ設定をプロンプトに含めることで、AIはそのキャラクタに即した振る舞いをするようになります。
また、キャラクタの詳細を設定することで、AIアシスタントはその設定に従って振る舞い、例えば特定の専門分野に関してのみ回答を行ったり、質問の範囲を絞ったりすることが可能になります。
AIアシスタントの性格を明確に設定し強化するために、会話サンプルを与えることも効果的です。
3-4 CoT(思考の連鎖)を利用しよう
CoT(Chain-of-Thought)は、AIに問題解決のための論理的なステップを順に考えさせる技術であり、問題をステップごとに分解して解決へと導く方法です。具体的には、サンプル問題とその解法を示すことでAIが推論のプロセスを学習し、類似の新たな問題に適用することができます。
One-shot CoTは単一の例を用いてAIに推論過程を学習させる方法であり、Few-shot CoTは複数の例を提示してより複雑な推論や問題解決のプロセスをAIに教える手法です。
Least to Most Promptingは、CoTの応用の一つで、複雑な問題をより小さなサブ問題に分解し、最も簡単な問題から順に解答していくことで最終的な解答を得る技術です。
ChatでのCoT実装において、すべてのメッセージを一つのテキストとしてまとめて考えるアプローチは、メッセージを個別に作成する手間を省けると同時に、ロールの指定が内部的にはラベル付けされたテキストとして処理されるため、問題なく実装可能です。
これにより、AIはより正確に複雑な問題を解決することが可能になり、推論の精度が向上します。
3-5 情報をデータベース化しよう
ChatGPTを使用して情報をデータベース化する方法については、ChatプレイグラウンドのSYSTEMロールを活用してあらかじめ情報(例えば、個人情報など)をプロンプトに記述しておくことで、AIがその情報を参照・利用できるようにすることができます。この方法では、JSONフォーマットを使用してデータを構造化し、キーと値のペアで情報を整理します。また、情報の秘匿指示をプロンプトに追加することで、特定の情報を非公開に設定することも可能です。さらに、複数のデータを連携させて検索することもでき、これにより複雑なデータ管理がAIを介して簡単に実行できるようになります。ただし、プロンプトには送信できるコンテンツ量に限りがあるため、大量のデータを扱う場合は制限に注意が必要です。
4章 より高度なプロンプティング
4-1 複数の要素を考えよう
ChatGPTで複数の要素を含むプロンプトから求める回答を得るためには、まず、ユーザーからの入力が必要な値を明確にし、それらをAIに正しく渡す必要があります。
例えば、言語の選択と翻訳するテキストをユーザーから受け取り、それを「言語:番号」「コンテンツ:翻訳したいテキスト」という形でプロンプトに用意し、AIに理解させます。
システムロールに具体的な指示を記述し、ユーザーロールではその指示に従って入力することで、AIは指定された言語への翻訳を行うことができます。このプロセスには、指示を分かりやすく記述し、必要な情報を正確にAIに伝えることが重要です。
また、ワンショット学習を利用してAIに値の書き方を教えることで、プロンプトの処理を効率化できます。
4-2 知識と推論
反復推論は、複雑な問題に対してAIに繰り返し考えさせ、段階的に深い考察を促す手法で、特に深く考察が必要なテーマに有効で、Chatプレイグラウンドなどでプロンプトを次々に追加しながら応用可能です。
さらに、プロンプトで知識を補完する手法は、AIが持っていない知識を追加し、特定のテーマや新しい情報に対応させるために重要で、例えば新製品情報のAIアシスタントを作る際に有効です。
また、質問の正確な回答を得るためには、AIとの共通理解を促すために基盤モデルにない詳細な情報をプロンプトに補足することが重要で、誤解を避け正確な応答を引き出せます。
AIモデルの自己整合性は、異なるユーザーからの同一の質問に一貫した回答をする機能で、繰り返し質問を通じてAIの一貫性をテストし、より精度の高い判断を促すことができます。
自己整合性を用いたプロンプト手法に加え、「判断の基準を提供する」ことでAIがより正確な判断を下せるよう導く方法があり、手軽で効果的ですが、自己整合性を用いる方法ほどの精密さは期待できません。
4-3 プロンプトの構造化
組成汎化(Compositional Generalization)はAIが学習データにない新しい組み合わせやパターンを理解し対応する能力を指します。この概念を活用することで、AIによるプロンプトの構造化が可能になり、より複雑なタスクの実行や新しい内容の生成が可能になります。
具体的には、AIに基本ルールを学習させ、それらを組み合わせることで、未知のシナリオへの対応や複雑な処理の実行を行えます。これにより、単純な情報出力だけでなく、独自のプログラミング言語のようなプロンプトを作成し、AIの応用範囲を大幅に広げることができます。
また、カプセル化プロンプトは、特定の機能や処理をプロンプト内に定義し、それを呼び出すことで複雑なタスクを簡単に実行させるためのテクニックです。
5章 イメージ生成のプロンプティング
5-1 イメージ生成プロンプトの基本
イメージ生成AIはテキストから画像を作成する技術で、多様なオンラインサービスを通じて一般に提供されています。ユーザーは単純なテキストプロンプトを入力することで、指定した内容やテーマに基づく画像を生成することができます。
- Playground AI: イメージ編集機能を備え、キャンバス上で複数のイメージを生成できる統合ツールで、フィルターやDiscord通信機能も提供しています。
- Dream Studio: Stability AIが提供するサービスで、Stable Diffusionモデルを使用してシンプルなUIでイメージ生成を行え、AIの初心者でも簡単に利用可能です。
- Leonardo.AI: 複数のモデルから選択してイメージバリエーションを設定できるサービスで、無料かつ商業利用可能、キャンバス機能による編集オプションも充実しています。
- Bing Image Creator: Microsoftが提供するイメージ生成サービスで、OpenAIのDALL-E 3モデルを使用し、日本語プロンプトにも対応しているため、日本語で簡単にイメージを生成できます。
テキスト生成AIと異なり、イメージ生成AIのプロンプトは「どんな画像を描くか」を指定するもので、基本的には描画したい対象やシーンを簡潔に記述します。
プロンプトは通常、「<場所>で、<状況>している<対象>」を基本とし、一文または短いフレーズで構成され、画像の主題、背景、色調、スタイルなどの具体的な要素を含むことができます。
5-2 イメージを補足する
イメージ生成AIで生成される画像のイメージを補足する際は、基本のプロンプトに追加情報を組み込むことが重要です。
この追加情報は、イメージの雰囲気、スタイル、または特定の感情やテーマを指定するのに役立ちます。「〇〇風」という表現を使用して、作成されるイメージのアートスタイルや文化的背景を変更することが一つの方法です。
また、イメージ全体の雰囲気を表すために、穏やかさ、活発さ、ポジティブまたはネガティブな感情を示す語彙をプロンプトに追加することができます。
さらに、形状や構造に関連する修飾語を使って、対象の形状の性質や世界観をより詳細に指定することも可能です。イメージのテーマや背景を補足するために、人工物や技術、ゴシック調、SF的などの雰囲気を表す単語を使用することも有効です。
最後に、より高品質な描画を実現するために、特定の要素を排除する「without 〇〇」表現や、高品質な描画を促すための修飾語をプロンプトに追加することが推奨されます。
5-3 写真とイラストの補正
写真とイラストの補正に関するテキストでは、AIによるイメージ生成において、写真撮影の技術を参照することの重要性が強調されています。
具体的には、カメラの位置やアングル、レンズの種類、ライティング、撮影設定など、実際の撮影技術がAIの写真イメージ生成においても適用されるべき点として挙げられています。これらの要素をプロンプトに組み込むことで、よりリアルで望み通りの写真やイラストのイメージをAIに生成させることが可能になります。
また、イラストについては、使用する材料や描画スタイル(例えば油彩、水彩、クレヨンなど)、さらには特定の芸術運動や時代を反映したスタイル(キュービズム、超現実主義など)を指定することで、望むテイストのイメージを創出できます。
6章 チャットアプリケーションの開発
6-1 Azure OpenAIでチャットアプリを作る
- Microsoftアカウントの準備:
- Azureにサインイン
- Azure OpenAIサービスの申請: Azure OpenAIは申請制で提供されている場合があります。申請が必要な場合は、指定されたフォームから申請を行い、承認を待ちます。
- Azureポータルの利用開始: Azureポータルにアクセスし、利用を開始します。ポータルでは、サービスの検索、リソースの作成、設定変更などが行えます。
- サブスクリプションの作成: Azureのサービスを利用するためにはサブスクリプションが必要です。新しくサブスクリプションを作成するか、既存のものを利用します。
- Azure OpenAIのインスタンス作成: Azureポータルから「AI + Machine Learning」カテゴリを選択し、「Azure OpenAI」サービスを見つけてインスタンスを作成します。インスタンス作成時には、リソースグループ、リージョン、インスタンス名などを指定します。
- Azure OpenAI Studioの利用: インスタンス作成後、Azure OpenAI Studioにアクセスして、AIモデルをデプロイします。デプロイするモデルを選択し、必要な設定を行った後、デプロイを実行します。
- プレイグラウンドでのテスト: Azure OpenAI Studioのプレイグラウンド機能を使い、作成したAIモデルをテストします。プロンプトを送信してAIの応答を確認し、期待通りの動作をするかテストします。
- Webアプリとしての公開: AIモデルの調整が完了したら、そのモデルを基にしたチャットアプリをWebアプリとして公開します。これにより、社員や学生などが簡単にアクセスし、利用できるようになります。
6-2 チャットをカスタマイズする
- Azure OpenAI Studioでプロンプト実行の準備:Azure OpenAI Studioにアクセスし、「チャット(Chat)」を選択。「ChatGPT プレイグラウンド(Chat playground)」で、アシスタントのセットアップ(System messageの設定)、チャットセッション、およびConfigurationを利用してチャットの動作を確認します。
- アシスタントのカスタマイズ:「アシスタントのセットアップ」で、特定の機能を持つアシスタントを設定。SYSTEMメッセージと学習データのサンプルを用いてアシスタントを調整。
- チャットセッションでのテスト:「チャットセッション」エリアで、カスタマイズしたアシスタントの動作をテスト。入力フィールドに質問やコマンドを入力して、アシスタントの応答を確認します。
- アシスタントをWebアプリ化:プレイグラウンドの右上にある「Deploy to」ボタンを使用して、チャットをWebアプリとしてデプロイ。「Anew webapp…」を選択し、Webアプリの設定を行います(名前、サブスクリプション、リソースグループ、場所、価格プランなど)。
- デプロイされたWebアプリの利用:デプロイが完了すると、「Launch webapp」というボタンが表示されます。このボタンをクリックして、生成されたWebアプリケーションを開きます。
- アプリの更新と削除:アプリの内容を更新したい場合は、「Deploy to」から「A new web app…」を選択し、既存のWebアプリを選択して更新を行います。不要になったアプリは、Azureポータルの「App Service」から削除可能です。
7章 アプリ化のために必要な知識
7-1 パラメーターの調整
- 過去のメッセージを含む(Past messages included):会話の文脈を保持するために、いくつ前までのメッセージをモデルに渡すかを指定します。
- 現在のトークン数(Current token count):プロンプトと応答に使用されるトークン数を表示し、利用可能なトークン数の上限に対する現在の使用状況を把握します。
- 最大応答(Maximum length):AIモデルから返される応答の最大トークン数を指定します。
- 温度(Temperature):応答の創造性やランダム性の度合いを調整します。
- 上位P(Top P):応答のテキスト生成におけるトークン選択の確率分布を調整します。
- シーケンスの停止(Stop sequence):特定の記号や文字が出現した時点で応答の生成を停止します。
- 頻度のペナルティ(Frequency Penalty):生成されるテキスト内で特定のトークンの出現頻度を制御します。単調な応答を避けるために調整します。
- プレゼンスペナルティ(Presence Penalty):応答内でのトークンの出現可能性を調整します。応答の多様性を高めるために使用されます。
パラメータの調整は、作成するチャットアプリの目的に応じて行います。実用的なアシスタントを目指す場合は、堅実な応答が得られるように温度や頻度のペナルティを低く設定することが推奨されます。一方で、エンターテインメント性を重視するアシスタントでは、創造性や多様性を引き出すためにこれらのパラメータを高めに設定することが望ましいです。
最大応答の長さや、過去のメッセージを含む範囲の設定は、ユーザーのニーズに応じて柔軟に調整することが重要です。例えば、技術的な質問に答えるアシスタントでは、より長い応答が必要になる場合がありますが、簡単なFAQに答えるだけなら短い応答でも十分です。
7-2 プロンプトインジェクション
プロンプトインジェクションへの対策については、複数のアプローチを組み合わせて行うことが重要です。まず、AIモデルを最新のものに保つことが基本となります。新しいモデルは、以前のバージョンに比べてセキュリティの脆弱性が改善されており、プロンプトインジェクション攻撃に対する抵抗力が強化されています。
さらに、AIアシスタントに与える指示を明確にし、特定の役割や動作の範囲を厳格に定義することが効果的です。例えば、英訳アシスタントの場合、「絶対に英訳以外の応答はしないでください」というような指示を明確に設定し、AIがその範囲を超えた行動を取らないように制限します。
また、学習データを工夫して用意することも重要です。AIの応答パターンを様々なシナリオで事前に設定し、不正なプロンプトに対しても適切な反応をするように準備しておくことで、意図しない情報の漏洩や不適切な応答を防ぎます。
さらに、パラメータの調整によっても、不正なプロンプトへの耐性を高めることが可能です。例えば、温度パラメータを低く設定することで、AIの応答の予測可能性を高め、ハルシネーションのリスクを減少させることができます。
コメント