この項目でできるようになること
・公式に発表されているテクニックや最新のプロンプト理論について理解する
・メタプロンプトやプロンプトジェネレータなどのサポートサービスについて理解する
・ハルシネーションを防ぐ実用的なテクニックについて理解する
OpenAIが公表しているプロンプト作成のポイント
OpenAIからはプロンプト精度向上のポイントとして以下の6つが挙げられています。
1. 関連性の高い回答を得るために詳細情報を記載する
・具体的な要件、制約、期待する結果を明確に
・前後の文脈や背景情報を十分に提供
2. モデルに特定の役割や人格を採用するよう指示する
・専門家としての役割を指定(例:SEOの専門家、経営コンサルタント)
・対象読者に適した説明スタイルの指定
3. パートを明確に区切るために記号を使用する
– 箇条書き、番号付けリストの活用
– セクション分けによる構造化
4. タスクを完了までの手順を指定する
・段階的なステップの明示
・各ステップでの期待される出力の明確化
5. 出力例を提供する – 期待する形式や内容の具体例
・良い例と悪い例の対比
6. 出力の長さを適切に指定する
・文字数や段落数の明示
・詳細度のレベル指定
これらのポイントを抑えてプロンプトを記述することで、精度を向上させることができます。また以下の要領でプロンプト精度向上の作業自体をGPTに依頼することも可能です。
プロンプト例(改善依頼):
関連性の高い回答を得るために詳細情報を記載する
モデルに特定の役割や人格を採用するよう指示する
パートを明確に区切るために記号を使用する
タスクを完了までの手順を指定する
出力例を提供する
出力の長さを適切に指定する
上記6つのプロンプトテクニックに沿って下記のプロンプトを改善してください
長文記事をSEOに沿った形に要約する
出力例:
プロンプト:SEO最適化された要約作成
役割
あなたはSEOに精通したプロのライターです。読者の興味を引き、検索エンジン最適化(SEO)に適した要約を作成する役割を担っています。
タスク
以下の長文記事を要約し、SEOに対応した要約を作成してください。SEO効果を最大限に引き出すため、以下のステップに従ってください:
- 主要キーワードの特定: 記事テーマのキーワードを抽出し、自然に要約へ組み込みます。
- キャッチーな見出し作成: 魅力的でクリックを誘発する見出しを含めてください。
- 要約内容の構成: 簡潔で読みやすく、短い段落と箇条書きを適用して情報を整理してください。
- メタディスクリプションの作成: 検索結果に表示されるメタディスクリプション用に、160文字以内で記事の要点をまとめた一文も提供してください。
出力形式
- 見出し:〇〇(見出しの例)
- 要約:〇〇(最大300文字)
- メタディスクリプション:〇〇(160文字以内)
例
見出し:「○○の活用法|初心者でもわかる最新ガイド」
要約:「この記事では、○○の効果的な使い方と最新のトレンドについて解説しています。初心者でも簡単に取り入れられる方法と、専門家によるアドバイスが満載です。SEOの観点からも役立つ情報を網羅し、より多くのアクセスを獲得するためのコツを紹介しています。」
メタディスクリプション:「初心者でもわかる○○の使い方と最新トレンド。SEO対策に役立つ情報を集約したガイドです。」
ハルシネーションを防ぐテクニック
ハルシネーションとは、AIが実在しない情報や誤った情報を自信を持って提示してしまう現象です。これはAIの重要な課題の一つであり、特にビジネスでの意思決定や正確性が求められる場面では深刻な問題となる可能性があります。
しかし、適切なプロンプトテクニックを用いることで、このリスクを大幅に低減することが可能です。以下では、実践的なハルシネーション防止テクニックとその具体的な活用方法を紹介します。
1.チェックと改善
出力された回答を再度プロンプトに入力し、改善を促すことで正確性の検証を行うことができます。
プロンプト例:
「あなたが提供した以下の情報について、各項目の正確性を検証し、不正確または確信が持てない部分があれば指摘してください
[前回の回答内容]
また、より正確な情報に修正できる部分があれば、その提案もお願いします。」
2.段階的な推論
論理的な思考展開が必要な回答に対して、段階的な推論を用いて回答するように指示することで誤った回答を防げる場合があります。
プロンプト例:
「この問題について、以下の手順で考えを進めてください:
- まず、問題の主要な要素と関連する事実を列挙する
- それらの事実に基づいて論理的に推論を行う
- 推論の各ステップで使用した前提条件を明確にした上で結論を出す」
3.根拠の引用
正確な回答が必要な情報に関して、根拠となる情報を明示させることで真偽の検証が可能になります。
プロンプト例:
「この質問について回答する際は、以下の形式で情報を提供してください
・主張:[具体的な説明]
・根拠:[この主張を支持する具体的な事実や理由]
・信頼性:[この情報の確実性レベル(確実/可能性が高い/不確実)]
・注釈:[追加の文脈や制限事項]
特に、不確実な情報については必ずその旨を明記してください。」
4.不明点の明示
不明な部分や回答が難しい部分に関してはその旨を明示させることで、真偽不明な情報の出力を避けられる場合があります。
プロンプト例:
「この質問に回答する際は、以下の区分を明確にしてください:
・確実な情報:[完全に確実な事実のみ]
・推測される情報:[論理的な推論に基づく情報]
・不確実な情報:[確信が持てない、または検証が必要な部分]
・回答不能な部分:[現在の知識では答えられない要素]
それぞれの区分について、その判断理由も添えてください。」
これらのテクニックを組み合わせることで、より信頼性の高い回答を得ることができますが、完全なハルシネーション防止は困難です。重要な判断には必ず人間による検証を行いましょう。
プロンプトジェネレータ機能
またOpenAIプレイグラウンドではプロンプトジェネレータの機能(API課金が必要)が提供されています。こちらを使用することでも精度の高いプロンプトを得る事ができます。
ある程度曖昧なプロンプトでも自動的に補足、マークダウン形式で整理されたプロンプトを出力してくれます。また、出力されたプロンプトを実際にテストできるほか、精度を確認して再調整を行うことも可能です。
使い方
openAI プレイグラウンド画面
・
・テキストボックスに改善を依頼したいプロンプトや要望を入力
・System instructionsの右側の[Generate]ボタンを押下
※必要に応じてCompare機能でプロンプトを比較しながら調整。temperature等の詳細なパラメータ調整も可能です
プロンプトジェネレータによるプロンプト改善例:
長文記事をSEOに沿った形で要約してください。
以下の詳細に従ってタスクを完了するよう努めてください。
– モデルの役割: SEOエキスパートとして、検索エンジン最適化の観点から内容の関連性を高める。
– 記号を使用してパートを区切り、構造を明確にする。
# Steps
1. 記事の主題を特定し、重要なキーワードを抽出する。
2. 各セクションを分析し、SEOに重要な情報を要約の候補として選ぶ。
3. 内容が網羅されるよう、優先順位をつけて情報を整理する。
4. 内容をシンプルかつ自然な文章にまとめ、SEO適性を考慮してキーワードを効果的に配置する。
# Output Format
– 400-600文字の段落で要約を提供してください。
– キーワードは文中に自然に含まれるように調整し、過剰な使用を避けてください。
# Examples
入力:
「この長文の記事はテクノロジーの進化とその社会的影響について取り扱っています。特にAIとIoTが与えるビジネスへの影響を中心に議論しています。」
出力:
「テクノロジーの進化に伴い、AIやIoTがビジネスに与える影響は計り知れない。これらの分野は、効率的な業務運用やデータ管理を可能にし、社会的にも様々な変化をもたらしている。」
# Notes
– 重要なキーワードを自然に配置しながらも、読みやすさと自然な流れを保つことが重要です。
– 簡潔かつ関連性の高い内容を心がけてください。
メタプロンプト
メタプロンプトとは
「プロンプトを作成するためのプロンプト」のことで、効果的なプロンプトを自動生成するための重要なツールです。この機能を使用することで、タスクの要件を入力するだけで、構造化された高品質なプロンプトを得ることができます。
メタプロンプトの主な利点:
- プロンプト作成の効率化
- 構造的で漏れのない指示の生成
- ベストプラクティスの自動適用
- 一貫性のある品質の確保
OpenAIからは以下の2つのメタプロンプトが公式に発表されています:
- Task Prompt Generator:タスク実行用の詳細なプロンプトを生成
- Classification Prompt Generator:分類タスク特化型のプロンプトを生成
URL:https://platform.openai.com/docs/guides/prompt-generation
これらのメタプロンプトは、APIを通じて利用することを想定して設計されていますが、チャットGPTの会話画面でも活用可能です。ここでは1のTask Prompt Generatorを例に解説を行います。
メタプロンプト例:
from openai import OpenAI
client = OpenAI()
META_PROMPT = “””
Given a task description or existing prompt, produce a detailed system prompt to guide a language model in completing the task effectively.
# Guidelines
– Understand the Task: Grasp the main objective, goals, requirements, constraints, and expected output.
– Minimal Changes: If an existing prompt is provided, improve it only if it’s simple. For complex prompts, enhance clarity and add missing elements without altering the original structure.
– Reasoning Before Conclusions**: Encourage reasoning steps before any conclusions are reached. ATTENTION! If the user provides examples where the reasoning happens afterward, REVERSE the order! NEVER START EXAMPLES WITH CONCLUSIONS!
– Reasoning Order: Call out reasoning portions of the prompt and conclusion parts (specific fields by name). For each, determine the ORDER in which this is done, and whether it needs to be reversed.
– Conclusion, classifications, or results should ALWAYS appear last.
– Examples: Include high-quality examples if helpful, using placeholders [in brackets] for complex elements.
– What kinds of examples may need to be included, how many, and whether they are complex enough to benefit from placeholders.
– Clarity and Conciseness: Use clear, specific language. Avoid unnecessary instructions or bland statements.
– Formatting: Use markdown features for readability. DO NOT USE “` CODE BLOCKS UNLESS SPECIFICALLY REQUESTED.
– Preserve User Content: If the input task or prompt includes extensive guidelines or examples, preserve them entirely, or as closely as possible. If they are vague, consider breaking down into sub-steps. Keep any details, guidelines, examples, variables, or placeholders provided by the user.
– Constants: DO include constants in the prompt, as they are not susceptible to prompt injection. Such as guides, rubrics, and examples.
– Output Format: Explicitly the most appropriate output format, in detail. This should include length and syntax (e.g. short sentence, paragraph, JSON, etc.)
– For tasks outputting well-defined or structured data (classification, JSON, etc.) bias toward outputting a JSON.
– JSON should never be wrapped in code blocks (“`) unless explicitly requested.
The final prompt you output should adhere to the following structure below. Do not include any additional commentary, only output the completed system prompt. SPECIFICALLY, do not include any additional messages at the start or end of the prompt. (e.g. no “—“)
[Concise instruction describing the task – this should be the first line in the prompt, no section header] [Additional details as needed.] [Optional sections with headings or bullet points for detailed steps.]# Steps [optional] [optional: a detailed breakdown of the steps necessary to accomplish the task]
# Output Format
[Specifically call out how the output should be formatted, be it response length, structure e.g. JSON, markdown, etc]# Examples [optional] [Optional: 1-3 well-defined examples with placeholders if necessary. Clearly mark where examples start and end, and what the input and output are. User placeholders as necessary.] [If the examples are shorter than what a realistic example is expected to be, make a reference with () explaining how real examples should be longer / shorter / different. AND USE PLACEHOLDERS! ]
# Notes [optional] [optional: edge cases, details, and an area to call or repeat out specific important considerations]
“””.strip()
def generate_prompt(task_or_prompt: str):
completion = client.chat.completions.create(
model=”gpt-4o”,
messages=[
{
“role”: “system”,
“content”: META_PROMPT,
},
{
“role”: “user”,
“content”: “Task, Goal, or Current Prompt:\n” + task_or_prompt,
},
],
)
return completion.choices[0].message.content
上記プロンプトはAPI環境で実行する前提で記述されていますが、チャット欄に入力することでも精度の高いプロンプトを得る事ができます。
メタプロンプトのポイントを以下にまとめます。
Task Prompt Generatorメタプロンプトの概要
タスク理解
- モデルがタスクの目的、必要な要件、制約条件、そして期待される出力を正確に把握することが最優先です。これはモデルの理解を深め、適切なアウトプットを生成するために不可欠なステップです。
最小限の変更
- 既存のプロンプトが提供された場合、内容がシンプルなら、改善を最小限にとどめます。一方で、複雑なプロンプトには、追加説明を入れてわかりやすくしますが、基本の構造は変更しないようにします。これにより、元の指示意図を保ちながら理解を深めることができます。
結論前の推論
- 推論のステップを必ず結論の前に行い、結論に至るまでの思考プロセスを明示します。これにより、モデルの回答が納得のいくプロセスに基づいて行われるようになります。必要に応じて、推論と結論の順序を逆にするなどの対応も行います。
例の提供
- タスクに関連する具体的で質の高い例を示します。複雑な部分については、プレースホルダー(例:[この部分])を活用して例の構成が理解しやすくなるよう工夫します。
明確さと簡潔さ
- 簡潔かつ具体的な表現を使い、不要な指示や曖昧な表現は避けます。こうすることで、プロンプトが無駄なく、効果的に意図を伝えるものになります。
フォーマット
- 読みやすさを重視し、Markdown形式(例えば見出しや箇条書き)を使って構成を整理します。コードブロックは特別な指示がない限り避けることで、不要な記述を減らし、シンプルな表現を心がけます。
ユーザーコンテンツの保持
- ユーザーが入力した内容(指針や例など)は、できる限りそのまま保持します。もし曖昧な場合は分解・整理し、細かいステップに落とし込んで明確化することも考慮します。
定数の使用
- プロンプトにおいて、変更不要な定数や固定の要素はそのまま使用します。これは、プロンプトインジェクション(外部からの改ざん)を防ぎ、モデルの一貫性を保つためです。
出力フォーマット
- 出力形式を具体的に指示し、構造化されたデータが必要な場合はJSONを推奨します。また、コードブロックで囲むのは特別なリクエストがある場合のみにとどめ、通常はMarkdown形式やシンプルなテキスト出力を心がけます。
活用のポイント
メタプロンプトは複雑なタスク(多段階の処理や詳細な条件が必要な文章作成など)を実行する際に効果を発揮します。また複数メンバーで統一的なプロンプトを作成したり、定期的に実行する定型タスクなどでは品質の標準化に貢献します。
まとめ
プロンプトエンジニアリングは、AIを使いこなす上で必須のスキルであり、効果的なプロンプトを作成するための様々なテクニックが存在します。プロンプトエンジニアリングは現在急速に研究が進んでいる分野でもあります。情報は頻繁に更新されていくので、必要に応じて自分の技術を見直し、より高い技術レベルを目指していきましょう。
この章で学んだ基本的な概念を踏まえ、プロンプトエンジニアリングのスキルをさらに磨いていきましょう。