AIパーソナル・ラーニング
と実践的なガイダンス

OpenAIメタプロンプト・コマンドジェネレーター OpenAI Meta-prompt

チップ・ジェネレーション

ある 遊び場 正鵠を得る 生成する ボタンをクリックすると、タスクの説明からプロンプトを生成することができる、関数歌で応えるビルド.このガイドでは、その仕組みについて順を追って説明する。

中抜き

プロンプトとアーキテクチャーをゼロから作成するのは時間がかかるため、生成して始めると早く始められます。Generateボタンは主に以下の2つの方法を使用します:

  1. 注意を引くを使用する。ヒントベストプラクティスを取り入れて、ヒントを生み出したり、改善したりする。
  2. ビルドを使用する。メタアーキテクチャ有効なJSONと関数の構文を生成します。

現在はメタプロンプトとアーキテクチャーを使用しているが、将来的には以下のような高度なテクニックを統合する可能性もある。 DSPy 歌で応える "勾配降下".

注意を引く

ヒント タスクの説明に基づいて、優れたプロンプトを作成したり、既存のプロンプトを改善したりするようにモデルを導きます。 チップ・エンジニアリングベストプラクティスと実際のユーザー体験。

私たちは、生成されたキューが期待されるフォーマットに適合していることを保証するために、異なる出力タイプ(オーディオなど)に対して特定のメタキューを使用しています。

ヒント

テキスト・メタヒント

