# LLM ツールのための JSON 形式

## はじめに

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

* ツールを視覚的に表現するためのアイコン
* プロンプトのためのメタデータ：
  * ツールの名前
  * ツールの説明
  * ツールの使用方法
* ツール文字列に含まれるプレースホルダパラメータ
* 期待される出力
* バージョニングとタイムスタンプ。

## 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は [ここ](https://skydeck-public-assets.s3.amazonaws.com/sample_tool.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**: 変数のデフォルト値を示す値です。この値は、`type`が`text`または`single-select`の場合には文字列で、`multi-select`の場合には文字列の配列です。
    * **allowed\_values**: 変数の型が`single-select`または`multi-select`の場合、許可された値のリストを含む文字列の配列です。
  * **avatar (Optional)**: プロンプトのアバターやアイコンとして機能するグラフィックイメージに関連するフィールドを含むオブジェクトで、以下のサブフィールドを含みます:
    * **avatar\_type**: 含まれるアバターデータの型を指定する文字列です。
    * **avatar**: `avatar_type`が`url`の場合は画像へのURLを含む文字列、また`avatar_type`が`base64`の場合は画像を表す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_output`、`variables`、`avatar`、`prompt_name`、`description`、および`usage_notes`フィールドを含めることで、プロンプトに関する全ての文脈情報をひとつの場所に保持することができ、管理や理解が容易になります。

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.skydeck.ai/ja/developers/develop-your-own-tools/json-format-for-llm-tools.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
