LLM ツール用の JSON 形式

ツールを共有するためのポータブルな方法

はじめに

ツールをプログラムやツールエディタにすぐに追加できる形で共有することは、ツールとその使用方法を表現する標準的な方法があれば大幅に改善されるでしょう。以下のような機能を有効にしたいと考えています:

  • ツールを視覚的に表現するためのアイコン

  • プロンプトのためのメタデータ:

    • ツールの名前

    • ツールの説明

    • ツールの使用方法

  • ツール文字列に含まれるプレースホルダパラメータ

  • 期待される出力

  • バージョニングとタイムスタンプ。

JSON 書式規定

{
  "version": "文字列または整数",
  "model_prompt": " {{variable_name}} プレースホルダーを含む文字列",
  "metadata": {
    "prompt_name": "文字列",
    "description": "文字列",
    "usage_notes": "文字列",
    "model_version": ["文字列", "文字列", …],
    "creator": {
      "name": "文字列",
      "email": "文字列",
      "organization": "文字列"
    },
    "parameters": {
      "temperature": "float",
      "max_tokens": "integer",
      "top_p": "float",
      "frequency_penalty": "float",
      "presence_penalty": "float"
    },
    "variables": [
      {
        "name": "変数名1",
        "type": "テキスト",
        "description": "文字列",
        "default": "文字列",
      },
      {
        "name": "変数名2",
        "type": "単一選択",
        "description": "文字列",
        "default": "value1",
        "allowed_values": ["値1", "値2", "値3"]
      },
      {
        "name": "変数名3",
        "type": "複数選択",
        "description": "文字列",
        "default": ["値1", "値2"]
        "allowed_values": ["値1", "値2", "値3"]
      },
      ...
    ],
    "expected_output": {
      "type": "文字列(例:テキスト、コード、限定)",
      "format": "文字列(オプション、例:JSON、XML、CSV)",
      "language": "文字列(オプション、例:Python、JavaScript)",
      "allowed_values": ["文字列1", "文字列2", ...] (オプション)
    },
    "avatar_type": "文字列(例:URL、base64)",
    "avatar": "文字列(URLまたはbase64エンコードされた画像)、256x256ピクセル推奨",
    "timestamp": "文字列(ISO 8601形式)"
  }
}

私たちのサンプルJSONは ここからダウンロードできます。

フィールドの説明

  • model_prompt: GPTモデルのプロンプトを含む文字列です。

  • metadata: GPTモデルのプロンプトに関する追加情報を含むオブジェクトで、以下のサブフィールドを含みます:

    • model_version: 使用されるGPTモデルのバージョンを示す文字列です。

    • creator: GPTモデルのプロンプトの作成者に関する情報を含むオブジェクトで、以下のサブフィールドを含みます:

      • name: 作成者の名前を表す文字列です。

      • email: 作成者のメールを表す文字列です。

      • organization: 作成者が所属する組織を表す文字列です。

    • parameters: GPTモデルのパラメータに関する情報を含むオブジェクトで、以下のサブフィールドを含みます:

      • temperature: 出力のランダム性を制御するために使用される浮動小数点数です。

      • max_tokens: 生成されたレスポンスの最大トークン数を示す整数です。

      • top_p: 核サンプリングの確率閾値を表す浮動小数点数です。

      • frequency_penalty: データセット内でのその頻度に基づいてトークンに適用されるペナルティを表す浮動小数点数です。

      • presence_penalty: プロンプト内での新たなトークンの存在に基づいて適用されるペナルティを表す浮動小数点数です。

    • timestamp: GPTモデルのプロンプトが生成または最終更新された日時をISO 8601形式の文字列で表します。

    • expected_output (Optional): model_promptからの予想出力に関連するフィールドを含むオブジェクトで、以下のサブフィールドを含みます:

      • type: model_promptから期待される出力の型を示す文字列です。

      • format (Optional): 期待される出力の形式を表す文字列です(該当する場合)。

      • language (Optional): 型がcodeの場合、期待される出力のプログラミング言語を表す文字列です。

      • allowed_values (Optional): 型がlimitedの場合、許可された出力値の配列を含む文字列のリストです。

    • variables (Optional): f-stringスタイルでmodel_prompt文字列に挿入される可能性のある変数を含むリストです。各変数には以下のサブフィールドがあります:

      • name: 変数名を表す文字列です。

      • type: 変数の型を示す文字列です。現在、typeの可能な値は、デフォルトの変数にはtext、選択変数にはsingle-selectまたはmulti-selectです。

      • description: 変数の説明を示す文字列です。使用法や例も含みます。

      • default: 変数のデフォルト値を示す値です。この値は、typetextまたはsingle-selectの場合には文字列で、multi-selectの場合には文字列の配列です。

      • allowed_values: 変数の型がsingle-selectまたはmulti-selectの場合、許可された値のリストを含む文字列の配列です。

    • avatar (Optional): プロンプトのアバターやアイコンとして機能するグラフィックイメージに関連するフィールドを含むオブジェクトで、以下のサブフィールドを含みます:

      • avatar_type: 含まれるアバターデータの型を指定する文字列です。

      • avatar: avatar_typeurlの場合は画像へのURLを含む文字列、またavatar_typebase64の場合は画像を表すbase64エンコードされた文字列です。

    • prompt_name (Optional): プロンプトの名前を表す文字列です。

    • description (Optional): ツールおよびその目的について簡単に説明する文字列です。

    • usage_notes (Optional): 作成者からのツールの使用法や特定の考慮事項に関する自由形式のメモを含む文字列です。

metadataオブジェクト内にexpected_outputオブジェクトを追加することで、model_promptからの予想出力の形式を指定できます。期待される出力の型に応じて、expected_outputオブジェクト内に関連するサブフィールドを含めることができます。

metadataオブジェクト内に別のvariablesリストを追加することで、f-stringスタイルでmodel_prompt文字列に挿入される可能性のある変数のフィールドを含めることができます。

プロンプトのためのアバターまたはアイコンとして機能するグラフィック画像を含めるには、metadataオブジェクト内にavatarフィールドを追加できます。

metadataオブジェクト内にexpected_outputvariablesavatarprompt_namedescription、およびusage_notesフィールドを含めることで、プロンプトに関する全ての文脈情報をひとつの場所に保持することができ、管理や理解が容易になります。

JSONオブジェクトの上位レベルでversionフィールドを使用して、全体的なJSONファイルのバージョンを明示的に追跡することができます。

最終更新