from openai import OpenAI
クライアント = OpenAI() meta_prompt = """ タスクを通して言語モデルを効果的にガイドするために、タスクの説明や既存のプロンプトに基づいて、詳細なシステムプロンプトを生成する。 #ガイドライン - タスクを理解する: 主な目的、目標、要件、制約、期待される出力を把握する。 - 最小限の変更:既存のプロンプトが提供されている場合は、単純な場合のみ改善する。複雑なプロンプトの場合は、元の構造を変えることなく、わかりやすさを高め、不足している要素を追加する。 - 結論の前の推論**: 結論を導く前に、推論のステップを奨励する。注意ユーザーが提供した例題で、結論の前に推論がある場合は、順序を逆にします!決して結論から始めないでください。 - 推論の順序:プロンプトの推論と結論のセクション(フィールド名による)を指差し、完了 の順序を決定する。 - 結論、分類、結果は常に最後に記述する。 - 例題: 参考になる場合は、複雑な要素のプレースホルダとして[角括弧]を使用し、質の高い例題を含める。 - どの例を含めるか、いくつ含めるか、プレースホルダーを必要とするほど複雑かどうかを検討する。 - 明確かつ簡潔:明確で具体的な表現を用いる。不必要な指示や空記述は避けましょう。 - フォーマット:可読性を高めるためにMarkdownの機能を使いましょう。明示的に要求されない限り、```コードブロックは使用しないでください。 - ユーザーのコンテンツを保持する: 入力タスクやプロンプトに広範な指示や例が含まれている場合、できるだけ完全なものにしましょう。内容があいまいな場合は、サブステップに分割することを検討してください。ユーザーから提供された詳細、指示、例、変数、プレースホルダはすべて保持する。 - 定数:ガイドライン、採点基準、例など、プロンプトのインジェクションの影響を受けにくいプロンプトには定数を含める。 - 出力形式:長さや構文(フレーズ、段落、JSONなど)を含め、最適な出力形式を指定する。 - 出力が構造化されたデータ(カテゴリー、JSONなど)であるタスクでは、JSONを優先的に生成する。 - JSONは、明示的に要求されない限り、コードブロック(```)でラップされるべきではありません。 最終的に出力するプロンプトは、コメントを追加することなく、 以下の構造に従って、完成したシステムプロンプトのみを出力する。特に、プロンプトの先頭や末尾に余分な情報を追加してはならない (例: `---' を使用してはならない)。 [簡潔なタスクの説明 - これはセクション見出しのないプロンプトの最初の行である] 。 [必要に応じて詳細を追加してください]。 [詳細なステップバイステップの見出しまたは箇条書きのあるオプションのセクション]。 #ステップ[オプション]。 [オプション:タスクを達成するために必要なステップの詳細な内訳]. #出力フォーマット [レスポンスの長さ、構造(JSON、Markdownなど)、出力のフォーマットを指定してください。] #の例[任意] [必要に応じてプレースホルダを使用し、1~3個の明確な例を記述すること。例の開始と終了、入力と出力を明確にマークしてください。必要に応じてプレースホルダーを使用する。] [例題が実際の例題から予想されるよりも短かったり長かったりする場合は、実際の例題がどれくらいの長さ/長さであるべきかについての説明を加えてください。そしてプレースホルダーを使いましょう!]。 #ノート [オプション]。 [オプション:エッジケース、詳細、考慮すべき特に重要な点を強調したり繰り返したりする]。 """.strip() def generate_prompt(task_or_prompt: str). 完了 = client.chat.completions.create( model="gpt-4o"、 メッセージ=[ { "role": "system", "content": META_SYSTEMS }, { "role": "user", "content": META_PROMPT, }, { "content": "タスク、ゴール、または現在のプロンプト、 } ] ) return completion.choices[0].message.content

オーディオ・メタ・チップ

from openai import OpenAI

クライアント = OpenAI()

meta_prompt = """
タスクの説明または既存のプロンプトが与えられたら、リアルタイム音声出力言語モデルがタスクを効果的に完了できるようにガイドする、詳細なシステムプロンプトを生成する。

#ガイド

- タスクの理解:主な目的、タスクの要件、制約、期待される出力を把握する。
- 声のトーン:声のトーンを明確に示す。デフォルトは、感情的で、友好的で、ユーザーを長く待たせないような速さであるべきです。
- 音声出力の制限: このモデルは音声を出力するので、応答は短く、会話的であるべきです。
- 最小限の変更:既存のプロンプトがある場合は、単純な場合にのみ最適化する。複雑なプロンプトの場合は、元の構造を変えることなく、わかりやすさを高め、不足している要素を追加する。
- 例題: 参考になる場合は、複雑な要素のプレースホルダを示すために角括弧[括弧内]で囲んだ質の高い例題を含める。
   - どのような例を含めるか、いくつ含めるか、プレースホルダを使用するほど複雑である必要があるかどうか。
   - 例文は、モデルの短い対話出力を反映することが非常に重要です。
デフォルトでは、文章は非常に短いはずです。ヘルパーは連続して3つの文を提供すべきではなく、ユーザーとヘルパーが前後に対話することが推奨されます。
   - 各センテンスのデフォルトの長さは5~20語程度です。ユーザーが特に「短い」返答を要求する場合、例は確かに1-10語と短くするべきです。
   - 例文は1つの質問と回答ではなく、複数回の対話(1つの例文につき少なくとも4往復)であるべきです。例文は自然な対話の流れを反映させること。
- 明確さと簡潔さ:明確で具体的な表現を用いること。不必要な指示や無関係な説明は避ける。
- ユーザーコンテンツの保持: 入力タスクやプロンプトに詳細な指示や例が含まれている場合は、それらを完全に保持するか、可能な限り保持するようにします。内容が曖昧な場合は、サブステップに分割することを検討する。ユーザーが提供した詳細、ガイド、例、変数、プレースホルダーはすべて保持する。
- 定数: ガイドライン、採点基準、例など、プロンプトの注入の影響を受けにくい定数セクションを含める。

プロンプトの最終的な出力は、以下の構造に従う。追加の指示は含めず、完成したシステムプロンプトのみを出力する。プロンプトの最初や最後に付加的な情報を追加しないよう、特に注意すること (例: "----"は不要)。

[タスクを記述する簡潔な指示 - これはプロンプトの最初の行でなければならない。]

[必要に応じて詳細情報を追加する] 。

詳細なステップの見出しまたは箇条書きリストを含むことができるオプションのセクション] [必要に応じて詳細な情報を追加する] [必要に応じて詳細な情報を追加する

#の例 [オプション]。

[任意:必要に応じてプレースホルダーを使用し、明確に定義された例を1~3個含める。例題がどこで始まり、どこで終わるか、入力と出力を明確にマークする。必要な情報にはプレースホルダーを使用すること。]
[例題が予想される実際の例題よりも短い場合は、実際の例題がどのように長く/短く/異なるべきかを示すために括弧()を使用し、プレースホルダを使用すること!].

# 備考 [任意]

[オプション: 境界例、詳細情報、重要な注意事項].
""".strip()

def generate_prompt(task_or_prompt: str).
    補完 = client.chat.completions.create(
        model="gpt-4o"、
        メッセージ=[
            {
                "role": "system", "content": META_SYSTEMS
                
            },
            {
                "role": "user", "content": META_PROMPT, }, {
                "content": "タスク、ゴール、または現在のプロンプト: ˶" + task_or_prompt、
            }
        ]
    )

    return completion.choices[0].message.content

キュー・エディター

キューを編集するには、メタキューを少し修正したものを使用する。アプリケーションを直接編集するのは比較的簡単ですが、よりオープンエンドな修正では、必要な変更を特定するのが難しい場合があります。この問題に対処するため、私たちはメタ・キューの冒頭に回答を入れました。推論セクションヘルプモデルは、既存のプロンプトの単語の明確さ、思考の連鎖の順序、全体的な構造、具体性などの要素を評価することによって、どのような変更が必要かを判断します。推論コンポーネントが改善点を提案し、それが最終的な回答から解析されます。

編集のためのテキスト・メタ・キュー

from openai import OpenAI

クライアント = OpenAI()

meta_prompt = """
現在のプロンプトと変更の説明に基づいて、詳細なシステムプロンプトを生成し、タスクを通して言語モデルを効果的にガイドする。

最終的な出力は、完全に修正されたプロンプトの単語テキストになります。しかしその前に、応答の先頭にあるタグを使用してプロンプトの単語を分析し、以下を明確にしてください:

- 単純な変更: (はい/いいえ) 変更の説明は明確で単純ですか?(はい」の場合、次の質問は飛ばしてください)
- 推論:(はい/いいえ)現在のプロンプトワードは推論、分析、または思考の連鎖を使用していますか?
    - 識別: (最大10語) 「はい」の場合、推論のどの部分に使用されていますか?
    - 結論: (はい/いいえ) 一連の思考を通して結論に達しているか?
    - 順序: (前/後) 思考の連鎖は結論の前後にあるか?
- 構造: (はい/いいえ) 入力されたプロンプトワードに明確な構造があるか?
- 例: (はい/いいえ) 入力キュー・ワードには少数の例が含まれているか?
    - 代表性:(1-5) 例がある場合、その例はどの程度代表的か?
- 複雑さ:(1-5)入力キュー・ワードはどのくらい複雑か?
    - タスク:(1-5)タスクの複雑さは?
    - 必要性:()
- 特異性:(1-5) キュー・ワードはどの程度詳細で具体的か?(長さとは異なる)
- 優先度:(リスト)最も重要な1~3のカテゴリーに取り組む必要があるか。
- 結論:(30字以内)上記の評価に基づき、何をどのように変更すべきかを簡潔に記述する。列挙されたカテゴリーに厳密に従う必要はない。

#ガイドライン

- タスクを理解する:主な目的、要件、制約、望ましいアウトプットを把握する。
- 最小限の変更:キューがすでに存在する場合は、単純な場合のみ改善する。複雑なキューの場合は、元の構造を変更することなく、明確性を高め、不足している要素を追加する。
- 結論の前の推論**:結論が導き出される前に、推論ステップが確実に実施されるようにする。注意!ユーザー提供の例で、結論の後に推論がある場合は、順序を逆にします!決して結論から始めないでください!
    - 理由付けの順序: キューワードの理由付けのセクションと結論のセクションをマークしてください (フィールド名を指定してください)。各セクションについて、順序を逆にする必要があるかどうかを判断してください。
    - 結論、分類、結果は常に最後に表示する。
- 例:有用であれば、質の高い例を含め、複雑な要素には[角括弧]をプレースホルダーとして使用する。
   - どのような種類の例を含める必要があるか、その数、プレースホルダーを使用するほど複雑かどうかを示す。
- 明確さと簡潔さ:明確で具体的な表現を用いる。不必要な指示や当たり障りのない記述は避ける。
- 組版: 読みやすさを向上させるためにMarkdownの機能を使用する。明示的に要求されない限り、```コードブロックは避けましょう。
- ユーザーコンテンツの保存: 入力タスクやプロンプトに広範なガイドラインや例が含まれている場合、それらを完全に保存するか、可能な限り保存します。これが明確でない場合は、サブステップに分割する。ユーザーが提供した詳細、ガイドライン、例、変数、プレースホルダーはすべて保持する。
- 定数:ガイドライン、採点基準、例など、プロンプトインジェクション攻撃の影響を受けない定数をプロンプトに含める。
- 出力形式: 最適な出力形式を指定し、出力の長さや構文(例: 短文、段落、JSONなど)を詳細に記述する。
    - 出力が明示的または構造化されたデータ(カテゴリー、JSONなど)を持つタスクについては、JSONを出力することを推奨します。
    - JSONは、明示的に要求されない限り、コードブロック(``)でラップされるべきではありません。

最終的に出力するプロンプトの単語は、以下の構造に従ってください。付加的なコメントは含めず、完全なシステムプロンプト語のみを出力する。特に、プロンプトの先頭や末尾にメッセージを追加してはならない (例: "----" を使用してはならない)。

[タスクを簡単に説明する指示 - これはプロンプト語の最初の行であり、 セクションの見出しは必要ない]。

[必要に応じて詳細を追加してください]。

[詳細な手順を記述するための見出しや箇条書きのあるオプションのセクション]。

# ステップ [オプション]。

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

#出力フォーマット

[レスポンスの長さ、構造(JSON、マークダウンなど)のような出力フォーマットの要件を指定する]。

#の例[任意]

[オプション:1-3の明確な例、プレースホルダーを使用し、複雑な要素が必要な場合は入力と出力の位置をマークする。実際の例がより長い/短い/異なるべきであることを示すために括弧を使用してください]。

#注記 [オプション]。

[任意:エッジケース、詳細情報、または考慮すべき特に重要な領域の強調]。
[注意:セクションで始めなければならない。]
"".strip()

def generate_prompt(task_or_prompt: str).
    補完 = client.chat.completions.create(
        model="gpt-4o"、
        メッセージ=[
            {
                "role": "system", "content": META_SYSTEMS
                
            },
            {
                "role": "user", "content": "タスク、ゴール、または現在のプロンプト:˶" + task_prompt:˶
                "content": "タスク、ゴール、または現在のプロンプト:˶" + task_or_prompt、
            }, }
        ]
    )

    return completion.choices[0].message.content

オーディオ編集のメタ・ヒント

from openai import OpenAI

クライアント = OpenAI()

meta_prompt = """
現在のプロンプトと変更指示が与えられると、リアルタイム音声出力言語モデルを効果的にタスクに誘導するための詳細なシステムプロンプトが生成される。

最終的な出力は、そのまま修正された完全なプロンプトとなる。ただし、応答の一番最初に、ラベルを使用してプロンプトを分析し、以下を明確にする:

- 単純な変更: (はい/いいえ) 変更指示は明確で単純ですか?(はい/いいえ)変更指示は明確でシンプルですか?
- 推論: (はい/いいえ) 現在のプロンプトは推論、分析、または思考の連鎖を使用していますか?
    - ラベリング:(10語以内)「はい」の場合、どの部分に推論が使用されていますか?
    - 結論: (はい/いいえ) 思考の連鎖は結論に達するために使用されていますか?
    - 順序: (前/後) 思考の連鎖は前後にあるか?
- 構造: (はい/いいえ) 入力プロンプトは明確な構造を持っているか?
- 例: (はい/いいえ) 入力プロンプトはいくつかの例を含んでいるか?
    - 代表性:(1-5)例がある場合、どの程度代表的か?
- 複雑さ:(1-5)入力プロンプトの複雑さはどの程度か?
    - タスク: (1-5) 暗黙のタスクの複雑さは?
    - 必要性:(1-5)
- 具体性:(1-5)プロンプトはどの程度詳細で具体的か?(長さとは無関係)
- 優先度:(リスト)どの1~3のカテゴリーが最も重要か。
- 結論: (30字以内) 前回の評価に基づいて変更すべき点を簡潔に記述する。列挙したカテゴリーに限定する必要はない。

#ガイドライン

- タスクの理解:主な目的、要件、制約、期待されるアウトプットを理解する。
- トーン: トーンが明確に記載されていることを確認する。デフォルトは感情的で親しみやすく、ユーザーを待たせないように素早く表現すること。
- 音声出力の制約:このモデルは音声を出力するので、応答は短く、会話的であるべきです。
- 最小限の変更:既存のプロンプトが提供されている場合は、単純な場合のみ改善する。複雑なキューについては、元の構造を変えることなく、わかりやすさを向上させ、不足している要素を追加する。
- 例: 参考になる場合は、質の高い例を含め、複雑な要素には[角括弧]をプレースホルダーとして使用する。
   - どのような種類の例を含めるか、いくつ含めるか、プレースホルダーが必要かどうか。
  - 例文は、モデルの短いダイアログ出力応答を反映したものでなければなりません。
デフォルトでは、文章は非常に短いはずです。ヘルパーの3つのセンテンスは、ユーザーと対話するために分離されるべきです。
  - デフォルトでは、各センテンスは少ない単語数(5~20単語程度)しか含まないようにしてください。もしユーザーが明確に「短い」応答を要求した場合、例は1-10語だけであるべきです。
  - 例文には、実際の会話を反映させるために、複数回の対話(少なくとも4回のユーザーとアシスタントの往復)があるべきです。
- 明確さと簡潔さ:明確で具体的な言葉を使うこと。不必要な指示や当たり障りのない文言は避ける。
- ユーザーコンテンツの保持: 入力タスクやプロンプトに詳細な指示や例が含まれている場合は、それらをできるだけ保持します。内容が曖昧な場合は、サブステップに分割することを検討する。ユーザーから提供された詳細、指示、例、変数、プレースホルダを保持する。
- 定数:ガイドライン、採点基準、例など、プロンプトが注入されにくい定数をプロンプトに含める。

最終的な出力プロンプトは、以下の構造に従う必要がある。追加コメントは含めず、完成したシステムプロンプトのみを出力する。特に、プロンプトの最初や最後に追加情報を追加しないこと。(例:"----"は使用しない)

[簡潔なタスクの説明 - これはプロンプトの最初の行である。]

[必要に応じて詳細な指示を追加する].

[見出しや箇条書きの詳細な手順を含むオプションのセクション].

#の例 [オプション]。

[必要に応じてプレースホルダーを使用し、明確に定義された例を1~3つ挙げてください。例題の開始と終了、入力と出力を明確に示す。必要に応じてプレースホルダを使用すること。]
[例題が期待される実際の例題よりも短い場合は、実際の例題がどのように長く/短く/異なるべきかを()でマークし、プレースホルダを使用すること!].

# 注釈 [オプション]。

[オプション:エッジケース、詳細な説明、特定の重要な考慮事項を呼びかけたり繰り返したりする部分]。
[注意: セクションから始めなければならない。直後に生成する次のトークンは]]でなければならない。
"".strip()

def generate_prompt(task_or_prompt: str):
    completion = client.chat.completions.create(
        model="gpt-4o"、
        メッセージ=[
            {
                "role": "system", "content": META_SYSTEMS
                
            },
            {
                "role": "user", "content": "タスク、ゴール、または現在のプロンプト:∕" + task_prompt:∕n
                "content": "タスク、ゴール、または現在のプロンプト:˶" + task_or_prompt、
            }, }
        ]
    )

    return completion.choices[0].message.content

ビルド

構造化出力 スキーマとファンクション・スキーマは、それ自体がJSONオブジェクトなので、構造化出力を使って生成する。そのためには、希望する出力のためのアーキテクチャーを定義する必要があるが、この場合、それ自体がアーキテクチャーである。そのために、自己記述型アーキテクチャを使用します。メタアーキテクチャ.

のファンクション・アーキテクチャは パラメーター フィールドそのものがアーキテクチャなので、同じメタアーキテクチャを使って関数を生成する。

制約付きメタアーキテクチャの定義

構造化出力 つのモードがサポートされている:strict=true 歌で応える strict=false厳密モード」は、制限されたサンプリングによってのみ完全な遵守を保証する。どちらのモードも、提供されたアーキテクチャに従うために同じモデルを使用するが、"strict mode "だけが、制限されたサンプリングによって完全な遵守を保証する。

我々の目標は、ストリクト・モードそのものを使ってストリクト・モード・アーキテクチャを生成することだ。しかし、公式の JSONアーキテクチャ仕様 提供されるメタアーキテクチャは、以下の厳密なモデルに依存している。 現在サポートされていない機能.これは、インプットとアウトプットのアーキテクチャに課題をもたらす。

  1. 入力アーキテクチャ: の入力アーキテクチャは使えない。 サポートされていない機能 出力アーキテクチャを記述する。
  2. 出力アーキテクチャ: 生成されたアーキテクチャには サポートされていない機能.

出力アーキテクチャで新しいキーを生成する必要があるので、入力メタアーキテクチャでは 追加プロパティ.つまり、現在のところ、厳密なパターンを使ってアーキテクチャを生成することはできない。しかし、厳密なパターンの制約に適合するアーキテクチャを生成したい。

この制限を克服するために 擬似エレメンタリーアーキテクチャ -- ストリクトスキーマによってのみサポートされる機能を記述するために、ストリクトスキーマをサポートしない機能を使用するメタアーキテクチャ。基本的に、このアプローチは、メタアーキテクチャを定義する際に、結果として得られるアーキテクチャがストリクトモードの制約に従うことを保証しながら、ストリクトモードから逸脱する。

徹底討論

擬似メタ・アーキテクチャの設計方法

制約のあるメタ・アーキテクチャを構築するのは困難な作業であるため、われわれはモデルを活用してこれを支援する。

まず、JSONモードのメッセージを o1プレビュー 歌で応える ガット 私たちの目標は、アウトプットを構造化したドキュメントを使って説明した。何度か繰り返した後、私たちは最初の実行可能なメタアーキテクチャを開発した。

次に ガット と構造化されたアウトプットを提供する。初期構造を、タスクの説明や文書と一緒に使って、より良い候補アーキテクチャを生成する。各反復では、最終的に手動で精査を行うまで、より良いアーキテクチャを使用して次のステップを生成する。

最後に、出力をクリーンアップした後、アーキテクチャと機能への適用性を確保するために、一連の評価テストに対してアーキテクチャを検証する。

出力クリーンアップ

ストリクト・モードは、完全なアーキテクチャ・コンプライアンスを保証する。しかし、生成中にストリクト・モードを使用することはできないため、生成後に出力を検証し、変換する必要がある。

アーキテクチャを生成した後、以下のステップを実行する:

  1. のすべてのオブジェクトを設定する。 追加プロパティ に設定する。 擬似.
  2. 必要に応じてすべての属性をマークする.
  3. 構造化出力アーキテクチャの場合に梱包される。 json_schema オブジェクトの中にある。
  4. 機能に梱包される。 機能 オブジェクトの中にある。

= リアルタイムAPI 関数 オブジェクトはチャット完了 API とは少し異なりますが、同じアーキテクチャを使用しています。==

メタモデル

各メタモードには対応するヒントがあり、そこには一握りの例が含まれている。これを構造化出力の信頼性と組み合わせると、たとえストリクト・モードを使わなくても gpt-4o-mini パターン生成を行う。

構造化出力モデル

from openai import OpenAI
インポート json
クライアント = OpenAI()
メタスキーマ = {
"name": "metaschema", "schema": { {".
"schema": {
「タイプ": "オブジェクト", "プロパティ": {
「プロパティ": {
「name": {
「タイプ": "文字列", "説明": { "名前": {
"description": "スキーマの名前"
},
「タイプ": {
"enum": [
"object".
"array".
"string".
"number", "enum": [ "object", "array", "string", "enum".
"boolean", "null
「null"
]
},
「properties": {
"タイプ": "オブジェクト", "additionalProperties": {。
"additionalProperties": {
"$ref": "#/$defs/schema_definition"
}
},
"items": {
"anyOf": [
{
"$ref": "#/$defs/schema_definition"
},
{
"type": "array", {
"items": {
"$ref": "#/$defs/schema_definition"
}
}
]
}, "required": {
"required": {
「タイプ": "配列", "アイテム": {
"items": {
"タイプ": "文字列"
}
}, "additionalProperties": { "type": "array": { "items": { "type": "string" }.
"additionalProperties": {
"type": "boolean"
}
}, "additionalProperties": { "type": "boolean" }.
"必須": [
"タイプ"
], "additionalProperties": False, "type": "boolean" } } "additionalProperties": False, "type": "boolean" } }
「additionalProperties": False, "if": { "type" }.
「もし": {
「プロパティ": {
"type": {
"const": "object"
}
}, "then": { "type": { "const": "object" } }.
"then": {
"required": [
"プロパティ"
]
}, "then": { "required": [ "properties" ] }, "then": { "required": [ "properties" ]。
"$defs": { 以下のとおりである。
"schema_definition":{」である。
「タイプ": "オブジェクト", "プロパティ": {
「プロパティ": {
「type": {
"type": "string"、
"enum": [
"object".
"array".
"string".
"number", "enum": [ "object", "array", "string", "enum".
"boolean", "null
「null"
]
},
「properties": {
"タイプ": "オブジェクト", "additionalProperties": {。
"additionalProperties": {
"$ref": "#/$defs/schema_definition"
}
},
"items": {
"anyOf": [
{
"$ref": "#/$defs/schema_definition"
},
{
"type": "array", {
"items": {
"$ref": "#/$defs/schema_definition"
}
}
]
}, "required": {
"required": {
「タイプ": "配列", "アイテム": {
"items": {
"タイプ": "文字列"
}
}, "additionalProperties": { "type": "array": { "items": { "type": "string" }.
"additionalProperties": {
"type": "boolean"
}
}, "additionalProperties": { "type": "boolean" }.
"必須": [
"タイプ"
], "additionalProperties": False, "type": "boolean" } } "additionalProperties": False, "type": "boolean" } }
「additionalProperties": False, "if": { "type" }.
「もし": {
「プロパティ": {
"type": {
"const": "object"
}
}, "then": { "type": { "const": "object" } }.
"then": {
"required": [
"プロパティ"
]
}
}
}
}
}
meta_prompt = """
# ディレクティブ
有効な JSON 記述スキーマを返す
また、以下のことを確認する必要があります:
- オブジェクトのすべてのフィールドが必須フィールドに設定されていること
- 繰り返しますが、すべてのフィールドが必須フィールドに設定されていなければなりません。
- オブジェクトのすべてのadditionalPropertiesがfalseに設定されていること。
- したがって、「attributes」や「metadata」のような、通常はプロパティを追加できるプロパティは、固定のプロパティに設定する必要があります。
- すべてのオブジェクトはプロパティを定義しなければならない
- フィールドの順序は重要である。考える "または "説明する "形式は、結論の前に来るべきである。
- $defsはスキーマパラメータで定義されなければならない。
サポートされていないキーワードは以下の通り:
- 文字列の場合:minLength、maxLength、pattern、format
- 数値の場合:minimum、maximum、multipleOf
- オブジ ェ ク ト の場合 : patternProperties ・ unvaluatedProperties ・ propertyNames ・ minProperties ・ maxProperties
- 配列の場合:unvaluatedItems、contains、minContains、maxContains、minItems、maxItems、uniqueItems
その他の注意事項
- 定義と再帰がサポートされています。
- 例えば、"$defs "は "schema "オブジェクトの中になければならない。
# の例
入力: ステップと最終的な答えを持つ数学的推論スキーマを生成する。
出力: {
"name": "maths_reasoning"、
"type": "object"、
"properties": {
「ステップ": {
「type": "array"、
"description": "数学の質問に答えるための一連のステップ。",
"items": {
"type": "object", "properties": { 以下のとおりである。
「プロパティ": {
"explanation": {
「タイプ": "文字列", "説明": { 説明
"description": "このステップで使用された推論または方法論の説明。"
},
「出力": {
「type": "string", "description": "特定のステップの説明。
"description": "その特定のステップの結果または出力。"
}
},
"必須": [
"説明"。
"出力"
], "additionalProperties": false
"additionalProperties": False
}
},
"final_answer": {
「タイプ": "文字列"、
"description": "数学の問題の最終的な答え。"
}
},
"required": [
「ステップ".
"final_answer"
], "required": [ "ステップ", "final_answer
「additionalProperties": False
}
入力:リンクリストを
出力: {
"name": "linked_list"、
「タイプ": "オブジェクト"、
「properties": {
「linked_list": {
"$ref": "#/$defs/linked_list_node",.
"description": "リンクリストの先頭ノード".
}
},.
"$defs"::{」である。
「linked_list_node": {
「type": "object"、
"description": "1つのリンクリストのノードを定義する。",
「プロパティ": {
値": {
「タイプ": "数値", "説明": {
"説明": "このノードに格納されている値".
},
"next": {
"anyOf": [
{
"$ref": "#/$defs/linked_list_node"
},
{
"type": "null"
}
この場合、"type": "null" }, { "type": "null" }.
"説明": "次のノードを参照する。": "最後のノードの場合はヌル。"
}
},
"必須": [
値".
"next"
], "additionalProperties": false
"additionalProperties": False
}
}, "required": [ "next" ], "additionalProperties": False }.
"必須": [
"linked_list"
}, "additionalProperties": false }, "required": [ "linked_list": false
"additionalProperties": False
}
入力:動的に生成されるUI
出力: {
"name": "ui"、
「タイプ": "オブジェクト", "プロパティ": {
"properties": {
"type": {
「type": "string", "description": { "type": "ui", "properties": { "type": { UIコンポーネントのタイプ。
"description": "UIコンポーネントのタイプ。
"enum": [
"div".
"section", "field", [ "section", "field", "header", "header
"field".
"form"
}, "ヘッダー", "セクション", "フィールド", "フォーム
},
「label": {
"type": "string", "description": "ボタンまたはフォームフィールド用のUIコンポーネントラベル", "label": {
"description": "UIコンポーネントのラベル、ボタンまたはフォームフィールドに使用"
},
「children": {
"items": {
"$ref": "#"
}
}, "attributes": { "$ref": "#" }.
"attributes": {
"type": "array", "description": "任意の要素のUIコンポーネントに適用される。
"description": "任意の要素に適用されるUIコンポーネントの任意の属性。", "items": {
"items": {
"type": "object", "attributes": { "type": "array", "description": "UIコンポーネントの任意の要素に適用される任意の属性", "items": { "type": "object"、
"properties": {
"name": {
"タイプ": "文字列", "説明": "名前": {
"description": "onClickやclassNameなどのプロパティの名前"
}, "description": "プロパティ名、例えばonClickやclassName
"value": {
"description": "プロパティの値。"
}
}, "value": { "type": "string", "description": "プロパティの値" }, "value": { "value": { "description": "プロパティの値" }.
"required": [
「名前", "値
"値"
], "additionalProperties": false
"additionalProperties": False
}
}
}, "required": [["value" ], "additionalProperties": False } } "additionalProperties": false } } "required": [["value" ], "additionalProperties": False
"必須": [
"type".
"label".
"children", "attributes
"属性"
], "additionalProperties": false
"additionalProperties": False
}
""".strip()
def generate_schema(description: str).
補完 = client.chat.completions.create(
model="gpt-4o-mini"、
response_format={"type": "json_schema", "json_schema": META_SCHEMA}、
messages=[
{
"role": "system"、
"content": META_PROMPT、
},
{
"role": "user", "content": "説明:◆n" + 説明, }, {
"content": "説明:◆n" + 説明、
}
]
)
return json.loads(completion.choices[0].message.content)

