OpenAIのプロンプト自動生成機能のシステムプロンプトがリークしていたので見てみる

LLM

OpenAI(Chat-GPT)にプロンプト自動生成機能が追加されたことが話題となりましたが、そのシステムプロンプトが見つかったみたいなので見てみます。

OpenAIのプロンプト自動生成機能のシステムプロンプト

システムプロンプト(英語)

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]

システムプロンプト(日本語)

Google翻訳で日本語にしたらこんな感じでした。

タスクを理解する: 主な目的、目標、要件、制約、および期待される出力を把握します。
- 最小限の変更: 既存のプロンプトが提供されている場合は、単純な場合にのみ改善します。複雑なプロンプトの場合は、元の構造を変更せずに、明確さを高め、不足している要素を追加します。
- 結論の前の推論: 結論に達する前に推論の手順を奨励します。注意! ユーザーが推論が後で行われる例を提供する場合は、順序を逆にしてください。決して結論から例を始めないでください!
- 推論の順序: プロンプトと結論部分の推論部分 (特定のフィールドの名前) を呼び出します。それぞれについて、これを行う順序と、逆順である必要があるかどうかを決定します。
- 結論、分類、または結果は常に最後に表示する必要があります。
- 例: 役立つ場合は、複雑な要素にプレースホルダー (括弧内) を使用して、高品質の例を含めます。
- 含める必要がある可能性のある例の種類、数、およびプレースホルダーのメリットを享受できるほど複雑であるかどうか。 - 明確さと簡潔さ: 明確で具体的な言葉を使用してください。不必要な指示や当たり障りのない記述は避けてください。
- 書式設定: 読みやすさのためにマークダウン機能を使用してください。特に要求されない限り、``` コード ブロックを使用しないでください。
- ユーザー コンテンツの保持: 入力タスクまたはプロンプトに広範なガイドラインや例が含まれている場合は、それらをすべて、または可能な限りそのまま保持します。曖昧な場合は、サブステップに分割することを検討してください。ユーザーが提供する詳細、ガイドライン、例、変数、またはプレースホルダーを保持します。
- 定数: プロンプトに定数を含めてください。それらはプロンプト インジェクションの影響を受けにくいためです。ガイド、ルーブリック、例など。
- 出力形式: 最も適切な出力形式を詳細に明示的に指定します。これには長さと構文 (短い文、段落、JSON など) を含める必要があります。
- 明確に定義されたデータまたは構造化されたデータ (分類、JSON など) を出力するタスクの場合は、JSON を出力することを推奨します。
- 明示的に要求されない限り、JSON はコード ブロック (```) で囲まないでください。

出力する最終プロンプトは、以下の構造に従う必要があります。追加のコメントは含めず、完了したシステム プロンプトのみを出力してください。具体的には、プロンプトの先頭または末尾に追加のメッセージを含めないでください (例: "---" は含めないでください)。

[タスクを説明する簡潔な指示 - これはプロンプトの最初の行にする必要があります。セクション ヘッダーは含めないでください]

[必要に応じて追加の詳細。]

[詳細な手順については、見出しまたは箇条書きを含むオプションのセクション。]

# 手順 [オプション]

[オプション: タスクを完了するために必要な手順の詳細な内訳]

# 出力形式

[応答の長さ、構造 (例: JSON、マークダウンなど) など、出力のフォーマット方法を具体的に指定します]

# 例 [オプション]

[オプション: 必要に応じてプレースホルダーを含む 1 ~ 3 つの明確に定義された例。例の開始と終了、および入力と出力を明確にマークします。必要に応じてプレースホルダーを使用します。]
[例が実際の例よりも短い場合は、実際の例が長く/短く/異なる必要がある理由を () で参照してください。プレースホルダーを使用してください。]

# 注記 [オプション]

[オプション: エッジケース、詳細、および特定の重要な考慮事項を呼び出したり繰り返したりする領域]

プロンプトの評価

適当にLLMを使って先ほどのプロンプトを評価してもらいました。

評価内容(英語)

This prompt is incredibly powerful due to its comprehensive structure and detailed guidelines. It effectively outlines every aspect of how to create a well-structured task prompt, ensuring clarity, coherence, and specificity. Here's how its power is manifested:

1. **Task Understanding**: It starts with a clear directive to understand the main objective, goals, requirements, constraints, and expected output. This ensures that the task is well-defined from the outset.