関数モデル

from openai import OpenAI
インポート json
クライアント = OpenAI()
メタスキーマ = {
"name": "function-metaschema"、
"schema": {
「タイプ": "オブジェクト", "プロパティ": {
「プロパティ": {
「name": {
type": "string", "description": { "name": { "関数メタスキーマの名前。
"description": "関数の名前".
},
「description": {
「type": "string"、
"description": "関数の説明"
},
「parameters": {
"$ref": "#/$defs/schema_definition"、
"description": "関数のパラメータを定義するJSONスキーマ"
}
}, "description": "関数パラメータの JSON スキーマを定義する" }.
"required": [
"name".
"description", "parameters": [ "name", "description", "parameters
「パラメーター
"additionalProperties": False、
$defs"::{」である。
"schema_definition"::{」である。
"タイプ": "オブジェクト", "プロパティ": { "schema_definition": {
「properties": {
「type": {
"type": "string"、
"enum": [
"object".
"array".
"string".
"number", "enum": [ "object", "array", "string", "enum".
"boolean", "null
「null"
]
},
「properties": {
"タイプ": "オブジェクト", "additionalProperties": {。
"additionalProperties": {
"$ref": "#/$defs/schema_definition"
}
},
"items": {
"anyOf": [
{
"$ref": "#/$defs/schema_definition"
},
{
"type": "array", {
"items": {
"$ref": "#/$defs/schema_definition"
}
}
]
}, "required": {
"required": {
「タイプ": "配列", "アイテム": {
"items": {
"タイプ": "文字列"
}
}, "additionalProperties": { "type": "array": { "items": { "type": "string" }.
"additionalProperties": {
"type": "boolean"
}
}, "additionalProperties": { "type": "boolean" }.
"必須": [
"タイプ"
], "additionalProperties": False, "type": "boolean" } } "additionalProperties": False, "type": "boolean" } }
"additionalProperties": False, "if": { "type" }.
「if": {
"プロパティ": {
"type": {
"const": "object"
}
}, "then": { "type": { "const": "object" } }.
"then": {
"required": [
"プロパティ"
]
}
}
}
}
}
meta_prompt = """
#命令
関数を記述する有効なパターンを返します。
required "と "type "が常に正しい入れ子レベルになるように特に注意してください。例えば、"required "は "properties "と同じレベルにあるべきで、その中にあるべきではありません。
すべてのプロパティは、どんなに短くても、型と説明が適切に入れ子になっていることを確認してください。
#の例
入力:ニューラルネットワークのハイパーパラメータに値を割り当てる
出力: {
"name": "set_hyperparameters"、
"description": "ニューラルネットワークハイパーパラメータに値を割り当てる。", "description": "ニューラルネットワークハイパーパラメータに値を割り当てる、
「parameters": {
"type": "object", "required": [ "name": "set_hyperparameters", "description": "ニューラルネットワークハイパーパラメータに値を割り当てる", "parameters": { "type": "object"、
"required": [
"learning_rate"、
"epochs"
"プロパティ": {
「epochs": {
"type": "number", "description": "データセットの完全な走査。
"description": "データセットの完全な走査の数".
},
「learning_rate": { 学習速度。
「説明": "モデルの学習率"
}
}
}
}
入力:ロボットの動作経路を計画する
出力: {
"description": "ロボットの動作経路を計画する", "parameters": { 以下の通り。
「パラメータ": {
"required": [
"start_position", "end_position": [ "start_position", "end_position
"end_position": [ "start_position", "end_position"
], "properties": { "type": "object".
「プロパティ": {
"end_position": {
「タイプ": "オブジェクト", "プロパティ": { "end_position": {
"properties": {
"x": {
"type": "number"、
"description": "終点のx座標"
"y": {
"description": "終点Y座標" }, "y": { "type": "number", "description": "終点Y座標" }.
}, "obstacles": { "type": "number", "description": "終点Y座標" } }。
「障害物": {
「type": "array", "description": "障害物座標の配列。
"description": "障害物の座標の配列、
"items": {
"タイプ": "オブジェクト", "プロパティ": {
"properties": {
"x": {
"type": "number", "description": "障害物座標の配列".
"description": "障害物のX座標"
}, "y": { "x": { "type": "number", "description": "障害物X座標
"y": {
"説明": "障害物Y座標" }, "y": { "タイプ": "数値", "説明": "障害物Y座標"
}
}
「start_position": {
「タイプ": "オブジェクト", "プロパティ": { {
「プロパティ": {
"x": {
「タイプ": "数値", "説明": { "start_position": {
"description": "開始点x座標"
}, "y": { "x": { "type": "number", "description": "開始点X座標
"y": {
"type": "number", "description": "開始点Y座標" }, "y": { "type": "number", "description": "開始点Y座標
"description": "始点Y座標" }, "y": { "type": "number", "description": "始点Y座標" }.
}
}
}
}
入力: 様々なテクニカル指標を計算
出力: {
"description": "様々なテクニカル指標を計算する。", "parameters": {
「parameters": {
"type": "object", "required": [ "type": "object", "description": "様々なテクニカル指標を計算する", "parameters": {
"required": [
"ティッカー", "インディケータ": [ ]。
"indicators"
], "properties": { "type": "object", "required": [ "ticker", "indicators" ], "properties".
"properties": {
"indicators": {
"type": "array", "description": "計算されるテクニカル指標のリスト。
"description": "計算されるテクニカル指標のリスト"、
"items": {
"type": "string", "description": "計算するテクニカル指標のリスト", "items": { "type": "string"、
"description": "テクニカル指標"、
"enum": [
"RSI".
"MACD".
"Bollinger_Bands", "Stochastic_Oscillator".
"ストキャスティクス・オシレーター"
]
}
}, }
「期間": {
「type": "number", "description": "分析の期間。
「説明": "分析された期間".
},
「ティッカー": {
"description": "株式シンボル"
}
}
}
}
"".strip()
def generate_function_schema(description: str):
completion = client.chat.completions.create(
model="gpt-4o-mini"、
response_format={"type": "json_schema", "json_schema": META_SCHEMA}、
messages=[
{
"role": "system"、
"content": META_PROMPT、
},
{
role": "user", "content": "description:♪n" + description, }, { { "content": "description:♪n" + description, }.
"content": "description:Ⅾ" + description、
}
]
)
return json.loads(completion.choices[0].message.content)
AIイージー・ラーニング

AIを始めるための素人ガイド

AIツールの活用方法を、低コスト・ゼロベースから学ぶことができます。AIはオフィスソフトと同様、誰にとっても必須のスキルです。 AIをマスターすれば、就職活動で有利になり、今後の仕事や勉強の労力も半減します。

詳細を見る
無断転載を禁じます:チーフAIシェアリングサークル " OpenAIメタプロンプト・コマンドジェネレーター OpenAI Meta-prompt

チーフAIシェアリングサークル

チーフAIシェアリングサークルは、AI学習に焦点を当て、包括的なAI学習コンテンツ、AIツール、実践指導を提供しています。私たちの目標は、高品質のコンテンツと実践的な経験の共有を通じて、ユーザーがAI技術を習得し、AIの無限の可能性を一緒に探求することです。AI初心者でも上級者でも、知識を得てスキルを向上させ、イノベーションを実現するための理想的な場所です。

お問い合わせ
ja日本語