2. **Minimal Changes Principle**: It emphasizes the importance of only making necessary improvements to existing prompts, which prevents unnecessary alterations and preserves the original intent.

3. **Reasoning Before Conclusions**: This principle encourages critical thinking and structured reasoning, which is crucial for tasks requiring analysis or problem-solving. The requirement to reverse the order of reasoning in certain cases adds an extra layer of depth to the task.

4. **Examples Inclusion**: The prompt emphasizes the inclusion of high-quality examples, which are essential for understanding and demonstrating how to perform the task. The use of placeholders for complex elements ensures that the examples remain adaptable and relevant.

5. **Clarity and Conciseness**: It stresses the use of clear and specific language, avoiding unnecessary instructions or vague statements, which is vital for ensuring that the task is easily understood and executed.

6. **Formatting**: The use of markdown features for readability is encouraged, making the prompt more accessible and easier to follow.

7. **Preservation of User Content**: The prompt instructs to keep any details, guidelines, examples, variables, or placeholders provided by the user, which ensures that the user's input is respected and integrated into the task.

8. **Constants Inclusion**: It highlights the importance of including constants in the prompt, which are not susceptible to prompt injection and provide valuable context.

9. **Output Format**: The prompt specifies the format of the output, ensuring that the results are presented in a structured and consistent manner, which is particularly important for tasks involving data or classification.

10. **Structured Prompt Format**: The final section provides a structured template for creating the prompt, ensuring consistency across different tasks.

In summary, this prompt is powerful because it provides a thorough and systematic approach to creating effective task prompts, ensuring that they are clear, comprehensive, and conducive to successful task completion.

評価内容(日本語)

このプロンプトは、その包括的な構造と詳細なガイドラインにより、非常に強力です。明確さ、一貫性、および具体性を確保しながら、適切に構造化されたタスク プロンプトを作成する方法のあらゆる側面を効果的に概説しています。その威力は次のように発揮されます。

1. **タスクの理解**: 主な目的、目標、要件、制約、および期待される出力を理解するための明確な指示から始まります。これにより、タスクが最初から明確に定義されます。

2. **最小限の変更の原則**: 既存のプロンプトに必要な改善のみを行うことの重要性を強調し、不要な変更を防ぎ、元の意図を維持します。

3. **結論の前に推論**: この原則は、分析や問題解決を必要とするタスクにとって重要な、批判的思考と構造化された推論を促進します。特定のケースで推論の順序を逆にする必要があるため、タスクにさらに深みが加わります。

4. **例の組み込み**: プロンプトでは、タスクの理解と実行方法のデモンストレーションに不可欠な高品質の例の組み込みを強調しています。複雑な要素にプレースホルダーを使用することで、例が適応性と関連性を維持できます。

5. **明確さと簡潔さ**: 明確で具体的な言語の使用を強調し、不要な指示や曖昧な記述を避けます。これは、タスクを簡単に理解して実行するために不可欠です。

6. **書式設定**: 読みやすさのためにマークダウン機能を使用することが推奨されており、プロンプトをよりアクセスしやすく、従いやすくしています。

7. **ユーザーコンテンツの保持**: プロンプトでは、ユーザーが提供する詳細、ガイドライン、例、変数、またはプレースホルダーを保持するように指示しています。これにより、ユーザーの入力が尊重され、タスクに統合されます。

8. **定数の組み込み**: プロンプトに定数を含めることの重要性を強調しています。定数はプロンプトの挿入の影響を受けにくく、貴重なコンテキストを提供します。

9. **出力形式**: プロンプトは出力の形式を指定し、結果が構造化された一貫性のある方法で提示されるようにします。これは、データや分類を伴うタスクでは特に重要です。

10. **構造化されたプロンプト形式**: 最後のセクションでは、プロンプトを作成するための構造化されたテンプレートが提供され、さまざまなタスク間で一貫性が確保されます。

要約すると、このプロンプトは、効果的なタスク プロンプトを作成するための徹底的かつ体系的なアプローチを提供し、明確で包括的であり、タスクの成功につながることを保証するため、強力です。

まとめ

ザックリとしか見ていませんが、プロンプト生成のためのプロンプトから最適なプロンプト生成の構造を研究するのは、リバースエンジニアリング的で面白い発想だと思うので、機会があれば深堀りしてみようと思います。

以上です

【Reference】

https://gist.github.com/philschmid/3a0ecc9e45763716f4dd9c36b6445fca#file-openai_meta-txt

スポンサーリンク

LLM

Posted by このめ